面試指北:算法與數(shù)據(jù)結(jié)構(gòu)(一)開篇

經(jīng)歷過長久的停滯,碼字的念頭又跳回到我的大腦??赡苁窍<接涗浺幌伦约喝松吘谷诉@一生如落花似流水;可能是受朋友激發(fā),發(fā)現(xiàn)原來身邊也有同行者,在寫作上不再孤獨(dú);可能是主動總結(jié)一下生活和技術(shù)經(jīng)驗(yàn),算是對一段時間內(nèi)的自己做下整理,就像把信息當(dāng)作食物放進(jìn)鍋里煮,祈求能夠融會貫通,做出一頓美食,以飱讀者。好啦,字?jǐn)?shù)湊完,以下進(jìn)入正文。
本文主要內(nèi)容:
?為什么要學(xué)算法與數(shù)據(jù)結(jié)構(gòu)??算法與數(shù)據(jù)結(jié)構(gòu)有哪些內(nèi)容?
下期預(yù)告:
?如何學(xué)習(xí)算法與數(shù)據(jù)結(jié)構(gòu)?
我們都知道算法和數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)技術(shù)的基礎(chǔ),但對于要牢牢掌握算法與數(shù)據(jù)結(jié)構(gòu)我們可能心存疑問。學(xué)生可能會問:算法和數(shù)據(jù)結(jié)構(gòu)學(xué)來何用,遠(yuǎn)不如寫點(diǎn)網(wǎng)頁、Android 或者 iOS 來的直觀。社會人可能會問:寫了幾萬行代碼,沒用過算法和數(shù)據(jù)結(jié)構(gòu),學(xué)這干啥?確實(shí)如此,理論和實(shí)踐比起來總是顯得更加遙遠(yuǎn)。下面我來結(jié)合算法與數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)技術(shù)知識中所處的位置和實(shí)際情況說一下為什么。
為什么要學(xué)算法與數(shù)據(jù)結(jié)構(gòu)?
1. 它是內(nèi)功,它是地基
如果把計(jì)算機(jī)各種技術(shù)比作武術(shù),那算法與數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、編譯原理、計(jì)算機(jī)網(wǎng)絡(luò)等等均屬于內(nèi)功,而像各種工具如 IDE、Git 等等的使用、各種語言 API 屬于外功。
張無忌就是學(xué)了《九陽神功》才得以擁有快速學(xué)習(xí)掌握其他招數(shù)的能力,學(xué)乾坤大挪移之速度把美麗的小昭都看傻眼了。
建蓋樓房時,要想蓋的更高,地基也必須要打的更深才行。這和你想成為技術(shù)專家,必須掌握牢靠的基礎(chǔ)知識是一個道理。
你是否在擔(dān)心自己 35 歲失業(yè)?你是否在擔(dān)心技術(shù)更新太快來不及學(xué)習(xí)?熟練掌握計(jì)算機(jī)基礎(chǔ)知識可以說是此問題的命門所在。樹木生長枝椏不可能憑空長出來,都必須依靠上一個樹枝才能結(jié)出新枝??萍?、文化亦是如此。不要懼怕新技術(shù)的浪潮把自己拍在沙灘上,因?yàn)樾录夹g(shù)也是從舊技術(shù)生長而來,其核心不會發(fā)生太大變化,只要你不是浮在表面,而是掌握了內(nèi)在的原理,那你完全可以用很快的速度學(xué)習(xí)掌握新技術(shù)。如此,那還怕啥?
2. 它有用,它有大用
香農(nóng)的信息論奠定了計(jì)算機(jī)的基礎(chǔ)。當(dāng)今互聯(lián)網(wǎng)時代可謂信息彌漫,電磁波載著各個終端的數(shù)據(jù)來回穿梭,我們確實(shí)活在信息的世界。在這個世界中,信息處理必不可少,而做這個事情就要用到算法。更何況,大數(shù)據(jù)時代對算法的高效要求更甚。
這也是一個移動時代,手機(jī)就像我們植入的硬件,已經(jīng)無法離開。馬斯克的生物科技公司 Neuralink 在開發(fā)一種可以植入腦中的設(shè)備,和這種能夠生理上植入大腦的設(shè)備相比,手機(jī)已經(jīng)植入我們的腦中,只不過是精神上的。我們的生活已經(jīng)大大依賴于此,就像領(lǐng)土對于國家一樣,手機(jī)對于我們來說是不可分割的一部分。
說回我們?nèi)粘S檬謾C(jī)完成生活的很多事情,比如我們要點(diǎn)外賣,如何匹配到離店家最近的外賣員,又如何確定他可以在限定時間內(nèi)送完手上的訂單?比如你要打車回家,如何選擇最合適的路線,不堵車不繞路?我們用搜索引擎搜索我們想要的內(nèi)容,如何通過關(guān)鍵字匹配最優(yōu)結(jié)果呈現(xiàn)出來?這些過程肯定要用到算法。
即日常用的 app 離不開算法,手機(jī)離不開 app,而我們離不開手機(jī)。
3. 大廠看重它
各個大廠面試都會考察算法與數(shù)據(jù)結(jié)構(gòu)。諸如國內(nèi)的騰訊、阿里、百度、字節(jié)跳動等等,國外的 Google、Facebook 更是要做好萬全準(zhǔn)備才可以去面試。
為什么大廠面試必考算法與數(shù)據(jù)結(jié)構(gòu)?
因?yàn)閷τ诖髲S來說,把你招進(jìn)來不僅僅要看你當(dāng)下的實(shí)力,更看重你的長期成長,也就是有沒有潛力。而正如第一點(diǎn)所說,計(jì)算機(jī)基礎(chǔ)是內(nèi)功、地基,它決定了你的技術(shù)天花板,也就是你的技術(shù)潛力。
我們都希望能夠了解框架原理和設(shè)計(jì)思想,不滿足于僅僅做一個 API 調(diào)用者。而了解算法與數(shù)據(jù)結(jié)構(gòu)之后,有助于我們理解框架中一些數(shù)據(jù)結(jié)構(gòu)和算法的選用原因。
如果你希望做個泛泛之輩,那代碼能跑就行可能符合你的選擇。但如果你希望自己的代碼能夠不斷精進(jìn),那除了代碼風(fēng)格、設(shè)計(jì)模式之外,對性能和內(nèi)存占用也要做到一定要求。而算法與數(shù)據(jù)結(jié)構(gòu)能夠給你更多的思路和工具去提升性能、降低內(nèi)存。
算法與數(shù)據(jù)結(jié)構(gòu)包括哪些內(nèi)容?
簡略版
如果你目標(biāo)是入門,或者急于面試,掌握 10 個數(shù)據(jù)結(jié)構(gòu)、10 個算法足以。
10個數(shù)據(jù)結(jié)構(gòu):數(shù)組、鏈表、棧、隊(duì)列、散列表、二叉樹、堆、跳表、圖、Trie 數(shù)。
10 個算法:遞歸、排序、二分查找、搜索、哈希算法、貪心算法、分支算法、回溯算法、動態(tài)規(guī)劃、字符串匹配算法。

完整版
完整版則包含較多內(nèi)容,不再一一羅列,參考思維導(dǎo)圖內(nèi)容。

如果你需要文中思維導(dǎo)圖,可以關(guān)注下方公眾號?
3.141516?回復(fù)?算法與數(shù)據(jù)結(jié)構(gòu)?獲取 xmind 源文件。
另外推薦一下好友公眾號,多一些人文信息的公眾號。
學(xué)習(xí)累了?玩會兒休閑小游戲解解壓。CrazyBounce 是前段時間我對大三做的游戲的微信小程序復(fù)刻版。
