軟體工程師面試資源整理
Published in
6 min readMar 6, 2016
從去年開始就有開始整理對軟體工程師面試有用的資源,尤其是針對外商公司、或是矽谷的軟體公司,臺灣的話比較具代表性的包括傳說中的大魔王群暉。我想應該網路上都找得到相關的分享,不過還是稍微記錄一下有用的資源。
這邊的內容會比較專注在資工領域的基礎能力,而不談各種前端、後端 framework 這類,畢竟不同的工作內容需要不同的 domain knowledge。
基礎知識
基本上大公司的面試都還滿看中演算法、資料結構這類的基本能力,這兩項除非你是 ACM 大神不然應該都需要特別準備。
Data Structures and Algorithms in C++/Java/Python
- 有三種版本:C++、Java、Python
- 雖然以前修課是唸聖經本,確實是寫得不錯也很 comprehensive,但我覺得編排讀起來很吃力,而這本的編排結構比較舒服。不過因為是演算法、資料結構結合成一本,所以一些比較進階的資料結構就沒有介紹到。
- 我覺得這本比較好的地方是程式碼的 spec 會參照 STL 或 Java Collection library,跟實際使用經驗比較好連結起來。但缺點是有些實作隱含一些 design pattern 的概念,對初學者會多一層負擔。
Fundamentals of Data Structures in C/C++
Introduction to Algorithms
- http://www.amazon.com/Introduction-Algorithms-3rd-Thomas-Cormen/dp/0262033844/
- 演算法「聖經本」,內容解說的確是寫得滿清楚。
另外還有找到幾本不錯的免費電子書但還沒有時間仔細讀:
Data Structures and Algorithm Analysis
Open Data Structures
The Algorithm Design Manual
最後則是一些演算法、資料結構實作的整理:
Programming Tutorials by SourceTricks
- http://www.sourcetricks.com/
- 這網站乍看是不錯,但要注意印象中資料結構的實作程式碼還滿多小地方有些問題的 XD
Sorting Algorithm Animations
- http://www.sorting-algorithms.com/
- 整理了常見排序演算法的虛擬碼及特性,比較特別的是還有用動畫呈現各種 input 分布之下的執行過程。
Algorithms & Data Structures in C++ (by xtaci)
- https://github.com/xtaci/algorithms
- 網友將近七十種演算法、資料結構的實作整理放在 GitHub 上,還滿常見且值得練一輪。
Big-O Algorithm Complexity Cheat Sheet
- http://bigocheatsheet.com/
- 整理了各式資料結構、演算法的 Big-O 時間複雜度
題庫
這塊在準備面試反而重要,基礎知識應該就是平常就要準備好(但我沒有…)。所謂的題庫大概就都是蒐集自實際的面試考題,畢竟面試官不可能每次一直想新題目,所以命中的機率據說是滿高的。
Cracking the Coding Interview
- http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
- 對岸網友寫的中文解答:http://hawstein.com/2013/03/14/ctci-solutions-contents/
- 這本就是傳說中的「CC150」,把常見的考題分成好幾個章節並整理了一些經典題目,但總體來說難度算是偏易,個人覺得還是滿值得一看。
Elements of Programming Interviews
- http://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836
- 據說也是很推的題庫,但這本還沒看過。
LeetCode ★★★★★
- 刷題網站:https://leetcode.com/
- 有分 Easy/Medium/Hard 三種難度,也可以對 acceptance rate 排序來刷,AC 的話還會有各種語言以及執行時間的分佈圖比較,我覺得這個功能挺好。
- 幾乎所有主流的程式語言都支援,包含 C++、Java、Python、C、C#、JavaScript、Ruby、Swift、Go,這個順序應該也是接近用戶提交答案的比例。在看執行時間分佈時比較各語言的表現也是滿有趣的,通常都是 C/C++ 掛帥,偶爾 Python 也是會有驚人之舉 XD
- 目前看到比較完整的參考解答:
- 參考解答 1:https://github.com/haoel/leetcode
- 參考解答 2:http://www.tianmaying.com/tutorials/tag/Leetcode
- 題庫分類:http://www.douban.com/note/330562764/
其他還有像 topcoder、Codeforces 之類的平台可以練習,不過我還沒試過就是。剛要開始準備的人建議還是先從 LeetCode 開始練習。
綜合資源
Awesome Interviews
- https://github.com/MaximAbramchuck/awesome-interviews
- 鼎鼎大名的「Awesome」系列當然也少不了面試的整理,裡面整理了針對不同語言、資料庫、框架的資源。
GeeksforGeeks
- http://www.geeksforgeeks.org/
- 上面有相當多關於各種演算法、資料結構、程式語言的文章,值得收藏的網站。
The System Design Primer
- https://github.com/donnemartin/system-design-primer
- 非常完整的 System Design 面試準備教材,已經被翻譯成多國語言,其中包含繁體中文。
Hacking a Google Interview (MIT)
编程之法:面试和算法心得
如果有找到更多不錯的資源會持續更新在本篇。