一份來(lái)自亞馬遜工程師的Google面試指南,GitHub收獲9.8萬(wàn)星,已翻譯成中文
本文經(jīng)AI新媒體量子位(公眾號(hào)ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。
一位從1997年就入行的Web工程師,立志要成為Google軟件工程師,3年前寫(xiě)下了一篇超完整學(xué)習(xí)和面試教程,以此作為自己的奮斗計(jì)劃。
這位名叫John Washam的工程師,換了好幾份工作,最后卻陰差陽(yáng)錯(cuò)在2017年成為了亞馬遜AWS的技術(shù)專(zhuān)家。
但這并不妨礙他的教程成為熱門(mén),在GitHub上線以來(lái),已收獲近10萬(wàn)星的好評(píng)。
而且最近這篇教程已經(jīng)完成了中文翻譯,就算你沒(méi)有去Google面試的機(jī)會(huì),也可以用它來(lái)好好充實(shí)一下自己。
為何寫(xiě)這篇教程
作者Washam本人并非計(jì)算機(jī)學(xué)位,但在兒時(shí)就已經(jīng)展現(xiàn)出對(duì)計(jì)算機(jī)的濃厚興趣,從事的工作是關(guān)于web程序的構(gòu)建、服務(wù)器的構(gòu)建。
作為一名非專(zhuān)業(yè)人士轉(zhuǎn)行,Washam已經(jīng)算是相當(dāng)成功。然而,他還是想去Google工作,真正地去理解計(jì)算機(jī)系統(tǒng)、算法效率、數(shù)據(jù)結(jié)構(gòu)性能、低級(jí)別編程語(yǔ)言及其工作原理。
可對(duì)這些知識(shí)都不了解的他,怎么會(huì)被Google應(yīng)聘呢?
于是他在網(wǎng)上收集了各類(lèi)計(jì)算機(jī)專(zhuān)業(yè)知識(shí),以及進(jìn)入谷歌工作的員工分享的資源,并系統(tǒng)地整理了這些資料。
Washam強(qiáng)調(diào),想去Google工作首先不要妄自菲薄。Google的工程師都是才智過(guò)人的。但是,就算是工作在 Google 的他們,仍然會(huì)因?yàn)橛X(jué)得自己不夠聰明而感到一種不安。
學(xué)習(xí)資源
接下來(lái)就跟著Washam的腳步去學(xué)習(xí)。
首先要做的就是選擇一門(mén)語(yǔ)言,在Google一般是C++、Java、Python,有時(shí)也會(huì)用到JavaScript、Ruby。背后還有一些如SQL、HTML等技術(shù)沒(méi)有列出。
接著開(kāi)始學(xué)習(xí)計(jì)算機(jī)硬件知識(shí):
然后補(bǔ)充計(jì)算機(jī)專(zhuān)業(yè)的基礎(chǔ)數(shù)學(xué)知識(shí),如算法復(fù)雜度 / Big-O / 漸進(jìn)分析法、數(shù)據(jù)結(jié)構(gòu)、樹(shù)、排序、圖論。
此外還有遞歸、動(dòng)態(tài)規(guī)劃、組合與概率、NP&NP-完全和近似算法、緩存、線程與進(jìn)程、系統(tǒng)設(shè)計(jì)、可伸縮性、數(shù)據(jù)處理。
看到這么多知識(shí)點(diǎn),你會(huì)不會(huì)覺(jué)得有點(diǎn)懵呢?Washam告訴你一點(diǎn)小技巧。
因?yàn)槟悴豢赡芤槐榫陀涀∷兄R(shí)點(diǎn)。所以需要把要回顧的知識(shí)點(diǎn)做成抽認(rèn)卡(flashcard):正常的及帶有代碼的,類(lèi)似于背單詞。
每種卡都會(huì)有不同的格式設(shè)計(jì)。項(xiàng)目主頁(yè)中就有抽認(rèn)卡的源代碼,可以根據(jù)自己的學(xué)習(xí)特點(diǎn)去制作。
Washam還留有一組 ASCII 碼表、OSI 堆棧、Big-O 記號(hào)及更多的小抄紙,以便在空余的時(shí)候可以學(xué)習(xí)。每編程半個(gè)小時(shí)就要休息一下,并去回顧你的抽認(rèn)卡。
當(dāng)然,論文的閱讀也是必不可少的,尤其是谷歌曾經(jīng)發(fā)表的一些基礎(chǔ)技術(shù)論文。
書(shū)籍則推薦一些關(guān)于算法和C++編程之類(lèi)的。
去Google面試需要注意什么
面試的第一步當(dāng)然是要有一份好的簡(jiǎn)歷,這樣才能為你爭(zhēng)取到寶貴的面試機(jī)會(huì)。知名科技博主Steve Yagge給出了10個(gè)貼士,幫你做出一份還不錯(cuò)的簡(jiǎn)歷。
這位Steve曾經(jīng)在亞馬遜、Google都工作過(guò),Washam的這個(gè)項(xiàng)目就大量地引用了他的技術(shù)博客內(nèi)容。
在面試時(shí),你可能會(huì)遇到這20個(gè)問(wèn)題,每個(gè)問(wèn)題準(zhǔn)備 2-3 種回答。準(zhǔn)備點(diǎn)故事,而不要只是擺一些你完成的事情的數(shù)據(jù)。
面試官在也會(huì)問(wèn)你還有哪些問(wèn)題,不要說(shuō)自己沒(méi)有什么要問(wèn)題,可以試試問(wèn)一些此類(lèi)問(wèn)題:
當(dāng)然,進(jìn)入Google也不意味著結(jié)束,你還要新的學(xué)習(xí)過(guò)程。
Washam還有一份附加內(nèi)容,包括Emacs和Vim、Unix命令行工具、密碼學(xué)。這些內(nèi)容雖然不會(huì)直接用到,但是會(huì)大大提高你的效率。
最后,在這樣一個(gè)特殊的時(shí)期,好好給自己充個(gè)電。祝大家在新的一年里都能面試成功!
傳送門(mén)
資源地址:
https://github.com/jwasham/coding-interview-university/blob/master/translations/README-cn.md