導語:2017年7月24號到28號,我連續(xù)五天面試了五家公司:LinkedIn、Salesforce、Google、Airbnb、Facebook,最終拿到了五個Offer。
文/ 寒笑風聲LordCL
編輯/ 小陰
來源/ 簡書 https://www.jianshu.com/u/52f0ccd3312d
能有這樣的結果確實非常地幸運,付出的諸多努力也算有了回報,同時這段時間也是一段相當寶貴、刺激程度勝過高考的經歷,所以寫了這篇帖子作為總結和紀念。
五家公司各有特色,都是我非常喜歡的。我會回顧一下準備面試的過程以及一些個人經驗,談談對五家公司的印象,最后說一些整個換工作流程中我覺得值得注意的地方。因為我并非計算機專業(yè)出身,工作時間也很短,知識和經驗都非常有限,所以這里寫的內容僅供大家參考。
起因
時間是2017年,我已經在Groupon芝加哥總部工作了將近三年,項目很有意思,團隊也非常給力。按道理說我本應該衣食無憂地繼續(xù)下去,工作輕松,生活自在。但是我卻覺得不滿足,畢竟年紀輕輕就耽于安樂不是一件好事。我感覺日常工作越來越熟練的同時,每天學習的速度卻在減慢,內心也開始希望迎接新的挑戰(zhàn)。同時作為一名在芝加哥住了八年的碼工,也總想著去硅谷折騰折騰。
于是我和老婆說了我的想法,在得到她的大力支持后,我開始準備換工作。首先是經歷了一場失敗的面試,遺憾地錯過了一個明星Startup,激發(fā)了我的動力,也讓我認識到自己的不足。然后我重整旗鼓,挑選了幾家喜歡的公司,回復了LinkedIn上面HR發(fā)來的幾封郵件,又拜托以前會議上認識的朋友幫我內推,同時開始認真準備面試。
準備
我申請的都是機器學習相關的職位,但五家公司的具體頭銜和面試流程略有不同。有三家公司(G,L,F(xiàn))的職位是Software Engineer in Machine Learning,Salesforce的職位是Data Engineer,Airbnb是general的Software Engineer,因此Algorithms & Coding,Machine Learning,System Design這三塊我都需要準備。
因為白天還有全職工作,所以只能晚上和周末抽出一些時間準備面試,加上需要準備的東西又多,前后總共大概花了兩三個月時間。以下簡單說說我的方法。
Algorithms & Coding
這一塊其實是最好也最難準備的。一方面有許多的網站提供了大量的題目可以練習,另一方面也需要投入大量時間精力。我先是花幾周復習了常見的算法和數(shù)據結構,然后有針對性地練習了一些不太熟練的方面,最后又練習了一些高頻題目。這里有幾點想法,其實也是老生常談了,就算多給大家提供一個數(shù)據點吧。
1、不能盲目追求數(shù)量,而是要理解做過的每一道題目。
有的帖子會告訴你“一定要把LC刷三遍以上”之類的,我的感覺是這不太現(xiàn)實。目前LC上面有600多道題,在全職工作的情況下要全部做完我可能要做個一年。我最后做了將近80道,個人感覺是完全夠用了。我的想法是如果做完80道還沒有效果的話,那么做800道可能依然沒有效果:) 當然前提是這80道還是要面面俱到的,常見類型都要覆蓋到。
2、按照題目類型,逐個類別準備,每個類別要到最高難度。
像LeetCode這樣的網站上都有Tag,可以分類進行練習,比如dynamic programming,recursion,graph等等。一般來說每種類型的題寫兩三道之后就差不多完全熟練了,如果沒有的話,那么可以思考一下自己是不是真正理解了之前做過的題目。同時要做每個類型中最難的題目,不要被Hard的標簽嚇到。這個是理所應當,做過最難的題,簡單一些的當然能迎刃而解。
3、什么時候看答案:一道題卡了兩個小時以上,以及做出來一道題之后。
如果一道題卡了兩個小時以上,我的做法是直接看答案。很多時候做不出來就是做不出來,花再多時間也沒用,或者不劃算。用心理解別人的做法而不是和一道題死磕能夠省去很多時間。即使做出來的題,建議也看看高票答案。有的時候很多答案會讓你嘆為觀止。我就很佩服那些一行Python代碼解決問題的人,雖然有時依賴語言的某個特性,但實在是很精妙。
4、用自己最熟練、最通用的語言。
畢竟Coding面屬于應試,用最得心應手、最流行的語言可以提高效率,面試的時候也有助于和面試官進行溝通。如果用略小眾的語言(Clojure,Rust,etc.),雖然可以體現(xiàn)你技能的多樣性,但有時候面試環(huán)境不一定支持,和面試官解釋思路的時候在算法的上面可能還要額外解釋一層語法,不如保險一點用Java或者Python。另外不得不說Python和Ruby這樣的動態(tài)類型語言在面試的時候打起來實在是很快很方便,換做是Java容器類型的type parameter還要額外寫一遍,有時候效率會打點折扣。
System Design
這一塊只要是有工作經驗的就會被著重問到。 如果你有不少系統(tǒng)設計的經驗,那么花的時間可以相對少一些。雖然是很看經驗,但也還是可以準備的,網上也有很多的經驗貼和練習題。
個人感覺這一塊問的問題很雜,范圍很廣,主要考察綜合素質。常見的范圍包括architecture,object oriented design,database schema design,distributed system,scalability等等。因為我主要面試的職位是機器學習相關的,所以這次面試遇到的session少一些(主要是Airbnb)。
一些大的原則是:
1、先明白需求,然后考慮大框架,最后是具體設計。
2、沒有完美的設計,要懂得如何做出取舍(trade-off)。
這里想說的是平時里的積累在系統(tǒng)設計里其實很能體現(xiàn)出來。舉個例子,要是工作中用到HBase,有的人可能就只是簡單的用一下Client跑一些DDL,做一些Get,但是有的人可能就會深入一些了解整個系統(tǒng)的設計,包括Zookeeper起到什么作用,整個讀/寫流程是怎樣的,如何保證strong consistency,minor / major compaction都會做什么工作,LRU Cache和Bloom Filter的作用,等等。如果經驗更多一些,還可以把HBase和Cassandra進行比較,看看二者的設計有什么異同,Consistency和Availability各自如何取舍,Master-Slave和Master-Master相比有何優(yōu)劣。所以工作中遇到的問題、使用的工具最好多花一些時間思考和了解,平時多積累,保持虛心和對知識的渴望。
Machine Learning
機器學習這塊大致能分為兩種,一個是Theory,一個是Product/System Design。
理論部分就要靠基礎和平時積累了。除非從事過機器學習方面的研究,多看幾本教材肯定是有必要的。經典教材比如The Elementsof Statistical Learning和Pattern Recognition and Machine Learning都會很有幫助。有興趣的話Deep Learning,Probabilistic Graphical Models都是不錯的書籍。
基礎概念例如bias-variance trade-off、overfitting、gradient descent,L1/L2 regularization,Bayes Theorem,bagging/boosting,collaborative filtering,dimension reduction等等都要有所了解。簡單的公式要寫得出來,比如常見的模型例如Logistic regression,SVM最好要會loss function的推導。簡單的算法例如decision tree和K-means最好自己實現(xiàn)一下。
另外就是自己用過的模型一定要深入了解,不僅僅限于調用API,最好能夠從理論角度評價優(yōu)缺點。
機器學習產品和系統(tǒng)設計方面的話,總的來說比較依賴經驗和直覺。我自己本來不做建模和產品設計,但是有段時間維護幾個比較重要的模型,也算是有些膚淺的了解。
一些基本的設計流程需要了解。比如讓你設計一個機器學習系統(tǒng),首先要明確目標是什么(預測/推薦/搜索),其次是具體算法的選擇(有監(jiān)督/無監(jiān)督,分類/回歸,線性模型/決策樹/神經網絡), 然后是針對現(xiàn)有的數(shù)據如何進行特征工程選取特征,最后是如何評價模型的質量。之后還會有一些針對工程方面的優(yōu)化,比如實時的機器學習系統(tǒng)如果要滿足SLA,模型應該做些什么樣的調整。
這里再強調一次持續(xù)學習的重要性,好奇心和虛心還是很重要的。比如有的人用Spark MLlib或者XGBoost就只是簡單地調用API訓練出一個模型,但有的人就會研究為什么Stochasticgradient descent適合分布式訓練,又或者了解XGBoost和通常的GBDT有什么區(qū)別,包括對Loss Function的定義有何特別之處,為什么用到二階導,等等。
流程
電面
在集中精力準備了大約兩三周之后,我開始了整個面試流程的第一步,電面。
電面沒什么好說的,都是標準化的過程,區(qū)別是有的公司(比如LinkedIn)有一個小時,有的(Facebook,Airbnb)只有45分鐘。
因為時間緊迫,而且通常只有一次機會,所以熟練度最重要。題目類型一定要馬上識別出來并且給出思路,寫代碼的過程可以慢一點,但要和面試官說明你的意圖。如果是背答案只有死路一條,稍微問個Follow up就掛了。
另外針對機器學習的職位,有的公司會問一些基本概念,所以也不能只準備coding。
我為了提高效率,把三個電面安排在了同一天下午,每個之間隔一個小時休息。這樣的做法不一定適合所有人,好處是可以趁熱打鐵,壞處是很累而且風險很大,萬一頭沒開好后面可能會受影響。
這里想說的是集中面試雖然很累,但也會給你很多優(yōu)勢,比如有的時候能夠省去某些環(huán)節(jié)。有些硅谷的公司有一個規(guī)定,對于灣區(qū)以外的面試人要進行兩輪電面。LinkedIn和Facebook我都是一輪電面后拿到了onsite,于是我就跟Airbnb和Salesforce的HR申請能不能免掉第二輪的電面,結果兩家公司都非常爽快地同意了。
而Google作為一家大公司就更加讓我驚喜了。當時我本來已經安排了除開周三的四天面試,本來準備留出周三休息一天。沒想到就在前一周我接到一個陌生來電,沒想到是Google的HR,問我對Google有沒有興趣。我自然是受寵若驚,表示非常有興趣但下周沒有時間,問他們能否推遲到別的公司onsite之后,HR說沒問題。過了幾個小時,我又接到他們的電話,說決定讓我跳過電面,直接進行onsite,并且可以給我安排到周三。雖然預計到這樣會很累(事后證明確實如此),可這是天上掉下來的大餡餅,我沒有理由放棄,所以很高興地答應了。
Onsite & 公司印象
五家公司雖然都是互聯(lián)網/IT公司,但處于不同的領域,文化上也各有千秋。我簡單說一說自己對它們的感覺。另外雖然不算是吃貨,但作為民以食為天的中國人,自然也要對午飯進行一下評價。
我三年前去過Mountain Views的總部,這次面試我去的是Sunnyvale的辦公室,比MV要新一些。作為專注于職場社交的公司,L家的特點是端莊、大氣、職業(yè)化,內部文化也相應地非常Professional。員工的穿著都是Business casual,整體給人一種職場精英的感覺,與他們的Mission非常契合。
LinkedIn被微軟收購以后少了經濟壓力,并且保持基本完全獨立的運營,可以把重心放到更長遠的目標上,同時能夠與M家大量的資源進行整合,個人認為對L是件好事。
作為一家專注于職業(yè)發(fā)展的公司,LinkedIn自然也把自身員工的成長放在首要位置。目前包括ads relevance、feed ranking、people you may know在內的許多組都在招人,感興趣的同學可以盡快行動。
面試方面,每個Session是一個小時。Coding題目正常,不過ML方面難度不低,大家要做好足夠的準備。但其實onsite之前HR會發(fā)一封郵件,非常詳細地告訴你需要準備哪些內容:)
面試官們都很親切,有時候會給一些適當?shù)闹敢?,總的來說面試過程還是相當開心的。面完了我還驚喜地發(fā)現(xiàn)面試官中有一位本科的師兄。
L家的食堂還是一如既往地給力,中餐、西餐、印度餐菜系齊全,菜樣豐富,還搭配有很多水果、沙拉。吃完了午餐坐在Sunnyvale明媚的午后陽光中思考思考晚餐該吃什么,想來應該是一件幸福的事。
Salesforce Einstein
Einstein是Salesforce近幾年主推的明星產品,擁有一個明星團隊,擁有像RichardSocher這樣的優(yōu)秀研究員。從我了解到的情況看,由于Benioff對于團隊充分放權,Einstein團隊就像是公司內部的一個startup,文化也與公司別的部門不同。Einstein未來幾年肯定是整個公司主推的產品,Salesforce擁有的海量數(shù)據加上公司推進AI平臺的決心,可以說是前途光明。
團隊主要使用Scala,Tech stack都是Akka/Play/Spark那一套,這也是最吸引我的一點。我最初接觸到Einstein就是在17年4月的ScalaDays上聽了Matthew以Type safety in machine learning為題的演講,之后又在Spark Summit West上聽了Leah的演講。喜歡Scala的人一定不要錯過。
面試地點是在Salesforce位于Palo Alto的辦公室,是一棟三層建筑的頂樓。面試整體流程比較短,總共只有四個Session,總體側重于Data engineering和System design。另外需要注意的是coding也是要上機跑的。面試我的人中有Prediction IO的創(chuàng)始人,也讓我很激動。
團隊氛圍很輕松,吃飯的時候就像是一大家子人,互相開玩笑,VP也會坐在一起和大家胡侃。我去的那天吃得非常不錯,具體什么菜記不清了,就記得擺了一大桌子,其中魚肉很好吃。
當今業(yè)界的領頭巨人,沒啥好說的。最重要的印象就是大,去見我同學的時候騎車還騎了二十分鐘。就我所了解到的,和Facebook相比,Google整體節(jié)奏要慢一些,會做一些比較長期的項目。如果你認為自己適合慢一點的工作節(jié)奏,那么Google會是個很棒的選擇。
面試是在許多樓里的其中一棟。感覺面試官貌似都比我年輕,總體來說題目沒有很難。Coding有一道題我沒有給出正確解,但面試小哥說接近了。機器學習的部分感覺和L家問的內容差不太多。值得注意的是Google特別強調算法的復雜度,一定要能夠清楚地分析出時間和空間復雜度,能夠針對瓶頸進行優(yōu)化,這一點與別的公司不同。
中午吃飯的時候人超多,排隊也排了好久,最后還跟帶我吃飯的伊朗大哥打了一會兒乒乓。
Airbnb
這個時間點上(2017年)當之無愧的明星公司。在Snapchat已經上市但股價低迷,Uber高層動蕩的今天,Airbnb算是Unicorn里的一枝獨秀,擁有非常獨特的公司文化以及可能是硅谷最漂亮的辦公室。由于實際上處于旅游產業(yè),所以Airbnb能夠比較順利地進入中國市場。在核心的短租業(yè)務于歐美市場初步實現(xiàn)盈利但趨于飽和的情況下,也在積極地向旅游房屋租賃的上下游進行拓展,推出了新產品“體驗”以及餐館預定服務,并在高端市場進行嘗試,這些都為Airbnb的前景增添了積極的因素。
與別的公司不同,Airbnb的coding面試要求上機,并且每個Session只有45分鐘時間,某些題目的難度也相當大,所以壓力還是不小的。System design環(huán)節(jié)還算正常,不過房間里的board很小,有點寫不開。而Airbnb獨樹一幟的cross functional面試我覺得是最享受的,基本上就在和面試官談人生談理想,全程都很放松。但Airbnb的面試流程最長,環(huán)節(jié)最多,總體感覺也是最累的。
印象中午餐選項沒有特別多,但是味道還不錯。帶我吃飯的法國小哥一聽我第二天要去Facebook面試,立刻非常興奮地告訴我他從Facebook來Airbnb的理由,并且很開心地帶我到樓里幾個著名景點轉了轉。
仍然在高速成長的巨人,在可能是硅谷最愛中國的CEO帶領下鋪展了全面的產品線,在社交網絡領域基本上處于壟斷地位,同時也在AI和VR等引領未來的領域積極投入,發(fā)展空間仍然非常廣闊。從我了解的信息看,F(xiàn)acebook注重開放的文化,同時工作節(jié)奏快。
我的面試是在樓頂有花園的海景房Building 20,也是扎克伯格辦公的地方,由于夏季水少其實看到的是一片鹽堿地。旁邊還有幾棟正在蓋的新樓,加上傳聞今年兩千多的名額,說明Facebook仍然處于擴張期。
Facebook的整個面試過程我自己感覺是最不好的,一方面是因為已經是第五場面試,整個人已經很疲勞了,另外可能是Facebook的規(guī)定,面試官都沒有對我的答案給出特別明顯的好與不好的信號,雖然我覺得自己的答案沒有錯,但也稍微有些拿不準自己的表現(xiàn)。
兩場Coding還算是正常,兩道題都在面試官的提醒下總共給出了兩種解法,有一場還問了兩道題。ML產品設計面到一半的時候已經感覺自己生病了,頭疼得厲害,最后硬撐著完成了面試。出來以后感覺不太好,以為沒戲了,沒想到最后竟然也拿到了Offer。
談工資
回來以后就陸陸續(xù)續(xù)地收到了幾家公司的Offer,雖然心里基本上有數(shù),但說實話聽到HR祝賀的時候還是非常開心的,畢竟付出那么多努力都有了回報。
然后就是流程最后的階段,工資談判。這個階段其實重要性不亞于面試,因為它直接決定了你未來幾年對工作和生活的滿意程度。
很多人覺得自己不擅長談判,或者很多時候不好意思開口。我個人覺得求職實際上是在出售自己的時間,而時間對于一個人來說是唯一不可再生的資源,如果你自己都覺得你的時間不值錢,那么別人也不會覺得它值錢。
工資談判是個很大的話題,這里我不打算深入討論,不過這篇帖子很有幫助:https://medium.freecodecamp.org/how-not-to-bomb-your-offer-negotiation-c46bb9bc7dea
有幾點我覺得值得注意:
1. 保持職業(yè)風度。
2. 了解你的籌碼。
3. 顯示出你對團隊和項目的興趣。
4. 保持耐心和信心。
5. 態(tài)度堅定的同時要溫和。
6. 絕對不要撒謊。
Databricks
也許五次面試拿到五個Offer是一個比較理想的結果,但這樣的結果其實始于一場失敗的面試。
早在五月份的時候,我就面試過Databricks,也是我換工作面試的第一家公司。當時是Spark MLlib組的經理Xiangrui在LinkedIn上聯(lián)系我,問我有沒有興趣面試他們組。我當時受寵若驚,覺得這是個絕佳的機會。第一,我自己用Spark工作,無論是Scala還是分布式機器學習算法都對我有很大吸引力。第二,Databricks的工程師實力都是業(yè)界頂級,如果有機會跟他們一起工作一定能學到很多東西。第三,Spark正在給整個業(yè)界帶來變革,處于浪潮的最前沿也是一件讓人非常興奮的事??紤]了幾天之后,我覺得這是個不可多得的機會,于是簡單地準備了兩天就開始了面試流程。
Databricks的水平要求相當高,整個過程包括兩道初篩題、一次電面、一道大作業(yè)以及最后的Onsite。我的感覺是僅僅是兩道初篩題難度就已經不低,應該說比其他大公司的面試更加嚴格。我前面的環(huán)節(jié)還比較順利,拿到了Onsite的機會。
Databricks目前位于三藩城內,依然是早期創(chuàng)業(yè)公司的規(guī)模,辦公室有兩層樓,其中一面可以看到海灣,風景非常不錯。
早晨和HR打過招呼后她就領我到了面試的房間。前面幾輪我感覺還算正常,題目難度算是中間偏上,面試官也都是非常的謙和。但是下午有一輪是針對機器學習算法理論,一方面自己實力不足,另一方面準備不夠充分,整個環(huán)節(jié)完全僵在那里,不知從何下手,當時就覺得自己應該拿不到Offer了。最后是和他們VP of Engineering簡單聊了聊。
回芝加哥之后幾天就收到了拒信,雖然也是預料之中的結果,不過還是郁悶了好幾天。雖然沒有機會到Databricks工作,但我相信以現(xiàn)在Spark在整個業(yè)界的影響力以及Databricks整個團隊的實力,他們一定能創(chuàng)造出更大的成功。
總結
1、人生很短,職業(yè)生涯更短。該跳的時候就要果斷跳。
2、 集中面試很累,但也會給你很大優(yōu)勢。
3、面試不僅僅是個找工作的過程,更是個交朋友的機會。硅谷圈子就那么大。
4、平時有機會也要多交朋友,比如開會就是個很棒的機會。Databricks、Salesforce、Airbnb的面試機會都源于我去過的Spark Summit和Scala Days。
5、拿到Offer僅僅代表你達到了公司的最低標準。最高標準肯定是沒有的,所以時刻保持虛心和進取心。
從五月初份面試第一家公司到九月末接受Offer,終于完成了職業(yè)生涯中第一次跳槽。回過頭看看,準備面試的過程還是很辛苦的,有一段時間每天晚上都是準備到一點才睡,第二天早晨又要100%投入地上班,確實對身心都是一種考驗。
最終能拿到這樣多的工作機會實在是很幸運,畢竟任何一家公司都是無數(shù)人的dream company。
感謝在這個過程中所有幫助過我給過我建議的朋友。感謝所有給我面試機會和Offer的公司,跟我一直聯(lián)系的HR,以及每個抽出寶貴時間和我聊天的人。
最后也是最重要的,感謝一直默默支持我的家人們——看著我一步步成長的父母,全職工作、努力帶娃、愿意放我一個人出去浪的妻子,還有,每天都給我暖心微笑的女兒。你們是我努力的動力。
— 完 —
聯(lián)系客服