
編按(2026 年補註):本文寫於 2020 年。這幾年科技公司的程式面試形式出現了明顯變化。根據 404 Media 2025 年的報導,以及公開的候選人面試經驗分享,Meta 自 2025 年 10 月起試點 AI 輔助程式面試:在 60 分鐘的 CoderPad 面試中內建 AI 助手,讓候選人在多檔案的 codebase 裡工作。另一方面,Google 執行長 Sundar Pichai 公開表示,因應 AI 作弊問題,Google 已恢復至少一輪 in-person 面試;Amazon 要求候選人承諾不使用未經授權的 AI 工具;Anthropic 則在面試流程中禁用 AI 輔助。工具和考法都在變,但本文分享的準備方法,也就是理解優先、質重於量,仍然適用。
噢,要澄清一下我現在沒有在刷題(我這樣講絕對不是怕很多同事會看到我的文章 XD),說實在的,我覺得大家好像太過度強調「刷」題的刷,好像刷油漆似的要來回刷很多遍。我過往看過許多刷幾百題、每題做 2、3、4 次以上的人分享他們的經驗,我很佩服他們投入的時間及毅力,但我自知做不到,有小孩後更是難以做到刷一遍。我自己找軟體工程師工作的經驗,2015 年上完 Coding Bootcamp 到找到工作,大概做了 60 題左右的 LeetCode 問題,2016 年底找工作比較認真,大概完成了 100 題左右。今天這篇文章想要分享一下我的演算法準備方式,如果你想要找如何刷題的方式,或是覺得無法刷幾百題很多遍的人,歡迎往下閱讀。
我的練習步調
2015 年上完 Coding Bootcamp 後,我陸續有一些電話面試,每天可能會有 1~3 個電話面試,所以在準備面試上,要研究公司,並且依照職缺來做面試的複習,因為我是面試前端相關的職缺,所以也有一部分的精力在前端的資料複習。關於資料結構及演算法(Data Structures & Algorithms)的練習,我大概維持一天練習 1-2 題的步調。2016 年底的面試,因為還要上班,所以基本上只有晚上有時間,可能一天只能練習 1 題,假日有比較多時間才可以多做幾題。
先確認題目,再動手
看到問題的時候,我會先確保我了解題目的意思,真正在面試的時候,通常第一步也是和面試官確認我們自我的理解和面試官要問的是否一致,不要花了時間才發現一開始的理解及假設是錯誤的。我通常會立刻寫下題目給予的 input 有什麼、格式是什麼,desired output 又是什麼。
確認好 input & output 後,我會思考題目可以用什麼類型的資料結構或是演算法來解。通常在面試的時候,我會和面試官說明我可能會先就一個大概可行的方式來做解答,如果他/她覺得沒有什麼問題的話,我再做後續的優化。在我開始有一些思路後,我會先寫下 pseudo code,就是先用英文來說明我的解法會是怎麼樣。每個步驟和面試官確認都沒有問題後,我才會正式寫 code。
卡住的時候
當然有些時候不論怎麼想都寫不出來,如果是自己練習的時候,我大概在 15 分鐘後會開始看一些討論,嘗試學習別人的思路,但如果再花 10 分鐘還是解不出來的話,才會參考別人的解法。我看完別人的答案後,還是會用自己的 code 再實現一次。如果面試中卡住的話,則是要儘快和面試官討論,我會把我的理解,可能的解法方式和面試官說,同時也說明我的情況可能哪裡不是很確定,讓面試官在適當的時候可以給予我提示。一般來說,公司都是希望有順利的面試經驗,面試官也都願意在溝通正常的情況下給予協助。
寫完之後:複雜度與筆記本複習
自己練習寫完之後,我會再寫出解法的空間及時間複雜度(Space & Time Complexity),通常面試也會詢問這個部分,所以自己每個練習也要歸納一下。如果我發現我的解法時間可能不是太好,我會再嘗試看不同人的討論,研究更優化的解法,並再自己寫出不一樣的解法。有些比較棘手的問題我可能會寫 2、3 個解法比較彼此的優缺點。
在之前準備面試的時候,我有準備一本筆記本,每次寫完問題之後,我會用筆寫下我在哪一天寫了哪一個問題,並且用很精簡的方式總結問題及解法。隔天要做下一題之前,我會先看一下前一天的問題,嘗試回想我是否可以再次在頭腦中想出大致的解法。如果還是不行的話,再看我自己的總結並做上記號,隔天會再做一次同樣的步驟,直到我可以順利複習出解題的邏輯思路。
面試後的盤點
如果有和公司面試,不論是電話還是 onsite,面試完後我會再檢查我遇到的題目是否和我過去做過的題目類似,如果有的話,我的思路在面試中是否清晰、正確;如果沒有的話,我是否有用對的觀念來解答。面試結束後,會花時間在盤點及複習,從面試中的題目和過往的練習做統整。
質重於量
你可以看到我的練習方式不是很強調快,因為我希望我做完問題可以有很深的理解,所以花很多時間在做整理、複習確認,即使當下沒有那麼理解,隔天回想又想不出的話,我會再複習一次,再隔一天做新題前也會再確認。複習及思考的次數多了,真正把題目所想要考的觀念融會貫通,畢竟面試很難真的遇到原題,重點是我們對於資料結構及演算法的理解,及遇到難題時如何應對的思考過程。
條條大路通羅馬,每個人面試準備的方式都不太一樣,以上就是我的資料結構及演算法的準備方式,之前寫找工作的系列文章好像沒有特別提這塊,所以特別再寫出來分享。當然我不是大神每次面試都可以收割 5 到 10 個以上 offer,所以就請你自己斟酌評估你的學習方法,畢竟我們都要找到對自己最能接受、且有效率的方式來準備面試。
LeetCode 與 Premium
我從 2015、2016 年準備面試的時候,有許多練習演算法的網站,但到了今日,好像 LeetCode 和練習演算法關係就如同 Google 和搜尋一樣,大部分我聽到的準備面試的人都用 LeetCode 來做練習了!
我目前聽到朋友準備面試基本上都會購買 LeetCode 的 Premium,Premium 最大的好處就是可以看到問題和公司的標註,拿過去拒絕我 2 次的 Google 為例(XD),LeetCode 就有 925 道題目被大家回報有在 Google 面試中看到(2021 年已經變成 1014 道了!@@),當你正要 phone or onsite interview 的時候,可以聚焦你要面試的公司來練習,提高效率,還是可以提升面試表現的。Premium 還有答題評斷比較快、LeetCode 官方解答、及依據公司有 Mock interviews 等其他功能,但主要大家好像都還是為了 company tag 的功能而付費。(最近又多了文章、影片等學習資源,還有像是 Study Plan 的功能,看起來 LeetCode 要往大家學習、準備、一站式的服務來黏住使用者了!)
相信以大家拿到 offer 後的加薪,會覺得這是個很好的投資!(什麼,你說不一定會加薪,那請你再閱讀一下我的談判文章來和公司談判加薪「面試中談到錢怎麼辦?問到你期望薪水如何接招?」及「面試得到 Offer 薪水如何談?三明治溝通法及最後簽約前的談判招式」)。
找工作系列文章
附上過去我寫的找工作系列文章:
- 程式語言- 到底學哪個好?我想進Google,我沒學OOO,他們會接受我XXX語言背景嘛?
- 簡介美國軟體工程師面試流程
- 等待機緣- 我要如何被人資或獵人頭發現?我要如何脫穎而出?LinkedIn重要嘛?
- 主動出擊- 我要找工作了,現在美國都用什麼找工作?哪個網站平台能讓我有較多面試機會?
- 軟體工程師面試準備- 面試要練習什麼?找工作和練習的時間要如何平衡拿捏?
- 被錄取了- 我該注意什麼,我可以談判要求多一點薪水、股票或假期嘛?
- 矽谷找工作之常見問題 FAQ
- 面試技巧及心得,如何有條理的說服面試官?
- 英文履歷怎麼寫?美國科技公司注重什麼?
- 如何到美國科技公司工作?
- 最有效得到面試的方式- 內部推薦:尋找內推資源 & 歹晚郎互助網絡
- 面試中談到錢怎麼辦?問到你期望薪水如何接招?
- 面試得到 Offer 薪水如何談?三明治溝通法及最後簽約前的談判招式
2021 年,如果你要找工作的話,祝你轉換順利,拿到許多理想的 offers!如果你有什麼準備的技巧及心得,也歡迎留言分享。
補記:這篇文章在 2021 年 9 月更新時,許多剛到美國唸書的讀者來信詢問暑期實習內推。如果你也在找內推的資源,可以看這篇:最有效得到面試的方式:內部推薦,與歹晚郎互助網絡的誕生。
本文原發表於舊站「半路出家軟體工程師在矽谷」(2020 年 12 月 30 日)。該站現已下線,全文由 Wayback Machine 備份保存,搬到本站時刪除了已過期的折扣與抽獎資訊,並加上 2026 年編按。