在 2017 年 7 月 24 日至 28 日的五天里,一位華裔技術(shù)工程師曾笑寒連續(xù)面試了 LinkedIn、Salesforce、Google、Airbnb 和 Facebook 五家硅谷科技巨頭,最終也全部都拿到了 Offer。
在此之前,并非計算機專業(yè)出身、工作時間短暫、知識及經(jīng)驗均有限的作者,在經(jīng)歷一次失敗的面試之后,并未丟失信心,而是從頭來過。作為一名全職工作者,其在閑暇之余準備面試,能同時拿到 5 家科技巨頭的 Offer 這樣的結(jié)果確實非常地幸運,但是其背后付出的努力也不容忽視。本文接下來將與大家分享作者在面對五家不同的科技公司及不同的崗位,所做的準備工作、面試技巧以及自己的一些實踐經(jīng)驗,希望可以為正在準備跳槽的工程師提供一些幫助。
以下為譯文:
最初的緣由
起因是 2017 年即今年,我作為一名普通的軟件開發(fā)工程師,已經(jīng)在 Groupon 芝加哥總部工作了近三年。這是我的第一份工作,我的團隊和項目都非常贊,我們一起構(gòu)建很酷的東西、在公司內(nèi)部發(fā)揮各自的影響力、發(fā)表論文等等。但是,工作輕松,生活自在,隨著時間的推移,我發(fā)現(xiàn)我的學習速度正逐漸放緩,內(nèi)心開始希望迎接新的挑戰(zhàn)。同時作為一名在芝加哥住了八年的碼工,也非常向往灣區(qū)的優(yōu)秀公司。
生命短暫,職業(yè)生涯則更短。在與妻子溝通并得到她的全力支持之后,我決定采取行動,做出第一次職業(yè)轉(zhuǎn)變。
準備
首先我對機器學習的職位很感興趣,但其實我申請這五家公司的職位名稱和面試過程都稍有不同。LinkedIn、Google、Facebook 的職位是機器學習工程師,Salesforce 是數(shù)據(jù)工程師,Airbnb 是軟件工程師。因此我需要準備三個不同領(lǐng)域:算法和編程、機器學習和系統(tǒng)設計。
由于白天還有一份全職工作,所以只能晚上喝周末抽出一些時間準備面試,總體而言,一共花了 2-3 個月的時間。以下就是我如何在這三個方面做準備。
算法和編程
的確,算法和編程面試并不是評估開發(fā)人員所有技能的最好方法,但短時間內(nèi)沒有更好的辦法來判斷是否是一名優(yōu)秀的工程師。
這一塊其實是最好也最難準備的。一方面有許多的網(wǎng)站提供了大量的題目可以練習,另一方面也需要投入大量時間精力。我主要使用 Leetcode 和 Geeksforgeeks 進行練習,還推薦 Hackerrank 和 Lintcode。我花了幾個星期的時間過一遍常見的數(shù)據(jù)結(jié)構(gòu)和算法,然后針對性地重點關(guān)注我不太熟悉的領(lǐng)域,最后解決了一些常見問題。由于我時間有限,我通常每天做兩題。
我的想法是:
多練習,沒有捷徑。
與其做完 Leetcode 上所有 600 道題,不如覆蓋全部類型并徹底理解每一道題。我總共做了大約 70 道題,我認為已經(jīng)足夠了。我的想法是,如果 70 道題還沒有幫助,那么你可能方法有問題,做 700 道也沒有任何幫助。
做最難的題,其余的都會變得更加容易。
如果一道題超過兩小時都做不完,可以看答案了。再花時間思考并不值得。
做完一道題后一定要看答案。我很佩服那些一行 Python 代碼解決問題的人,雖然有時依賴語言的某個特性,但實在是很精妙。
使用你最熟悉的常用語言,在面試時可以用到。
系統(tǒng)設計
系統(tǒng)設計領(lǐng)域與實際工作經(jīng)驗更密切相關(guān)。 如果你有不少系統(tǒng)設計的經(jīng)驗,那么花的時間可以相對少一些。雖然是很看經(jīng)驗,但也還是可以準備的,網(wǎng)上也有很多的經(jīng)驗貼和練習題。我主要閱讀關(guān)于系統(tǒng)設計面試、大型系統(tǒng)架構(gòu)、案例研究相關(guān)文章。
個人感覺這個領(lǐng)域面試時會涉及很多問題,包括但不限于系統(tǒng)架構(gòu)、面向?qū)ο蟮脑O計、數(shù)據(jù)庫模式設計、分布式系統(tǒng)設計、可擴展性等。因為我主要面試的職位是機器學習相關(guān)的,所以這次面試遇到的 session 少一些(主要是 Airbnb).
雖然系統(tǒng)設計面試會涵蓋很多主題,如何回答這些問題還是有一些通用思路的:
先明白需求,然后考慮大框架,最后是具體設計。不要馬上跳到細節(jié)上,而不弄明白需求是什么。
沒有完美的系統(tǒng)設計。根據(jù)需要做出取舍(trade-off)。
盡管如此,準備系統(tǒng)設計面試的最好方法就是坐下來設計一個系統(tǒng),深入探索你平時使用的工具、框架和庫。舉個例子,要是工作中用到 HBase,有的人可能就只是簡單的用一下 Client 跑一些 DDL,做一些 Get,但有的人可能就會攝入一些了解整個系統(tǒng)的設計,包括整個讀/寫流程、如何保證很強的一致性、次要/主要壓縮起到作用、LRU 緩存和 Bloom Filter 的作用等等。你甚至可以將 HBase 和 Cassandra 進行比較,看看它們設計上的相似點和不同之處。面試時如果要求你設計一個分布式的鍵值存儲,你就不會覺得太突然。
許多博客也能提供很多知識,比如 Hacker Noon、一些公司的工程博客以及開源項目的官方文檔。
最重要的是要保持好奇心和謙虛。像海綿一樣吸收知識的養(yǎng)分。
機器學習
機器學習面試可以分為理論和產(chǎn)品設計兩個方面。
除非你有機器學習研究經(jīng)驗或者機器學習課程學得很好,那么閱讀一些教科書是很有幫助的。經(jīng)典教材如《The Elements of Statistical Learning》和《Pattern Recognition and Machine Learning》都很有幫助,如果你對特定領(lǐng)域感興趣,你可以閱讀更多相關(guān)內(nèi)容。
確保你理解如偏差/方差權(quán)衡、過度擬合、梯度下降,L1/L2 正則化、貝葉斯定理、協(xié)同過濾、降維等基本概念。熟悉常用公式與模型推導,如貝葉斯定理,如邏輯回歸和支持向量機。嘗試實現(xiàn)簡單的模型,如決策樹和 K 均值聚類。如果你在簡歷上提到一些模型,確保你對其完全理解并能評價其優(yōu)缺點。
對于機器學習產(chǎn)品設計,要了解構(gòu)建機器學習產(chǎn)品的一般過程。我是這樣做的:
找出目標是什么:預測、推薦、聚類、搜索等。
選擇正確的算法:監(jiān)督與無監(jiān)督、分類與回歸、廣義線性模型/決策樹/神經(jīng)網(wǎng)絡等。為做出的選擇給出原因。
根據(jù)可用數(shù)據(jù)選擇/設計相關(guān)功能。
選擇模型性能指標。
可以考慮如何為生產(chǎn)優(yōu)化模型。
我想再次強調(diào)保持好奇心和持續(xù)學習的重要性。不要僅僅用 Spark MLlib 或者 XGBoost 簡單地調(diào)用 API 訓練出一個模型,我更推薦去研究為什么 Stochastic gradient descent 適合分布式訓練,又或者了解 XGBoost 和通常的 GBDT 有什么區(qū)別,包括對 Loss Function 的定義有何特別之處,為什么用到二階導等等。
面試過程
最開始我在 LinkedIn 上回復 HR 的留言,并請其給我推薦職位。在某家明星創(chuàng)業(yè)公司求職失敗后(我稍后會談到),我努力準備了好幾個月,在 HR 的幫助下,我在灣區(qū)安排了整整一周的現(xiàn)場面試。我周日抵達灣區(qū),在世界上最好的幾家科技公司五天面試了大約三十位面試官,很幸運地,得到了這五家的工作機會。
電話面試
所有電話面試都是標準的。唯一的區(qū)別是面試時間:LinkedIn 面試 1 小時,而 Facebook 和 Airbnb 則是 45 分鐘。
熟練程度是電話面試的關(guān)鍵,因為時間有限,通常你只有一次機會。你必須很快判斷出問題類型,并給出一個宏觀解決方案。一定要和面試官溝通你的思路,說明你的意圖。這可能一開始會讓你速度慢一點,但溝通比任何事情都重要,會對面試有很大幫助。不要死背答案,因為面試官肯定會一眼看穿。
對于機器學習的職位,一些公司會問機器學習相關(guān)問題,因此面試前溫習鞏固一下機器學習方面的知識與技能。
為了更好地利用我的時間,我在同一個下午約了三個電話面試,每個之間間隔1小時休息。這樣的做法不一定適合所有人,好處是可以趁熱打鐵狀態(tài)好,壞處是如果一個沒面好,后面的面試可能會受到影響。
同時面多家公司的一個好處是有時候能夠省去某些環(huán)節(jié)。有些硅谷公司規(guī)定對于灣區(qū)以外的面試人要進行兩輪電話面試。我之所以能夠省去 Airbnb 和 Salesforce 第二輪電話面試,是因為對方得知我一輪電話面試就拿到了 LinkedIn 和 Facebook 現(xiàn)場面試的機會。
更令人吃驚的是,Google 甚至沒電話面試就請我參加現(xiàn)場面試,這也是因為對方得知我下周要來灣區(qū)參加四個現(xiàn)場面試。我知道這會讓我很累,但是,沒有人會拒絕 Google 的現(xiàn)場面試邀請!
現(xiàn)場面試
五家公司雖然都是 IT 公司,但處于不同的領(lǐng)域,文化上也各有千秋。我簡單說一說自己對它們的感覺。另外雖然不算是吃貨,但作為民以食為天的中國人,自然也要對午飯進行一下評價。
這是我第一個現(xiàn)場面試,我在 LinkedIn 的 Sunnyvale 辦公室。作為專注于職場社交的公司,LinkedIn 的特點是端莊、大氣、職業(yè)化,內(nèi)部文化也相應地非常專業(yè)。員工的穿著都是商務休閑裝,整體給人一種職場精英的感覺,與他們的宗旨非常契合。
面試方面,編程和機器學習各 1 小時。編程面試都是標準問題,但機器學習面試可能會有些困難。盡管如此,我之前收到 HR 的電子郵件,里面包含了非常有用的準備材料,因此面試中沒有太出乎意料的事情。我聽說 LinkedIn 有硅谷最好的食堂,從我的實際體驗來看,這差不多是真的。
LinkedIn 被微軟收購以后少了經(jīng)濟壓力,使其可以放開手做非常酷的事情。LinkedIn 新添加的視頻和專業(yè)廣告等功能令人興奮。作為一家專注于職業(yè)發(fā)展的公司,LinkedIn 優(yōu)先考慮其員工的職業(yè)成長。目前包括 ads relevance、feed ranking 在內(nèi)很多組都在招人,所以如果你想加入,那就趕快行動。
Salesforce Einstein
Einstein 是 Salesforce 近幾年主推的明星產(chǎn)品,擁有一個明星團隊。這個團隊非常新,感覺非常像初創(chuàng)公司。團隊主要是使用 Scala,Tech stack 都是 Akka/Play/Spark 那一套,這也是最吸引我的一點。我最初接觸到 Einstein 是在 2017 年 4 月的 ScalaDays 上聽了 Matthew 以《Type safety in machine learning》為題的演講,之后又在 Spark Summit West 上聽了 Leah 的演講。喜歡 Scala 的人一定不要錯過。
面試地點是 Salesforce 位于 Palo Alto 的辦公室。這個團隊很有凝聚力,能保證工作生活平衡。每個人都熱愛并真正享受自己做的東西。與其他現(xiàn)現(xiàn)場面試相比,四場 session 總共時間略短,總體側(cè)重于 Data engineering 和 System design。另外需要注意的是,coding 也是要上機跑的。面試后,Matthew 甚至帶我參觀了惠普的車庫。
當今業(yè)界領(lǐng)頭人,沒有什么可說的。最重要的印象就是大,非常非常大。去見我 Google 的朋友的時候騎自行車騎了 20 分鐘。中午吃飯排隊人很多。
我在 Mountain View 的許多樓里的一幢進行面試。我不知道具體是哪一幢,因為 Google 真的非常大。
面試官看起來都很年輕,他們一說話就顯得很聰明。和他們一起工作一定是非常愉快的。
值得注意的是 Google 特別強調(diào)算法的復雜度,確保你真的明白時間和空間復雜度,能夠針對瓶頸進行優(yōu)化!這一點與別的公司不同。
Airbnb
快速擴張的 Unicorn 公司,擁有非常獨特的公司文化以及可能是硅谷最美麗的辦公室。推出了新產(chǎn)品包括“體驗”以及餐館預訂服務、在高端小眾市場進行嘗試、以及進入中國市場,這些都為 Airbnb 的前景增添了積極因素。如果可以承受高風險,并希望獲得快速增長的 pre-IPO 經(jīng)驗,那么 Airbnb 是完美的選擇。
Airbnb 的 coding 面試有點獨特,要求上機,并且每個 Session 只有 45 分鐘時間,某些題目的難度也相當大,所以壓力還是不小的。
Airbnb 獨樹一幟的跨職能面試,這也是我最享受的,我和面試官輕松交流。Airbnb 認真對待公司文化,技術(shù)上優(yōu)秀并不能保證拿到 Offer。
總的來說,我認為 Airbnb 的現(xiàn)場面試流程最長,環(huán)節(jié)最多,題目很難,總體感覺最累。如果你有興趣,一定要了解他們的文化和核心價值觀。
另一個仍在高速發(fā)展的巨人,與 Google 相比規(guī)模更小,速度更快。在社交網(wǎng)絡市場鋪開了全面產(chǎn)品線,處于壟斷地位,以及在 AI 和 VR 方面的大量投資,未來 Facebook 只有更多的增長潛力。有像 Yann LeCun 和 Yangqing Jia 這樣的明星,如果你對機器學習感興趣的話,這是一個完美的地方。
我的面試是在樓頂有花園的海景房 Building 20,也是扎克伯格辦公的地方。
Facebook 的整個面試過程我自己感覺是最不好的,一方面是因為已經(jīng)是第五場面試,整個人已經(jīng)很疲勞了,另外可能是 Facebook 的規(guī)定,面試官都沒有對我的答案給出特別明顯的好與不好的信號,雖然我覺得自己的答案沒有錯,但也稍微有些拿不準自己的表現(xiàn)。
兩場 Coding 還算是正常,兩道題都在面試官的提醒下總共給出了兩種解法,有一場還問了兩道題。下午我已經(jīng)感覺自己生病了,頭疼得厲害,最后硬撐著完成了面試,出來以后感覺不太好,沒想到最后竟然也拿到 Offer 了。
總體來說,我覺得 Facebook 的工作人員堅信其公司愿景,并為他們正在建設的東西感到自豪。作為一個擁有 5 萬億市值還在不斷成長的公司,F(xiàn)acebook 是你職業(yè)發(fā)展的絕佳地點。
工資談判
很多人覺得自己不擅長談判,或者很多時候不好意思開口。我個人覺得求職實際上是在出售自己的時間,而時間對于一個人來說是唯一不可再生的資源,如果你自己都覺得你的時間不值錢,那么別人也不會覺得它值錢。
這是一個很大的話題,這里我不打算深入討論,但我發(fā)現(xiàn)這篇文章非常有幫助。
有幾點我覺得值得注意:
保持職業(yè)風度。
了解你的籌碼。
顯示出你對團隊和項目的興趣。
保持耐心和信心。
態(tài)度堅定,但要有禮貌。
絕對不要撒謊。
我在 Databricks 失敗的面試
所有的成功始于失敗,包括面試。在我開始面試這五家公司之前,我五月份在 Databricks 的面試失敗了。
早在四月,當時是 Spark MLlib 組的經(jīng)理 Xiangrui 在 LinkedIn 上聯(lián)系我,詢問我是否對 Spark MLlib 團隊中的某個職位感興趣。我當時受寵若驚,認為這是一個絕佳的機會。
我使用 Spark 工作,很喜歡 Scala;
Databricks 的工程師實力是一流的;
Spark 正在給整個大數(shù)據(jù)世界帶來變革。
這是一個我不能錯過的機會,于是簡單地準備了兩天就開始了面試流程。
Databricks 的水平要求非常高,整個過程相當長,包括一個初篩問卷、一個電話面試、一道 coding 大作業(yè)以及最后的現(xiàn)場面試。
我獲得了現(xiàn)場面試邀請,并參觀了位于舊金山市區(qū)的辦公室,可以看到海灣。
我的面試官非常聰明但同樣謙遜。在面試中,我經(jīng)常感到自己被 push 到了極限。下午有一輪是針對機器學習算法理論,一方面自己實力不足,另一方面準備不夠充分,整個環(huán)節(jié)是一場災難。最后和 Xiangrui 簡單聊了聊。
幾天后我收到了拒信,這是預料之中的,但我還是郁悶了好幾天。雖然沒有機會在 Databricks 工作,但我相信他們可以繼續(xù)創(chuàng)造出更大的影響和成就。
后記
生命短暫,職業(yè)生涯更短。在正確的時間做出正確的舉動。
集中面試很累,但也會給你很大優(yōu)勢。
面試不僅僅是個找工作的過程,更是個交朋友的機會。硅谷圈子就那么大。
平時有機會也要多交朋友,比如開會就是個很棒的機會。Databricks、Salesforce、Airbnb的面試機會都源于我去過的Spark Summit和Scala Days。
拿到 Offer 僅僅代表你達到了公司的最低標準。最高標準沒有上線,所以要保持持續(xù)進步。
從五月的第一次面試到九月底的最后一次面試,我完成了職業(yè)生涯的第一次跳槽,期間過程漫長且不易。
準備過程還是很辛苦的,因為我還要繼續(xù)本職工作。有一段時間每天晚上都是準備到凌晨一點才睡,第二天早上八點半起床全身心投入工作。
五天面試五家公司也是高度緊張有高度風險,除非你時間很緊,否則我不建議這樣做。但如果你拿到幾個 Offer 會在談工資時有很大優(yōu)勢。
最后,感謝在這個過程中所有幫助過我給過我建議的朋友。感謝所有給我面試機會和 Offer 的公司,跟我一直聯(lián)系的 HR,以及每個抽出寶貴時間和我聊天的人。也感謝一直默默支持我的家人們——看著我一步步成長的父母,為我所做的一切的我親愛的妻子、和每天都給我暖心笑容的女兒。
-
Google
+關(guān)注
關(guān)注
5文章
1758瀏覽量
57418 -
Facebook
+關(guān)注
關(guān)注
3文章
1429瀏覽量
54658
原文標題:硬件入門之電路設計基礎
文章出處:【微信號:rfsister,微信公眾號:RFsister創(chuàng)客射頻空間】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論