程式面試技巧
作者 Aaron Cao · 更新於
寫程式前先釐清問題和限制條件,大聲說出你的思路,先做出可執行的方案再優化,用邊界情況測試,並說明時間和空間複雜度。面試官評估的是你的推理和溝通方式,而不僅僅是最終程式碼能否執行。
寫程式之前:先釐清,再規劃
如果你在壓力下的本能反應是立刻開始打字,這一節正是為了修正這種本能。最優秀的候選人往往會先花幾分鐘完全不寫程式,面試官會注意到這一點。
先用自己的話複述問題,並向面試官確認理解無誤。詢問限制條件:輸入規模、數值範圍、輸入是否已排序、如何處理空輸入或格式錯誤的輸入。接著在動手寫任何程式之前,說明你打算採用的方法及其複雜度。這個簡短的規劃步驟能及早發現理解落差,並展現結構化思維,而這正是評分的重要部分。
寫程式時:邊思考邊說,逐步建構
沉默是能力很強的解題者顯得能力不足的最常見方式。持續講解你正在寫什麼以及為什麼這樣寫,這樣面試官才能跟上你的思路,並在你偏離方向時提醒你。
先得出正確答案,再追求巧妙。一個能執行的暴力解法,價值高於一個從未編譯通過的精妙想法,等有了可執行的方案之後再優化。以小而可測試的片段撰寫程式,使用清楚的變數名稱;如果卡住了,說出你正在考慮的想法,而不是陷入沉默。面試官經常會給提示,但前提是他們能聽到你當下的想法。
程式跑通之後:測試、邊界情況與複雜度
程式編譯通過並不代表完成;只有當你嘗試過讓它出錯之後才算完成。先用一個普通輸入走一遍程式邏輯,再刻意用一些刁鑽的輸入:空輸入、單一元素、重複元素、負數、限制條件允許的最大規模。
設想一位應徵中階職位的前端工程師,寫出了一個可執行的雙指標解法,然後主動、不需要提示地用空陣列和單一元素陣列走一遍邏輯,並說明其執行時間為 O(n)。這最後一分鐘的自我測試和複雜度分析,往往是決定錄取還是待定的關鍵,因為它顯示這名工程師在實際工作中也會發現自己的 bug。即使沒有被要求,也要主動說出時間和空間複雜度。