先介紹下我的背景吧。國內211非985高校的CS畢業,在美國東部一所大學念研究生。由於是一年的專案,沒有實習機會,只能一開始就找全職的工作,

亞歷山大

!!

一、求職時間表

我的時間表大概是這樣的:

九月份面了 Jane Street 和 Microsoft 的 first round。 Jane Street 作為technical 第一面我當然是掛掉了的。 Microsoft 是on-campus 的。我在面Microsoft 之前已經上完九章演算法班了,然後把演算法班的Ladder 做了一半。Microsoft校招很簡單。三十分鐘過了一遍簡歷,問了check if a string is a palindrome。過了兩週順利被邀請到onsite。

面完微軟,我就繼續刷演算法班的Ladder, 慢慢刷完。十月份的時候面了Apple 的Siri 組,Zillow, Square, 和 Morgan Stanley 的

desk strats

。 都跪了,所以我這裡講講教訓吧。首先,

簡歷上一定不要寫自己沒有把握的 project

。當時我的簡歷上寫了個略水的Machine Learning independent study,然後Apple 二面的時候面試官正好是做Machine Learning 這方面的,就把這個project 挑出來問了很多很深的問題,我好多都打不出來。其次,如果電話面試,然後你想靜靜地想一下,

一定要和麵試官說”can I have one to two minutes to think about this?”

, 不然對方被撂在那裡很尷尬。

當時一週內連續被3個公司拒,已經有點灰心了,不過咬咬牙繼續刷題,因為還有Microsoft onsite呢。我把LintCode 演算法班的ladder 做完後,就開始在LC 上按公司刷題。當時有Facebook 的一面,所有就專門刷Facebook 和微軟的題。說說Facebook吧。我先是參加了兩輪 Skype 電面。電面過了2天,HR就通知我去 Onsite。Onsite 是一些LintCode上做過的演算法題型,也有一些變型,但因為這個時候我已經刷了大概190道題了,所以基本都答出來了。結果,onsite 完一週,我就收到了 offer! 頸部驚喜!

二、Facebook 面試準備

在面試過程中,工程師和軟體開發員需要經歷多輪編碼能力考驗。所以,在面試

Facebook 軟體工程師

崗位之前,最好先準備:

1、基本資料結構和演算法

包括列表、陣列、雜湊表、協議棧、佇列、堆陣、

樹形圖

、遍歷(BFS, DFS)等等。這些是軟體工程師面試的最基本知識儲備,如果不能熟練掌握這些基本資料結構,那麼面試透過就希望渺茫了。

2、工作經歷和職業興趣

充分熟悉簡歷,準備好如何談論專案的細節、成果、影響等,想好未來工作期待、可能遇到的問題及問題解決方案等等。

3、Facebook 的企業文化

要成為頂級程式設計師,除了熟練資料結構和演算法、有清晰職業規劃,還需要了解 Facebook 的企業文化,成為一個符合 Facebook 企業目標和工作節奏的人。所以,在面試 Facebook 軟體工程師崗位之前,請確認好你是喜歡

馬克·扎克伯格

所創造的企業文化的。

做好以上準備之後,便可以開始進擊 Facebook 軟體工程師的面試流程啦。

三、HR電面

無論申請 Facebook 哪個崗位,面試第一步都是接受 HR 的電面。

準備建議

選擇安靜環境接聽電話:以對待

扎克伯格

的態度對待電話面試,找一個安靜環境而不是星巴克,以確保電話暢通。

提前在 LinkedIn 檢視 HR 個人資料:瞭解 HR 的學校、工作經歷和愛好等,這不僅是有禮貌的行為,而且有助建立融洽的關係。

嘗試詢問 HR 對後續面試的建議:在恰當時機,可以詢問 HR 是否願意分享一些面試技巧和竅門。

工程師電面

這一階段將會由一位 Facebook 工程師擔任面試官,主要面試內容為 coding。

面試流程:

自我介紹:面試官會要求你進行自我介紹,並說明想應聘的職位。

職業期望:5-10 分鐘,面試官針對你的工作經歷和職業期望進行提問。

coding:30-35 分鐘進行 coding,這是面試官瞭解你的解決問題方式的重要環節。

提問面試官:最後 5 分鐘提問時間,這是從內部角度瞭解 Facebook 軟體工程師的好機會。

1。 coding面試在一個你和麵試官共享的線上編輯器上進行。

2。

coding question

有1個或者幾個,問題長短適當,能在幾分鐘內解釋好、10-30分鐘解答完。

3。一般不問技巧或估算問題,例如,面試官並不關心海里能塞下多少個乒乓球。

4。 可自行選擇解題方式,但面試官可能新增進一步的限制或要求。

coding 面試準備建議:

刷題:用一種最有效率、bug free 的方式練習解答演算法問題,可以在 Lintcode 上刷題。

採用簡單編輯器編碼:面試可能使用沒有語法加亮和自動填充的

工具編碼

(比如 CoderPad)。

計時練習:coding 面試的解題時間有限,按時完成至關重要。可以和朋友一起模擬面試。

思考 2-5 年內的職業期望:面試官可能問及你的興趣和作為工程師的優勢。

準備 1-2 個問面試官的問題:最後 5 分鐘是提問面試官時間,所以要準備好 1-2 個有助增強面試官好感度的問題。

四、現場面試

面試 Facebook

軟體工程

師崗位,你在一天內會經歷 4-5 輪面試,這些面試分為 3 種類型:

Coding 面試:解決一些基本的程式碼問題

設計面試:展示設計能力,設計問題依據你的背景而定

行為面試:問及工作經驗和求職動機,以及其他 behavioral questions

除了很早/很晚參加面試的人,其他人會由HR或工程部職員帶著吃午飯,這會是向面試官以外的職員提問的好機會。

coding面試:

這次coding面試比工程師電面時難:面試官的提問更難,評估標準更嚴格。面試時間約為 45 分鐘。

面試流程

自我介紹:5 分鐘自我介紹時間,可能簡單加問一下你的背景。

coding:30 分鐘,有 1 個或多個 coding question,大部分是演算法面試題。

提問面試官:最後 5 分鐘提問面試官時間,這是從內部工程師角度更多瞭解 Facebook 和你感興趣的事情的好機會。

準備建議:

工程師電面部分提及的 coding 面試準備建議

練習手寫程式碼:coding 面試將在白板上完成,準備時可以用白板/紙和筆練習解題。

設計面試(Design interview)

設計面試有兩種型別:系統設計和產品設計。設計面試的目的是評估應聘者解決重要工程設計問題的能力。設計面試時長 45 分鐘,整個面試你一般都在說或者寫,面試官會問一個非常廣泛的設計問題並要求提出、評價你的方案。正如所有面試一樣,最後 5 分鐘是提問面試官的時間。

準備建議:

(1)系統設計

模擬系統設計面試:請一個工程師進行模擬面試,讓他提一個系統設計問題,如果正好是他正在做的專案那就再好不過了。

深挖開源系統的執行特點:例如,可以看看 levelDB,然後讀讀執行命令,瞭解如何在硬碟中儲存資料,如何將資料壓縮成不同的層?再多多思考哪種資料和大小是最優的?什麼情況下會降低讀寫速度?

(2)產品設計

反思自己的專案:思考做過的專案中,哪些是容易部分/困難部分?

面試官可能問:“你會如何設計一個

電子郵件

伺服器?”

可以考慮這些問題:當系統擴大到一臺機器裝不下時,如何儲存郵件?如何處理有大量收件人的郵件列表?如何處理人們濫用

垃圾郵件

系統?面對潛在的系統故障,如何保證系統是可靠的?

面試官還可能問:“你會如何設計一個用來構建豐富文件編輯器的

客戶端

-伺服器API?”

思考好這些問題: 客戶端如何從伺服器請求文件資料?尤其是文件大到我們不想在單一請求中下載它的時候?如何在API響應中顯示文件中粗體和斜體這樣的元素?在不破壞原有客戶端的情況下,想要給伺服器新增新特性,應該如何設計系統?

行為面試(Behavioral interview)

實際上,行為面試包括一部分行為面試和一部分 coding 面試。行為部分考察應聘者的性格、工作經歷和工作動機。行為面試的目的是評估應聘者能否適應 Facebook 的工程師文化。

準備建議:

瞭解自己:花時間回顧簡歷,面試官很可能提問你的工作經歷中的重要事情,例如,講述一次有人反對你的主張,但你仍然堅持推進專案的經歷?

梳理求職動機:想清楚你的求職動機是什麼?為什麼選擇 Facebook?為什麼要做軟體工程師?

思考如何與同事相處:弄清楚你會如何與同事合作?你會如何化解矛盾?你喜歡如何給予和接收反饋?

推薦閱讀:

90% New Grads 都懵逼的面試輪次,這些應對“騷操作”請收好

Uber 面試流程梳理篇 | 如何先人一步,拿得Uber Offer?

Apple 面試寶典 - HR, 電面, Onsite 準備建議

歡迎關注我的微信公眾號:九章演算法(ninechapter)。

精英程式設計師交流社群,定期釋出面試題、面試技巧、求職資訊等。