面試會出哪些經典演算法題?

IT行業的


額~這個問題,我至少準備了半年。給題主點經驗:

首先,強烈建議採用「題海戰術」。我當然不會告訴題主,今年面了數十家公司,90%的題目是原題(沒辦法,就那幾個知識點,能有什麼新題)

題庫在哪裡呢?按照循序漸進的原則,一一介紹:

1. cc150,全名cracking the coding interview - 150 Programming Questions and Solutions。經典中的經典,曾有人別的啥都不做,刷這本書三四遍,拿了Google的offer(注意是在美國,在中國就算了……)這本書的優勢在於分章節,每章突出一塊知識,題目精鍊,答案好找;缺點呢,你寫出的代碼,需要深度檢驗,而cc150是書不是online judge,這個還是做不到。

2. leetcode。程序員刷面試題的第一網站,題多且全,少部分題目收費。刷的人很多,答案非常好找。online judge能深度檢驗代碼的正確性,刷leetcode是最能鍛煉演算法題能力的。假如說時間有限只能刷一個,那必須是leetcode,假如時間夠多……lintcode、meetqun等各大面試題OJ歡迎你,此外還有許多國內外大學的OJ。

----------------------------------------------------------------------------------------------------------------------------------------

以上是兩大主力,但是光這兩個,還不能到「題海」的水平,而且由於它們名氣太響,有些公司有時會避開裡面的題目……來,我們繼續找題目。

3. 編程之美、劍指offer:就當成兩本習題集好了,裡面有些題目和1、2重複,但是大部分題目還是很優秀很巧妙的。重點是交叉對比,你就知道哪些是經典題目了。

4. careercup、看準網等:每家公司都有自己喜歡出的題目,這些網站方便你去找面經,緊跟公司出題潮流。

5. 「結構之法」博客:July大神的博客,內容豐富,學習一年都可以。這裡只講裡面的演算法題:「微軟面試100題」(實際上已經快500題了)系列,堪稱演算法題的大寶庫,包羅萬象,而且很多題目很新,是面試官喜歡出的類型……不過這個系列的排版略微混亂,很多題也沒有答案;「程序員編程藝術」系列,講的很細緻,適合深入去學習一些演算法;「教你如何迅速秒殺掉:99%的海量數據處理面試題」,很實用的海量數據處理面試文章。

6. 經典庫函數。這塊單獨拉出來,是因為考的很多,比如atoi,strstr,memcpy等等……在「程序員編程藝術」中,雜七雜八有相關的論述,最好自己系統整理一下。

------------------------------------------------------------------------------------------------------------------------------------------

好,這些足夠我們的題海了。下面來講一下,哪些屬於題海中的重點。

1. 最高優先順序:面經。這個比什麼都重要,為了節約招聘成本,同一家公司的題目,通常不會換的太勤快。

2. 次優先順序:很經典的題目。什麼定義為經典?前面我寫了123456,假如某道題目能重複出現幾次,那絕對是不朽經典(如atoi、LCS、LPS、單鏈表逆置……),經典的題目畢竟出的最多,一定要非常熟練。

3. 再次:稍微短一點(50行之內),稍微新一點的題目。面試官通常時間有限,沒時間讓你寫個上百行,所以50行左右是最好的。

4. 最末:答案很長的題目。這種題目一般不出,要是出出來,一般就是壓軸大戲,為了最後檢測……通常長題目容易亂,分模塊慢慢寫,不著急。

------------------------------------------------------------------------------------------------------------------------------------------

光在IDE上敲是不夠的,還要練習多在紙上寫。

做多了,就會感覺這些題目都一樣……無非dp、二分、排序、遞歸……無非開數組、調函數、用stl……然後題主就會悟出演算法題只是公司招聘沒辦法的選擇,因為面fresh grad也沒啥別的方法了,這個方法最簡單粗暴高效。然而實際工作中,重要的還是項目能力。能悟出這個道理,題主就該修成正果了。


就最近面了一個,隨便寫寫好了,反正也不可能去了(去之前都不知道是要搞技術面( ▼-▼ ))

---------------------------------------

以出場順序排列:

最小生成樹

八皇后

快排

子字串匹配

LRUcache

---------------------------------------

根據以上內容,無非也就是ds課上講過的,各類oj上面的基礎題目。個人覺得大多數面試官都會問那些原生態的演算法,因此那些用於應用演算法的最基礎的題目多看看就好,另外看過的效率高的演算法最好記下來,免得到時候怕自己寫不出就隨便擼了個效率很低的演算法,會被極度鄙視的。此外手寫代碼必須要練,像我這樣平時管他對不對,跑一跑就知道的想法虧慘了。

哦對了,另外還有數學證明題(也算是演算法思想的一類吧)

(●"?"●)


劍指offer

https://github.com/xurui1995/Sword-pointing-to-offer


推薦閱讀:

如何通過自己編程為瀏覽知乎增加一些比較小眾的功能?
零基礎學計算機?
1950x 和7980xe 究竟有多少不同?
人類為什麼要發明電腦硬碟燈?
非科班程序員能得到認可嗎?

TAG:程序員 | 編程 | 計算機 | 推薦演算法 |