從 2017 年 7 月 24 號到 28 號的五天,我面試了 LinkedIn ,Salesforce Einstein ,Google ,Airbnb 和 Facebook ,並拿到了所有五家公司的 offer 。html
這是一段神奇的經歷,我很幸運由於個人努力獲得了回報。因而我決定寫點什麼來說述我是如何準備,面試的過程以及分享我對着五家公司的感覺。前端
我在 Groupon 混了近三年了。 這是個人第一份工做,我一直在和很牛逼的團隊作着了不得的項目。
咱們團隊一直在作很酷的事情,在公司內部頗有影響也發表了一些論文等等。
儘管我一直渴望學習更多但我以爲個人學習速率開始降低了。做爲一名芝加哥的軟件工程師,灣區的那麼多偉大的公司老是強有力的誘惑着我。react
人生短暫,職業生涯更短。在跟個人老婆交談並獲得她的全力支持後我決定採起行動開始了我職業生涯的第一次跳槽。android
儘管我一直着迷機器學習的職位,可這些職位在上述五家公司的名稱和麪試流程有着些微的不一樣。其中三家的職位是機器學習工程師,Salesforce 是數據工程師,而 Airbnb 職位裏則是普通的軟件工程師。由此我不得不許備三個不一樣領域的知識:編碼, 機器學習和系統設計。ios
我還有個全職的工做,這使我總共花費了兩三月的時間準備。下面將給出我是如何準備這三個領域的。git
儘管我也認同編碼面試可能不是最好的方式來評估面試者的技能,但無可爭辯的是沒有比這更好的方法在短期內來證實面試者是否是一個好的程序員。
在我看來,想要獲得程序員的工做編碼測試是不可避免 程序員
我主要使用 LeetCode 和 Geeksforgeeks 來練習。 Hackerrank 和 Lintcode 也是不錯的練習工具。
我花了幾周的時間過了下常見的數據結構和算法。而後重點關注了我以前不熟悉的領域,最後作了一些常見問題的練習。由於時間所限一般一天我只作兩題。github
談談的一下想法,面試
這個領域更多的和實際工做經驗相關。許多問題會在系統設計面試中被問到,包括但不限於系統架構,面向對象設計,數據庫設計,分佈式系統設計,高擴展系統等。算法
有不少線上資源能夠幫助咱們練習。大部分時候我是經過閱讀關於系統設計以及分佈式系統設計面試的文章和一些設計案例的分析。下面我給出一些有用的資源供參考。
儘管系統設計面試涵蓋不少主題,一些經常使用的套路能夠幫助咱們解決這些問題。
說了這麼多,應對系統設計面試最好的方式仍是坐下來實際設計一個系統,例如在你的平常工做中不要總作些表面工做,能夠試着深刻了解使用的工具,框架和第三方類庫。
再好比你用 HBase ,與其簡單的使用客戶端執行些 DDL 和查詢操做不如試着去搞懂它的總體架構,讀寫的流程,HBase 如何保證了強一致性,有哪些主要或細小的封裝,系統是如何使用的 LRU 緩存和布隆過濾器來提高效率的。
你甚至能夠去比較 HBase 和 Cassandra 在設計上的相同和不一樣之處。這樣當你在被問到設計一個分佈式 key-value 存儲時,你就能夠從容應對了。
許多博客也是好的知識來源如 Hacker Noon 以及一些公司的技術博客,還有不少開源項目的官方文檔。
最重要的是保持謙虛和好奇心,像海綿同樣吸取一切有用的知識。
機器學習面試一般分爲兩部分:理論和產品設計。
讀一些機器學習相關的書籍是頗有幫助的,除非你有機器學習研究的經驗或者ML課程學的很好。比較經典的書如 《機器學習之路》,《模式識別》和《機器學習》都是很是不錯的選擇。若是你對特定領域感興趣能夠選擇更多該領域的書籍。
要確保你懂得那些基本概念,例如誤差方差平衡,過分擬合,梯度降低,L1/L2 正則化,貝葉斯理論,集成學習,協同過濾,降維等。
熟悉常見的公式如貝葉斯方程和流行的推導模型,如邏輯迴歸和 SVM 。試着去實現如下簡單模型如決策樹和 K-means 聚類。
若是你放了一些模型在你的簡歷上,那務必確保你徹底懂得並能給出這些模型的優缺點。
關於機器學習的產品設計,懂得構建一個機器學習產品的通常過程,這裏給出了個人作法。
這裏我想再次強調保持好奇心和持續學習。不要僅僅是調用 Spark MLlib 或者 XGBoost 的 API ,
要試着去弄懂背後的原理。例如爲何隨機梯度降低適合於分佈式訓練,
爲何 XGBoost 與傳統的 GBDT 不一樣,它的損失函數有何特殊之處,爲何它須要計算二階導數等等。
從回覆 Linkedin 上 HR 的消息和尋求推薦開始。在嘗試一次申請某明星創業公司失敗後(後文中我會談到),
我開始了幾個月的艱苦準備。在招聘人員的幫助下,我安排了在灣區一週的現場面試。
我週日飛往硅谷,這樣我有五天時間和世界上那些最牛的技術公司進行約 30 場面試。
很是幸運地是,我拿到了他們中的五家公司的錄用通知。
電話面試是這些公司的標配,不一樣的是面試時長。一些公司如 LInkedin 要一個小時,而 Facebook 和 Airbnb 則是 45 分鐘。
專業性是電面關鍵。由於你只有的有限的時間並且一般只有一次機會。你必需要很快的識別出問題的類型並給出高水平的解決方案。
要確保告訴面試官你的想法和意圖,在一開始這可能會下降你的速度,但溝通是面試中最重要的也是最有幫助的。不要背誦你的答案這很容易讓面試官看穿。
對於機器學習崗位有些公司會問 ML 的問題,若是你被面試這些確保你準備好了這些技能點。
爲了更好的利用個人時間,我在同一下午安排了三個電話面試,每一個間隔一小時。
這樣的好處是我一直處於手熱的狀態,很差的地方是若是第一個沒發揮好可能會影響接下來的表現。因此我不推薦你們都這麼作。
同時面試多家公司的一個好處會給你帶來必定的優點。一次電面之後我就成功的跳過了 Airbnb 和 Salesforce 的第二輪電面由於我已經得到了 LInkedin 和 Facebook 的現場面試
更讓人驚喜的是 Google 在得知我下週有四個現場面試後居然讓我跳過了他們的電面直接安排我現場面試。我知道這將使我很是勞累,不過沒有人可以拒絕 Google 的現場邀請。
這是我在 Sunnyvale 的第一個現場面試,這裏辦公室老是窗明几淨人們看起來很是專業。
每輪面一個小時,編碼問題中規中矩,但 ML 的問題有點難度。儘管如此,我從 HR 哪裏收到的準備資料起到了很大的幫助。直到面試結束,並無讓我太吃驚的問題。
我據說 Linkedin 有着硅谷最好的伙食,如我所察若是不是真的,也差不遠了。
被微軟併購之後,看來 Linkedin 甩掉了財政負擔,他們開始甩開膀子作真正酷的事,讓人心動的新特徵如視頻,專業廣告等。做爲一個關注專業發展的公司,Linkedin 優先增加它的員工。
不少團隊如廣告和訂閱相關的都在擴張,因此抓緊行動若是你想加入。
Salesforce Einstein
明星團隊作的明星項目。這是個至關新的團隊,感受像一個創業公司。產品是構建在 Scala Stack 上的, 因此在那裏類型安全是實實在在的。Matthew Tovbin 在 Scala Days Chicago 2017,Leah McGuire 在 Spark Summit West 2017 進行過偉大的演講。
個人面試是在 Palo Alto 的辦公室。 他們團隊有很強的文化凝聚力和很是好的工做生活平衡。每一個人都對在作的事情充滿激情很真正喜歡。四輪面試下來,總體上比其餘公司要短,但我多但願我能待得再長一點。面試完後,Matthew 甚至帶我到惠普的車庫轉了一下。
絕對的行業老大,無需多言婦孺皆知的 Google 。但它真的很是很是的大。 花費了我 20 分鐘的時間騎車去見個人朋友。 排隊點餐的人也不少,對程序員而言這永遠是一個美好的地方。
我在 Mountain View 園區衆多樓宇中的一座裏進行的面試,我不知道具體是哪個,由於實在是太大了。
個人面試官們看起來很聰明。當他們開始談論的時候你會發現他們更加聰明。若是和這幫人一塊兒工做那將是多麼的愉悅。
Google 的面試我以爲一點特別是對時間複雜度的分析特別重要。確保你真的明白大 O 的涵義。
Airbnb
迅速增加的獨角獸企業,有着獨特的企業文化和號稱灣區最美的辦公環境。新產品如餐廳預約,高端細分市場,中國市場的擴張等都預示着公司光明的前景。若是但願快速成長和 pre-IPO 的體驗,並能忍受風險,這將是一個完美的選擇。
Airbnb 的代碼測驗有一點特別,由於你將在 IDE 上而不是白板上寫,因此你的代碼要可以編譯並給出正確答案。有些問題確實很是困難。
他們還有所謂一種跨職能面試。這是 Airbnb 重視公司文化的方式,僅僅技術上優秀並不能保證被錄用。兩輪跨職能面試讓我飛常愉悅。我和麪試官進行了輕鬆的交談,會話結束後咱們都很愉快。
總體上我以爲 Airbnb 的現場面試是最難的,由於問題很難,時間也很長而且有跨職能的面試。若是你有興趣,務必瞭解他們的文化和核心價值。
和 Google 相比,Facebook 另外一個還在快速增加的巨頭,小但快節奏。它的產品線壟斷了社交網絡,而且重點投資了 AI 和 VR ,顯然將來 Facebook 有着巨大的增加潛力。和大牛們如 Yann LeCun 和 Yangqing Jia ,這機器學習人士工做的樂土。
我在 20 號樓進行的面試了,那裏有樓頂花園和美麗的海景。扎克伯格的辦公室也在那裏。
我不肯定面試官是否是獲得指示,但我沒有獲得明確的提示關於個人答案是否正確。我仍是相信公司指示他們不要評價候選者答案的正確性。
前四天的勞碌給我身體帶來了影響,中午我開始頭疼,我堅持把下午的面試進行完。我以爲本身一點沒發揮好。當收到他們給的錄用通知時我確實有點小吃驚。
整體上我以爲這裏的人相信他們公司的願景,也都爲他們作的事情而驕傲。做爲一個市值五千億美金而且快速增加的公司,Facebook 是開始你職業生涯的理想公司。
這是一個宏大主題,在這我不去談論。 有興趣的能夠參照這篇文章。
一些我認爲重要的事:
失敗是成功之母,固然也包括面試。
在開啓上述硅谷面試之旅前,五月份時我面試 Databridck 失敗了。
四月的時候, Xiangrui 經過 Linkedin 聯繫我,問我是否對 Spark MLlib 團隊的職位有興趣, 這讓我很是心動。由於 1) 我使用 Spark 熱愛 Scala, 2) Databridck 的工程師是最一流的,
3) Spark 完全改變了整個大數據世界。這是一個不能錯過的機會,因此幾天後我開始了此次面試。
Databridck 的門檻至關高處理流程也至關的長,包括一次初審問卷表,一次電話面試,一次代碼測試和一次現場面試。
我成功的得到了現場面試的邀請,並訪問了他們在三藩市市中心的辦公地點,在那咱們能看到金銀島。
個人面試官是個極具聰明才智又同等謙遜的人。面試過程當中我常常感受被逼到了極限。面試還算進行的順利直到一輪災難性的面試,我徹底搞砸了由於技能不過硬和準備不充分,最終慘敗。
Xiangrui 真的很善解人意,面試結束後陪我走了一段,我很是感謝和他的交談。
幾天之後我收到了拒信。和預想的同樣,儘管如此這仍是讓我沮喪了好幾天。雖然錯去了在 Databricks 工做的機會,我仍是衷心的但願他們可以繼續取得更大的影響和成功。
從五月的第一次面試到最終九月底拿到錄用通知,個人第一次跳槽是這麼漫長和不易。
這對我真的不容易,由於我須要保證我如今的工做定期完成。連續幾個周我都是準備面試到凌晨一點而後次日早上八點半起來全身心準備一天的工做。
五天面試五家工做很是的有壓力和冒險,我不建議你們這樣作除非你日程特別趕。可是這樣作也確實有一個好處,就是在手握多個 offer 時,你會在談判的時候更具優點。
我在這裏要感謝我全部的招聘者,感謝他們耐心的幫我安排全部的流程,感謝他們的時間跟我交流並安排面試的機會以及最終給我錄用通知。
沁人心扉
最後也是最重要的是,我要感謝個人家庭,感謝他們對個人愛和支持。感謝個人父母,他們一直在關注我邁出的每一步。感謝我親愛的老婆爲我作的一切還有我親愛的女兒和她暖人心扉的微笑。
也感謝這篇長文的讀者們。
Xiaohan Zeng
10/22/17
譯者更新:做者最終選擇了 Airbnb 的 offer , 並將於 11 月入職。
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 Android、iOS、React、前端、後端、產品、設計 等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。