程序员如何快速准备面试中的算法 - 结构之法
準(zhǔn)備面試、學(xué)習(xí)算法,特別推薦最新出版的我的新書《編程之法:面試和算法心得》,已經(jīng)上架京東等各大網(wǎng)店
?
前言
? ? 我決定寫篇短文,即為此文。之所以要寫這篇文章,緣于微博上常有朋友詢問,要畢業(yè)找工作了,如何備戰(zhàn)算法。盡管在微博上簡單梳理過,如下圖所示:
? ? 但因字?jǐn)?shù)限制,許多問題無法一次性說清楚,故特撰此文著重闡述下:程序員如何快速準(zhǔn)備面試中的算法,繼而推薦一些相關(guān)的書籍或資料。順便也供節(jié)后跳槽、3月春季招聘小高潮、及6月畢業(yè)找工作的朋友參考。
?
備戰(zhàn)面試中算法的五個步驟
? ? 對于立志進一線互聯(lián)網(wǎng)公司,同時不滿足于一輩子干純業(yè)務(wù)應(yīng)用開發(fā),希望在后端做點事情的同學(xué)來說,備戰(zhàn)面試中的算法,分為五個步驟,如下:
? ??1、掌握一門編程語言
? ? 首先你得確保你已掌握好一門編程語言:
- C的話,推薦Dennis M. Ritchie & Brian W. Kernighan合著的《C程序設(shè)計語言》、《C和指針》,和《征服C 指針》;
- C++ 則推薦《C++ Primer》,《深度探索C++對象模型》,《Effective C++》 。
? ? 掌握一門語言并不容易,不是翻完一兩本書即可了事,語言的細(xì)枝末節(jié)需要在平日不斷的編程練習(xí)中加以熟練。
? ??2、過一遍微軟面試100題系列
?
? ? 我從2010年起開始整理微軟面試100題系列,見過的題目不可謂不多,但不管題目怎般變化,依然是那些常見的題型和考察點,當(dāng)然,不考察任何知識點,純粹考察編程能力的題目也屢見不鮮。故不管千變?nèi)f化,始終不離兩點:①看你基本知識點的掌握情況;②編程基本功。
? ? 而當(dāng)你看了一遍微軟面試100題之后(不要求做完,且這個系列的有些答案存在不少問題,建議以我的新書《編程之法》為準(zhǔn)),你自會意識到:數(shù)據(jù)結(jié)構(gòu)和算法在筆試面試中的重要性。
? ??3、苦補數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)
? ? 如果學(xué)數(shù)據(jù)結(jié)構(gòu),可以看我們在大學(xué)里學(xué)的任一本數(shù)據(jù)結(jié)構(gòu)教材都行,包括鏈表、數(shù)組、字符串、矩陣、樹、圖等等,如果你覺得實在不夠上檔次,那么可以再看看《STL源碼剖析》。
? ??4、看算法導(dǎo)論
? ? 《算法導(dǎo)論》上的前大部分的章節(jié)都在闡述一些經(jīng)典常用的數(shù)據(jù)結(jié)構(gòu)和典型算法(如二分查找,快速排序、Hash表),以及一些高級數(shù)據(jù)結(jié)構(gòu)(諸如紅黑樹、B樹),如果你已經(jīng)學(xué)完了一本數(shù)據(jù)結(jié)構(gòu)教材,那么建議你著重看貪心、動態(tài)規(guī)劃、圖論等內(nèi)容,這3個議題每一個議題都大有題目可出。同時,熟悉常用算法的時間復(fù)雜度。
? ? 如果算法導(dǎo)論看不懂,你可以參看本博客。
? ??5、刷leetcode或cc150或編程藝術(shù)系列
- 如主要在國外找工作,推薦兩個編程面試網(wǎng)站:一個是國外一網(wǎng)站leetcode,它上面有個OJ對于找工作的同學(xué)來說非常值得一刷https://oj.leetcode.com/;另外一個是http://www.careercup.com/,而后這個網(wǎng)站的創(chuàng)始人寫了本書,叫《careercup cracking coding interview》,最終這本英文書被圖靈教育翻譯出版為《程序員面試金典》。
- 若如果是國內(nèi)找工作,則鄭重推薦編程之法github版,尤其是在博客版本基礎(chǔ)上精簡優(yōu)化的我的新書《編程之法》。除此之外,還可看看《編程之美》,與《劍指offer》。
? ? 而不論是準(zhǔn)備國內(nèi)還是國外的海量數(shù)據(jù)處理面試題,此文必看:教你如何迅速秒殺掉:99%的海量數(shù)據(jù)處理面試題。收錄于新書《編程之法》第六章。
? ? 此外,多看看優(yōu)秀的開源代碼,如nginx或redis,多做幾個項目加以實踐之,盡早實習(xí)(在一線互聯(lián)網(wǎng)公司實習(xí)3個月可能勝過你自個黑燈瞎火摸爬滾打一年)。
? ??當(dāng)然,如果你已經(jīng)具備了上文所說的語言 & 數(shù)據(jù)結(jié)構(gòu) & 算法基礎(chǔ),可以直接跳到本第五步驟,開始刷leetcode或cc150或編程藝術(shù)系列。
?
后記
? ? 學(xué)習(xí)最忌心浮氣躁,急功近利,即便練習(xí)了算法,也不一定代表能萬無一失通過筆試面試關(guān),因為總體說來,在一般的筆試面試中,70%基礎(chǔ)+ 30%coding能力(含算法),故如果做到了上文中的5個步驟,還遠(yuǎn)遠(yuǎn)不夠,最后,我推薦一份非算法的書單,以此為大家查漏補缺(不必全部看完,歡迎大家補充):
?
轉(zhuǎn)載于:https://www.cnblogs.com/chang1991/p/5127648.html
總結(jié)
以上是生活随笔為你收集整理的程序员如何快速准备面试中的算法 - 结构之法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用XCA(X Certificate a
- 下一篇: Python垃圾回收机制详解