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