用python内置函数算复杂度吗_番外篇: Python 面试感受
醒來(lái)有人說(shuō)我刁難面試者, 我來(lái)解釋一下, 我的面試環(huán)節(jié)一般是最后一個(gè)環(huán)節(jié)才會(huì)進(jìn)行 python 基礎(chǔ)的面試. 之前都是項(xiàng)目交流, 進(jìn)入到最后這個(gè)環(huán)節(jié)的, 都是我認(rèn)為項(xiàng)目 OK 的, 我對(duì)他的能力也是認(rèn)可的.
再說(shuō)說(shuō)這幾道題:
- 前兩道, with 語(yǔ)句和 __enter__ __exit__ 其實(shí)問(wèn)的都是上下文管理, 但凡用過(guò) python 的 open 打開(kāi)過(guò)文件, 都會(huì)涉及到 with 語(yǔ)句. 而且, 90% 的 python 入門(mén)教程都會(huì)對(duì) with 語(yǔ)句進(jìn)行講解. 我認(rèn)為這個(gè)題并不是很偏.
- 至于 __init__ __new__, 但凡用過(guò) python 的 oop 編程, 都是無(wú)法回避的問(wèn)題, 很多面試題也會(huì)問(wèn)這兩個(gè)問(wèn)題, 非常基礎(chǔ)的問(wèn)題.
- 函數(shù)定義的方法, 這道題我只要求答出 lambda 表達(dá)式就行了, 你只要聽(tīng)說(shuō)過(guò), 就能答出來(lái). 我也沒(méi)有對(duì) lambda 表達(dá)式的細(xì)節(jié)進(jìn)行發(fā)問(wèn).
- 接下來(lái)的私有成員變量, 這個(gè)在 C++ 中是個(gè)基礎(chǔ)到不能再基礎(chǔ)的問(wèn)題, 如果是 C++ 面試中沒(méi)能答出來(lái), 我甚至都不想繼續(xù)提問(wèn)了. 但是為什么到了 python 這全軍覆沒(méi)了. 確實(shí)值得人深思. 至于如何從外部訪問(wèn)私有成員變量, 確實(shí)有點(diǎn)偏, 但是這個(gè)題我沒(méi)有問(wèn)出來(lái).
- 再就是 dict 的查詢時(shí)間復(fù)雜度和最壞時(shí)間復(fù)雜度, 這個(gè)其實(shí)是跟 python 無(wú)關(guān)的問(wèn)題, 而是基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)問(wèn)題, 也是很基礎(chǔ)的問(wèn)題. 我被面試的時(shí)候就被問(wèn)到 C++ 中 stl 的 map 實(shí)現(xiàn)原理, 我不認(rèn)為這道題很偏.
- for else 語(yǔ)句的考點(diǎn), 這個(gè)是看開(kāi)發(fā)者寫(xiě) python 是否地道, 也就是我們常說(shuō)的 pythonic. 如果答不上來(lái), 你說(shuō)用個(gè) flag 標(biāo)記, 我也是認(rèn)為可以的.
- 然后是對(duì)閉包的靈魂四問(wèn). 這里只有第三問(wèn)很偏, 其他的都很基礎(chǔ). 我發(fā)現(xiàn)開(kāi)發(fā)者對(duì)于概念都非常清楚, 但是我想知道的是, 開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中有用到閉包嗎? 或者他理解 python 對(duì)于閉包是怎么處理的嗎?
- type 和 isinstance, 這里考的還是 oop, 也不是很難, 都是我們天天用的內(nèi)置函數(shù).
- 然后是關(guān)于地址的兩問(wèn), 這里的考點(diǎn)主要是想看看開(kāi)發(fā)者對(duì) python 中賦值, 引用, 拷貝的了解.
- 最后一問(wèn). 很多從其他語(yǔ)言轉(zhuǎn)來(lái)的開(kāi)發(fā)者, 都會(huì)發(fā)現(xiàn) python 中沒(méi)有 const 關(guān)鍵詞, 而且開(kāi)發(fā)中不可能不用到常量, 很容易發(fā)現(xiàn)一個(gè)事實(shí): python 無(wú)法定義一個(gè)常量.
最近的項(xiàng)目需要 python 開(kāi)發(fā), 收到簡(jiǎn)歷, 然后面試了好幾個(gè) python 開(kāi)發(fā)崗位, 為此我還準(zhǔn)備了一些 python 的面試題. 面試了八九個(gè)吧, 甚至不乏 6 年開(kāi)發(fā)經(jīng)驗(yàn)的老鳥(niǎo). 但在 python 基礎(chǔ)方面, 真的很少能讓我滿意的. 現(xiàn)將面試題整理如下:
- with 語(yǔ)句作用, 這個(gè)能回答出上下文管理, 我就算他 OK 了, 大概有 50% 的面試者能答出來(lái).
- __enter__ 和 __exit__ 的作用, 這個(gè)和上面的問(wèn)題我抽一個(gè)問(wèn), 答案是一樣的, 大概有 50% 能答對(duì).
- __init__ 和 __new__ 的作用, 這個(gè)能回答出初始化和構(gòu)造函數(shù)就行了, 這個(gè)基本都能回答出來(lái).
- 定義函數(shù)有幾種方法, 有 60% 能答出 lambda 表達(dá)式, 答出 lambda 表達(dá)式我都算 OK 了, 其實(shí)我期望有人答出類(lèi)的 __call__ 成員方法, 但是一個(gè)都沒(méi)有.
- 如何定義私有的成員變量, 這個(gè)問(wèn)題出乎我的意料, 沒(méi)有一個(gè)人能答出來(lái), 甚至有一位跟我說(shuō)用 private 關(guān)鍵字.
- 如何從外部訪問(wèn)私有成員變量. 其實(shí)這和上一題構(gòu)成一個(gè)連環(huán)問(wèn)題, 可惜這個(gè)問(wèn)題沒(méi)有上場(chǎng)的機(jī)會(huì).
- dict 查詢的時(shí)間復(fù)雜度, 這個(gè)問(wèn)題非常出乎意料, 只有 20% 能回答出來(lái).
- dict 查詢最壞的時(shí)間復(fù)雜度, 這個(gè)問(wèn)題能答出來(lái)的只有一位, 可惜這一位只答對(duì)了這道題.
- 怎么判斷 for 循環(huán)由 break 退出還是正常退出. 這個(gè)只有一位答出 for else 語(yǔ)句, 以至于, 我到后來(lái), 答出設(shè)置個(gè) flag 我都算他對(duì), 可惜答出的人也寥寥無(wú)幾.
- 閉包是什么, 這個(gè)只要問(wèn)了就能答對(duì).
- 如何判斷一個(gè)函數(shù)是不是閉包, 這個(gè) 80% 能答對(duì).
- 如何用代碼判斷一個(gè)函數(shù)是不是閉包, 這個(gè)無(wú)人能答對(duì).
- python 閉包可以應(yīng)用在什么地方, 這個(gè)問(wèn)題, 我沒(méi)機(jī)會(huì)問(wèn).
- 用 type 和 isinstance 判斷變量類(lèi)型有什么區(qū)別. 這個(gè)竟然沒(méi)人能答出來(lái), 基本都說(shuō)沒(méi)區(qū)別.
- 如何獲得一個(gè)變量的地址, 這個(gè)大部分都知道.
- 如何根據(jù)一個(gè)地址, 獲得變量名, 這個(gè)是一個(gè)開(kāi)放問(wèn)題. 原則上是確定不了的, 因?yàn)橛锌赡軆蓚€(gè)變量指向同一個(gè)地址. 我主要看面試者的分析過(guò)程, 這道題沒(méi)有讓我滿意的答案.
- 如何定義一個(gè)常量, 即無(wú)法修改的變量. 答案是不可能. 我沒(méi)有問(wèn)可不可以, 而問(wèn)的如何, 但是沒(méi)有得到滿意的答案. 后期, 我改為問(wèn)可不可以定義一個(gè)無(wú)法修改的常量, 只有一個(gè)人答對(duì).
最后談?wù)劯惺? 我感覺(jué)我準(zhǔn)備的面試題有個(gè)別可能比較偏, 其他的都是在開(kāi)發(fā)中遇到的問(wèn)題. 特別難的我都沒(méi)有問(wèn), 比如協(xié)程, 元類(lèi)等等. 最后面下來(lái), 只有一個(gè)基本滿意, 但是因?yàn)榉€(wěn)定性的原因, 還是沒(méi)有招.
不禁感慨, 現(xiàn)在找一個(gè)靠譜的 python 開(kāi)發(fā)真的太難了. python 是很火, 但是好的 python 開(kāi)發(fā)者真的是稀缺動(dòng)物. 可能每種語(yǔ)言都有類(lèi)似的問(wèn)題, 但是 python 尤甚. 究其原因我總結(jié)了幾點(diǎn):
- python 由于近兩年的火爆, 而且非常容易上手, 引入了很多萌新開(kāi)發(fā)者;
- 好多開(kāi)發(fā)者把 python 當(dāng)做腳本語(yǔ)言來(lái)開(kāi)發(fā), 這并沒(méi)有錯(cuò), 但是不是我期望的態(tài)度;
- python 輪子多, 眾多開(kāi)發(fā)者淪為調(diào)包俠, 缺乏對(duì)細(xì)節(jié)的把握.
短期內(nèi)大勢(shì)是不可能變的, 也不是我們能夠解決的, 但是我們組招人的難題還是可以解決的, 那就是: 還得加錢(qián).
總結(jié)
以上是生活随笔為你收集整理的用python内置函数算复杂度吗_番外篇: Python 面试感受的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java第k小元素_java – 如何从
- 下一篇: c# gerber文件读取_懒猪编程实例