面試體驗:Facebook 篇
Google、Microsoft 和 Yahoo 都是去年的事情了,接下來說說今年的吧。其實我在豌豆莢非常爽,跟身邊的設計師和工程師合作都很愉快,所以唯一能夠誘惑我去面試的就只有 Facebook 了。最初接受 Facebook 面試邀請的原因並不是追求它的 offer,而是我就想了解一下 Facebook 是怎麼面試的,有什麼是值得豌豆莢招聘借鑑的。
過去在百度做面試官,只是面試而已,公司招不招得到人我沒什麼感覺。我覺得公司招不到人就招不到人咯,我們沒必要擴張得那麼快啊,先專注於做好手頭上的專案再說嘛。豌豆莢其實不是著急要招前端工程師,我們還是堅持只招一流人才,只不過長期發不出 offer 還是讓人感覺招聘有問題——我們浪費了大量的資源在面試上,發不出 offer 意味著回報率低,因此我們總要想辦法研究如何提高回報率。
回到正題上來,我選擇參加 Facebook 的面試,就是想看看他們是如何選拔人才的,他們所使用的題目是如何設計考點的,是不是設計得比我們的要好。因此,在收到 Facebook HR 的郵件後,我回信說願意聊一下,然後跟他約了一個時間進行電話溝通。因為 Facebook 總部在美國西岸,所以之後的電話溝通和電話面試都約在了早上 8:00。儘管這導致他們要晚一個小時下班(按朝九晚五算的話),不過 HR 也很通情達理地接受了。(我猜大多數工程師都不會採用朝九晚五的正常作息時間吧。)
HR 在電話裡先簡單介紹了一下 Facebook 現在的情況,然後說明這是 Menlo Park 總部的職位,讓我確認如果順利應聘的話我會願意到美國去。接著 HR 問了我兩個很基礎的 CSS 問題:display block 和 inline 有什麼區別?position 有哪些取值?我覺得 HR 能夠問這樣的問題對於工程師來說是很爽的事情,因為純粹的小白就被過濾掉了,也不需要浪費工程師的時間來面試。(我在之前的文章中說到過,在中國大多數面試前端工程師職位的候選人無法回答這兩個如此基礎的問題,不知道在美國是否也如此。)隨後 HR 問我還有沒有什麼不明白的,或者關於 Facebook 想要了解的,我說沒有了。HR 的最後一個問題是「你為什麼選擇 Facebook?」我當時心裡想的是,「是你主動聯絡我的,我沒想過這個問題哦」。於是我跟他說,「我暫時沒有答案。我現在在豌豆莢工作很開心,不過我也樂意多地瞭解 Facebook。」
電話溝通後,HR 給我發了兩道 puzzle,選做其中一道就可以了。兩道題目都是前端相關的,其中一道需要設計一個簡單的演算法,另一道則需要支援移動裝置觸擊互動。這種解 puzzle 的面試方法我不是第一次遇到了,4 年前申請 Google 的 Web Developer 職位時也遇到過類似的 exercise,只不過題目只有一道,沒有選擇的餘地而已。相比起 4 年前 Google 的 exercise 而言,這兩道 puzzle 的考點更加 update。(4 年前的 exercise 還需要考你如何做圓角和背景漸變,現在都是用 CSS 3 搞掂的了。)
我花了一週的時間完成了一個 puzzle,搞掂了演算法設計和介面實現,連 unit test 也都寫了,然後提交給 HR。HR 在 review 的結果出來後,把我介紹給另一位 HR,說她會幫我安排接下來的面試。第一輪面試感覺有點像 Google 的,主要由 3 道題目構成。題目的考點設計得很好,基礎知識能被覆蓋到,常用技法也需要用到,但又絕對不需要某一方面很高深的知識。(設計得不好的題目往往是依賴於面試官很熟悉的一個難點,如果你不知道這個難點,或者你的理解跟面試官不一樣,你就完蛋了。)
第一輪面試的最終通話時間為 90 分鐘,我猜這意味著我做得不夠好,因為如果以 Google 的標準來衡量的話,45 分鐘解 3 道題才算及格。經過後面幾輪面試我才發現,原來 Facebook 面試一般是要求 60 分鐘解 2 道題。第一輪的面試官之所以給我加了 1 道題,估計是因為第 2 道題我做得不好,所以他相當於換了一道題給我做。面試結束,面試官又問了之前 HR 問過的問題,「你為什麼選擇 Facebook?」我還是那樣子回答。
面試一個星期後,HR 郵件跟我說,我通過了上一輪面試,接著要安排下一輪面試。第二輪面試感覺跟第一輪差不多,包括長度和難度。只不過這次就是 60 分鐘 2 道題,估計是因為我 2 道題都解出來了吧。面試結束時面試官又問那個問題了,我決定反過來問他是否喜歡 Facebook 的工作。他說 Facebook 的工作很好,周圍的人都很聰明,能夠從他們身上學到東西,同時公司提供一天三餐,福利好到覺得自己被寵壞了。我其實不是很在乎福利的部分(豌豆莢又不是沒有一日三餐),我更在乎的是人是否聰明,合作的過程中他們是否總能教會你一些你過去不知道的事情(這是我現在在豌豆莢擁有但離開就可能失去的部分)。隨後我跟他說,我在乎的是能否跟聰明人一起工作,聽他這樣說感覺 Facebook 不錯。
又過了一個星期,HR 郵件跟我說,需要安排我到美國面試。我一開始對這件事也不特別在意,覺得那你就慢慢安排吧,有人報銷機票讓我到灣區旅行就是好事情。在隨後的電話溝通裡面 HR 跟我說,因為今年的 H–1B 簽證配額已經花出去一半了,如果按照這個速度估算的話可能到 5 月底簽證配額就會花完,所以希望我儘快到美國面試。(如果簽證配額花完了,有沒有 offer 都沒意義了。明年 4 月才能申請明年的配額,申請成功也要等明年 10 月簽證才生效,就算公司很想要你,也只能先安排你在海外辦公室工作一年。)於是我就連忙辦簽證 5 月下旬飛往美國參加面試,因此也就有了我之前那篇《三藩市灣區一週遊》。
4 輪面試安排在一天內完成,Facebook 委託旅行社安排好往返機票和兩晚住宿,隨後我就出發了。因為害怕遲到,又因為美國郊區的公交又是一小時一班的,所以面試當天我早早就起床了,結果發現酒店門口是長期有計程車的,打車到 Facebook 後等了一個多小時才到原本約定的面試時間。HR 在見到我後先把我帶到 micro-kitchen 讓我拿吃的喝的,並且問我那麼早來是不是沒有吃早餐。我說確實沒有,然後她就讓我拿一些食品做早餐。(其實我應該在酒店叫早餐的,因為 Facebook 允許每天報銷最多 $75 的餐飲開支。)隨後她把我帶到用作面試的會議室,給時間我解決早餐,並且跟我簡單說明了當天的安排:早上 2 輪面試,結束後她會來帶我去 Facebook 餐廳吃飯,然後下午還有 2 輪面試。
總體上來說,4 輪面試的形式還是一樣的,每輪都是 60 分鐘解 2 道題目。所有題目都是前端相關的,HTML + CSS + JS 都會考到,不過不涉及 HTTP。最後一輪的面試官有點特別,他先問了一個很古怪的 CSS 問題,然後又跟我討論了一個跟前端不相關的程式設計問題。之所以說他那個 CSS 問題古怪,是因為在現實中大家都不會那樣寫 CSS,但他寫出來了問你會顯示成怎樣,不是非常熟悉 CSS 標準細節的人又很難完全答對(我也有答錯了的地方)。至於第二道題,他說他是突發性想出來的,他自己也不知道最優解是什麼,就是想跟我討論一下能夠如何優化,我就跟他討論了幾種可能的優化方式。所有他又說如果把常數 k 改為可以變成任意大的 n 怎麼辦?我就說 n 的問題能夠分解為 n/2 的問題,因此能夠通過二分法來優化。
通常情況下,如果由於面試而進入一家公司的話,HR 所做的只是把你從 A 地帶到 B 地,保證你順利完成面試。如果是朋友帶你參觀公司則會很不一樣,他會帶你去看有特色的東西,並且告訴你這個好玩那個有意思。Facebook 的 HR 給人的感覺更像是後者,她向我介紹 Facebook 牆上的塗鴉,帶我去天橋上看 Hacker Square 全貌,並且告訴我每次 hackathon 開始時大家就會聚集到 Hacker Square 上來。除了 HR 以外,也有一些面試官會提及他們喜歡的 Facebook 特色。這讓我覺得 Facebook 裡面還是有不少員工挺喜歡這家公司的。
面試結束後,HR 跟我聊了一下,告訴我如果有 offer 的話接下來會需要什麼。根據之前 Google 面試的經驗,我猜 Facebook 會不會也要我提交一大堆的材料,HR 說只要提交申請簽證所需的學位證就可以了。之後 HR 讓前臺幫我叫出租車,在等待的過程中前臺還很好人地問我是否需要拿喝的,需要的話可以在大堂冰櫃裡面拿。
隨後的週末是美國的亡兵紀念日,週六到週一連續放假三天,我則利用這個長週末去參加灣區的各種好友聚會。週一中午 HR 打電話來說要發 offer 了,待細節確定後下午再打電話給我告訴我具體的數字有多少。我當時就在想,難道 Facebook 的面試官和 HR 週末都工作?這個效率很高呀。只要面試官稍微拖一下,週五的面試就必須等到下週才能有結果。而且確定 offer 細節估計也要經過幾個人審批吧,節假日發 offer 就意味著大家都要在節假日處理工作了。
總體上來說,Facebook 面試過程中對候選人的關懷做得很好,效率也不錯。讓我「大開眼界」的是面試題,原來真正好的面試題並不在於它有多難,而在於它有多簡單,簡單到熟悉這個領域的人一下子就明白到你在說什麼以及想問什麼。能夠進入 Facebook 的人應該都覺得面試不難,至少跟中國的面試對比起來如此,那是因為 Facebook 把覺得面試有點難的人都過濾掉了,而中國那些很難的面試反而沒什麼區分度。另外順便給大家推薦一個交流學習群:812--855--908
《面試體驗》系列文章到此就結束了。接下來有時間的話或許我會寫寫跟應聘美國職位有關的事情,例如 H–1B 的週期和配額是怎麼樣的,選擇什麼時間面試對你比較有利,拿到 offer 之後該如何為新的生活做準備等等。我知道對於很多在中國讀書或工作的人來說,直接應聘美國職位看起來門檻很高,那是因為你身邊很少人這樣做所以你不瞭解而已。只要你願意花時間去了解清楚,你會發現這件事其實沒有你想象中那麼難。如果你對這個話題感興趣的話,可以訂閱我,或者留言提問。
寫完之後覺得小編覺得自己做的不對,有點失去了誠信,但是以後會更改,也希望得到大家的支援和原諒。
轉發點贊分享,沒有看夠的可以私信關鍵詞linux分享更多,C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK技術,面試技巧方面的資料技術討