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