Python面試題

作者 Aaron Cao · 更新於

預期會有三個層次:語言機制(例如可變性、產生器和裝飾器);執行期行為(例如GIL);以及資料結構方面的實際寫程式能力。大多數被拒案例源於對「為什麼」解釋得太單薄,而不是語法寫錯。

反覆出現的那些問題

把兩百道Python題目從頭刷到尾,看起來很努力,卻很少能改變面試結果。本節把範圍收窄到那些在電話面試和技術面試中反覆出現的少數問題,並說明一個有力的答案應該包含什麼。少數幾個語言特性承載了大部分的考察訊號。

  • 可變預設引數。為什麼def f(x=[])會在多次呼叫之間累積數值?預設值只在函式定義時求值一次,而不是每次呼叫都重新求值。
  • 產生器與串列。yield什麼時候比建立一個串列更好?當序列很大,或者你可能提前停止讀取時。
  • 裝飾器。裝飾器實際回傳的是什麼?為什麼包裝函式需要functools.wraps
  • GIL。為什麼CPU密集型執行緒在CPython中無法很好地擴充?此時你會改用什麼?
  • 淺拷貝與深拷貝。當用切片複製一個巢狀結構時,會出現什麼問題?
  • 同一性與相等性。為什麼在shell中對小整數測試is會得到一個具有誤導性的結果。

決定通過還是被刷掉的關鍵

兩位候選人可能給出完全相同、正確的GIL定義,但只有一位能進入下一輪。差別通常在第二句話。

一位在某公有雲端服務供應商面試L5後端工程師職位的候選人,被問到為什麼他們的服務在高負載下變慢。他先說出了GIL,然後繼續往下說:熱點路徑是JSON解析,所以執行緒不是合適的工具,把這一步搬移到處理程序集區後輸送量恢復了正常。說出限制因素只能拿到部分分數,把它和一個具體決策連結起來才能拿下這一輪。

把每個答案分成三個部分來組織:這個特性做什麼、它為什麼存在、以及你什麼時候會避免使用它。第三部分是大多數候選人會跳過的部分,也正是它體現出判斷力。關於寫程式題、行為面試和系統設計面試的其他文章,歸類在面試類型專題下。

如何準備,而不是死記硬背

讀懂一個答案和說出一個答案是兩種不同的能力,而面試考察的只是後者。請大聲練習,掐著時間,用你在真實通話中會用的措辭來說。

  • 把每個反覆出現的問題的答案寫成三句話,然後不看稿子把它說出來。
  • 挑出你每天都在用的兩個特性,為每一個準備一個誠實的侷限說明。能夠批評自己所用的工具,會顯得更有經驗。
  • 準備一個真實的除錯故事:某次Python的行為讓你意外,而你後來弄清楚了原因。
  • 把應用寫程式的部分單獨練習:字典、集合、帶key函式的排序,以及字串處理,涵蓋了大部分面試的考察範圍。

如果你想在真正面試之前,先和一個AI面試官進行一場限時模擬,可以前往模擬面試頁面。

即時助手能幫上什麼忙,又幫不上什麼忙

SubcueAI是一款針對macOS和Windows的原生桌面應用程式。它會擷取通話雙方的聲音,即時轉錄內容,並在一個懸浮視窗上顯示答題架構——這個懸浮視窗只留在你的本機,因此它不會以與會者或機器人的身分加入會議。對於Python面試環節來說,有用的輸出是一個結構提示,而不是一份現成的答案:具體內容必須由你自己來填,因為追問會圍繞你剛剛描述的程式碼展開。

誠實說明能力邊界,比強調能力本身更重要。如果你分享了螢幕,螢幕上的一切都會被分享出去。如果面試環節使用了監考評測平台,或是在公司代管的裝置上進行,助手工具就不在適用範圍內。設定與權限說明詳見教學頁面。

常見問題

Python面試現在還會問GIL嗎?

會,而且通常是作為一個代理問題來問的。面試官想知道你能不能區分CPU密集型工作和I/O密集型工作,並據此選擇執行緒、處理程序還是非同步方案。只給出定義只能算答對了一半。

我應該背多少Python冷知識?

比你以為的要少。面試官很少會因為你記得某個冷門語法而加分,他們獎勵的是你能正確解釋某種行為背後的原因。與其在自己不常用的特性上追求廣度,不如在常用特性上追求深度。

Python面試中會包含寫程式題嗎?

通常會。大多數電話面試都會把討論型問題和一道小型應用題搭配在一起,常見於字典、集合、排序或字串處理。面試官期望你在動手寫程式碼之前先說清楚思路,長時間沉默會被扣分。

如果我不知道答案,應該承認嗎?

應該,然後展示你會如何去弄清楚。承認自己沒用過某個特性,並說明你會如何驗證它的行為,比一個面試官能立刻糾正的、自信滿滿的猜測要更有說服力。

我可以在Python寫程式面試中使用AI助手嗎?

這完全取決於面試形式和你所同意的規則。在監考平台、螢幕分享或公司代管裝置上,都不在適用範圍內。對於你自己進行的練習面試,則沒有這種限制。

相關問題

← 更多關於 面試類型