返回網站

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

How I got a software engineering internship at Facebook London

· facebook,intern,software engineer,london,臉書實習

文章同步發在Medium 

This article is written in Mandarin. If there are sufficient requests of adding English version, I'll post another article.

broken image

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相關的實習

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

Leetcode submissions

到終面前一天總共刷了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 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。

Pramp

整個十月我幾乎每天都安排兩個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。

Welcome to Facebook (Picture credit: Pixabay)

Feel free to reach out and connect :)