2021 Summer倫敦臉書實習 面試流程及準備心得

Stanley Chang | 張子健
12 min readJan 14, 2021

--

這是關於2021實習準備的第一篇文,下面這個是第二篇,雖然兩篇的內容沒有什麼先後之分。

還是建議兩篇一起品嚐XD

2021 Summer Internship 求職終於告一個段落,很幸運也很期待能加入Facebook。非常感謝一路上幫助我的所有人。

前言

前往德國一年後,很幸運的能在轉領域後不久就找到軟體工程師的實習(Software Engineer Intern)。除了靠履歷以及刷題以外,很大部分是靠運氣以及其他人的幫忙。收到FB offer後,正式宣告過去這幾個月瘋狂的生活告一個段落,很慶幸能成為Facebook的一員。非常感謝朋友以及家人的扶持,更由衷感謝完全不認識我卻幫我內推的 @Dalia,明年倫敦見了。

一路上看過無數的文章或是影片分享,覺得都是我能走到現在的養分,因此決定記下找工心得,除了給後人參考外也順便給未來的自己回味。本文將紀錄我轉碼後的心路歷程,包含打CS底、刷題心得、FB 面試流程等一些我自己的想法。歡迎不吝給予建議,謝謝!

心路歷程

2019 年五月收到TUM CSE 的offer後,從材料背景轉到CS的我才驚覺好像沒有回頭路了。還記得一開始的想法是:先試看看自己適不適合CS這條路,如果不喜歡的話還能回來舒適圈繼續搞材料模擬,當時的我還沒有破釜沈舟的決心,直到跟 @Alex 聊天後,他叫我就選好一條路好好走,這樣才走得好。此外,受到同樣也轉領域成功的 @jimmy 啟發,他丟下一堆材料領域的書卷獎,等於捨棄各大名校的機會(看了這篇ICML paper就知道,強者在哪個領域都能發光發熱),轉領域的我丟下的包袱跟別人比起來根本不算什麼。

換到一個全新的領域後,發現履歷上的東西根本要全部打掉重練…

我的目標是FAANG (Facebook, Amazon, Apple, Netflix, Google) 或是一些獨角獸的Software Engineer職位,查了查發現這些公司New Grad大部分都是實習後轉正職的,便決定以進這些公司的實習為目標。履歷上軟體相關經歷空空如也的我,決定延半年畢業,使我2021暑假還能保有學生身份(才能當實習生),原本很怕延了畢卻沒找到實習,但沒試過我想以後一定會後悔吧。

PS. 查了查發現大公司如Google, Facebook的intern錄取率為2%左右,而return offer rate可以期待在50%上下,而Full Time錄取率則低於0.5%。雖然這數字的來源沒有明確根據,但兩個數字之間比較起來應該還是有意義的。以機率的角度來看實習轉正應該還是一條容易一點的路XD

歐洲不像美國一樣有那麼多軟體公司,而美國公司在歐洲的總部也通常不在德國(大部分是在倫敦或都柏林),所以我一開始的希望是位在德國(至少我能合法工作且公司不需要另外幫我辦簽證)的Amazon或是Microsoft等公司、以及在英國或愛爾蘭且願意幫實習生辦簽證的大公司。後來發現位於德國的公司我收到一堆無聲卡,然後發現這些在英國或愛爾蘭的公司們(Spotify, Twitter, Stripe, Salesforce, Pinterest, Verizon等)大都不願意幫實習生處理簽證問題。<- 其實也挺合理的,他們有當地人、在當地讀書的外國人以及全歐盟的人可以挑(不確定英國脫歐後有沒有影響),怎麼看我這個不在當地唸書的非歐盟人都是排在最後的XD

所以我覺得我真的是蠻幸運的,能被一家好公司給撈上岸!

時間規劃

我的規劃如下:

2019 六~九月:出國前在台灣先做了一份ML相關的RA

2019 十~十二月:碩班開學,加強演算法相關知識,閒暇時做side project,投履歷找德國當地工作(此時很慶幸在台灣時有先累積一些經驗,面試時公司有興趣的都是過往的實戰經驗)

2020 二~三月:扎實的又上了一遍資料結構(發現以刷題來說資料結構比演算法更重要一些)

2020 四~七月:開始刷題以及做Working student,履歷上的project很多都是這學期的課的作業包裝一下放上去的

2020 八~十月:每天生活就是睡覺、吃飯、刷題以及一週兩天的working student,同時上作業系統(前一學期才剛越級打怪上完平行程式,這時上OS真的有身心舒暢、豁然開朗的感覺)

You can’t connect the dots looking forward; you can only connect them looking backward. So you have to trust that the dots will somehow connect in your future.

Steve Jobs 1955–2011

其實當初我往前看也是覺得很徬徨,現在回頭看才覺得過去做的這些似乎都蠻合理也蠻連貫的,所以就算沒找到實習,我也告訴自己這些我做的準備以及所培養的能力未來在找Full Time時也會用到!

關於刷題

關於刷題的方法我是採取先DFS (Depth First Search) 再BFS (Breadth First Search) 的方式,先按照tag一個一個刷,將該tag 題號400之前的easy、medium全部刷完(跳過一些like/dislike比例太差的),這時我刷了Tree、Graph、Binary Search、Linked List以及Backtracking,因為這些主題都比較獨立,思路也比較固定,先把這些知識鞏固好後未來遇到變化題才比較有個方向。直到8月時開始刷top 100 like questions,這時刷得很慢(主要是因為DP…)因為這100題都是經典題,裡面包含了很多的知識點,每一題都徹頭徹尾搞懂的話,真的對之後有很大的幫助。

我一開始刷題時是看到題目就直接開始coding,後來發現這不是好的習慣,會讓面試官覺得你是個很unstructured的人,後來我改成遇到題目先用ipad做筆記,甚至在ipad寫下psuedo code,直到開始練習mock interview時才發現因為疫情關係我根本不會有機會遇到白板題,所有的面試都會是在online editor上進行,才開始使用打字的方式做筆記,一開始也是蠻不習慣的,因為相較於用手寫,打字時比較難visually呈現一些概念。總之就是盡可能讓平時練習時跟實戰越接近越好。

還記得八九月刷到走火入魔的時候,連睡覺都會夢到,被我夢到的資料結構有hash map跟tree,結果這兩個資料結構面試時都有遇到,真的是蠻巧的XD

到終面前一天總共刷了225題,但是看過的題目應該有300–400題,有些題目看了看懂思路之後就沒implement出來了,尤其在FB終面前在一畝看了很多FB的高頻題,想說至少讓自己在遇到題目時有個思考方向就好。

很巧的是,終面當天早上連續收到Intel、TeamViewer以及Stripe的拒信,更讓我覺得面試得來不易,下定決心一定要拿下當天的機會。

現在回頭看真的覺得蠻辛苦的,犧牲了很多旅遊、或是跟朋友hang out的機會,但真的覺得自己成長了很多,不管是problem solving、coding或是communication的能力,也覺得自己CS的基礎因此扎實了不少,應該能讓未來走得更長更遠吧,還是很慶幸能有這樣的結果!

Facebook Interview Process & TimeLine

9/14 submit referral

9/21 Hello from FB

9/29 reply back

10/13 phone interview(我是選視訊) (bluejeans + coderpad)

10/27 virtual onsite (bluejeans + coderpad)

10/30 offer

9/21 收到FB recruiter的信之後,驚覺面試已到必須趕快練習mock interview,也很謝謝@Brian 一開始陪我練了幾次,拖了一個禮拜後回了信,信中除了問available time slots之外還有一些基本問題像是Why do you want to work for FB? What’s your area of interest? Explain a project of you等等。

總共有兩輪的Technical Round,如果兩輪結果介於hire/no hire之間,才會再安排第三輪。第一輪開始時我真的是緊張到爆,因為是我的第一個面試,而且一開始沒有閒聊就直接上題目,但不知為啥開始解題進入Zone後我的手汗就停止流了xd,這輪遇到的是Medium+Hard,大概花了20分鐘寫完第一題,而第二題我其實最後沒有寫完,我只給出比較差的解法然後用講的形容可以如何優化。

第二輪比較酷的是同時有兩個Engineer,但其中一個只會在旁邊觀察,不會說話也不參與面試。一開始有大概10–15分鐘的Behavoral Interview,都是圍繞在我過去的經驗,比較特別的是我一直強調我喜歡fast pace,而FB這點很吸引我,而他們感覺也非常感同身受,最後問問題閒聊時甚至還記得,應該在cultural fit這點加了一些分。這輪遇到的是Easy+Medium,我都蠻快就給出最佳解(當然還是必須用講的來帶過一些優化的過程),甚至寫完後還剩下不少時間讓我問了一堆問題。

FB的Technical interview一般都是40–45分鐘然後通常要解出兩題最佳解,但根據題目難度以及面的職位也會有所不同,其實題目都是一樣的只是不同職位的hiring bar不一樣。面試中最重要的就是持續溝通,讓interviewer知道為什麼你要採取此方法、你打算怎麼達成、此方法的 complexity是如何、不同方法間的tradeoff等等,就算卡住了也要讓面試官知道你卡在哪,他才能幫你!溝通真的非常重要,把面試想像成跟同學或朋友一起在解題的過程,而不是對方單一的在拿放大鏡檢視自己。

Behavioral Interview 我是覺得相較於coding重要性低很多,但也不代表能放掉XD

我是使用Cracking the Coding Interview裡面所建議的表格,表格columns為履歷中所做過的projects,rows為該project的challenges, mistakes, leadership, conflicts等等,有這樣的整理基本上遇到任何問題都能迎刃而解。

然後要切記所挑選的example要記得盡可能地貼近該公司的core value,像Facebook的話就是Be bold, Focus on Impact, Be open, Move Fast以及Build Social Value,而亞馬遜則是14 leadership principles。

全部面下來感覺FB最看重的就是解題能力(CS fundamentals)、code fast、communication以及是不是culture fit。

整個十月我幾乎每天都安排兩個mock interviews on Pramp,練到終面前一天甚至把上面的題庫刷完了XD

除了LeetCode之外我最推薦的就是pramp了,雖然FB是我的第一個Technical Interview但因為我在上面練了很多,所以面試時覺得從容很多。

在pramp上真的學到很多,在時間壓力下的解題能力、一邊寫code一邊闡述自己想法的能力等等,真的跟自己閉門造車刷題差很多。此外,也能體驗當interviewer的角色,站在另一個角度看事情,學習別人做得好與不好的地方,同時反思自己哪裡能更進步。雖然pramp上面的題目偏簡單,但它主要是拿來練習一邊寫code一邊溝通的能力。

Pramp上還有一些意料之外的收穫像是認識來自世界各地的朋友,大家一起為了共同的目標而努力,正向的力量在彼此之間循環的感覺真的很好,也多少緩解了一些當時的壓力及苦悶。

現在應該會先從LeetCode以及Pramp登出一陣子,改培養其他Software Engineering相關的技能以及經驗,以拿到return offer為主要目標。可能等明年暑假再回鍋開始刷題,同時多多培養connection。

One of my favourite YouTuber Clément 說他當初能在六個月內從開始寫code到進Google有四大因素 : Luck, Volume, Desire and Genetics.

而其中最重要的就是Desire。如果對於目標的渴望(Desire)越強,你就願意放更多時間以及心力(Volume)進去,甚至能影響運氣(luck)(他舉的例子就是他當初密了七個Google的recruiter,相較於只密了一個recruitor的人他的履歷被看到的機率就高出了不少)。

期許自己也希望大家都能儘早找到Desire並向目標前進!

倫敦是Facebook在美國以外最大的Engineering Office,可以看這影片,很期待加入:))

現在好像還在持續擴招,負責的範圍有Integrity(最大宗)、Machine learning、Infrastructure以及Facebook旗下的VR Oculus等。大概on-board前一個月會有team-match,希望能做到有趣的project。

Photo by Pixabay

如果有問題或是覺得哪些地方寫得不清楚的,歡迎留言或私訊!有什麼希望我分享的主題也歡迎給予建議,我盡量找時間寫XD

My Linkedin : https://www.linkedin.com/in/tzu-chien-chang/

Feel free to reach out and connect :)

--

--

Stanley Chang | 張子健

熱愛嘗試新事物的呆灣郎。| #Tech # Future #Life | Explore cities by living there | LinkedIn: in/tzu-chien-chang