掘金者的Google之路

本文為掘金投稿求豫,譯文出自:掘金翻譯計劃

這是练般?

這是我為了從 Web 開發(fā)者(自學(xué)矗漾、非計算機科學(xué)學(xué)位)蛻變至 Google 軟件工程師所制定的計劃,其內(nèi)容歷時數(shù)月薄料。

這一長列表是從 Google 的指導(dǎo)筆記 中萃取出來并進行擴展敞贡。因此,有些事情你必須去了解一下摄职。我在列表的底部添加了一些額外項誊役,用于解決面試中可能會出現(xiàn)的問題。這些額外項大部分是來自于 Steve Yegge 的“得到在 Google 工作的機會”谷市。而在 Google 指導(dǎo)筆記的逐字間蛔垢,它們有時也會被反映出來。

目錄

—————- 下面的內(nèi)容是可選的 —————-

為何要用到它鞠抑?

我一直都是遵循該計劃去準(zhǔn)備 Google 的面試饭聚。自 1997 年以來,我一直從事于 Web 程序的構(gòu)建碍拆、服務(wù)器的構(gòu)建及創(chuàng)業(yè)型公司的創(chuàng)辦若治。對于只有著一個經(jīng)濟學(xué)學(xué)位慨蓝,而不是計算機科學(xué)學(xué)位(CS degree)的我來說,在職業(yè)生涯中所取得的都非常成功端幼。然而礼烈,我想在 Google 工作,并進入大型系統(tǒng)中婆跑,真正地去理解計算機系統(tǒng)此熬、算法效率、數(shù)據(jù)結(jié)構(gòu)性能滑进、低級別編程語言及其工作原理犀忱。可一項都不了解的我扶关,怎么會被 Google 所應(yīng)聘呢阴汇?

當(dāng)我創(chuàng)建該項目時,我從一個堆棧到一個堆都不了解节槐。那時的我搀庶,完全不了解 Big-O 、樹铜异,或如何去遍歷一個圖哥倔。如果非要我去編寫一個排序算法的話,我只能說我所寫的肯定是很糟糕揍庄。一直以來咆蒿,我所用的任何數(shù)據(jù)結(jié)構(gòu)都是內(nèi)建于編程語言當(dāng)中。至于它們在背后是如何運作蚂子,對此我一概不清楚沃测。此外,以前的我并不需要對內(nèi)存進行管理缆镣,最多就只是在一個正在執(zhí)行的進程拋出了“內(nèi)存不足”的錯誤后芽突,采取一些權(quán)變措施。而在我的編程生活中董瞻,也甚少使用到多維數(shù)組寞蚌,可關(guān)聯(lián)數(shù)組卻成千上萬。而且钠糊,從一開始到現(xiàn)在挟秤,我都還未曾自己實現(xiàn)過數(shù)據(jù)結(jié)構(gòu)。

就是這樣的我抄伍,在經(jīng)過該學(xué)習(xí)計劃后艘刚,已然對被 Google 所雇傭充滿信心。這是一個漫長的計劃截珍,以至于花費了我數(shù)月的時間攀甚。若您早已熟悉大部分的知識箩朴,那么也許能節(jié)省大量的時間。

如何使用它

下面所有的東西都只是一個概述秋度。因此炸庞,你需要由上而下逐一地去處理它。

在學(xué)習(xí)過程中荚斯,我是使用 GitHub 特殊的語法特性 markdown flavor 去檢查計劃的進展埠居,包括使用任務(wù)列表。(注:因極客頭條的 markdown 并不支持此語法事期,因此在下方做了刪除處理)

創(chuàng)建一個新的分支滥壕,以使得你可以像這樣去檢查計劃的進展。直接往方括號中填寫一個x兽泣,表示已經(jīng)完成
更多關(guān)于 Github-flavored markdown 的詳情

我得到了工作嗎绎橘?

我還沒去應(yīng)聘。

因為我離完成學(xué)習(xí)(完成該瘋狂的計劃列表)還需要數(shù)天的時間撞叨,并打算在下周開始用一整天的時間金踪,以編程的方式去解決問題。當(dāng)然牵敷,這將會持續(xù)數(shù)周的時間。然后法希,我才通過使用在二月份所得到的一個介紹資格枷餐,去正式應(yīng)聘 Google(沒錯,是二月份時就得到的)苫亦。

感謝 JP 的這次介紹毛肋。

跟隨著我

目前我仍在該計劃的執(zhí)行過程中,如果你想跟隨我腳步去學(xué)習(xí)的話屋剑,可以登進我在 GoogleyAsHeck.com 上所寫的博客润匙。

不要自以為自己足夠聰明

  • Google 的工程師都是才智過人的。但是唉匾,就算是工作在 Google 的他們孕讳,仍然會因為自己不夠聰明而感到一種不安。
  • 天才程序員的神話

關(guān)于 Google

相關(guān)視頻資源

部分視頻只能通過在 Coursera巍膘、Edx 或 Lynda.com class 上注冊登錄才能觀看厂财。這些視頻被稱為網(wǎng)絡(luò)公開課程(MOOC)。即便是免費觀看峡懈,部分課程可能會由于不在時間段內(nèi)而無法獲取璃饱。因此,你需要多等待幾個月肪康。

很感謝您能幫我把網(wǎng)絡(luò)公開課程的視頻鏈接轉(zhuǎn)換成公開的視頻源荚恶,以代替那些在線課程的視頻撩穿。此外,一些大學(xué)的講座視頻也是我所青睞的谒撼。

面試過程 & 通用的面試準(zhǔn)備

為你的面試選擇一種語言

在這叨叙,我就以下話題寫一篇短文 —— 重點:為在 Google 的面試選擇一種語言

在大多數(shù)公司的面試當(dāng)中,你可以在編程這一環(huán)節(jié)堪澎,使用一種自己用起來較為舒適的語言去完成編程擂错。但在 Google,你只有三種固定的選擇:

  • C++
  • Java
  • Python

有時你也可以使用下面兩種樱蛤,但需要事先查閱說明钮呀。因為,說明中會有警告:

  • JavaScript
  • Ruby

你需要對你所選擇的語言感到非常舒適且足夠了解昨凡。

更多關(guān)于語言選擇的閱讀:

在此查看相關(guān)語言的資源

由于爽醋,我正在學(xué)習(xí)C、C++ 和 Python便脊。因此蚂四,在下面你會看到部分關(guān)于它們的學(xué)習(xí)資料。相關(guān)書籍請看文章的底部哪痰。

在你開始之前

該列表已經(jīng)持續(xù)更新了很長的一段時間遂赠,所以,我們的確很容易會對其失去控制晌杰。

這里列出了一些我所犯過的錯誤跷睦,希望您不要重滔覆轍。

1. 你不可能把所有的東西都記住

就算我查看了數(shù)小時的視頻肋演,并記錄了大量的筆記抑诸。幾個月后的我,仍然會忘卻其中大部分的東西惋啃。所以哼鬓,我翻閱了我的筆記,并將可回顧的東西制作成抽認卡(flashcard)(請往下看)

2. 使用抽認卡

為了解決善忘的問題边灭,我制作了一些關(guān)于抽認卡的頁面异希,用于添加兩種抽認卡:正常的及帶有代碼的。每種卡都會有不同的格式設(shè)計。

而且称簿,我還以移動設(shè)備為先去設(shè)計這些網(wǎng)頁扣癣,以使得在任何地方的我,都能通過我的手機及平板去回顧知識憨降。

你也可以免費制作屬于你自己的抽認卡網(wǎng)站:

  • 抽認卡頁面的代碼倉庫
  • 我的抽認卡數(shù)據(jù)庫:有一點需要記住的是父虑,我做事有點過頭,以至于把卡片都覆蓋到所有的東西上授药。從匯編語言和 Python 的細枝末節(jié)士嚎,乃至到機器學(xué)習(xí)和統(tǒng)計都被覆蓋到卡片上。而這種做法悔叽,對于 Google 的要求來說莱衩,卻是多余。

在抽認卡上做筆記: 若你第一次發(fā)現(xiàn)你知道問題的答案時娇澎,先不要急著把其標(biāo)注成“已懂”笨蚁。你需要做的,是去查看一下是否有同樣的抽認卡趟庄,并在你真正懂得如何解決問題之前括细,多問自己幾次。重復(fù)地問答可幫助您深刻記住該知識點戚啥。

3. 回顧奋单,回顧,回顧

我留有一組 ASCII 碼表虑鼎、OSI 堆棧辱匿、Big-O 記號及更多的小抄紙,以便在空余的時候可以學(xué)習(xí)炫彩。

每編程半個小時就要休息一下,并去回顧你的抽認卡絮短。

4. 專注

在學(xué)習(xí)的過程中丁频,往往會有許多令人分心的事占據(jù)著我們寶貴的時間。因此席里,專注和集中注意力是非常困難的奖磁。

你所看不到的

由于改基,這個巨大的列表一開始是作為我個人從 Google 面試指導(dǎo)筆記所形成的一個事件處理列表秕狰。因此鸣哀,有一些我熟悉且普遍的技術(shù)在此都未被談及到:

  • SQL
  • Javascript
  • HTML我衬、CSS 和其他前端技術(shù)

日常計劃

部分問題可能會花費一天的時間去學(xué)習(xí)井仰,而部分則會花費多天糕档。當(dāng)然,有些學(xué)習(xí)并不需要我們懂得如何實現(xiàn)端仰。

因此荔烧,每一天我都會在下面所列出的列表中選擇一項,并查看相關(guān)的視頻臀稚。然后满哪,使用以下的一種語言去實現(xiàn):

C —— 使用結(jié)構(gòu)體和函數(shù)蛹屿,該函數(shù)會接受一個結(jié)構(gòu)體指針 * 及其他數(shù)據(jù)作為參數(shù)赖条。 C++ —— 不使用內(nèi)建的數(shù)據(jù)類型谋币。 C++ —— 使用內(nèi)建的數(shù)據(jù)類型早芭,如使用 STL 的 std::list 來作為鏈表退个。 Python —— 使用內(nèi)建的數(shù)據(jù)類型(為了持續(xù)練習(xí) Python),并編寫一些測試去保證自己代碼的正確性刀荒。有時,只需要使用斷言函數(shù) assert() 即可泼返。 此外,你也可以使用 Java 或其他語言柴罐。以上只是我的個人偏好而已。

為何要在這些語言上分別實現(xiàn)一次?

因為可以練習(xí),練習(xí)虾啦,練習(xí)蝇闭,直至我厭倦它,并完美地實現(xiàn)出來逻悠。(若有部分邊緣條件沒想到時,我會用書寫的形式記錄下來并去記憶) 因為可以在純原生的條件下工作(不需垃圾回收機制的幫助下饥伊,分配/釋放內(nèi)存(除了 Python)) 因為可以利用上內(nèi)建的數(shù)據(jù)類型,以使得我擁有在現(xiàn)實中使用內(nèi)建工具的經(jīng)驗(在生產(chǎn)環(huán)境中,我不會去實現(xiàn)自己的鏈表)

就算我沒有時間去每一項都這么做节腐,但我也會盡我所能的。

在這里狼渊,你可以查看到我的代碼:

你不需要記住每一個算法的內(nèi)部原理。

在一個白板上寫代碼,而不要直接在計算機上編寫蘸嘶。在測試完部分簡單的輸入后褥蚯,到計算機上再測試一遍。

必備知識

算法復(fù)雜度 / Big-O / 漸進分析法

如果部分課程過于學(xué)術(shù)性宴凉,你可直接跳到文章底部丧靡,去查看離散數(shù)學(xué)的視頻以獲取相關(guān)背景知識。

數(shù)據(jù)結(jié)構(gòu)

更多的知識

  • 二分查找(Binary search)

  • 二分查找(視頻)

  • 二分查找(視頻)

  • 詳情

  • 實現(xiàn):

  • 二分查找(在一個已排序好的整型數(shù)組中查找)

  • 迭代式二分查找

  • 按位運算(Bitwise operations)

  • Bits 速查表

  • 你需要知道大量2的冪數(shù)值(從2^1 到 2^16 及 2^32)

  • 好好理解位操作符的含義:&展东、|权悟、^、~榔昔、>>、<<

  • 字碼(words)

  • 好的介紹:

位操作(視頻)

樹(Trees)

排序(Sorting)

圖(Graphs)

圖論能解決計算機科學(xué)里的很多問題,所以這一節(jié)會比較長容燕,像樹和排序的部分一樣梁呈。

可以從 Skiena 的書(參考下面的書推薦小節(jié))和面試書籍中學(xué)習(xí)更多關(guān)于圖的實踐寻咒。

更多知識

動態(tài)規(guī)劃 (video)

而且能在面試官試圖忽悠你的時候識別出他們晰骑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绊序,隨后出現(xiàn)的幾起案子硕舆,更是在濱河造成了極大的恐慌,老刑警劉巖骤公,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抚官,死亡現(xiàn)場離奇詭異,居然都是意外死亡阶捆,警方通過查閱死者的電腦和手機凌节,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門钦听,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人倍奢,你說我怎么就攤上這事朴上。” “怎么了卒煞?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵痪宰,是天一觀的道長。 經(jīng)常有香客問我畔裕,道長衣撬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任扮饶,我火速辦了婚禮具练,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贴届。我一直安慰自己靠粪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布毫蚓。 她就那樣靜靜地躺著淳衙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淹禾。 梳的紋絲不亂的頭發(fā)上柴墩,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音翩概,去河邊找鬼牲距。 笑死,一個胖子當(dāng)著我的面吹牛钥庇,可吹牛的內(nèi)容都是我干的牍鞠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼评姨,長吁一口氣:“原來是場噩夢啊……” “哼难述!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吐句,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤胁后,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后嗦枢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體攀芯,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年文虏,在試婚紗的時候發(fā)現(xiàn)自己被綠了侣诺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殖演。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖紧武,靈堂內(nèi)的尸體忽然破棺而出剃氧,到底是詐尸還是另有隱情,我是刑警寧澤阻星,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布朋鞍,位于F島的核電站,受9級特大地震影響妥箕,放射性物質(zhì)發(fā)生泄漏滥酥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一畦幢、第九天 我趴在偏房一處隱蔽的房頂上張望坎吻。 院中可真熱鬧,春花似錦宇葱、人聲如沸瘦真。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诸尽。三九已至,卻和暖如春印颤,著一層夾襖步出監(jiān)牢的瞬間您机,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工年局, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留际看,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓矢否,卻偏偏與公主長得像仲闽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子僵朗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 外婆家安在大山中的大山上赖欣,有世外桃源的感覺。有兩條道路可以上山衣迷,一條是可以開車的,一條是山林小路汽車是上不去的酱酬。我...
    瞇兒的小事兒閱讀 309評論 0 3
  • 文/欣兒 20180615 那天看小阿朵的文章壶谒,我知道了有這樣一個女人,小小的個子膳沽,卻有著大大的愛汗菜。這就是《人間...
    欣雅閱讀閱讀 5,180評論 1 2
  • 旅人沒有名字 也沒有家 旅人四處奔走 只帶一把斷了弦的木吉他 我想要送你一個星期八 步子輕盈地像云 云朵散漫地晃著...
    斐炎涼閱讀 430評論 54 29