後面試時代與 AI 刷題

阮一峰發表於2024-10-10

一、引言

七月的時候,我寫了一篇文章《AI 程式設計助手測評:GitHub Copilot vs 豆包 MarsCode》,推薦了後者。

豆包 MarsCode 團隊最近就邀請我,試用他們的新功能"程式碼練習",它專門用來準備面試和刷題。

試用以後,我有很多想法。

我覺得,AI 會改變程式設計師的面試,以後是 AI 刷題的後面試時代

二、面試的 LeetCode 刷題

現在的程式設計師面試,一般都有演算法解題。

為了準備面試,大家都會去刷演算法題,最常見的就是使用 LeetCode 題庫。

LeetCode 是世界最流行的演算法題庫。它源自美國,專門收集各種面試演算法題,目前已經超過了3000道,不少是網際網路大廠的真題。

很多同學堅持不懈,每天投入幾個小時,做裡面的題目,訓練自己的演算法能力。一般來說,至少要刷200題,面試才較有把握。

(圖片說明:上圖是某個老外的刷題統計皮膚,他一年365天,每天都在刷題,一共刷了1500題。)

三、AI 顛覆 LeetCode

生成式 AI 出現後,越來越多的人發現,有了 AI,人肉刷題似乎不那麼必要了。

今年(2024)8月份,一位美國網友在 Reddit 論壇發了這樣一個帖子。

他說,自己寫了一個指令碼,讓 AI 自動求解 LeetCode 演算法題,一天之內做了633道題目,正確率達到了86%,成本只要9美元。

這個帖子引起了巨大反響。

既然 AI 可以提示正確答案,為什麼不參考 AI 來準備面試呢? 何必堅持苦思冥想、徒手 LeetCode 刷題。

四、AI 助手的解題能力

我們完全可以跟著 AI 刷題,做到事半功倍。

我選一道 LeetCode 題目,展示一下這是多麼簡單的事情。


你是一個 JavaScript 程式設計師,請補充完成下面的函式。

要求是輸入一個代表羅馬數字的字串(比如"IX"),該函式會返回對應的阿拉伯數字(比如9)。

 /**
  * @param {string} s 
  * @return {number} 
  */ 

var romanToInt = function(s) {


};

選擇上面這道題,主要是因為它很短,便於展示。而且,這道題的難度不大,但需要考慮多種情況,很適合用在初級面試。

我選擇的 AI 工具,就是 VS Code 編輯器的豆包 MarsCode 外掛,它是免費的。

在 VS Code 程式碼編輯器裡,從左邊欄開啟該外掛(如果未安裝,可以在外掛市場搜尋"MarsCode")。然後,在對話方塊輸入題目。

稍等片刻,AI 就會給出答案以及程式碼解釋。

哪個地方看不懂,就向 AI 詢問。

這節省多少時間啊,大大加快了刷題速度。

五、後面試時代

可以看到,AI 能夠快速解決面試演算法問題,那麼,基於演算法解題的面試模式,是不是應該有所改變了?

現在的網際網路大廠,都允許工作中使用 AI 模型,面試再要求"徒手解題",已經有點過時了。

AI 將越來越普及,如果未來的面試不使用 AI,就好像不使用 IDE 編輯器一樣不合理,應該允許程式設計師在面試中使用日常工具。

我的想法是,面試的考察重點可能會改變,從讓面試者解題,變成讓面試者解釋和審查 AI 生成的程式碼。

面試時,給你一段 AI 生成的解題程式碼,讓你解釋這段程式碼,並且修正裡面的錯誤和沒有考慮到的地方。

這樣做有很多好處:(1)更貼近程式設計師的實際工作模式;(2)能看出程式設計師的程式碼閱讀和理解能力;(3)難以事前準備或作弊;(4)更能反映一個人的協作能力;(5)也適用於偏向閱讀程式碼而不是編寫程式碼的崗位,比如專案經理、架構師等等。

這可以稱為"基於 AI 的後面試時代",即面試從考察編碼解題能力,演變到考察程式碼的審查理解能力。

六、AI 陪練功能

現在已經有很多工具,為面試提供 AI 輔助訓練。

豆包 MarsCode 的"程式碼練習"就是一個最新的嘗試。我用了以後,覺得對準備面試、有效刷題真的有幫助,可以訓練自己與 AI 協同程式設計。

它是一個基於雲 IDE 的專門頁面,內建了上百道位元組跳動的面試真題

所有相關操作都集中在這個頁面上,只要有瀏覽器就可以使用,刷題全過程不必切換頁面,大大方便了使用:選題、解題、除錯、AI 對話......

而且,它是免費的,大家現在就可以試試看:進入豆包 MarsCode 官網,點選頂部選單的"程式碼練習",就可以進入。

這個頁面是雲 IDE,不需要任何安裝,開啟後直接在瀏覽器使用。

預設狀態下,頁面分成四欄。左側是面試真題的目錄,目前有100道,以後還會不斷增加。選中一道題目,點選後可以看到具體內容。

頁面右側是程式碼框和 AI 框。

在程式碼框,需要首先選擇你的程式語言,共有8種可選(Python、JavaScript、Go、C++、C、Java、Rust、TypeScript),上圖是 JavaScript。然後,輸入解題程式碼,再點選頂部的執行按鈕,就可以看到執行結果。

在 AI 框,則是三個預設選項,點選後就可以讓 AI 提示思路、程式碼、檢查程式碼。下方還有對話方塊,用來跟 AI 對話。

一般來說,拿到題目後,(1)先點選"需要一點思路提示",讓 AI 幫助你理解題目。(2)再點選"給我一些程式碼提示吧",讓 AI 給出初步程式碼。(3)你修改和完善程式碼,再點選"幫我檢查一下程式碼",看看會不會報錯。

此外,這個頁面還整合了 IDE 功能,比如語法檢查和程式碼除錯。隨著程式碼鍵入,會自動給出用法提示(下圖)。

這樣的"程式碼練習",堪稱面試刷題的利器,我覺得,面試指導書籍和輔導班可能都不需要了,以後都會被淘汰。

七、總結

AI 改變軟體行業,也必然改變程式設計師的面試求職。

AI 刷題是未來的趨勢,善用者將更容易透過面試,拿到心儀的 offer。

但是,需要提醒的是,AI 只是工具,生成的程式碼不一定正確和安全,而且專案之中也不應該有黑箱。

正確的做法是,使用 AI 但不依賴,思路比答案更重要,只有理解了每一行程式碼,才能接受它的結果。我們使用 AI 的首要目的,永遠是提升自己的能力,而不是讓 AI 替代我們,程式碼的最後責任人的不是 AI,而是你。

(完)

相關文章