加州求職記

lostinai發表於2014-03-04

原文來源於http://blog.liancheng.info/job-hunting-in-california/#.UswIcUb6Aud

一年多前,出於顯而易見的原因,下定決心肉身翻牆。經過一番考慮,放棄了讀書這條途徑,決定直接找工作,通過H1B簽證出去。於是去年八月份從百度辭職,開始著手準備。當時覺得今年拿到H1B的成功率大致能有個六七成,加上週圍朋友們的不斷鼓勵,可以說還是相當自信的。然而,時至今日,在歷經Google、Amazon、Facebook三家公司之後,這第一次嘗試卻可恥地失敗了……

戰績概覽:

  • Google:倉促應戰,HR電面一輪,技術電面一輪,北京onsite兩輪,慘敗;
  • Amazon:技術電面兩輪,在面試官反饋良好的情況下莫名掛掉,詳情見下;
  • Facebook:HR電面一輪,技術電面兩輪,Menlo Park總部onsite五輪,惜敗;
  • AeroFS:因為是startup,臨時告知無法提供H1B,於是告終。

個人背景參見這裡

失敗的原因,簡而言之就是兩個字——自大。在百度四年多,技術方面長進不少;雖然從未以做管理為目標,卻也陰差陽錯地幹了兩年管理,從零帶出了一支二十多人的研發隊伍,同樣獲益頗豐。再加上離職時恰逢耗時一年之久的首部譯作正式出版,自我感覺良好,信心爆棚。周圍的朋友和同事們聽說了我的計劃之後都鼓勵說“肯定可以”,於是我也就飄飄然地認為“肯定可以”了。這種自大心理使得我沒有儘早將目標公司的面試方式研究透徹,也未能及時採取最為有效的方法彌補自己客觀能力上的不足。

無論如何,這段經歷還是相當寶貴的:經歷了第一次英語面試、第一次辦簽證、第一次出國、第一次倒時差,還有第一次誤機…… 雖然求職失敗,但仍然獲益良多。本文便是對這次求職全過程的記錄,一方面警醒自己,一方面也為其他有類似打算的朋友們留一個參考。由於幾家公司的面試是交錯進行的,下文並沒有完全按照時間順序進行描述。此外,出於NDA協定等原因,本文不會透露具體的面試題。


 

面試準備

雖說去年八月份就已經正式離職,但實際上前幾個月都忙於其他事務,做了一些之前一直想做但是沒有時間做的業餘專案。期間雖然也不斷補習各種基礎知識,但一直不得要領,進度甚緩,效果堪憂。於是一直覺得沒有準備好,遲遲不敢真槍實彈地進行面試。真正進入狀態應該是十二月份以後了。面試準備當然少不了看面經,其中最有指導意義的幾篇分別是前同事Cat ChenGoogle微軟YahooFacebook系列面經和部落格園上的這篇拿了9個offer的傳奇面經。其中,後者給出的各種參考材料尤為有價值,我自己後期真正有效的面試準備基本上也是跟著這篇面經的框架來的。

演算法基礎

眾所周知,灣區的公司在面試時非常注重實際編碼能力,要求直接線上或在紙上、白板上寫程式碼,並且要求是可編譯的零bug程式碼,因此有ACM背景的應聘者會非常佔優。當然,不同公司在嚴格程度上也不盡相同,比如Amazon對無傷大雅的手誤或API細節記不清等情況相對寬容,Facebook次之,Google最嚴格。反觀國內的網際網路公司,雖然面試時也會問演算法問題(尤其是對應屆生),但一般不太會要求手寫達到可編譯執行質量的程式碼(要求寫偽碼的居多);同時考量的知識面也會更廣、更開放一些。一開始我覺得灣區的這種面試方法並不科學——畢竟實際工作中沒人會要求你在不借助偵錯程式等工具的情況下一次性編碼成功。而且,競賽類演算法題的程式碼和工業界的程式碼完全就是兩種套路(在工業界幹過幾年的前ACM選手們應該非常清楚)。但反過來一想,自己周圍能夠達到這個水準的,無一不是牛人。而且這個方法高度統一,易於判定,在大規模面試中更利於統一面試官的評判標準,從而達到嚴格把關面試質量的目的。總而言之,這種面試手段跟高考有點類似——它可能不是最為合理的選拔手段,但對於大公司來說,為了保證更大範圍內的公平性和質量,似乎也沒有更為合理的手段,因此就現階段而言它也就是最為合理的手段了。

就我個人而言,在校時頂多也就參加過ACM校賽;無論刷題速度還是數學和演算法基礎都遠遜於專業選手,純粹是玩兒票水準。工作六年多更是基本告別基礎演算法,頂多也就是算個時空複雜度,偶爾用一次微積分都會感慨萬千原來這玩意兒還真有用得上的時候。再者就是平時寫程式的習慣。經過嚴格訓練的ACM選手可以做到解題時從頭至尾一氣呵成,當年ZJU校隊神人們直接在提交框裡寫碼提交一次AC的傳說屢見不鮮。我平時自知是個粗心鬼,寫程式一定是先搭架子後填肉,邊填邊調;要是妄圖一次成功,那最後多半是錯得沒邊兒。所以,演算法基本功以及編碼不夠快、準、狠,就是我最大的弱項。

為了彌補這些不足,我最早採用的方式是啃Algorithms、The Algorithm Design Manual等大部頭。然而實踐證明這個方法收效甚微。當然不是書不好,而是心態問題。這些大部頭行文嚴謹,事無鉅細悉數記錄在案,最適合用作教材或是當作手冊日常翻閱。對於目標主要是查漏補缺的我來說,從頭到尾看一遍太慢,而且一不小心就陷入細節或是一些事後證明完全沒有必要鑽的難點;跳著看又不知道到底哪裡是自己缺漏之處,無的放矢。

要想搞清楚缺漏之處究竟在哪,最有效的辦法還是實際做題。做不出來的自然就是缺漏,重點補習;做得出來的則儘量爭取一次到位,追求程式設計速度。在這條路上先後嘗試了CareerCupZOJTopCoderLeetCode。四個站點的優缺點對比如下:

  • CareerCup

    作為全世界碼農應聘者交流面試經驗和真題的集散地,其優點自然就是真題豐富。缺點也很明顯:很多題目描述不嚴謹,邊界情況模糊;沒有OJ,自己的程式碼正確與否難以得到客觀準確的判斷;參考答案僅限於使用者貼出的程式碼和思考,而且CareerCup論壇的程式碼排版效果噁心得令人難以置信,你幾乎不可能貼出一份縮排正確的程式碼!

  • ZOJTopCoder

    ZOJ實在是太熟悉了,本科時閒來無事就在ZOJ上切題。TopCoder互動比較複雜,但流程基本上差不多。二者都是OJ,因此自己的程式碼正確與否、效率如何,都可以迅速判定。TopCoder相對於ZOJ的一個優點是可以檢索指定難度和類別的題目。缺點則是這二者都是競技平臺,當OJ判定程式碼錯誤時不會輸出額外的診斷資訊,一旦陷入難以想到的邊界情況就會花費大量時間。

    此外,就這次的經驗來看,ZOJ的題和TopCoder 500分以上的題在平均難度上比實際的面試題要高不少。與其在難題上耗費過多時間,多切一些簡單題提高寫程式碼的熟練程度可能更有幫助。

  • LeetCode

    LeetCode可以說是結合了CareerCup和ZOJ、TopCoder的優點:既有真題,又有OJ。而且當OJ判定程式碼錯誤時,會同時輸出對應的測試用例,大大方便了除錯。在面試準備的後期,我完全轉向了LeetCode,訓練效果顯著。對了,目前LeetCode後臺的C++編譯器已升級到g++ 4.7.2,支援大部分C++11特性(尚不支援lambda),寫起C++來舒心不少 :-) 就這次的經驗來看,實際面試題的難度跟LeetCode的平均難度相差無幾。缺點則是題量較少,目前僅有100多題,覆蓋面較窄(例如二叉樹的題有一大堆,而圖論題則幾乎沒有)。

這裡引用Cat在他的Facebook面經中說的一段話:

 讓我「大開眼界」的是面試題,原來真正好的面試題並不在於它有多難,而在於它有多簡單,簡單到熟悉這個領域的人一下子就明白到你在說什麼以及想問什麼。能夠進入 Facebook 的人應該都覺得面試不難,至少跟中國的面試對比起來如此,那是因為 Facebook 把覺得面試有點難的人都過濾掉了,而中國那些很難的面試反而沒什麼區分度。

就我自己的經歷來看,的確如此。從難度上說,至少在電面階段,Google、Amazon、Facebook的演算法類面試題都是入門級的題目。給我的感覺有點像是考研——題不在難,而在區分度,考的是基礎是否足夠紮實。題目拿到手會做的話立馬就能下手,即便不會做也會覺得這道題很眼熟。Facebook onsite面試題的難度基本上也在這個水準。Google和Amazon兩家都沒有進行到最後階段,不知道後續的難度是否會有提升。從別的面經上來看,Google的演算法題在難度上要更勝一籌,Amazon則會有一些物件導向類的系統設計題。

英語溝通

雖然對自己的英語還算有信心,但此次面試前基本上沒有跟老外面對面溝通過,所以第一次英語電話面試的時候緊張得語無倫次,經常聽不清面試官在說啥,好在從第二次開始就完全無壓力了,竅門很簡單:提前打招呼讓面試官說慢點……說的時候不需要擔心語法錯誤之類,正如某篇面經所說,人腦的糾錯能力還是很強悍的,就算一個詞一個詞往外蹦,老外一般也能夠理解。

跑題說一說口語練習,這方面好像沒法短期突擊,只能靠平時多磨刀。英語口語,一是口音,二是流利程度。口音的問題,我是中學的時候靠聽英語歌並極力模仿歌手的發音解決的。至於流利程度,自然是靠多說。但周圍沒有說英語的人咋辦呢?我的辦法比較偏門——自言自語。以前在學校和公司裡的時候,出於種種原因經常需要做技術分享,必須確切明白地把事物講清楚。久而久之逐漸發現判斷自己有沒有把一個概念搞明白,最直接的辦法就是看能不能把這個概念跟新手講清楚,於是日常學習的時候也經常在腦袋裡做模擬。就這樣,漸漸染上了自言自語的毛病,即面對假想的聽眾把自己的思路講出來,一邊講一邊揣摩聽眾可能的反應並反覆調整說辭,直至表述準確易懂為止。再加上近年來看的文獻基本上都是英語,很多術語根本找不到合適的中文翻譯,腦子裡兩個locale切來切去太麻煩,漸漸就養成了用英語自言自語的習慣,無意間變相練習了口語。當然了,這種手段只能鍛鍊到專業技術方面的內容,日常溝通是覆蓋不到的。不過對於面試來說,剛好夠用。

面試過程

Google

Google的面試機會是師兄推薦得到的。事後來看當時完全沒有準備好,實在是浪費了一次大好機會,對不住師兄。被推薦後不久,Google北京的HR聯絡我。電話聊了大概半個多鐘頭,瞭解了一些背景情況,然後便著手幫我安排電話面試和onsite面試。

電話面試的面試官是美國的華人工程師,全程說的是中文。由於時差,面試時間是北京時間早上八點(對方的下午四點)。簡單問了一些之前的工作背景就開始做題,大致是寫一個類,模擬TCP棧的收包邏輯。寫完之後又要求改為多執行緒版本,類似於一個生產者消費者模型。Google電話面試時是在Google Docs上線上寫程式碼的。頭一回寫,動作比較慢,總體上超時比較多,而且第一次給出的解法雖然沒有錯但並不高效。多執行緒版本快寫完的時候SSH隧道竟然斷了(Google Docs直接訪問不穩定,保險起見是翻牆訪問的)!由於面試已經超過預訂時間,面試官就說算了,面試結束後發到他郵箱好了。最後是例行的問答時間,不記得當時自己問的是什麼問題了。

雖然面試官讓我把最後一個問題的程式碼用郵件發過去,他卻沒有給我留郵箱,事後是通過HR轉發給面試官的。此外面試結束後發現面試官給出的多執行緒的條件有誤,會導致系統死鎖。於是寫了封長郵件,解釋了會導致死鎖的時序,給出了兩種可能的解決方案,並附上了詳盡的測試用例,順便優化了一開始效率不夠高的資料結構。當然,過程中沒有查閱其他資料,完全是獨立思考的。

約莫一週之後,HR幫忙敲定了位於五道口的onsite面試。兩輪面試各45分鐘,都是演算法題,要求在紙上寫程式碼,面試後紙張由面試官回收,似乎是要謄寫到面試反饋中去。第一輪的題目很經典,簡單到現在根本不好意思說自己曾經做不出來……如果是一個月後的我的話,毫無疑問可以秒殺,但當時卻嚴重卡殼。第二輪的題目稍有一些縱深,DFS搜尋加字典樹加介面設計,也不是很難;面試官持續要求優化,最後一個優化點我在最後一分鐘才想出來。面試末尾仍然是例行的問答環節,由於之前做了幾年即時通訊,我便問了一下Google在實時網際網路應用方面有沒有什麼規劃,但由於面試官不是這一領域,無法給出什麼實質性的內容,相互嗟嘆了一下Google Wave之後面試結束。

兩輪onsite下來,自我感覺非常不好,事實上這也是我這段面試經歷中表現最差的兩輪——沒有一道題能夠在規定時間內給出完整、無錯的程式碼。回想起來,這個結果跟我當時的複習策略有很大關係:當時我還處在看演算法大部頭,輔以ZOJ/TopCoder做題的階段,基本上是什麼題難做什麼題,後果就是每道題都鑽很久,解題時間很長,完全沒有達到訓練程式設計熟練程度的目的。再加上紙上寫程式碼一塗改就亂七八糟一團,越寫越緊張……就面試中寫程式碼的方式來說,我覺得用CollabEdit或Google Docs線上程式設計最輕鬆,因為跟平時寫程式差不多(當然如果是平時被VS/VA、Eclipse寵壞了那就兩說了);白板上寫程式碼次之,因為寫錯的、不滿意的地方可以隨時擦掉,保持整體整潔;紙上寫程式碼最難,一不小心就塗塗改改搞得一團亂麻,既影響自己的情緒也影響面試評價。

雖然Google的面試只進行到第二輪onsite,但可以看出Google的面試要求還是比較高的。面試官在關注程式碼的正確性的同時,也會關注程式設計風格甚至介面的註釋。此外,Google的HR工作做得很到位,面試前給我發了詳盡的準備材料,郵件回覆也很及時。最後電話通知面試結果的時候HR先是問了我自己的感覺,然後結合面試官的評價委婉地給出了結論。

Amazon

Amazon的面試機會是同學推薦得到的。和HR全程郵件聯絡,反饋速度極慢,一個來回至少一週。和我聯絡的HR的工作時間跟Amazon總部差了幾個小時,不知道是不是外包。

Amazon的第一輪電面是我第一次跟老外電話溝通,起先覺得沒啥,但臨到面試時卻緊張得一塌糊塗——面試官語速太快,聽不明白啊……由於溝通不是很順暢,之前的工作背景介紹得比較失敗(之前有準備過,但是一緊張全忘了)。面試官的態度雖然很nice,但聽語氣似乎比較失望。之後,面試官對我申請的AWS組做了一個簡要介紹,然後便用CollabEdit線上做了兩道字串的題,過程還算順利。面試完畢之後review自己的程式碼,發現有兩處小錯誤,再加上一開始溝通不順,沮喪地想應該是沒戲了。

沒想到過了大概兩週多,在接到Facebook的onsite面試通知之後,Amazon的HR發郵件過來說打算再進行一輪電話面試,向我徵詢可用時間。回覆之後又過了大約一週,才總算敲定了面試時間。

這個時候我已經有了Facebook三輪電話面試的經驗,LeetCode也切了不少題,紙上寫程式碼雖然還欠,但在CollabEdit這樣的線上編輯器上幾分鐘切一道簡單題對付電話面試已經完全沒有問題(早點知道LeetCode就好了)。於是第二輪電面異常順利。一上來面試官問我選資料結構的題還是演算法的題,我選了資料結構題,半小時多一點切完兩道。做第二道題時我把一個條件理解錯了,面試官指出後向我道歉說是自己描述不夠清楚,好在演算法整體上差異不大。做第三道時,面試官鼓勵說能做到第三題的候選人不多,因為時間所剩無幾,就不要求寫程式碼了,給出思路即可。第三題討論完畢還剩幾分鐘,愉快地進入問答環節。末了,面試官給了很正面的評價,大致是說不太會有負面反饋,HR後續應該會安排到Seattle的onsite面試,當然他並沒有把話說死。

然而,接下來的情節發展就比較坑爹了。

Amazon第二輪電面結束之時,去Menlo Park參加Facebook onsite面試用的B1簽證已經搞定,但具體行程還未確定。本想如果Amazon的HR能夠及時跟進後續安排的話,就一次搞定兩家的onsite。然而Amazon的HR遲遲不見回覆。由於是第一次出國,擔心忙中出錯,便決定Facebook面試完畢後立即回國,大不了Amazon的安排下來之後再跑一趟。於是跟Facebook安排的旅行社溝通,將行程定為面試後第二天回國。又過了大約一週,Amazon的HR來信說對不起,經過比較我們選擇了其他的候選人云雲,具體原因則完全沒有提及。這麼莫名其妙地掛掉實在是令人惱火,但當時對Facebook抱的期望還比較大,並沒有太在意,心不在焉地回了封thank you了事。現在想來應該進一步追問一下被拒的原因的。總之,Amazon的面試官給我的感覺很好,但HR的跟進速度和質量實在無法讓人滿意。

Facebook

Facebook的面試機會同樣是同學推薦獲得的,這也是這次求職經歷中走得最遠的一次。正如Cat在他的面經中所述,Facebook的HR郵件回覆非常及時,而且經常在非工作時間回覆,整個過程中非常認真負責,不得不讚一下。Facebook的第一輪電話面試是由HR進行的,時間是Amazon第一輪電話面試的第二天早上,而Amazon第二輪電話面試那天,Facebook方面已經進行到委託旅行社替我安排onsite行程的階段了,其工作效率可見一斑。

HR電話面試

之前從Cat的面經中看到Facebook會在HR面的時候問一些基礎的問題,並留一道作業題。但我的HR面試卻只問了過去的工作背景。後來瞭解到Cat所說的情況是前端工程師招聘流程特有的,而我申請的是Infrastructure組,就沒有這一環節了。如前所述,Facebook HR面的前一天就是Amazon的第一次電話面試,有了前一天溝通不暢的教訓,面試前我將想得到的問題和之前的工作背景等資訊全部寫了下來,實踐證明非常有效。對方瞭解到我有管理經驗但仍然希望做一線工程師之後似乎很滿意(這確實是我的真實意願)。末了約定了下一次電話面試的時間。這次面試進行了大約半個小時,就溝通順暢程度而言比Amazon的第一次電話面試要好多了。

技術電話面試

接下來的電話面試是技術面,面試官是位女性,看名字覺得是中國人,事後果然在LinkedIn上查到是畢業於交大的同齡人,仰慕。雖然面試官是中國人,但仍然是用英語交流的,因為語言溝通能力本身也是考察環節之一。此外,由於這是該面試官的初次面試,還有一人旁聽。一上來仍然是簡單介紹下背景,介紹期間面試官通過郵件將CollabEdit上面試用的白板地址傳送給我。點開之後CollabEdit戲劇性地報出500 Server Internal Error。然後面試官似乎比我還要手足無措,經旁聽的工程師指點後轉戰Stypi繼續面試。第一題要求解釋下大端序、小端序,並寫個函式判斷本地位元組序,秒殺。然後是一道二叉樹相關的題,寫了一個遞迴版本,途中犯了一個小錯誤,經提示後糾正;通過後面試官要求再寫一個迭代版本,寫了一半有點卡殼,面試官提醒了兩次我都沒能走上正軌,直至面試時間結束。

面完之後比較鬱悶,因為那道題並不難。結果如廁時猛然意識到之前錯在哪裡——馬桶和浴缸果然是靈感迸發的絕佳場所……由於面試過程中面試官曾給我發過一封郵件,我就迅速回復了一封郵件,給出了一份帶有測試用例的可編譯的程式碼。之後面試官很禮貌地回信說這是她第一次面試,我在面試時給出的解法和她熟悉的套路不一樣,因此不知道該如何提示和引導,同時表明已在面試反饋中建議再找一名更為資深的工程師對我進行面試,“可能”還會有一次機會,並祝我好運。

之後便是焦急地等待。求職過程進行到這個時候,Google方面已經被拒,Amazon的第一次電話面試讓我很沮喪,Facebook的這次面試前景似乎也很黯淡。等了好幾天沒有迴音,一度令我很是消沉,每天只是默默地在LeetCode上切題。不想臨近春節,Facebook的HR發來郵件預約第二次技術電話面試,沒多久Amazon的HR也發來面試預約郵件,師弟@mikeandmore2又通過郵件幫我引薦了AeroFS的一位創始人(AeroFS是一家YC投資的做P2P檔案同步/共享的startup)。這大概就是所謂絕處逢生吧……

Facebook第二次技術電話面試的面試官仍然是中國人。走到這一步,之前的訓練效果開始顯現,基本上找到快速搞定這類入門級演算法題的竅門和感覺了。這一輪面試也比較順,和之後進行的Amazon第二次電面類似,四十五分鐘連切三題,第三題也是因為時間關係只需講思路。面試官聽上去比較滿意。面完之後很興奮,心想這下至少能去Menlo Park溜達一圈了,就算面試沒通過,也權當是參加電話競猜中了個加州三日遊了——沒想到最後真被我烏鴉嘴說中,唉!第二天便收到了HR的onsite邀請,然後便開始辦簽證。

簽證

Cat曾經在某群內說過一句話,大致是說“某些人整天說要出國,卻連個旅遊簽證都不肯辦”。好吧,看到這句話的時候我就有種躺槍的感覺——此前我還從未辦過簽證。收到onsite邀請時已經是二月中旬,為了趕上4月1日的H1B申請,HR敦促我務必儘快完成面試。收到Facebook用於辦理B1商務簽證的邀請函後,緊張的簽證準備工作就開始了:準備材料、填寫DS160表格、預約面籤,各種頭大,按下不表。

非常幸運的是,我預約到一個非常近的面試時間,這樣一來三月初便可以抵達Menlo Park。由於去年八月份已於百度離職,我不禁擔心會否因為當前沒有僱主而導致面籤被拒。為此,準備了戶口本、結婚證、過往聘用合同、銀行交易記錄、學位證、畢業證等林林總總一大堆材料。不想面籤當天這些材料一份都沒有用到,美女面試官只詢問了赴美目的和我所申請的職位的工作地點,期間在電腦上確認了一下我之前的工作經歷,末了微笑著說了一句“Good luck”便放行了,整個過程不到30秒,連Facebook的邀請函都沒有看。

Onsite

HR告知海外候選人的onsite面試一般安排成周五出發週一面試,中間隔一個週末,以便休息和倒時差,同時也儘量減少在職候選人請假的天數。我的onsite時間表也是如此。這個安排還是比較人性化的。不過事實證明短短一個週末是絕對倒不過來16個小時的時差——在美期間每天夜裡都清醒得跟打了雞血一樣,完全沒有睡意,以至於面試前一晚我只睡了不到四個小時,週一五場面試狂灌了四杯咖啡。今後再參加海外onsite恐怕得提前一個禮拜在家就開始倒時差才行。

Onsite前後,HR和負責協調旅社的Facebook工作人員都十分盡責,提供的資訊十分詳細。預訂的酒店就是Cat面經中提到的Sheraton Palo Alto,地理位置極佳;缺點是網路龜速,恍如置身牆內,當時心想要是全美都這麼個破網速,肉身翻牆又為哪般?

由於onsite是在總部進行,事先要簽署一份NDA協議。協議內容十分嚴格,其中規定在面試期間獲悉的任何information都屬於保密範疇,所以我只會揀GlassDoor上涉及到的內容來寫,面試中問答環節的內容就略過不提了(Facebook方面曾發郵件說歡迎到GlassDoor上寫面經,所以這樣做應該是安全的)。

Sheraton Palo Alto到Facebook總部大約20分鐘車程。面試當天早上在酒店門口叫車過去,在前臺簽到時大約是9:30,然後便是靜候HR。期間連入Facebook的訪客用無線網路上了會兒網,這才總算找回了對美帝網速的信心。十點鐘帥哥HR準時現身,一番寒暄後便帶我簡單逛了一下園區,灌了杯咖啡。其中我最口水的是站立辦公用的桌子和超大的顯示器。其他細節各種面經都有介紹,按下不表。

面試在一個小號會議室進行,兩面牆上都有答題用的白板。面試開始前,HR先介紹了各輪面試的內容和順序。面試官分三種角色:

  • Ninja(忍者):面coding,白板寫程式碼;
  • Jedi(星戰裡的絕地武士):面文化內容,諸如個人興趣、職業規劃等務虛內容;
  • Pirate(海盜):面系統設計。

我的面試安排是上午一輪ninja、一輪jedi加ninja、一輪pirate,下午兩輪ninja。每輪45分鐘。

第一輪ninja是個華人面試官。一共兩道題,第一題先寫出了一個正確但不太高效的解法;優化了一會兒,面試官勉強滿意,進入第二題。第二題是道完全沒見過的圖論題,面試官題目描述到一半的時候我自以為想出一個很簡單的做法,於是迅速說了思路,結果面試官也迅速給出了一個反例……來回兩次之後面試官告訴我此路不通,掙扎了一會兒仍然沒思路,最後終於時間到,不得不放棄。事後發現也是個經典問題,做不出來純屬複習不到位。這也是之前過於依賴LeetCode的惡果——LeetCode上的題目型別較窄,很多方面沒有覆蓋到。

第二輪是jedi加ninja,有兩個面試官,一個負責面試,一個見習旁聽。一上來先是jedi角色,聊了大約二十分鐘,還算比較投機。餘下的時間做了道題,一次性順利通過。末了提問環節的時候聊到園區內各種塗鴉,順手在白板上給旁聽的面試官畫了個漫畫像(那位是光頭,好畫……)。

第三輪開始之前有十分鐘中場休息時間,HR再次現身,又帶我轉了一圈,再灌一杯咖啡(困啊)。然後發生了一件比較坑爹的事情——面試官放鴿子了。我們回到會議室後,面試官並沒有按時出現。又等了兩分鐘,HR出去打了個電話,嘰哩咕嚕了一會兒,然後一臉鬱悶地罵了句“fuck”。原來面試官搞錯了時間表,接電話時人還在家裡……好在HR快速找到一位臨時面試官,得以繼續面試。雖然面試開始時間比預訂時間晚了十五分鐘,但這位臨時面試官的表現卻很專業。面完之後我自我感覺還不錯。但事後才知道這一輪我的表現並不太好。原因有兩個:第一,這是我這次求職過程中的第一輪也是唯一一輪系統設計面試,沒有經驗;第二,想太多了,一上來就往大資料上去想,從磁碟儲存著手,沒有及時發現面試官給出的資料量完全可以放入記憶體,面試官提示了幾次才發現想複雜了(明明以前自己當面試官的時候還給候選人下過這個套的說)。

之後便是午餐。按慣例是由推薦人領候選人去餐廳,如果推薦人不在或沒有推薦人,則由HR領去餐廳。我的推薦人當時正在國內,我本以為HR會過來,沒想到發現Cat等在會議室門口。原來HR根據我簡歷上的背景資料給公司內可能認識我的人群發了郵件,希望找到熟人陪我吃午飯,而Cat在最後一分鐘發現了這封郵件。由於我的日程是面試完畢後立即回國,沒有時間遊玩,所以事前基本沒有通知在加州的同學和朋友,能見到熟人實在是意料之外的驚喜,讓我對Facebook招聘工作的印象再次大大加分。午飯前後各一杯咖啡下肚,Cat又帶我略逛了下園區,期間聊得十分愉快,感謝感謝!

下午是接連兩輪ninja。第一輪是個歐洲口音的美女面試官。第一道題在第二輪電話面試中問過,告知之後換了一道,結果悲劇地卡在這道題上。題目本身不難,我也有思路。寫到一半的時候面試官說這個演算法佔得空間太多,不夠好,於是我試圖按照她的思路走,結果自己沒太想清楚,越走越繞,小錯不斷。眼看時間所剩無幾,決定還是按照我原先的思路來,好歹先解出來,好壞再說。最後磕磕絆絆總算寫出來。但這一輪只做了這麼一道題,顯然不理想。最後一輪又是兩個面試官,一個主導一個旁聽。這一輪的狀況跟第二輪電話面試時差不多,非常順,45分鐘切了三道題,而且都寫出了完整的程式碼。

第五輪結束後面試官直接將我送出了園區。本以為HR還會出現,打算再次道謝(整個招聘過程中他的工作確實非常出色),但最後沒有見到。上午面試官放鴿子前就看他一副神色匆匆狀,估計其他事情也忙得夠嗆。當時我還沒有意識到上午最後一輪系統設計面試的評價不夠高,心想除了上下午第一輪表現不好以外,其餘三輪還不錯,應該有勝算,於是心情還不錯。

事後和Cat交流時瞭解到,一般onsite面試只安排四輪,如果四輪表現模稜兩可,最後會加面一輪。但我的五輪面試是一早就確定好的,這點比較奇怪。我猜有可能是因為第一輪電話面試的結論比較模糊的緣故。

拒信

不知道是不是因為時差導致神智不清,我居然將機票上的出發時間1200PM錯看成200PM,然後華麗麗地以誤機畫上了個人第一次國際旅行的句號……還好改簽免費,不然可就虧大了(來回機票、住宿、餐飲、地面交通費用都是由Facebook報銷的)。精疲力盡地回到北京之後,首都機場的Wifi死活連不上,回到家裡立即查收郵件,於是就收到了拒信。不由得埋怨Facebook招聘工作未免太過高效了吧,各位面試官要不要再慎重考慮下啊?(哭……)不得不說當時還是相當沮喪的。HR在郵件中說可以另約時間溝通一下面試反饋的細節。考慮到onsite期間這位HR似乎工作非常繁忙,出於節約對方時間的考慮,回覆郵件時我附上了一份用Google Docs做的線上問卷,其中列出了所有想問的問題,並儘量安排成了選擇題的形式。同時,考慮到某些問題可能不方便作答,所有問題都設定成了選答題。

之後,不光收到了HR對問卷的答覆,還收到了onsite面試官的反饋細節。由此我才得知系統設計面的反饋不佳。此外jedi面的反饋似乎很好,看來就算換了門語言,嘴皮子功夫也還是過得去的。總之,在決定性的面試官投票中我以一票之差落選。

小結

Facebook的面試從頭到尾都如Cat所說的那樣,沒有高難度的題目,完全看基礎是否足夠紮實。我在電面和onsite面中出的狀況全都是自己複習不到位或不夠熟練所致。即便是系統設計題,也幾乎不需要什麼工作經驗,我的感覺是比較優秀的應屆生也不會有什麼大問題,想得太多反倒容易栽跟頭。

此外,如果不是Amazon反饋過晚,我應該還會在灣區再待上一兩週,這樣的話也許還來得及再爭取一兩家onsite面試機會。當然,Facebook onsite結束後我再次抱著僥倖心理盲目自信,沒有下決心改簽機票同樣罪不可恕……

事後Facebook又發了一份線上調查問卷,對面試體驗做調查,末了還提供了一份禮品清單,T恤、帽子、滑鼠、記事本等等任選一樣。總之從頭到尾Facebook的招聘工作給我的感覺都很好,無論是工作質量、效率,還是人文關懷,都做得非常到位甚至超出預期。

後記

從最早萌生肉身翻牆的念頭,到親身實踐一遍,再到機會擦身而過,感慨良多。不過,至少這次的經歷證明了自己雖然功力還不夠,但也差得不太多。我尚未放棄,準備充分之後還會再試一次。面試是個經驗活兒。此次求職經歷中,第一次電話面試、第一次跟老外交流、第一次系統設計面試等等,都表現不佳。此前雖然當了無數次面試官,麵人沒有一百也有幾十,但輪到自己以候選人身份經歷的求職面試卻只有一次。如果之前不那麼猶豫不決,在試Google之前多試幾家積攢經驗,結果可能就完全不一樣了。

最後,跟同樣有意向通過找工作翻牆的朋友們說一句:翻牆的可行性其實很高,只要技術和英語這兩個硬指標過關,且家人不反對,再加上膽大心細,就很有希望。可惜我的例子不足以鼓舞人心,只能寫點流水帳供大家參考罷了。

這篇面經欠了將近一個月,一方面是因為求職不順心生懶散,一方面是blog主機服務商接連故障,前兩天才完全恢復。今日終於把欠債補上了。

Creative Commons License本文基於署名 2.5 中國大陸許可協議釋出,歡迎轉載,演繹或用於商業目的,但是必須保留本文的署名連城 (Lian, Cheng)(包含本文連結)。如您有任何疑問或者授權方面的協商,請聯絡我
更多 0

 

相關文章