可變物件與不可變物件
可變物件存的是地址,地址不變,但地址指向的值可以變(引用型別)。型別:list、dict、set等
不可變物件直接存值,值變了,就是另一個物件了(值型別)。int、float、tuple、string等
直接賦值,淺拷貝,深拷貝
在含有可變物件討論這個問題更顯得有意義。
直接賦值:直接傳遞物件的引用。淺拷貝,沒有拷貝子物件,所以原始資料改變,子物件會改變。深拷貝,原始物件的改變不會造成深拷貝里任何子元素的改變。
__init__和__new__區別
__new__控制新例項的生成,__init__初始化一個新例項。可以用__new__實現單例模式。
設計模式
大話設計的工廠、代理、單例、觀察者…… 。想起了這篇文章 20年前GoF提出的設計模式,對這個時代是否還有指導意義?
編碼、解碼
字元編碼有GBK、ASCII、UTF-8、 Unicode等。encode和decode分別指編碼和解碼。明文—>選中一種編碼加密–>密文,反之解碼。
列表推導(list comprehension)和生成表示式(generator expression)的優劣
列表推導一下子生成完了列表,免去以後計算的時間,提高了效能,浪費了記憶體。而生成表示式延遲了列表的生成時間,需要它才一個個生成出來,節省了記憶體,降低了效能。
什麼是裝飾器?
裝飾器就是把函式包裝一下,為函式新增一些附加功能,裝飾器就是一個函式,引數為被包裝的函式,返回包裝後的函式。
如果裝飾器和被裝飾的函式還有其他引數呢(也可以問如果在函式之後再進行裝飾,該如何做)?
再包裝一層 (個人覺得這裡說得通俗易懂 https://zhidao.baidu.com/question/580801144.html)
使用裝飾器實現單例模式的程式碼
def singleton(cls, *args, **kwargs): instance = {} def _instance(): if cls not in instance: instance[cls] = cls(*args, *kwargs) return instance[cls] return _instance
使用裝飾器和使用其他方法實現單例區別?
未能找到比較好的解答,求推薦。感覺這篇寫得不錯 https://www.cnblogs.com/huchong/p/8244279.html
手寫一個郵箱驗證正則
郵箱字首允許中文、英文、數字 ,中間必須有@符號 ,最後必須是域名 域名名稱 只可以是英文和符號_ -的組合。(題外話:沒必要太糾結郵箱格式,郵箱格式一直都在變,以前不許有中文,現在都允許有了)
^[A-Za-z0-9u4e00-u9fa5]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$
( 隨意看看: ^表示開始,$表示結束。[ 標記匹配字元表示式的開始,] 標記匹配字元表示式的結束。
+表示匹配前面表示式的字元要出現一個或多個,表示轉義。( 和 )分別標記子表示式的開始和結束。)
多程式與多執行緒的區別
多執行緒之間可以共享資源,多程式各自獨佔資源。
CPU密集型適用多程式還是多執行緒?
多程式,原因:要提高CPU密集型操作效率,任務同時進行的數量儘可能等於CPU的核心數,使用多執行緒,也不能並行運算。
記憶體管理(或垃圾回收):引用計數/孤立引用環 /分代回收
指向該物件的引用總數為引用計數,物件之間相互引用形成了孤立引用環。
當某一代物件經歷過垃圾回收,依然存活,那麼它就被歸入下一代物件,分代回收使得存活越就的物件越遲被回收。這篇記憶體管理講得不錯http://www.cnblogs.com/vamei/p/3232088.html
程式之間的通訊方式
訊息佇列、訊號量、管道、socket等
什麼是協程?為什麼比執行緒快?
一種程式元件,比執行緒快其一因為沒有執行緒上下文切換的開銷。https://www.cnblogs.com/zingp/p/5911537.html
問題來源:https://blog.csdn.net/csdnsevenn/article/details/79068624~