連城 (Lian, Cheng):加州求職記
一年多前,出于顯而易見的原因,下定決心肉身翻墻。經過一番考慮,放棄了讀書這條途徑,決定直接找工作,通過 H1B 簽證出去。于是去年八月份從百度辭職,開始著手準備。當時覺得今年拿到 H1B 的成功率大致能有個六七成,加上周圍朋友們的不斷鼓勵,可以說還是相當自信的。然而,時至今日,在歷經 Google、Amazon、Facebook 三家公司之后,這第一次嘗試卻可恥地失敗了……
戰(zhàn)績概覽:
- Google:倉促應戰(zhàn),HR 電面一輪,技術電面一輪,北京 onsite 兩輪,慘??;
- Amazon:技術電面兩輪,在面試官反饋良好的情況下莫名掛掉,詳情見下;
- Facebook:HR 電面一輪,技術電面兩輪,Menlo Park 總部 onsite 五輪,惜??;
- AeroFS:因為是 startup,臨時告知無法提供 H1B,于是告終。
個人背景參見這里。
失敗的原因,簡而言之就是兩個字——自大。在百度四年多,技術方面長進不少;雖然從未以做管理為目標,卻也陰差陽錯地干了兩年管理,從零帶出了一支二十多人的研發(fā)隊伍,同樣獲益頗豐。再加上離職時恰逢耗時一年之久的首部譯作正式出版,自我感覺良好,信心爆棚。周圍的朋友和同事們聽說了我的計劃之后都鼓勵說“肯定可以”,于是我也就飄飄然地認為“肯定可以”了。這種自大心理使得我沒有盡早將目標公司的面試方式研究透徹,也未能及時采取最為有效的方法彌補自己客觀能力上的不足。
無論如何,這段經歷還是相當寶貴的:經歷了第一次英語面試、第一次辦簽證、第一次出國、第一次倒時差,還有第一次誤機…… 雖然求職失敗,但仍然獲益良多。本文便是對這次求職全過程的記錄,一方面警醒自己,一方面也為其他有類似打算的朋友們留一個參考。由于幾家公司的面試是交錯進行的,下文并沒有完全按照時間順序進行描述。此外,出于 NDA 協(xié)定等原因,本文不會透露具體的面試題。
面試準備
雖說去年八月份就已經正式離職,但實際上前幾個月都忙于其他事務,做了一些之前一直想做但是沒有時間做的業(yè)余項目。期間雖然也不斷補習各種基礎知識,但一直不得要領,進度甚緩,效果堪憂。于是一直覺得沒有準備好,遲遲不敢真槍實彈地進行面試。真正進入狀態(tài)應該是十二月份以后了。面試準備當然少不了看面經,其中最有指導意義的幾篇分別是前同事 Cat Chen 的 Google、微軟、Yahoo、Facebook 系列面經和博客園上的這篇拿了 9 個 offer 的傳奇面經。其中,后者給出的各種參考材料尤為有價值,我自己后期真正有效的面試準備基本上也是跟著這篇面經的框架來的。
算法基礎
眾所周知,灣區(qū)的公司在面試時非常注重實際編碼能力,要求直接在線或在紙上、白板上寫代碼,并且要求是可編譯的零 bug 代碼,因此有 ACM 背景的應聘者會非常占優(yōu)。當然,不同公司在嚴格程度上也不盡相同,比如 Amazon 對無傷大雅的手誤或 API 細節(jié)記不清等情況相對寬容,F(xiàn)acebook 次之,Google 最嚴格。反觀國內的互聯(lián)網公司,雖然面試時也會問算法問題(尤其是對應屆生),但一般不太會要求手寫達到可編譯運行質量的代碼(要求寫偽碼的居多);同時考量的知識面也會更廣、更開放一些。一開始我覺得灣區(qū)的這種面試方法并不科學——畢竟實際工作中沒人會要求你在不借助調試器等工具的情況下一次性編碼成功。而且,競賽類算法題的代碼和工業(yè)界的代碼完全就是兩種套路(在工業(yè)界干過幾年的前 ACM 選手們應該非常清楚)。但反過來一想,自己周圍能夠達到這個水準的,無一不是牛人。而且這個方法高度統(tǒng)一,易于判定,在大規(guī)模面試中更利于統(tǒng)一面試官的評判標準,從而達到嚴格把關面試質量的目的??偠灾@種面試手段跟高考有點類似——它可能不是最為合理的選拔手段,但對于大公司來說,為了保證更大范圍內的公平性和質量,似乎也沒有更為合理的手段,因此就現(xiàn)階段而言它也就是最為合理的手段了。
就我個人而言,在校時頂多也就參加過 ACM 校賽;無論刷題速度還是數學和算法基礎都遠遜于專業(yè)選手,純粹是玩兒票水準。工作六年多更是基本告別基礎算法,頂多也就是算個時空復雜度,偶爾用一次微積分都會感慨萬千原來這玩意兒還真有用得上的時候。再者就是平時寫程序的習慣。經過嚴格訓練的 ACM 選手可以做到解題時從頭至尾一氣呵成,當年 ZJU 校隊神人們直接在提交框里寫碼提交一次 AC 的傳說屢見不鮮。我平時自知是個粗心鬼,寫程序一定是先搭架子后填肉,邊填邊調;要是妄圖一次成功,那最后多半是錯得沒邊兒。所以,算法基本功以及編碼不夠快、準、狠,就是我最大的弱項。
為了彌補這些不足,我最早采用的方式是啃 Algorithms、The Algorithm Design Manual 等大部頭。然而實踐證明這個方法收效甚微。當然不是書不好,而是心態(tài)問題。這些大部頭行文嚴謹,事無巨細悉數記錄在案,最適合用作教材或是當作手冊日常翻閱。對于目標主要是查漏補缺的我來說,從頭到尾看一遍太慢,而且一不小心就陷入細節(jié)或是一些事后證明完全沒有必要鉆的難點;跳著看又不知道到底哪里是自己缺漏之處,無的放矢。
要想搞清楚缺漏之處究竟在哪,最有效的辦法還是實際做題。做不出來的自然就是缺漏,重點補習;做得出來的則盡量爭取一次到位,追求編程速度。在這條路上先后嘗試了 CareerCup、ZOJ、TopCoder 和 LeetCode。四個站點的優(yōu)缺點對比如下:
-
作為全世界碼農應聘者交流面試經驗和真題的集散地,其優(yōu)點自然就是真題豐富。缺點也很明顯:很多題目描述不嚴謹,邊界情況模糊;沒有 OJ,自己的代碼正確與否難以得到客觀準確的判斷;參考答案僅限于用戶貼出的代碼和思考,而且 CareerCup 論壇的代碼排版效果惡心得令人難以置信,你幾乎不可能貼出一份縮進正確的代碼!
-
ZOJ 實在是太熟悉了,本科時閑來無事就在 ZOJ 上切題。TopCoder 交互比較復雜,但流程基本上差不多。二者都是 OJ,因此自己的代碼正確與否、效率如何,都可以迅速判定。TopCoder 相對于 ZOJ 的一個優(yōu)點是可以檢索指定難度和類別的題目。缺點則是這二者都是競技平臺,當 OJ 判定代碼錯誤時不會輸出額外的診斷信息,一旦陷入難以想到的邊界情況就會花費大量時間。
此外,就這次的經驗來看,ZOJ 的題和 TopCoder 500 分以上的題在平均難度上比實際的面試題要高不少。與其在難題上耗費過多時間,多切一些簡單題提高寫代碼的熟練程度可能更有幫助。
-
LeetCode 可以說是結合了 CareerCup 和 ZOJ、TopCoder 的優(yōu)點:既有真題,又有 OJ。而且當 OJ 判定代碼錯誤時,會同時輸出對應的測試用例,大大方便了調試。在面試準備的后期,我完全轉向了 LeetCode,訓練效果顯著。對了,目前 LeetCode 后臺的 C++ 編譯器已升級到g++ 4.7.2,支持大部分C++11 特性(尚不支持 lambda),寫起 C++ 來舒心不少 :-) 就這次的經驗來看,實際面試題的難度跟 LeetCode 的平均難度相差無幾。缺點則是題量較少,目前僅有 100 多題,覆蓋面較窄(例如二叉樹的題有一大堆,而圖論題則幾乎沒有)。
這里引用 Cat 在他的 Facebook 面經中說的一段話:
讓我「大開眼界」的是面試題,原來真正好的面試題并不在于它有多難,而在于它有多簡單,簡單到熟悉這個領域的人一下子就明白到你在說什么以及想問什么。能夠進入 Facebook 的人應該都覺得面試不難,至少跟中國的面試對比起來如此,那是因為 Facebook 把覺得面試有點難的人都過濾掉了,而中國那些很難的面試反而沒什么區(qū)分度。
就我自己的經歷來看,的確如此。從難度上說,至少在電面階段,Google、Amazon、Facebook 的算法類面試題都是入門級的題目。給我的感覺有點像是考研——題不在難,而在區(qū)分度,考的是基礎是否足夠扎實。題目拿到手會做的話立馬就能下手,即便不會做也會覺得這道題很眼熟。Facebook onsite 面試題的難度基本上也在這個水準。Google 和 Amazon 兩家都沒有進行到最后階段,不知道后續(xù)的難度是否會有提升。從別的面經上來看,Google 的算法題在難度上要更勝一籌,Amazon 則會有一些面向對象類的系統(tǒng)設計題。
英語溝通
雖然對自己的英語還算有信心,但此次面試前基本上沒有跟老外面對面溝通過,所以第一次英語電話面試的時候緊張得語無倫次,經常聽不清面試官在說啥,好在從第二次開始就完全無壓力了,竅門很簡單:提前打招呼讓面試官說慢點……說的時候不需要擔心語法錯誤之類,正如某篇面經所說,人腦的糾錯能力還是很強悍的,就算一個詞一個詞往外蹦,老外一般也能夠理解。
跑題說一說口語練習,這方面好像沒法短期突擊,只能靠平時多磨刀。英語口語,一是口音,二是流利程度。口音的問題,我是中學的時候靠聽英語歌并極力模仿歌手的發(fā)音解決的。至于流利程度,自然是靠多說。但周圍沒有說英語的人咋辦呢?我的辦法比較偏門——自言自語。以前在學校和公司里的時候,出于種種原因經常需要做技術分享,必須確切明白地把事物講清楚。久而久之逐漸發(fā)現(xiàn)判斷自己有沒有把一個概念搞明白,最直接的辦法就是看能不能把這個概念跟新手講清楚,于是日常學習的時候也經常在腦袋里做模擬。就這樣,漸漸染上了自言自語的毛病,即面對假想的聽眾把自己的思路講出來,一邊講一邊揣摩聽眾可能的反應并反復調整說辭,直至表述準確易懂為止。再加上近年來看的文獻基本上都是英語,很多術語根本找不到合適的中文翻譯,腦子里兩個 locale 切來切去太麻煩,漸漸就養(yǎng)成了用英語自言自語的習慣,無意間變相練習了口語。當然了,這種手段只能鍛煉到專業(yè)技術方面的內容,日常溝通是覆蓋不到的。不過對于面試來說,剛好夠用。
#p#
面試過程
Google 的面試機會是師兄推薦得到的。事后來看當時完全沒有準備好,實在是浪費了一次大好機會,對不住師兄。被推薦后不久,Google 北京的 HR 聯(lián)系我。電話聊了大概半個多鐘頭,了解了一些背景情況,然后便著手幫我安排電話面試和 onsite 面試。
電話面試的面試官是美國的華人工程師,全程說的是中文。由于時差,面試時間是北京時間早上八點(對方的下午四點)。簡單問了一些之前的工作背景就開始做題,大致是寫一個類,模擬 TCP 棧的收包邏輯。寫完之后又要求改為多線程版本,類似于一個生產者消費者模型。Google 電話面試時是在 Google Docs 上在線寫代碼的。頭一回寫,動作比較慢,總體上超時比較多,而且第一次給出的解法雖然沒有錯但并不高效。多線程版本快寫完的時候 SSH 隧道竟然斷了(Google Docs 直接訪問不穩(wěn)定,保險起見是翻墻訪問的)!由于面試已經超過預訂時間,面試官就說算了,面試結束后發(fā)到他郵箱好了。最后是例行的問答時間,不記得當時自己問的是什么問題了。
雖然面試官讓我把最后一個問題的代碼用郵件發(fā)過去,他卻沒有給我留郵箱,事后是通過 HR 轉發(fā)給面試官的。此外面試結束后發(fā)現(xiàn)面試官給出的多線程的條件有誤,會導致系統(tǒng)死鎖。于是寫了封長郵件,解釋了會導致死鎖的時序,給出了兩種可能的解決方案,并附上了詳盡的測試用例,順便優(yōu)化了一開始效率不夠高的數據結構。當然,過程中沒有查閱其他資料,完全是獨立思考的。
約莫一周之后,HR 幫忙敲定了位于五道口的 onsite 面試。兩輪面試各 45 分鐘,都是算法題,要求在紙上寫代碼,面試后紙張由面試官回收,似乎是要謄寫到面試反饋中去。第一輪的題目很經典,簡單到現(xiàn)在根本不好意思說自己曾經做不出來……如果是一個月后的我的話,毫無疑問可以秒殺,但當時卻嚴重卡殼。第二輪的題目稍有一些縱深,DFS 搜索加字典樹加接口設計,也不是很難;面試官持續(xù)要求優(yōu)化,最后一個優(yōu)化點我在最后一分鐘才想出來。面試末尾仍然是例行的問答環(huán)節(jié),由于之前做了幾年即時通訊,我便問了一下 Google 在實時互聯(lián)網應用方面有沒有什么規(guī)劃,但由于面試官不是這一領域,無法給出什么實質性的內容,相互嗟嘆了一下 Google Wave 之后面試結束。
兩輪 onsite 下來,自我感覺非常不好,事實上這也是我這段面試經歷中表現(xiàn)最差的兩輪——沒有一道題能夠在規(guī)定時間內給出完整、無錯的代碼?;叵肫饋?,這個結果跟我當時的復習策略有很大關系:當時我還處在看算法大部頭,輔以 ZOJ/TopCoder 做題的階段,基本上是什么題難做什么題,后果就是每道題都鉆很久,解題時間很長,完全沒有達到訓練編程熟練程度的目的。再加上紙上寫代碼一涂改就亂七八糟一團,越寫越緊張……就面試中寫代碼的方式來說,我覺得用 CollabEdit 或 Google Docs 在線編程最輕松,因為跟平時寫程序差不多(當然如果是平時被 VS/VA、Eclipse 寵壞了那就兩說了);白板上寫代碼次之,因為寫錯的、不滿意的地方可以隨時擦掉,保持整體整潔;紙上寫代碼最難,一不小心就涂涂改改搞得一團亂麻,既影響自己的情緒也影響面試評價。
雖然 Google 的面試只進行到第二輪 onsite,但可以看出 Google 的面試要求還是比較高的。面試官在關注代碼的正確性的同時,也會關注編程風格甚至接口的注釋。此外,Google 的 HR 工作做得很到位,面試前給我發(fā)了詳盡的準備材料,郵件回復也很及時。最后電話通知面試結果的時候 HR 先是問了我自己的感覺,然后結合面試官的評價委婉地給出了結論。
Amazon
Amazon 的面試機會是同學推薦得到的。和 HR 全程郵件聯(lián)系,反饋速度極慢,一個來回至少一周。和我聯(lián)絡的 HR 的工作時間跟 Amazon 總部差了幾個小時,不知道是不是外包。
Amazon 的第一輪電面是我第一次跟老外電話溝通,起先覺得沒啥,但臨到面試時卻緊張得一塌糊涂——面試官語速太快,聽不明白啊……由于溝通不是很順暢,之前的工作背景介紹得比較失?。ㄖ坝袦蕚溥^,但是一緊張全忘了)。面試官的態(tài)度雖然很 nice,但聽語氣似乎比較失望。之后,面試官對我申請的 AWS 組做了一個簡要介紹,然后便用 CollabEdit 在線做了兩道字符串的題,過程還算順利。面試完畢之后 review 自己的代碼,發(fā)現(xiàn)有兩處小錯誤,再加上一開始溝通不順,沮喪地想應該是沒戲了。
沒想到過了大概兩周多,在接到 Facebook 的 onsite 面試通知之后,Amazon 的 HR 發(fā)郵件過來說打算再進行一輪電話面試,向我征詢可用時間。回復之后又過了大約一周,才總算敲定了面試時間。
這個時候我已經有了 Facebook 三輪電話面試的經驗,LeetCode 也切了不少題,紙上寫代碼雖然還欠,但在 CollabEdit 這樣的在線編輯器上幾分鐘切一道簡單題對付電話面試已經完全沒有問題(早點知道 LeetCode 就好了)。于是第二輪電面異常順利。一上來面試官問我選數據結構的題還是算法的題,我選了數據結構題,半小時多一點切完兩道。做第二道題時我把一個條件理解錯了,面試官指出后像我道歉說是自己描述不夠清楚,好在算法整體上差異不大。做第三道時,面試官鼓勵說能做到第三題的候選人不多,因為時間所剩無幾,就不要求寫代碼了,給出思路即可。第三題討論完畢還剩幾分鐘,愉快地進入問答環(huán)節(jié)。末了,面試官給了很正面的評價,大致是說不太會有負面反饋,HR 后續(xù)應該會安排到 Seattle 的 onsite 面試,當然他并沒有把話說死。
然而,接下來的情節(jié)發(fā)展就比較坑爹了。
Amazon 第二輪電面結束之時,去 Menlo Park 參加 Facebook onsite 面試用的 B1 簽證已經搞定,但具體行程還未確定。本想如果 Amazon 的 HR 能夠及時跟進后續(xù)安排的話,就一次搞定兩家的 onsite。然而 Amazon 的 HR 遲遲不見回復。由于是第一次出國,擔心忙中出錯,便決定 Facebook 面試完畢后立即回國,大不了 Amazon 的安排下來之后再跑一趟。于是跟 Facebook 安排的旅行社溝通,將行程定為面試后第二天回國。又過了大約一周,Amazon 的 HR 來信說對不起,經過比較我們選擇了其他的候選人云云,具體原因則完全沒有提及。這么莫名其妙地掛掉實在是令人惱火,但當時對 Facebook 抱的期望還比較大,并沒有太在意,心不在焉地回了封 thank you 了事?,F(xiàn)在想來應該進一步追問一下被拒的原因的??傊珹mazon 的面試官給我的感覺很好,但 HR 的跟進速度和質量實在無法讓人滿意。
Facebook 的面試機會同樣是同學推薦獲得的,這也是這次求職經歷中走得最遠的一次。正如 Cat 在他的面經中所述,F(xiàn)acebook 的 HR 郵件回復非常及時,而且經常在非工作時間回復,整個過程中非常認真負責,不得不贊一下。Facebook 的第一輪電話面試是由 HR 進行的,時間是 Amazon 第一輪電話面試的第二天早上,而 Amazon 第二輪電話面試那天,F(xiàn)acebook 方面已經進行到委托旅行社替我安排 onsite 行程的階段了,其工作效率可見一斑。
HR 電話面試
之前從 Cat 的面經中看到 Facebook 會在 HR 面的時候問一些基礎的問題,并留一道作業(yè)題。但我的 HR 面試卻只問了過去的工作背景。后來了解到 Cat 所說的情況是前端工程師招聘流程特有的,而我申請的是 Infrastructure 組,就沒有這一環(huán)節(jié)了。如前所述,F(xiàn)acebook HR 面的前一天就是 Amazon 的第一次電話面試,有了前一天溝通不暢的教訓,面試前我將想得到的問題和之前的工作背景等信息全部寫了下來,實踐證明非常有效。對方了解到我有管理經驗但仍然希望做一線工程師之后似乎很滿意(這確實是我的真實意愿)。末了約定了下一次電話面試的時間。這次面試進行了大約半個小時,就溝通順暢程度而言比 Amazon 的第一次電話面試要好多了。
技術電話面試
接下來的電話面試是技術面,面試官是位女性,看名字覺得是中國人,事后果然在 LinkedIn 上查到是畢業(yè)于交大的同齡人,仰慕。雖然面試官是中國人,但仍然是用英語交流的,因為語言溝通能力本身也是考察環(huán)節(jié)之一。此外,由于這是該面試官的初次面試,還有一人旁聽。一上來仍然是簡單介紹下背景,介紹期間面試官通過郵件將 CollabEdit 上面試用的白板地址發(fā)送給我。點開之后 CollabEdit 戲劇性地報出 500 Server Internal Error。然后面試官似乎比我還要手足無措,經旁聽的工程師指點后轉戰(zhàn) Stypi 繼續(xù)面試。第一題要求解釋下大端序、小端序,并寫個函數判斷本地字節(jié)序,秒殺。然后是一道二叉樹相關的題,寫了一個遞歸版本,途中犯了一個小錯誤,經提示后糾正;通過后面試官要求再寫一個迭代版本,寫了一半有點卡殼,面試官提醒了兩次我都沒能走上正軌,直至面試時間結束。
面完之后比較郁悶,因為那道題并不難。結果如廁時猛然意識到之前錯在哪里——馬桶和浴缸果然是靈感迸發(fā)的絕佳場所……由于面試過程中面試官曾給我發(fā)過一封郵件,我就迅速回復了一封郵件,給出了一份帶有測試用例的可編譯的代碼。之后面試官很禮貌地回信說這是她第一次面試,我在面試時給出的解法和她熟悉的套路不一樣,因此不知道該如何提示和引導,同時表明已在面試反饋中建議再找一名更為資深的工程師對我進行面試,“可能”還會有一次機會,并祝我好運。
之后便是焦急地等待。求職過程進行到這個時候,Google 方面已經被拒,Amazon 的第一次電話面試讓我很沮喪,F(xiàn)acebook 的這次面試前景似乎也很黯淡。等了好幾天沒有回音,一度令我很是消沉,每天只是默默地在 LeetCode 上切題。不想臨近春節(jié),F(xiàn)acebook 的 HR 發(fā)來郵件預約第二次技術電話面試,沒多久 Amazon 的 HR 也發(fā)來面試預約郵件,師弟@mikeandmore2又通過郵件幫我引薦了 AeroFS 的一位創(chuàng)始人(AeroFS 是一家 YC 投資的做 P2P 文件同步/共享的 startup)。這大概就是所謂絕處逢生吧……
Facebook 第二次技術電話面試的面試官仍然是中國人。走到這一步,之前的訓練效果開始顯現(xiàn),基本上找到快速搞定這類入門級算法題的竅門和感覺了。這一輪面試也比較順,和之后進行的 Amazon 第二次電面類似,四十五分鐘連切三題,第三題也是因為時間關系只需講思路。面試官聽上去比較滿意。面完之后很興奮,心想這下至少能去 Menlo Park 溜達一圈了,就算面試沒通過,也權當是參加電話競猜中了個加州三日游了——沒想到最后真被我烏鴉嘴說中,唉!第二天便收到了 HR 的 onsite 邀請,然后便開始辦簽證。
#p#
簽證
Cat 曾經在某群內說過一句話,大致是說“某些人整天說要出國,卻連個旅游簽證都不肯辦”。好吧,看到這句話的時候我就有種躺槍的感覺——此前我還從未辦過簽證。收到 onsite 邀請時已經是二月中旬,為了趕上 4 月 1 日的 H1B 申請,HR 敦促我務必盡快完成面試。收到 Facebook 用于辦理 B1 商務簽證的邀請函后,緊張的簽證準備工作就開始了:準備材料、填寫 DS160 表格、預約面簽,各種頭大,按下不表。
非常幸運的是,我預約到一個非常近的面試時間,這樣一來三月初便可以抵達 Menlo Park。由于去年八月份已于百度離職,我不禁擔心會否因為當前沒有雇主而導致面簽被拒。為此,準備了戶口本、結婚證、過往聘用合同、銀行交易記錄、學位證、畢業(yè)證等林林總總一大堆材料。不想面簽當天這些材料一份都沒有用到,美女面試官只詢問了赴美目的和我所申請的職位的工作地點,期間在電腦上確認了一下我之前的工作經歷,末了微笑著說了一句“Good luck”便放行了,整個過程不到 30 秒,連 Facebook 的邀請函都沒有看。
Onsite
HR 告知海外候選人的 onsite 面試一般安排成周五出發(fā)周一面試,中間隔一個周末,以便休息和倒時差,同時也盡量減少在職候選人請假的天數。我的 onsite 時間表也是如此。這個安排還是比較人性化的。不過事實證明短短一個周末是絕對倒不過來 16 個小時的時差——在美期間每天夜里都清醒得跟打了雞血一樣,完全沒有睡意,以至于面試前一晚我只睡了不到四個小時,周一五場面試狂灌了四杯咖啡。今后再參加海外 onsite 恐怕得提前一個禮拜在家就開始倒時差才行。
Onsite 前后,HR 和負責協(xié)調旅社的 Facebook 工作人員都十分盡責,提供的信息十分詳細。預訂的酒店就是 Cat 面經中提到的 Sheraton Palo Alto,地理位置極佳;缺點是網絡龜速,恍如置身墻內,當時心想要是全美都這么個破網速,肉身翻墻又為哪般?
由于 onsite 是在總部進行,事先要簽署一份 NDA 協(xié)議。協(xié)議內容十分嚴格,其中規(guī)定在面試期間獲悉的任何 information 都屬于保密范疇,所以我只會揀 GlassDoor 上涉及到的內容來寫,面試中問答環(huán)節(jié)的內容就略過不提了(Facebook 方面曾發(fā)郵件說歡迎到 GlassDoor 上寫面經,所以這樣做應該是安全的)。
Sheraton Palo Alto 到 Facebook 總部大約 20 分鐘車程。面試當天早上在酒店門口打車過去,在前臺簽到時大約是9:30,然后便是靜候 HR。期間連入 Facebook 的訪客用無線網絡上了會兒網,這才總算找回了對美帝網速的信心。十點鐘帥哥 HR 準時現(xiàn)身,一番寒暄后便帶我簡單逛了一下園區(qū),灌了杯咖啡。其中我最口水的是站立辦公用的桌子和超大的顯示器。其他細節(jié)各種面經都有介紹,按下不表。
面試在一個小號會議室進行,兩面墻上都有答題用的白板。面試開始前,HR 先介紹了各輪面試的內容和順序。面試官分三種角色:
- Ninja(忍者):面 coding,白板寫代碼;
- Jedi(星戰(zhàn)里的絕地武士):面文化內容,諸如個人興趣、職業(yè)規(guī)劃等務虛內容;
- Pirate(海盜):面系統(tǒng)設計。
我的面試安排是上午一輪 ninja、一輪 jedi 加 ninja、一輪 pirate,下午兩輪 ninja。每輪 45 分鐘。
第一輪 ninja 是個華人面試官。一共兩道題,第一題先寫出了一個正確但不太高效的解法;優(yōu)化了一會兒,面試官勉強滿意,進入第二題。第二題是道完全沒見過的圖論題,面試官題目描述到一半的時候我自以為想出一個很簡單的做法,于是迅速說了思路,結果面試官也迅速給出了一個反例……來回兩次之后面試官告訴我此路不通,掙扎了一會兒仍然沒思路,最后終于時間到,不得不放棄。事后發(fā)現(xiàn)也是個經典問題,做不出來純屬復習不到位。這也是之前過于依賴 LeetCode 的惡果——LeetCode 上的題目類型較窄,很多方面沒有覆蓋到。
第二輪是 jedi 加 ninja,有兩個面試官,一個負責面試,一個見習旁聽。一上來先是 jedi 角色,聊了大約二十分鐘,還算比較投機。余下的時間做了道題,一次性順利通過。末了提問環(huán)節(jié)的時候聊到園區(qū)內各種涂鴉,順手在白板上給旁聽的面試官畫了個漫畫像(那位是光頭,好畫……)。
第三輪開始之前有十分鐘中場休息時間,HR 再次現(xiàn)身,又帶我轉了一圈,再灌一杯咖啡(困?。H缓蟀l(fā)生了一件比較坑爹的事情——面試官放鴿子了。我們回到會議室后,面試官并沒有按時出現(xiàn)。又等了兩分鐘,HR 出去打了個電話,嘰哩咕嚕了一會兒,然后一臉郁悶地罵了句“fuck”。原來面試官搞錯了時間表,接電話時人還在家里……好在 HR 快速找到一位臨時面試官,得以繼續(xù)面試。雖然面試開始時間比預訂時間晚了十五分鐘,但這位臨時面試官的表現(xiàn)卻很專業(yè)。面完之后我自我感覺還不錯。但事后才知道這一輪我的表現(xiàn)并不太好。原因有兩個:第一,這是我這次求職過程中的第一輪也是唯一一輪系統(tǒng)設計面試,沒有經驗;第二,想太多了,一上來就往大數據上去想,從磁盤存儲著手,沒有及時發(fā)現(xiàn)面試官給出的數據量完全可以放入內存,面試官提示了幾次才發(fā)現(xiàn)想復雜了(明明以前自己當面試官的時候還給候選人下過這個套的說)。
之后便是午餐。按慣例是由推薦人領候選人去餐廳,如果推薦人不在或沒有推薦人,則由 HR 領去餐廳。我的推薦人當時正在國內,我本以為 HR 會過來,沒想到發(fā)現(xiàn) Cat 等在會議室門口。原來 HR 根據我簡歷上的背景資料給公司內可能認識我的人群發(fā)了郵件,希望找到熟人陪我吃午飯,而 Cat 在最后一分鐘發(fā)現(xiàn)了這封郵件。由于我的日程是面試完畢后立即回國,沒有時間游玩,所以事前基本沒有通知在加州的同學和朋友,能見到熟人實在是意料之外的驚喜,讓我對 Facebook 招聘工作的印象再次大大加分。午飯前后各一杯咖啡下肚,Cat 又帶我略逛了下園區(qū),期間聊得十分愉快,感謝感謝!
下午是接連兩輪 ninja。第一輪是個歐洲口音的美女面試官。第一道題在第二輪電話面試中問過,告知之后換了一道,結果悲劇地卡在這道題上。題目本身不難,我也有思路。寫到一半的時候面試官說這個算法占得空間太多,不夠好,于是我試圖按照她的思路走,結果自己沒太想清楚,越走越繞,小錯不斷。眼看時間所剩無幾,決定還是按照我原先的思路來,好歹先解出來,好壞再說。最后磕磕絆絆總算寫出來。但這一輪只做了這么一道題,顯然不理想。最后一輪又是兩個面試官,一個主導一個旁聽。這一輪的狀況跟第二輪電話面試時差不多,非常順,45 分鐘切了三道題,而且都寫出了完整的代碼。
第五輪結束后面試官直接將我送出了園區(qū)。本以為 HR 還會出現(xiàn),打算再次道謝(整個招聘過程中他的工作確實非常出色),但最后沒有見到。上午面試官放鴿子前就看他一副神色匆匆狀,估計其他事情也忙得夠嗆。當時我還沒有意識到上午最后一輪系統(tǒng)設計面試的評價不夠高,心想除了上下午第一輪表現(xiàn)不好以外,其余三輪還不錯,應該有勝算,于是心情還不錯。
事后和 Cat 交流時了解到,一般 onsite 面試只安排四輪,如果四輪表現(xiàn)模棱兩可,最后會加面一輪。但我的五輪面試是一早就確定好的,這點比較奇怪。我猜有可能是因為第一輪電話面試的結論比較模糊的緣故。
拒信
不知道是不是因為時差導致神智不清,我居然將機票上的出發(fā)時間 1200PM 錯看成 200PM,然后華麗麗地以誤機畫上了個人第一次國際旅行的句號……還好改簽免費,不然可就虧大了(來回機票、住宿、餐飲、地面交通費用都是由 Facebook 報銷的)。精疲力盡地回到北京之后,首都機場的 Wifi 死活連不上,回到家里立即查收郵件,于是就收到了拒信。不由得埋怨 Facebook 招聘工作未免太過高效了吧,各位面試官要不要再慎重考慮下???(哭……)不得不說當時還是相當沮喪的。HR 在郵件中說可以另約時間溝通一下面試反饋的細節(jié)??紤]到 onsite 期間這位 HR 似乎工作非常繁忙,出于節(jié)約對方時間的考慮,回復郵件時我附上了一份用 Google Docs 做的在線問卷,其中列出了所有想問的問題,并盡量安排成了選擇題的形式。同時,考慮到某些問題可能不方便作答,所有問題都設置成了選答題。
之后,不光收到了 HR 對問卷的答復,還收到了 onsite 面試官的反饋細節(jié)。由此我才得知系統(tǒng)設計面的反饋不佳。此外 jedi 面的反饋似乎很好,看來就算換了門語言,嘴皮子功夫也還是過得去的??傊?,在決定性的面試官投票中我以一票之差落選。
小結
Facebook 的面試從頭到尾都如 Cat 所說的那樣,沒有高難度的題目,完全看基礎是否足夠扎實。我在電面和 onsite 面中出的狀況全都是自己復習不到位或不夠熟練所致。即便是系統(tǒng)設計題,也幾乎不需要什么工作經驗,我的感覺是比較優(yōu)秀的應屆生也不會有什么大問題,想得太多反倒容易栽跟頭。
此外,如果不是 Amazon 反饋過晚,我應該還會在灣區(qū)再待上一兩周,這樣的話也許還來得及再爭取一兩家 onsite 面試機會。當然,F(xiàn)acebook onsite 結束后我再次抱著僥幸心理盲目自信,沒有下決心改簽機票同樣罪不可恕……
事后 Facebook 又發(fā)了一份在線調查問卷,對面試體驗做調查,末了還提供了一份禮品清單,T恤、帽子、鼠標、記事本等等任選一樣。總之從頭到尾 Facebook 的招聘工作給我的感覺都很好,無論是工作質量、效率,還是人文關懷,都做得非常到位甚至超出預期。
后記
從最早萌生人肉翻墻的念頭,到親身實踐一遍,再到機會擦身而過,感慨良多。不過,至少這次的經歷證明了自己雖然功力還不夠,但也差得不太多。我尚未放棄,準備充分之后還會再試一次。面試是個經驗活兒。此次求職經歷中,第一次電話面試、第一次跟老外交流、第一次系統(tǒng)設計面試等等,都表現(xiàn)不佳。此前雖然當了無數次面試官,面人沒有一百也有幾十,但輪到自己以候選人身份經歷的求職面試卻只有一次。如果之前不那么猶豫不決,在試 Google 之前多試幾家積攢經驗,結果可能就完全不一樣了。
最后,跟同樣有意向通過找工作翻墻的朋友們說一句:翻墻的可行性其實很高,只要技術和英語這兩個硬指標過關,且家人不反對,再加上膽大心細,就很有希望??上业睦硬蛔阋怨奈枞诵?,只能寫點流水帳供大家參考罷了。
這篇面經欠了將近一個月,一方面是因為求職不順心生懶散,一方面是 blog 主機服務商接連故障,前兩天才完全恢復。今日終于把欠債補上了。
原文鏈接:http://blog.liancheng.info/job-hunting-in-california/#.UWDVPcowing