天天看點

領英、臉書面試以及onsite小記(北美)

最近兩個月忙于找工作,投了不少履歷,比較牛逼的公司裡面就領英和臉書理我了,都是同學朋友内推的功勞。沒想到自己也比較争氣,一路殺到了最後一輪,拿到了兩家的offer。

先上一下小弟超菜的背景:

非CS科班出身,網絡相關專業,國内大學,北美碩士加一年零幾個月的工作經驗,工作之前沒有什麼大型開源項目經驗,學校課程項目也就隻有屈指可數的一兩個拿的出手。從我之前的部落格其實也可以看出來,工作中主要是用Python開發Openstack Neutron的插件。C++,JAVA和Python幾乎全靠自學(從大學開始),去Coursera上過一個Algorithm的線上課程,看過幾本算法書,仔細看過www.cplusplus.com上的tutorial,刷了三四遍Leetcode,看過CC150。除此之外,偶爾泡泡highscalibility.com看一些系統架構的文章,還在onsite之前抱抱佛腳,狂看了一些臉書的系統設計面試題。

面試過程:

領英和臉書的面試流程都是一樣的,一輪電話面試,通過之後就是一輪onsite。由于我現在的工作也是在矽谷,是以我要求把電話面試改成了面對面的面試。這個到底好不好也是智者見智。好處是當面交流比較友善,尤其是像我這樣的母語非英語的同學,講電話容易聽不清和緊張。壞處是coding會要寫白闆,自然比在電腦上敲代碼要慢很多,更容易出錯。不過想到onsite的時候都是寫白闆,是以其實也不算太壞,就當提前體驗了嘛。

第一輪:

兩家的第一輪都是一個小時長度的面試。領英先花一半的時間問了些基礎知識和項目相關的問題,最後半小時寫了一個coding問題,類似于LRU Cache, Random Queue 之類的題目。需要定義資料結構和實作一些取和放的方法。

臉書的第一輪非常簡單暴力,除了稍微聊了一會兒我的經曆,直接就是兩個coding題目。第一題比較簡單,屬于LC上面最簡單的一類題目。第二題比較難,但是出現頻率在臉書的面試中還是比較高的,可惜我之前沒有看到。。。要求是用一個每次讀4KB内容的方法定義一個類,并在其中實作一個可以讀任意長度内容的方法,比如讀1個位元組,或者讀1個GB的位元組等。需要讀取的長度是第二個方法的輸入參數。

領英的第一輪是在一個周五進行的,在膽戰心驚的度過一個周末後的周一就收到好消息,可以進入onsite輪啦。臉書的第一輪也是在一個周五,在又一次膽戰心驚的度過一個周末之後的周三,收到消息說可以進入下一輪了。于是我再一次非常勇敢地把兩家的onsite安排在了相鄰的兩周的周五。

onsite:

領英的onsite不得不說是非常的變态啊,早上9點半開始一直到晚上5點半才出來,除了中午吃飯一小時,就一直老老實實地呆在同一間小房間裡被各種人蹂躏。當然,吃飯的那一個小時也沒閑着,有一個比較友善的人一直問我一些相對這一天的問題來說非常“友善”的問題。。。onsite的每一輪都是一個小時,每一輪都有兩個人來面,一輪完了馬上就是下一輪,可以溜出去上個廁所作唯一的休息。。。是以除開吃飯輪一共是六輪面試,三輪系統設計,兩輪coding,一輪行為問題,直接把人往死裡輪的節奏。

第一輪一上來是行為問題,把我履歷上的邊邊角角都問的非常仔細,包括我為什麼做,怎麼做,如果再來一次會怎麼改進,将來有什麼計劃,甚至還來了一個場景題。。。這在以技術見長的公司裡面還是比較少見的

第二輪是一個系統設計,上來先問了三個跟圖有關的關聯度問題的解法,比如如何判斷兩個人是不是同一個人的好友之類的。然後問複雜度,然後改進,一直改進到兩位面試官們滿意,這是已經過去好久了。接着又問如何擴充到多個機器,如何劃分這個圖的資訊,等等。亂答之,完全是混過去。事後得知面試官也覺得我這部分答得不太好,但是一開始的解題還是可以的。基于我的經驗不夠,這樣的表現還算是可以諒解。

第三輪吃飯,略。

第四輪coding,LC的原題兩題,秒殺咯,到此終于略微舒了一口氣,也為下一輪被虐到渣也不剩埋下了伏筆。。。寫完之後有稍微讨論了一下複雜度和擴充到多個機器就放我過了。

第五輪系統設計,跟記憶體有關的一個設計。。。記憶體。。。不可以用已有的任何STL容器,因為這些容器需要配置設定多少記憶體空間是不太确定的,而且配置設定的記憶體位址也很可能不連續,是以要自己設計一個用且隻用給定大小記憶體的資訊讀寫系統。。。當然,記憶體的聲明,使用,回收,尋址都要自己來設計啦。。。一上來毫無頭緒,面試官大人也不屑于給我提點,隻能擠牙膏一般這邊擠一點,那邊擠一點,順便觀察人家臉色,看到對路就繼續往下猜,居然最後也七七八八混了個大概樣子出來,不過卡在了尋址那裡。面試官大人高擡貴手放我一馬,接着問了問同步和鎖的問題就算結束了。這裡必須感謝國人面試官大哥,雖然我回答的不咋滴,但是他盡量挑我的閃光點說,還是給了一個積極的評價。

第六輪coding,LC的原題兩題,繼續秒之,找了一點自信回來。

第七輪系統設計,兩個面試官裡面有一個好像以前是谷歌的大牛,是以一上來就是讨論TCP的滑動視窗。我搜腸刮肚把以前還給老師的知識都一一搶回來才勉強通過,接着有讨論如何用這個滑動視窗實作可靠的多點傳播,最後還問怎麼用這玩意兒實作事務一緻性。。。又被玩殘了。。。

七輪結束之後,我咬着牙用毅力把自己殘破的身心拖回了車裡,修整了好一會兒才終于攢足了開回家的力氣。。。

一周之後的周五我又準時來到了臉書的onsite戰場。臉書相比領英好了不少,才四輪45分鐘的面試。兩輪coding,一輪系統設計,一輪行為問題加簡單coding。

第一輪,系統設計,不過這次的設計比較簡單,是一個網站系統的設計,講講基礎架構,搞搞分表,哈希,索引,負載均衡啥的關鍵字忽悠,然後過一過大緻工作流程就算過關啦。還稍微比較了正索引和逆索引的優劣。

第二輪,coding,與LC的原題很類似的一題,不幸的是我想偏了,其實挺簡單的,結果花了好長時間,不過最終還是搞出來了。算複雜度也是算不出來,在一頓提醒之後終于是搞了出來。唉,不是科班出身理論方面就是比較弱啊。。。

中間和HR吃飯,略。

第三輪,行為問題,和領英差不多,為啥來臉書,為啥要離開原公司,之前幹了啥,有啥比較自豪的項目,等等。最後來了一個coding,實在比較簡單,略過。

第四輪,coding,LC的原題兩題,外加一個引申題,算是三題,繼續秒之。稍微問了下複雜度。

四輪之後,我就神清氣爽的回家了。被領英暴虐之後果然被虐能力有了極大的提高,心理素質也好了不少。哦,還有一個因素就是在去臉書onsite之前的一天,領英的HR正好告訴我面試結果比較積極,很有希望拿offer,是以去臉書面試的時候就更加放松了,嘿嘿。

面試小節:

面試心得這個東西每個人都不一樣,要說到底是什麼因素使一個人能夠拿到offer,我覺得也是沒有一定答案的。但是其中非常重要的一點肯定是要讓面試官爽啊。到不一定是為了讓他給自己寫個好評啥的,而是畢竟面試官找的是一個将來可能的同僚,就算這個被面試的人超級牛逼,但是說話啊動作啊什麼的讓人很不爽,那面試官也肯定非常不希望和這樣的人做同僚,對吧?接下來我個人覺得很重要的一點就是基本功了,有時也被稱之為感覺或者直覺。在面試的時候通常人都會比較緊張,一緊張就容易出錯,平時想得到的東西也會忘記,這個時候基本功紮實就會比較占便宜,跟着感覺走,慢慢可能正确的思路就來了。基本功的還有另一個方面就是寫幹淨正确的代碼。雖然我的理論基本功不是很紮實,還好通過不斷地練習,coding的基本功還可以,寫出來的代碼bug比較少,也比較整潔,我覺得這一點也是很關鍵的。最後就是自信了,哪怕被虐成渣,也要有自信,要抱着“不是爺不行,隻是爺在這一塊領域不太懂,給爺一些時間,說不定比你還厲害呢”的阿Q精神,千萬不能慫了。

大緻就是這樣了。最後我還是選擇了去領英,一來做的東西聽上去更NB,二來感覺公司潛力更大,三來給的薪水也多了不少。至于薪水方面,由于我之前是傳統軟體行業,而領英屬于是網際網路企業,工資标準提高了不少,算上股票獎金啥的,這一跳幾乎漲了70%,真是樂開了花兒。等我去領英正式入職之後再來向大家報告在領英工作是什麼樣的體驗。