[討論] Facebook工程師分享面試經驗

作者: tonite ( )   2018-04-12 15:50:33
在網路上看到Andyy分享獲得Facebook職務offer的經驗談,覺得他寫的很有內容,再加上
我的朋友正在準備應徵美國的軟體工程師,因此把原文翻譯出來跟大家分享。
想問板上的各位,以矽谷為目標的人多嗎?
網頁版:https://goo.gl/eYYsTU
純文字:
獲得矽谷的工作offer究竟有多難?來聽聽一位Facebook新進開發工程師分享面試經驗!
「我剛完成7家矽谷不同科技公司的現場面試(2017年11月),最後選擇接受Facebook給我
的offer。以下就來分享我如何準備面試,以及學到的心得。」
前往矽谷的遙遙路途》
當我還在澳洲的大學讀計算機科學的時候,我就時常想著未來要在矽谷當軟體工程師。矽
谷是新創科技的中樞,雖然也有許多胎死腹中的發明。這個目標讓我很有衝勁,我不斷向
前努力。
我之前的工作在墨爾本一家公司擔任首席iOS工程師,離職後回到我的家鄉伯斯進修充電
。我就在這個時候開始潛心準備前往矽谷的面試,開始走上這條萬分艱鉅的路。
如果你跟許多不同的軟體工程師討論起coding interview的話題,許多人的提出的想法會
與一般常見的面試做法相異。這些人所持的論調可能是覺得在coding interview(又稱白
板面試)解決一道又一道演算法問題跟軟體工程師每天實際要做的日常庶務並不一樣。
在這篇文章中,我不會觸及這些討論。相反的,我會從我自己親身經歷面試過程的觀點,
來分享不同公司的面試文化與做法,並且將文章重點放在我從這過程中所學到的東西。
面試就像考試一樣需要答題技巧》
在準備過程中,我一直知道想獲得矽谷工程師的offer不是一件容易的事,但一直到我真
正開始進行面試過程後,我才體會到這真是比登天還難。
在投遞履歷的過程中,我有使用免費和付費的模擬面試服務,讓我可以和有業界經驗的人
先透過電話進行虛擬的coding interview。這樣的練習對於承受實際面試的壓力絕對是必
要的。不過以後見之明而言,模擬面試和真正的面試還是有相當大的距離。
如果你從未進行過模擬面試的淬鍊就直搗黃龍應徵你內心最愛的dream job,那麼我可能
非常不建議你這麼做。實際面試的緊張會全面性地影響你的表現,而這樣的緊張只能經由
不斷的練習來舒緩。
唯有藉由持續不斷的練習,你才會逐漸培養出面試時的自信。
我所遇到的不同面試關卡》
如果你已經充分準備並且在一開始的電話面試表現良好,那麼你可能會獲得實際參與
coding interview的機會。到場面試的流程可能長達4至6小時,依不同公司而有所差異。
這趟矽谷之行,我費盡苦心將7家不同的面試安排在同一次行程中,而這也讓我對於目前
矽谷的面試生態獲得第一手的資訊。
一般來說,現場面試會包含三個主題:演算法、系統設計、人格特質,而我的事前準備也
同樣是針對這三個主題。然而,有些公司並不是完全按照這樣的安排,而會在面試時涵蓋
更多實際操作技巧。
針對這些主題,我會在以下依序描述。
【演算法面試】
這是最常見到的面試主題。面試官會請你在白板上解一個問題,藉此判斷你的專業知識是
否足夠,包括資料結構、演算法分類、遞迴、時地分析、模式與設想極端情況。在這一關
,你通常會先想到一個用暴力法解題的答案,然後再試著去改善這個答案並且提出不同解
法下可能需要的妥協。
這些內容是我準備面試過程中主要專注的方向,我每天不間斷地準備了六個禮拜,在家裡
掛一個白板不停地解題,分析時地複雜度,並且仔細研讀每一行程式所起的功能。
對我而言,我喜歡在白板上做演算因為我不需要擔心真正compile時的語法錯誤,而只要
專注在解決一個問題。有些人可能不喜歡在白板上算,但我的建議是,只要不斷練習,你
對白板演算的想法可能會改觀。
【系統設計面試】
這是面試中一個有趣的主題,而且是我事前準備低估的部份。面試官會請你設計一個系統
(在白板上),例如停車計費系統、即時通訊軟體、社群動態等常見的系統。
在這一關,面試官要考核你的事你如何掌握一個大略的概念來設計出系統,並且系統要符
合所有的條件與限制。身為一個面試者,你的任務是詢問正確的問題,協助自己釐清系統
應該要有的功能和面臨的限制。面試進行像是一場對話,間歇參雜手繪圖表與即席教學。
你需要表達的是抽象的概念與設計,而不需要真正寫出可執行的程式。
當然,在對話進行的過程中,你要記得適時的在話語中展現對於系統運作的了解。如果你
是後端工程師,你不會真的去談到客戶端應用軟體的機制等細節,除非你在那方面有累積
一些經驗。我個人是iOS的工程師,所以我會盡量談到系統架構、功能模組化、設計模式
等熟悉的領域,而不是擴張API端點、增加人力、雲端運算服務等部分。
【人格特質面試】
面試官會問一些有關於你自己的問題,還有面對不同情境時會採取哪些行動。準備這一關
倒不像演算法那麼困難,但依然需要你重新檢視有關於自己的過往經歷。
問題可能會像是:
●你如何面對失敗?
●你最大的弱點是什麼?
●你如何解決衝突?
●如果能夠重來一次,你會選擇重做哪件事?
我認為要在這一關出包是滿不可能的,但事實上,我聽到許多人搞砸了這一關。他們可能
試著想把自己的優點裝成缺點,打造一些他們認為面試官會想要聽到的答案,或甚至把失
敗的專案
怪到其他人頭上。例如:
●我的缺點就是我太專注了
●那全是傑克的錯,他在整個專案期間一直請病假
這些面試官都受過完整的訓練,能夠精準地看出廢柴與廢文。如果你試圖用唬爛或欺騙的
方式度過這一關,基本上是把自己獲得offer的機會拱手讓人。試著做自己,展現你的真
誠、對工作的熱誠,承認你的不足之處並且主動表示要如何改善,這樣就足夠了。
【企業文化匹配性】
這個主題通常會跟人格特質一起進行,主要是想確認你是否符合這家公司的企業文化與價
值。舉例來說,Facebook信奉類似網路駭客的大膽與創造,從錯誤中嘗試,不怕棄舊迎新
。然而,Airbnb的理念則是想要創造一個人們不管旅行到哪邊都很有歸屬感的世界,所以
他們想要找的是很有主人風範與懂得待客之道的人才。
許多科技業龍頭公司都很注重企業文化以及錄用符合公司信念價值的人才。如果你面試的
公司也很看重企業文化匹配性,事先查詢該公司的經營理念是很重要的。在你的過往事蹟
中找尋與這家公司價值有關的案例,讓你能夠完整的傳遞你的價值與該公司符合,並且在
面試時獲得共
鳴。
【配對寫程式】
一個滿特別的面試關卡,你會跟另外一個工程師分配到一組,並且可以使用一台已經有開
發環境的電腦設備,就跟實際的工作環境類似。你會被分到一個任務,上面列有你應該達
成的項目。當你每完成一個項目,面試官會繼續要求你增加更多的功能,直到測試時間用
完為止。你可以自由使用任何需要的資源,包括Stack Overflow或是線上文件。
我覺得能通過這一關的面試者通常是要有實戰經驗的。跟白板面試不同,你寫出的程式必
須沒有語法錯誤、compile成功,因此你對於語言和使用環境要非常的熟。否則,可能光
是在網路上找答案就會浪費你許多時間。
在我前一份工作,我很在意clean code,甚至專案定案後我會再進行最後一次編修讓程式
的可讀性趨近完美,也方便其他專案成員理解我的code。我的這個習慣讓我在這一關有點
吃虧,因為我太早就進行最後的編修,讓復原變得有點困難。我建議在這一關可以不用那
麼在意clean code,只需要向面試官提及你在實際作業的時候會寫clean code,但現在時
間有限無法顧及那麼多,面試官是可以理解與接受的。
【除錯與修補】
工程師的主要任務之一是接受多個來源的報錯與修補。在這一關,你會拿到一張錯誤與修
補的清單,同時還要一面注意是否有未列在清單上的潛在錯誤。
我只有遇到一家公司有這個面試關卡,但我覺得這一關是很事前準備的,尤其對於剛畢業
的新鮮人或資歷尚淺的工程師來說。每個程式環境都會有獨特的注意事項與眉眉角角,我
自己在這方面的經驗主要來自IDE(集成開發環境)以及過去幾年來接觸過的框架。
【測試領域專門知識】
寫程式在大部分的主流語言中有很多是相同的。如果你會用物件導向的某種程式語言,那
麼對於你學習另一種語言時也會很有幫助。
然而,這一關是在測試你特定語言與框架的知識,而非跨語言通用的部份。你會被問到和
特定環境有關的API、記憶體管理、容量、限制、發展史等知識。
這一關並不好準備。與上面提到的除錯類似,我覺得這也是要靠實戰經驗。依照你所應徵
的職位等級,你所提供的答案可能會佔不同的權重。例如,如果一個應徵初階職位的人不
知道為什麼API是以現在的模樣所建構,那可能還無傷大雅。但是如果應徵的是資深工程
師的職位,在這一關可能就會被扣不少分數。
【作業系統知識】
根據你所應徵的職位或部門,你可能會有一關面試是專門在談作業系統的。在這一關,你
被問到的問題是用來評估你對於電腦作業系統低階語言運作模式的了解。
老實說,我沒料到會有這一關。作業系統是我在年代久遠的大學時修過的課,現在差不多
都還給老師,因此面試時的表現沒有很好。
準備方向建議》
如前所述,面試就和考試一樣需要答題技巧。即使你目前是一個在工作上表現很優秀的工
程師,或是在學校的成績很好,那些成就不一定會反映在你實際面試時的表現。
堅持不懈,重複練習,始終如一的準備面試,才是能夠影響你是否獲得offer的關鍵因素

【至少要有的知識】
如果有人問我,面試準備應該專注在哪些領域?我會建議這些部份:
●練習用手寫程式,先寫好以後才放到IDE重新看一遍,將這個動作練到如呼吸一般自然
●鑽研資料架構的知識,包括不同架構的優缺點比較。我發現從頭開始學習建構資料可以
學到抽象概念以外的東西
●徹底了解大O(漸進符號)與時地複雜性,這會對你的演算法與解題有幫助
●了解主流的排序演算法,因為時地複雜性可能會影響到你用來解決演算法的答案。
【準備時間要多久】
依照你的時程,你可能會希望早點或晚點開始。我面試的許多公司都有12個月內不接受再
次應徵的規定。另一方面,如果你知道你一年內都不會完全準備好,那麼還不如現在就開
始面試並且接受現實的洗禮吧!至少,你會知道實際發生的狀況,等到你真的充電完成後
並準備開始「認真」面試時,內心對於面試流程已經有底了。
【別擔心】
請相信自己做得到!
原文作者:Andyy Hope
原文連結:
https://medium.freecodecamp.org/software-engineering-interv…
本文為 Random English Everyday原創翻譯,轉載請保留出處
**
作者: inaccord (接納與改變)   2018-04-12 16:13:00
推 感謝大大翻譯
作者: paint (有斑紋的馬)   2018-04-12 16:15:00
內容還不錯 不過建議貼PTT的排版可能要調整一下
作者: oas (GTr)   2018-04-12 16:15:00
推!!!
作者: liangnash (涼奶昔)   2018-04-12 16:57:00
正常,感謝分享!
作者: WoodPunch (木頭拳)   2018-04-12 16:59:00
推分享
作者: paint (有斑紋的馬)   2018-04-12 17:03:00
還是有些問題 可以開網頁版自行檢查 https://goo.gl/xqEpBM
作者: freedls (阿嬤覺得你冷)   2018-04-12 17:06:00
thanks
作者: kkoala (Shong)   2018-04-12 17:12:00
感謝分享
作者: bug147123 (HowDoYouTurnThisOn)   2018-04-12 18:38:00
作者: askaleroux (FalconTW)   2018-04-12 18:40:00
push
作者: content71 (羅莉飼養中...)   2018-04-12 19:02:00
看完推,感謝
作者: greenstar27 (star)   2018-04-12 19:10:00
用心,推
作者: v9290026 (CH)   2018-04-12 19:16:00
感謝
作者: windverb (哈哈哈)   2018-04-12 20:04:00
感謝分享!
作者: devilkool (對貓毛過敏的貓控)   2018-04-12 20:09:00
手機看蠻正常
作者: pardo (pardo)   2018-04-12 20:22:00
作者: a2005414 (PTT金城武)   2018-04-12 22:02:00
推推 雖然fb感覺有點走下坡了
作者: pttworld (批踢踢世界)   2018-04-12 22:15:00
修改後用BBS Client Free看也是正常的
作者: paint (有斑紋的馬)   2018-04-12 22:16:00
真的 珍貴資料不如改放GitHub
作者: Awenwen (初心者)   2018-04-13 02:10:00
推,謝謝分享!
作者: davidtnfsh   2018-04-13 07:41:00
作者: bobbyaxe   2018-04-13 09:07:00
推,感謝
作者: cacadeon (deon)   2018-04-13 12:21:00
感謝分享,很受用
作者: Eric0605 (我還有點餓)   2018-04-13 12:52:00
作者: yrarbilUTN (圖總大台)   2018-04-13 13:21:00
矽谷為目標+1
作者: s1003352   2018-04-13 14:26:00
作者: johnny94 (32767)   2018-04-13 14:52:00
先推再看
作者: ufo890 (\CherryBunny/)   2018-04-14 10:02:00
感謝分享!看完讓人振奮!
作者: coffeewind (coffeewind)   2018-04-14 16:40:00
作者: gowellplayer (gowellplayer)   2018-04-15 17:20:00
推!
作者: BoomJames (克里阿密皇)   2018-04-15 21:40:00
推 表哥正在FB上班
作者: asif (第二人生)   2018-04-20 16:10:00

Links booklink

Contact Us: admin [ a t ] ucptt.com