2020春招Python基礎面試題

前段時間面試網易、深信服等親身遇到,遂做記錄總結。

Python開發理論基礎面試題

一、Python的內存管理
    1、python內存管理是由私有堆空間管理,需要申請和釋放內存
    2、用引用計數機制實現垃圾回收
    3、Python有內存池的機制,爲了防止頻繁申請和釋放內存,會將不用內存放到內存池而不是返回給操作系統


二、Python的gc垃圾回收
    1、在Python中,主要通過引用計數進行垃圾回收
    2、通過 “標記-清除” 解決容器對象可能產生的循環引用問題
    3、通過 “分代回收” 以空間換時間的方法提高垃圾回收效率


三、python裏while 1 和while True的區別?
    1、由於Python2中,True/False不是關鍵字,因此我們可以對其進行任意的賦值
          這就導致程序在每次循環時都需要對True/False的值進行檢查
    2、而對於1,則被程序進行了優化,而後不會再進行檢查
         While true 和while 1在python3裏面沒有區別

 

四、Python爲什麼類要繼承object?,繼承和不繼承有什麼區別?
    1、在python2中繼承 object 類的是新式類,不繼承 object 類的是經典類
     2、新式類,當調用 負類的方法時候,Python 會按照廣度優先方式去搜索
          而經典類是用深度優先方法去搜索
   
五、講講Pythond裝飾器?
    1、裝飾器是一個函數,其主要用途是包裝另一個函數或類。

    2、 這種包裝的首要目的是透明地修改或增強被包裝對象的行爲。

六、什麼是Python的閉包?    
    1、內層函數引用了其外部作用域的變量,然後返回內層函數的情況,稱爲閉包。
    2、python一般以內外函數實現


七、python節省內存的方法:
    1、類裏面增加__slot__方法, 如果確定了對象屬性成員,不會再動態增加
    2、使用touple代替list
    3、Namedtuple代替數據對象
    4、適當使用弱應用
    5、生成器、代器代替集合數據類型

    原則一:儘量用不可變對象類型代替可動態增加對象類型


八、講講python弱引用 
    1、對一個對象進行弱引用,即不會由引用計數,即這個對象的內存還是有可能被回收掉
    2、一般弱引用的應用場景是,些還有用但並非必須的對象,並且很費資源的對象


九、什麼是閉包?
    1、使用環境範圍之外的變量,即內函數在其它定義環境使用
    2、當一個內嵌函數引用其外部作作用域的變量,我們就會得到一個閉包. 總結一下,創建一個閉包必須滿足以下幾點
        ①、必須有一個內嵌函數
        ②、內嵌函數必須引用外部函數中的變量
        ③、外部函數的返回值必須是內嵌函數


十、Python的裝飾器原理
    1、原理是閉包.
    2、在不用修改原函數代碼情況下,就可以給原函數添加新功能,並且在調用的時候和原來調用一模一樣


十一、Python字典的底層實現?
    1、字典底層是哈希實現的
    2、容量大於等於 2/3 時,字典就會擴容(擴容時散列表中鍵的次序變化)
    3、在對元素進行變化操作(刪除等)時,底層只是對數據進行狀態切換(Unused態、Active態、和Dummy態)
    4、解決哈希衝突的方法:是開放地址方法

十二、python有什麼調試工具?
    1、pdb
    2、pySnooper


十三、什麼是協程?
    1、輕量級的線程
    2、處於用戶態、非搶佔
    3、用戶調度、非系統調度,效率較高
    4、極高的執行效率,因爲子程序切換而不是線程切換,沒有了線程切換的開銷
    5、不需要多線程的鎖機制,因爲只有一個線程在執行

 

十四、Python的協程?
    1、python2是通過yeil實現、greve
    2、python3是通過synix


十五、__new__() 與 __init__()的區別
    1、__new__是一個靜態方法,而__init__是一個實例方法.
    2、__new__方法會返回一個創建的實例,而__init__什麼都不返回.
    3、只有在__new__返回一個cls的實例時後面的__init__才能被調用.
    4、當創建一個新實例時調用__new__,初始化一個實例時用__init__.


十六、GIL鎖?爲什麼使用GIL鎖?
    1、即全局解釋鎖,每個時間段只允許一個線程在CPU中運行
    2、爲了解決多線程之間數據完整性和狀態同步的問題,保證Python解釋器中原子操作的線程安全,解決不同線程之間的數據一致性問題。

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