Python初級面試語法

舒碧發表於2018-08-23

可變物件與不可變物件

可變物件存的是地址,地址不變,但地址指向的值可以變(引用型別)。型別: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~

相關文章