五天面試5個科技巨頭并斬獲全部Offer后,他分享了這些心得經驗
故事的開始是由于筆者覺得目前的工作成長空間有限,同時不想繼續呆在芝加哥想到灣區去尋求一些機會。人生苦短,想到就做!結果在五天內瘋狂面試了硅谷的五個科技巨頭——LinkedIn、Salesforce、Google、Airbnb 和 Facebook,并斬獲了所有的 offer!希望他的準備和面試經歷能讓正在找工作或者想要尋求新機會的你看到不同公司的共性和特點,并有所啟發和思考。Enjoy~
準備階段
作者面試并獲得 Offer 的五家公司分別是 LinkedIn,Google,Facebook,Salesforce 以及 Airbnb,面試崗位分別是機器學習工程師、軟件工程師和數據工程師,由于崗位的領域和要求不同所以作者在編程、機器學習和系統設計三個領域進行了準備。
編程
雖然編程面試不能完全反應一個人的綜合能力,但是我們也必須承認沒有更好的方法在短時間內判斷一個開發人員的能力了,所以對于編程需要進行一些必要的練習。
作者主要使用了 Leetcode 和 Geekforgeeks 來進行練習,但也推薦了 Hackerrank 和 Lintcode 兩個練習資源。作者進行了幾個星期的數據結合和算法練習,主要集中于自己不熟悉的方面,同時做了一些較為常見的題目,一般每天練習兩道編程題。
下面是作者的心得:
1. 練習,不斷練習,關于編程的技能沒有捷徑;
2. 作者并沒有把網站上的題目全部做一遍,而是挑出了其中的 70 題來進行練習,作者認為如果真的弄懂了 70 題的解題思路和完整的方法就足夠了,不在多在精!
3. 先從最難的題目開始,那么后面的都會越來越簡單;
4. 如果卡在一題上太久,那就果斷的參考答案的解決方法,更多的時間并不會獲得更多的回報;
5. 在解決問題后,要參考答案的解決方法對照自己的方法,很多時候你會為別人的方法拍案叫絕!
6. 使用一種你最熟悉同時大家都常用的語言,方便與人溝通交流。
系統設計
這一部分與作者原先的工作比較接近,作者介紹了在這類面試中經常會問到的問題包括:系統架構、面向對象的設計、數據機制設計、分布式系統設計、大規模運算等等。
在網絡上有很多資源可以幫助我們進行這方面的準備,作者主要閱讀了系統設計面試、大規模系統架構、案例學習等方面的文章,下面是一些推薦的資源:
https://www.hiredintech.com/classrooms/system-design/lesson/52
http://www.lecloud.net/tagged/scalability
http://tutorials.jenkov.com/software-architecture/index.html
作者認為雖然系統設計面試會覆蓋很廣的問題,但是依舊有一些主線和規律可循,下面是他的經驗分享:
1. 首先要明確需求,隨后進行頂層設計,再進一步進入實施的細節。不要再一開始就不顧需求的一頭扎入技術細節中去;
2. 世界上沒有完美的系統,實際的系統都是在各方面的要求權衡后得出的。
但對于系統設計來說,最好的方式還是實際的設計一個系統。例如在日常工作中除了完成工作外,對于你所使用的工具、架構和庫進行更深入的了解。如果你在使用 HBase,那么不要僅僅是利用客戶端運行一些簡單的命令,而是嘗試去理解它的整體架構,包括讀寫流的表達、如何確保連續性,最小最大壓縮是如何進行的、系統中如何使用 LRU 緩存和 Bloom 濾波器。你甚至可以對 HBase 和 Cassandra 進行一些比較,看看他們之間架構的相似和差異。這樣當面試官讓你設計一個分布式的關鍵存儲時,你就可以從容的面對。
很多博客是不錯的學習資源,包括 Hacker Noon 和一些工作的工程師博客,同時也不要忘了開源工具的開發文檔。但最重要的事情,是保持一顆謙虛但好奇的心,像海綿一樣學習吸收你周圍的知識!
機器學習
機器學習的面試可以分為理論和產品設計兩個部分。
除非你是機器學習專業的同學,那么詳細學習機器學習方面的教材和參考書是十分必要的,例如經典的《Elements of Statistical Learning and Pattern Recognition and Machine Learning 》,如果你對其中一些問題感興趣的話,可以進行深入的閱讀。
機器學習方面你需要確保對于一些基本概念熟練掌握,包括偏差-方差的權衡、過擬合、梯度下降、L1/L2 正則化、貝葉斯理論、boost 方法、協方差、降維等等。同時也要熟悉一系列公式,包括貝葉斯理論和支持向量機這類比較普遍的模型,并自己嘗試著練習實現一些模型,例如決策樹、K均值聚類等。如果在簡歷中寫入了什么模型,你一定要對這個模型了然于心。
對于機器學習的產品設計,你需要了解通常的產品開發流程:
1. 找出產品開發的目標:預測、推薦還是聚類、搜索?
2. 挑選一種合適的算法:監督或者非監督、分類還是回歸?線性模型/決策樹/還是神經網絡等等,要能拿出選擇的理由;
3. 對數據進行特征工程;
4. 對于模型表現進行度量和評價;
5. 在產品層面對模型進行進一步優化。
作者再一次強調了學習的好奇心以及連續性的重要性,不要僅僅是調用一下各個機器學習的 API,而是真正的去理解后面的原理是什么,去了解為什么隨機梯度下降適合于分布式訓練、XGBoost 與傳統的 GBDT 有何不同,在比如損失函數的特征是什么,為什們需要進行二階微分等等。
面試過程
作者先是在領英上與 HR 通信,了解各個公司的需求,隨后進行了幾個月的準備工作。隨后到灣區進行了一個星期的面試,面了 30 多家頂級的科技公司,并最終拿到了其中的五家 Offer。
電話面試
每家公司的電話面試都是標準的流程、唯一不同的地方就是持續時間的長短。在電話面試中,對于專業技能的熟練程度十分重要,因為時間有限,而且很多時候只有一次機會。你要非常迅速的識別出問題的類型并給出高質量的答案。同時需要告訴面試官你的想法和思路,畢竟面試中溝通和交流是最重要的。記住,不要去背答案,面試官一眼就會看穿你的。對于機器學習的公司來說,在面試中你需要向他們展示出你的機器學習技能。
同時需要把握好你的時間,作者在一天下午安排了三場電話面試,但是這有利有弊,可能你可以在先前的面試中得到更多的自行,但也有可能被先前的不順利所影響,所以這種方式因人而異。同時面試多家公司的好處在于可以在有限的時間內盡可能多的參與面試,甚至可以跳過某些公司的第二論電話面試,直接進入終面。最令人意外的是谷歌,他們在知道作者這一周有其它四場面試的時候甚至省略了所有的電話面試,直接進入現場面試!作者欣然接受,雖然很累,但是誰也不會拒絕 Google 的邀請吧!
現場面試(Onsite)
這是我第一個到他們 Sunnyvale 辦公室現場的面試。辦公室很整潔,人們看起來也很專業。
每個面試的時長是一個小時。編程問題是都是比較常規的,但 ML 的問題可能會有點棘手。在這之前,我收到了一封來自 HR 的郵件,里面包含了一些非常有用的準備材料,所以有了思想準備面試也就平穩飄過。我早就聽說 LinkedIn 擁有硅谷最好的伙食,實際也是數一數二。
微軟的收購似乎已經解決了 LinkedIn 的財務負擔,并把他們解放出來去做真正酷的事情。視頻和專業廣告等新功能是令人興奮的。作為一家專注于專業發展的公司,LinkedIn 把自己員工的成長擺在了優先考慮的位置。許多團隊,如廣告相關性和新聞流排序組都正在招兵買馬中,所以如果你想加入的話,趕緊行動起來。
Salesforce Einstein AI 計劃
“搖滾”明星團隊的搖明星項目。這個團隊很新,感覺很像一個創業公司。該產品構建在 Scala 堆棧上,所以類型安全是一個真實的東西!我在他們的 Palo Alto 辦公室面試過。團隊有凝聚力的文化,工作生活的平衡非常好。每個人都對自己正在做的事情充滿激情,而且真的很享受。與其他 Onsite 相比,四次會議的時間相對短一些,我感覺都沒有呆夠。面試結束后,Matthew Tovbin 還帶我去了惠普的車庫散步 :)
絕對的行業領導者,這是毋庸置疑的。但真的去了之后,還是由衷感慨道,它是真的,真的很大。我花了 20 分鐘騎自行車去見我的朋友。永遠是開發人員的好地方。我在山景城(Mountain View)的那片樓區的許多建筑之一里接受的 Onsite,我甚至不知道到底是哪一幢,因為它太大了。
我的面試官看起來都很聰明,但一旦他們開始說話,就更聰明了。和這些人一起工作將會很愉快。我對谷歌的采訪感到特別的一點是,對算法復雜性的分析是非常重要的。確保你真的明白什么是大O符號的意思!
Airbnb
快速擴張的獨角獸擁有獨特的文化,可以說是硅谷最美麗的辦公室。新產品如體驗、餐廳預訂、高端小眾的市場,以及向中國的擴張都為它光明的前景做出了貢獻。如果你能承受風險,希望快速成長,那么 Airbnb 一定是你的不二選擇。
Airbnb 的編碼面試有點獨特,因為你將在 IDE 而不是白板上編程,所以你的代碼需要編譯并給出正確的答案。有些問題真的很難解決。
他們還準備了獨一無二的跨職能面試。這就是 Airbnb 認真對待文化的方式,在技術上很優秀并不能確保一定拿到工作機會。對我來說,這兩個跨職能面試真的很有趣。我和面試官進行了輕松隨性的交談,我們在會議結束時都感到很高興。
總的來說,我認為 Airbnb 的網站是最難的,因為問題的難度、更長的持續時間,以及獨特的跨功能面試。如果你感興趣,一定要了解他們的文化和核心價值觀。
另一個仍在快速增長的巨人,比谷歌更小更快。隨著它的產品線在社交網絡市場上占據主導地位,在人工智能和 VR 領域的巨大投資,我看到的都是未來 Facebook 有更多的增長潛力。如果你對機器學習很感興趣的話,那是一個完美的地方,就像 Yann LeCun 和 Yangqing Jia 一樣。
我的 Onsite 被安排在了 20 號樓,那是一個有屋頂花園和海景的地方,也是小扎辦公室所在的地方。我不確定面試官是否得到了指示,但我沒有清楚的表明我的解決方案是否正確,盡管我相信他們是正確的。
前四天的高強度面試開始出現問題,中午我感到頭特別痛。我堅持完成了下午的面試部分,但感覺自己做得不好。所以當我得知我也得到了他們的 offer,還是有些小驚訝的。
總的來說,我覺得那里的人相信公司的愿景,并為他們正在建設的東西感到自豪。作為一個擁有 5000 億市值和增長的公司,Facebook 是你發展事業的理想之地。
在與這些公司交流的過程中,我總結了一些談判重要的小技巧,希望對你們有幫助:
-
做事說話要有專業的態度
-
清楚自己的優勢
-
對團隊和項目是真正感興趣
-
保持你的耐心和信心
-
可以有主見有堅持但不失禮貌
-
永遠不要撒謊
Databricks 的失敗經歷
所有成功都始于失敗,包括面試。在我開始面試這些公司之前,其實五月份的 Databricks 面試我是失敗了。
今年 4 月的時候,Xiangrui 通過 LinkedIn 聯系了我,詢問我是否對 Spark MLlib 團隊的職位感興趣。我非常激動,一個是因為我一直在用 Spark 非常喜歡 Scala,二來 Databricks 工程師是一流的,三是 Spark 正在革新整個大數據世界。這是一個我不能錯過的機會,所以幾天后我就開始面試了。
這個門檻很高,過程很長,包括一份預先篩選的問卷,一個電話面試,一個編程任務,還有一個完整的終面。我成功到了最后的現場終面環節,并參觀了他們在舊金山市中心的辦公室,那里可以看到金銀島。
我的面試官既聰明又謙虛。在面試中,我經常覺得自己被推到了極限。前面本來進行的還算順利,直到一個現在想到還覺得像災難一樣的環節:我完全搞砸了,因為我沒有足夠的技能和準備,結果完全失敗了…雖然面試結束了,但我真的很喜歡跟他聊天。
幾天后我就收到了拒信。這是意料之中的事,但我還是感到沮喪了幾天。雖然我錯過了在那里工作的機會,但我衷心希望他們能繼續發揮更大的影響力和成就。
經歷完這些后的思考
-
生命是短暫的,職業生涯則更短,所以要在正確的時間做正確的事。
-
面試不只是面試,這是認識新朋友建立社交圈的最佳時機。
-
永遠保持好奇心和學習的熱情。
-
談判技巧對你的面試工作滿意度很重要。
-
獲得工作機會只意味著你符合了他們的最低要求,沒有最好,只有更好。
從 5 月的第一次面試到最終接受 9 月底的工作,我的第一次職業生涯的改變真的是道阻且長。我很難做好十足的準備,因為我需要在目前的工作中保持良好的表現。幾個星期以來,我經常為準備面試到凌晨 1 點,第二天早上 8 點半起床,全身心地投入到工作中。5 天內面試五家公司的壓力很大,而且風險很大,除非你的日程安排很緊,否則我不建議你這樣做。但在交流中,如果你能獲得多個 offer,的確會讓你處在一個比較主動的位置并且受益匪淺。