python语言面试基础_【python面试指北】1.语言基础
1. python是動態強類型的語言。
動態還是靜態指的是編譯器還是運行期確定類型
強類型指的是不會發生隱式類型轉換。比如js能夠執行1+"1",但是python不行,所以python是弱類型的語言。
2. 鴨子類型
當一只鳥走起來像鴨子、游泳起來像鴨子、叫氣力啊也像鴨子,那么這只鳥就可以被稱為鴨子。
鴨子類型關注的是對象的行為,而不是類型。比如file,StringIO,socket對象都支持read/write方法,再比如定義了iter魔術方法的對象可以用for迭代。
3. monkey patch
所謂的monkey patch就是運行時替換。
4. 自省
運行時判斷一個對象類型的能力。
python一切皆對象,用type, id, isinstance獲取對象類型信息。
5. 列表和字典推導
如 [i for i in range(10) if i % 2 == 0],如果[]改為(),則為生成器
6. python2和python3
print成為函數
編碼問題。python3不再有unicode對象,默認str就是unicode
除法變化。python3除號返回浮點數,如果要返回整數,應使用//
類型注解。幫助IDE實現類型檢查
優化的super()方便直接調用父類函數
高級解包操作。a, b, *rest = range(10)
keyword only arguments。限定關鍵字參數
chained exceptions。python3重新拋出異常不會丟失棧信息
一切返回迭代器。range, zip, map, dict.values, etc. are all iterators
性能優化等。。。
7. python如何傳遞參數
python既不是值傳遞也不是引用傳遞,唯一支持的參數傳遞是共享傳參。
call by object(call by object reference or call by sharing)
call by sharing(共享傳參),函數形參獲得實參中各個引用的副本。
變量一切都是對象。list是可變對象,string是不可變對象
總結一下:根據對象的引用來傳遞,根據對象是可變對象還是不可變對象,得到兩種不同的結果。如果是可變對象,則直接修改。如果是不可變對象,則生產新對象,讓形參指向新對象
8. python可變/不可變對象
不可變對象: bool/int/float/tuple/str/frozenset
可變對象:list/set/dict
練習題:
# 1
def clear_list(l)
l = []
ll = [1,2,3]
clear_list(ll)
print(lll)
# 2
def fl(l=[1]):
l.append(1)
print(l)
fl()
fl()
# 記住:默認參數只計算一次
**9. *args, kwargs
用來處理可變參數,args被打包成tuple,kwargs被打包成dict
傳遞方式有兩種
# 第一種
foo(1,2,3)
foo(a=1,b=2)
# 第二種
foo(*[1,2,3])
foo(**dict(a=1,b=2)})
10. python異常機制
BaseException
下面有SystemExit/KeyboardInterrupt/GeneratorExit/Exception(其他異常都屬于它)
try:
# func # 可能會拋出異常的代碼
except (Exception1, Exception2) as e: # 可以捕獲多個異常并處理
# 異常處理的代碼
else:
# pass # 異常沒有發生的時候代碼邏輯
finally:
pass # 無論異常有沒有發生都會執行的代碼,一般處理資源的關閉和釋放
11. 自定義異常
繼承Exception實現自定義異常,給異常加上一些附加信息
不用baseException是因為這樣的話ctrl+c的keybord異常就用不了了
12. python性能分析與優化,GIL
cpython解釋器的內存管理并不是線程安全的
保護多線程情況下對python對象的訪問
cpython使用簡單的鎖機制避免多個線程同時執行字節碼
GIL的影響
限制了程序的多核執行
同一個時間只能有一個線程執行字節碼
CPU密集程序難以利用多核優勢
IO期間會釋放GIL,對IP密集程序影響不大
對IO密集程序影響不大
如何規避GIL的影響
區分CPI和IO密集程序
CPU密集可以使用多進程+進程池
IO密集使用多線程/協程
cpython擴展
13. 服務端性能優化措施
web應用一般語言不會成為瓶頸
數據結構與算法優化
數據庫層:索引優化,慢查詢消除,批量操作減少IO,NoSQL
網絡IO:批量操作,pipeline操作,減少IO
緩存:使用內存數據庫 redis/memcached
異步:asyncio,celery
并發:gevent/多線程
14. python生成器與協程
Generator
生成器就是可以生成值的函數
當一個函數里有了yield關鍵字就成了生成器
生成器可以掛起執行并且保持當前執行的狀態
協程不懂
15. python3原生協程
async/await支持原生協程
16. python單元測試
三無代碼不可取(無穩定、無注釋、無單測)
保證的代碼邏輯的正確性
單側影響設計,易測的代碼往往是高內聚低耦合的
回歸測試,防止改一處整個服務不可用
單元測試相關的庫
nose/pytest較為常用
mock模塊用來模擬替換網絡請求等
coverage統計測試覆蓋率
17. python深拷貝與淺拷貝
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的python语言面试基础_【python面试指北】1.语言基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的语法类似php_PHP实现
- 下一篇: python自动轨迹绘制_Python—