1. 程式人生 > 遊戲 >《消逝的光芒2》2018年演示 vs 正式版 變化挺大

《消逝的光芒2》2018年演示 vs 正式版 變化挺大

1. 面試總結

先把這個看了,總結的很全面
https://www.cnblogs.com/JetpropelledSnake/p/9396511.html

3. 零碎

1. 類繼承的super()原理
    Python中每一個類都有一個MRO列表,他代表了類的繼承順序,super會返回當前類index+1的類,然後按照此順序分別去執行他們的方法,知道最後的base類
2. 單例模式
  執行緒鎖+__new__來實現
  __new__(cls,*args,**kwargs)中判斷當前類是否有例項(cls.instance是否為真),沒有就開執行緒鎖,然後建立,有的話,就返回當前例項
3. 類的常用方法及解釋
  __dict__  以字典的格式返回例項的屬性
  __call__ 使例項可以像函式一樣加括號被呼叫,也可以傳引數
  __new__ # 建立類時,先執行此方法,返回一個例項,再執行__init__
  __getitem__ 例項動態的獲取屬性的值
  __setitem__ 例項可以動態的新增屬性
  __delitem__ 刪除值
  __enter__ # 上下文管理,見4
  __exit__ # 上下文管理,見4
  __setattr__ 用於註冊例項的屬性,即
  __str__ print時會呼叫
  示例:
    __setitem__(self,key,value):
    __new__(cls,*args,**kwargs)

4. 上下文管理實現機制
  呼叫__enter__返回一個檔案物件
  執行完成之後自動呼叫__exit__,關閉檔案
5. Python2,3的區別
  主要區別,
  1. 編碼問題:2是ascii編碼,3是utf8編碼。
  2. 整數除法問題:2的整數相除得到整數,3得到浮點數

6. 垃圾回收機制與GRL鎖
  垃圾回收機制:
  引用計數:
   變數值每被引用1次,計數加一,當引用計數為0時,變數值就會被直譯器清除
   迴圈引用(引用計數存在的缺陷):兩個列表相互引用,引用計數永遠不為0
  標記清除:
   當記憶體達到一定程度時,Python程式停止執行,啟動標記清除演算法。
   先確定一個肯定不會被清除的變數,然後能夠被他直接或間接訪問到的標記為存活物件(不會被刪除的變數,繼續對其掃描),然後依次掃描,將不是存活物件的都清除掉
  分代回收:
   在經歷多次掃描的情況下,都沒有被回收的變數,認為它是常用變數,對其的掃描頻率降低
   新生代:新定義的變數, 假設每5分鐘掃描一次
  青春代:從新生代過來的變數, 假設10分鐘掃描一次
  老年代:從青春代過來的變數,假設30分鐘掃描一次

  GIL鎖:
  GIL鎖僅針對CPython直譯器
    1. 每次執行一個Python程式就會生成一個Python程序
    2. GIL鎖是因為垃圾回收機制才出現的,當一個執行緒要執行一段程式碼時,垃圾回收機制卻要清除該程式碼的變數,這樣是行不通的
    3. 垃圾回收是每個程序中存在的執行緒,程序中的執行緒共享程序的資料和資源

8. 常用模組
1. 爬蟲相關:requests, BS4,selenium,
2. 圖片處理:pillow  
3. 日曆calendar,chinesecalendar
4. 連線資料庫:pymysql
5. 資料分析包:numpy, pandas, matplotlib

9. 對於Python的理解

Python 是一種面向物件、解釋型語言
程式碼簡潔,寫起來很快,很多第三方包
速度很慢

10. 程序,執行緒,協程