面試中遇到的Python和C++問題

問題列表

python裏的list和tuple有什麼區別?

  • tuple(元組)是不可變列表,
  • list的可變性是由於其底層實現機制導致的, 動態數組 + 鏈表

python裏的string釋放可以使用for循環修改?

不可以, 它是不可變序列

python裏的dictionary和C++的map有什麼區別? 其底層實現原理是什麼?

  • python裏的字典通過哈希表實現的
  • C++ 的map的實現時通過紅黑樹實現的
  • dict操作複雜度如下:
    操作 時間複雜度
    copy O(n)
    get(value) O(1)
    delete(value) O(1)
    search(in) O(1)
    itteratioon O(n)

python的set實現原理

  • set與dict類似,但hash函數直接操作它的元素, 而且不包含重複元素
  • 實現方式成爲Hash set

python的OrderedDict的實現原理

  • python中的字典是按照hash來存儲的, 因此是無序的
  • OrderedDict的實現是 哈希表 + 雙向鏈表

什麼是雙向隊列

它是一種具有隊列和棧的性質的數據結構,可以高效的在頭尾兩端插入和刪除元素

什麼是優先隊列

  • 優先隊列中,元素被賦予優先級。當訪問元素時,具有最高優先級的元素最先刪除。優先隊列具有最高級先出(first in, largest out)的行爲特徵。
  • Python裏PriorityQueue是通過heapq實現的,它考慮了線程安全的問題

最大堆、最小堆

    • 它是一棵完全二叉樹或者爲空
    • 樹中節點的值總是不大於或者不小於其孩子節點的值
    • 每一個節點的子樹也是一個堆
  • 最大堆: 除了根節點外的的所有節點都要滿足小於等於其父節點的值
  • 最小堆: 除了根節點以外的所有節點都要滿足大於等於其父節點的值
  • Python裏是通過list維護堆的性質實現的

python中的深、淺copy

  • 淺copy, copy第一層內容,不copy內部對象,下面這個例子可以很好的理解淺copy.
    lst = ["CV", "NLP", "SPEECH", ["DL, ML, AI"]]
    lst_copy = lst.copy()
    print(id(lst), id(lst_copy))
    print(id(lst[3]), id(lst_copy[3]))
    lst.append("Algorithm")
    print(lst, lst_copy)
    lst[3].append("Statitics")
    print(lst, lst_copy)
    
    輸出結果:
    4584596232 4584596360
    4584596104 4584596104
    ['CV', 'NLP', 'SPEECH', ['DL, ML, AI'], 'Algorithm'] ['CV', 'NLP', 'SPEECH', ['DL, ML, AI']]
    ['CV', 'NLP', 'SPEECH', ['DL, ML, AI', 'Statitics'], 'Algorithm'] ['CV', 'NLP', 'SPEECH', ['DL, ML, AI', 'Statitics']]
    
  • 深copy, copy所有內容,生成一個新的完完全全的對象

list可以作爲哈希關鍵字嗎

C++的多態是什麼,如何實現的?

  • 多態按字面的意思是多種形態,當類之間存在層次結構並且類之間是通過繼承關聯時,就會用到多態
  • C++多態意味着調用成員函數時,會根據調用函數的對象的類型來執行不同的函數
  • 虛函數實現, 在基類中使用關鍵字virture聲明的函數
  • 參考鏈接 C++ 多態

補充知識

  1. 哈希表

    • 關鍵字 基於關鍵字直接找到數據的存儲位置
    • 哈希地址 在查找表中的存儲位置
    • 哈希函數 通過這個函數可以快速求出該關鍵字對應數據的哈希地址
      • 直接定址法(一次函數)
      • 數字分析法
      • 平方取中法
      • 摺疊法
      • 除留餘數法
      • 隨機數法
    • 解決衝突的方法
      • 開放定址法
        • 線性探測
        • 二次探測
        • 僞隨機數探測法
      • 再哈希法
      • 鏈地址法
      • 建立一個公共溢出區

參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章