2018/19 矽谷軟體實習申請記: Facebook, LinkedIn, Google, Niantic, Yahoo and more

許凱鈞(Kevin)
XChange
Published in
18 min readNov 29, 2018

看著手機跳出新信件的通知,想想自己前個工作天才剛面試完Facebook,心想怎麼可能馬上錄取⋯⋯八成是因為面試成績不夠好而被秒殺、被拒絕了吧。

結果心情平靜地點開信來,看到全大寫的 CONGRATULATIONS 的瞬間,自己真的嚇了一大跳。

表情真的差不多這樣

原本先收到 LinkedIn offer、又自認自己 Facebook 第一輪面試表現並不是很好。全心全意都做好準備去 LinkedIn。自己其實也因此滿興奮的。自己大學時期做過的一個 side project 就很類似於大學生版本的 LinkedIn,所以很多朋友也一直覺得自己很適合去 LinkedIn——先感謝各位的祝福!你們的元氣我收到了(?)。

最後考慮了很多很多,打了些電話跟朋友、前輩諮詢,考慮到臉書專案的多樣性(Facebook, Instagram, Whatsapp, Oculus……等等)、有機會做到的影響跟技術的強度都是矽谷裡首屈一指的,已經決定明年暑假先去臉書實習一遭,真的拿得到 return offer 的話再來決定這家公司適不適合自己長期待下去。

至此,自己從五月底退伍至今,將近六個月、漫長的找實習旅途終於畫下了句點。畢竟自己最一開始也是從商科轉系跑來念 CS 的,常常覺得自己底子不見得很好、對於面試也不是那麼有自信,這六個月內上了一系列的線上課程、刷了將近四百題的 Leetcode,並且從九月中旬開始每週至少有一次面試,我還是一如往常的、希望透過自己愛寫文字的習慣,記錄自己這六個月來的努力、也分享這經驗給未來或許用得上的學弟學妹們。

趁感恩節連假去 Facebook 逛逛
* 另外得先感謝過去也分享過自身經驗的一些前輩,尤其 Kenji Chao, Chris HsuHeron Yang 在各媒體上分享的經歷都幫助我許多。現在輪到自己寫了,我也又參考了他們的分享文章的格式來做分享xD

面試過程

結果

  • 錄取: Facebook, LinkedIn, Yahoo/Oath, Niantic (Pokemon Go)
  • 面試後被拒: Google, Salesforce
  • 放棄最後一輪面試: Lyft(已簽 Facebook)
  • 線上筆試後被拒: Riot(被通知實習生招滿了)
  • 履歷被拒: Amazon, GitHub, Robinhood, Airbnb, Front, Asana
  • 無聲卡: Cisco Meraki, Slack, Twitter, Pinterest, Microsoft, Twitch, Reddit, Medium, Atlassian, Apple, Spotify, Microsoft, Dropbox, Coinbase, Square, etc.
* 以下我會分享幾間我個人覺得特別有分享價值的面試體驗,假如你對於有列在以上、但我沒特別分享的公司有興趣的話,歡迎留言或者到 Facebook 上私訊我詢問!

Google

  • 申請方式: Grace Hopper Conference Resume Database
  • 結果: Rejected
  • 面試難度: ★★★★☆
  • 時間軸: 8/30 被 Google HR 聯絡 → 9/10 Google 線上筆試 → 9/24 兩輪電話面試 → 10/9 我媽生日(?)而我被 Google 拒絕

總體來說,我覺得 Google 面試難度真的滿高的,也是讓我學習非常非常多的一個過程。我自己一開始其實也並不希望這麼早面試 Google 這家大魔王,但是因為自己把履歷上傳到美國 Grace Hopper Conference Resume Database 裡面後被 HR 主動聯絡,自己一個熱血過頭就硬著頭皮上了。

首先,GHC 是美國這邊一個有名 celebrate Women in Tech 的博覽會,Conference 期間也有一個很盛大的 Career Fair,幾乎所有第一流的公司都會在那邊招人、現場面試,而他線上就有個資料庫是給學生上傳履歷,這些參展的公司就會在八月底、九月初的時候就先挑選出當天想面試的學生。

我自己當時因為沒空真的飛去參加這個展覽,所以就跟 Google 改成用傳統電話面試的方式。失敗過後,我會建議 Google 這種面試考題非常靈活的公司真的還是不要第一間馬上面。還是找個幾間先來練習一下。一開始就算 Leetcode 這種刷題網站題目寫得非常順、有了點自信,但是我必須再次強調一件很多前輩們也都說過的概念「電話面試跟純刷題真的不一樣」、「電話面試跟純刷題真的不一樣」、「電話面試跟純刷題真的不一樣」。因為很重要,所以說三次。

電話面試時不只是要把 code 寫出來,同時還要用英文把自己的邏輯講清楚,用哪種資料結構儲存、用哪種 Algorithm 來跑這個邏輯、甚至整整 100行 code 的運算複雜度到最後在口頭上演算 test case 等等的,要在短短 45 分鐘內解決兩題、並且讓 Google 等級的面試官滿意,真的不是一件簡單的事情。當每次寫錯時,面試官會跟你說 “No, this is not going to work” 時壓力可大了。

所以 again, Google 的這次面試經驗,把我打回原形、好好反省,也給我了很好很好的經驗值,對於後面的其他面試幫助實在很大。

LinkedIn

  • 申請方式: 內部推薦
  • 結果: Team Match
  • 面試難度: ★★★☆☆
  • 時間軸: 8/30 內推 → 9/7 被 HR email 聯繫 → 9/19 HR 面試(電話內通知過關、同時約下一輪技術關電話面試) → 10/3 兩輪電話面試 → 11/1 通知面試過關 → 至今在等某位 Manager 要我去他的組

剛剛提到我會建議大家稍稍拖延一下 Google 的面試。LinkedIn 就是完全相反的,我會建議大家早點申請。就連我約到十月初面試都算晚了。LinkedIn 這家公司擁有著名灣區最棒的實習計畫之一。實習生不只收入高(比 Facebook 更高)、擁有南灣最棒的公司餐廳(米其林等級廚師),更堪稱是有最高機率給予 return offer。相較於 Facebook, Google 招的大量實習生,LinkedIn 整個實習計畫全美加起來頂多兩百多人,所以他們在 Team Match 方面也很費工。面試通過之後,也不會馬上發錄取通知。通過面試的學生會進入內部的一個系統,然後由公司裡的管理階層認領,有人對於你的履歷、經歷有興趣才會聯絡你聊聊,最後才再給你錄取許可。

也是因為這麼繁瑣的申請過程,LinkedIn 的申請流程是出名的漫長。

我的時間軸也橫跨了整整兩個月。我知道有些九月底面試的,可能十月中就能搞定,但是到了十月初之後的面試光是要收到「通過面試」的通知都要至少三週的時間去 process。想當然爾,越後面剩下的「坑」也越來越少,甚至今年約了十月下旬之後面試的學生也通通都被取消面試,因為系統裡面已經有夠多的學生給 Managers 來選。

至於面試,我個人認為 LinkedIn 的面試是 FLG 三家裡面最簡單的。所以之後想嘗試的學弟妹還是勇敢早點投出你的履歷吧!他們也是最注重個人特質的,HR會打電話過來聊個半小時,聊你為什麼想要來 LinkedIn、在乎什麼還有未來想要達成什麼目標。整體而言,除了流程的速度真的慢到很折磨人之外,我覺得跟 LinkedIn 的面試體驗是最棒的,最被當成一個完整的人類來瞭解,而不是只是個寫代碼的軟體工程師。

Facebook

  • 申請方式: 內推
  • 結果: Received Offer and Accepted
  • 面試難度: ★★★★☆
  • 時間軸: 9/26 內推 → 10/1 被 HR 聯絡 → 10/22 第一輪電話面試 → 10/24 收到信件告知通過第一輪 → 11/9 第二輪電話面試 → 11/12 收到 Offer

Facebook 面試絕對是幾間大公司裡最有效率的。臉書一向以「Move Fast 」為他們的中心思想,整個申請流程也是效率十分高。被內推之後隔不到一週就收到 HR 的聯繫來約面試;第一輪面試後兩天也馬上收到通知、並且約最後一輪面試;最後這輪面試更誇張,傍晚面完,下個工作天就馬上收到錄取通知。

負責我的 HR 人也非常熱心。

我最後會決定去 Facebook 有部分真的也得歸功於這位 HR。因為我自認自己第一輪面試面的不是很順利,所以就算通過後我還是寫了信問 HR 說我是不是低空飛過、第一輪表現不佳會不會影響第二輪?是不是就算第二輪表現得再好,最後在 Hiring Committee 那邊還是會受第一輪的影響。他就解釋了面試官對我的評價還是不錯的,同時如果我擔心的話,他也把我的履歷傳給另一個 Team 去評量,如果最後沒通過第二輪面試,另外一個 Team (Frontend Engineer) 也可以馬上再繼續另外的面試。

最後一樣再談一下 Facebook 的面試難度。

我個人認為面試難度這種事情其實也很看運氣。看面試官當下的心情(?)還有他決定要出的題目。但就個人經驗而言,我覺得難度是 Google ≥ Facebook > LinkedIn。面試官給我的印象上是 Facebook & LinkedIn 的面試官比較願意討論。遇到卡關的時候,都還滿願意跟我先討論我打算運用的演算法跟資料結構,確定我的方向正確之後才開始寫 code 避免白費時間寫出錯誤的 code。

Niantic

  • 申請方式: 內推
  • 結果: Received Offer
  • 面試難度: ★★★★★
  • 時間軸: 10/8 內推 → 10/8 (內推當天!) 馬上被 HR 聯繫 → 10/11 HR 電話面試 → 10/29 第一輪技術電話面試 → 10/30 收到信件通知第一輪過關、約最後一輪面試 → 11/12 最後一輪 back-to-back 兩次電話面試 → 11/15 收到 Offer

我個人算是 Pokemon Go OG player,從這款遊戲問世的第一天就開始玩到今天。但除了這款遊戲本身在台灣很紅、想必大家都知道之外,我再稍微介紹一下 Niantic 這家公司的背景。他們其實原本的 Google 的一部分,2015 年的時候才又獨立出來成為一個公司。他們內部的工程師很大部分都是從 Google 一起出來的,工程技術(尤其 AR/VR, Gaming 相關)強度絕對夠,發展其實也不錯,最近也不少大公司的工程師會往那邊跳槽。我在 Cornell Tech 的一個已經在 Google 工作六年的朋友聽到我錄取後表示「當然去 Niantic 啊!」(xD)

畢竟是 Google 體系出來的,我真心認為他們面試是這幾個月以來面過最難的⋯⋯ 我自己也不知道我是怎麼過的⋯⋯

總共四輪面試(HR → 第一輪 tech → 第二輪 tech 是 back-to-back 連續兩輪)中的三次技術面試裡,我總共被考了四題的 coding 題目,其中最簡單的題目在 Leetcode 上是被標註成 Hard,而其他就完全不是 Leetcode 上面找得到的題目。考得非常靈活,而且也要求一定要是最佳解法,可以用 O(n) 解出來的題目用 O(n logn) 就完全不能接受。技術上的嚴謹程度真的完全看得出來是 Google 體系出來的⋯⋯

但嚴謹歸嚴謹,有趣的是每次跟不同面試官聊到 Pokemon Go 的時候他們都很興奮、很自豪,真的很像在炫耀自己孩子。說真的滿喜歡他們公司這種所有人都在做同件事情、也以此為傲的氣氛,但自己最後還是覺得自己不適合在職涯剛開始時就去寫這麼 specific 的東西,畢竟以後若要跳槽或是做自己的新創公司,AR/VR/Gaming 這方面的技術並不一定是那麼能夠應用到其他專案上的。

面試準備與小訣竅

* 先做個聲明,以下這些是我自己做的面試準備。就結果論而言是有用,但還是鼓勵大家找到適合自己的準備方向。

刷題?

跟我有些私交的朋友應該都知道,我個人是非常不贊同刷題這種面試方法的(雖然我也同意這也是目前能想到、最公平的做法了)。不過既然現在業界的現況就是這樣,那麼不刷題真的是對不起自己,因為刷題不夠而找不到實習的話我也只能說聲抱歉,請你再給我五年去解決這個問題。

以我個人而言,我自認自己底子並不是特別強,所以我也提早做了很多準備。我今年 5/24 退伍之後就馬上開始刷題,甚至我退伍前兩週就帶了 Cracking the Coding Interview 這本刷題聖經進去兵營,趁休息的時間複習基礎的資料結構。

除了 Cracking the Coding Interview 這本書我還滿建議讀一下之外,我個人花了絕大部分的時間直接刷題。透過 Leetcode 這種紀錄了各種面試題目的網頁,一題一題寫,我到八月出發去美國前在台灣就刷了兩百題,九月、十月在美國的期間加起來最後刷到四百題。

刷題的方法網路上很多討論了,我個人是遵循所謂「分類刷題法」:

每天安排不同的課題,例如這兩天就是專門刷 DFS / BFS 這種演算法相關的題目,之後兩天專刷 Array 題目等等。最後在跟某個公司約好面試後,再開始刷該公司考過的題目(所謂面經)。就算很高的機率,還是要準備好面試時候不會遇到一樣的題目,但是還是可以大概了解該公司愛考的題型。

這邊再提一下,就算遇到了一樣的題目,千千萬萬不要直接寫出來,面試最重要的就是討論。一定要好好的把自己為什麼選擇用這個資料結構、這個演算法的原因講清楚。

另外除了刷題網站之外,我趁出發去美國前的暑假上了九章算法班(這篇文章沒有被他 sponsored,純屬個人意見)。我是覺得還滿有用的,尤其我自己底子不是很好,他會把每種類型的資料結構介紹一次、底層怎麼運作的(打個比方,HashMap 的 get 指令不是永遠都是 O(1) 複雜度)、二分法的邏輯是怎麼運作的等等。

最後,因為我也申請了一些前端的職位,前端、網頁端方面的面試準備,我非常非常推薦大陸網友整理的一份 GitHub 文件。基本上所有考得到的 JavaScript Promise, Prototypal Inheritance, CSS Pre-processors 等等都整理的很清楚。

怎麼申請?怎麼投履歷?

一般而言內推都是最有用的。

Facebook, LinkedIn, Niantic 這三家我通通都是透過內推的方式申請的。找內推人的方法有很多,如果你有朋友在這些公司工作、願意幫你內推的話是最好,因為內推的同時,對方也要在系統上幫你寫一下推薦的原因,如果只是找陌生人、他根本不認識你的話這邊可能就會寫得很籠統。

但是如果真的是比較冷僻的公司,像是 Niantic 我真的沒有認識朋友在那邊工作的話,LinkedIn 是你的好朋友。上去 LinkedIn 搜尋該公司的員工,去找有什麼人是比較有共通點的,有沒有大學的校友,沒有的話有沒有至少是台灣人、甚至大陸人的?

再來第二有用的應該是學校辦的 Career Fair,但是 Cornell Tech 這邊的 Career Events 幾乎都是紐約這邊的公司,而我因為女朋友在舊金山那邊上班、我也很執著於那邊的工作,所以幾乎沒用到學校的活動(但是 Oath/Yahoo 就也是這樣拿到的面試),我就不好多評論。

隨時準備好表現自我

不是自誇,但是我自認這是我唯一做得很好的點。

我非常認同一個論點:「面試官會在前五分鐘內決定對你的印象,然後接下來的半小時都是在找證據去 support 他的那個既定印象」。開頭的自我介紹真的很重要,要在那短短的五分鐘內介紹自己,讓對方對你有好的印象,甚至欣賞你,那麼之後的 coding 部分就算犯點小錯再修正,他可能都會往好的方面想說你是能快速偵錯的工程師。

很多人自我介紹就只是很簡單講說自己是誰,在哪裡念書。

但我會建議大家利用這個難得的面試官邀請你開口的時間,好好講自己的熱忱在哪,自己念資工、寫程式是為了什麼更大的目標(為此,我也建議在出發去美國前的暑假可以做個可以 show 的 side project 來證明自己。Lyft 面試時前十分鐘我的面試官也跟我一起玩玩看我的網站)。雖然有時候可能很 cheesy,但是我覺得這小小的習慣就拯救了自己不只一次。

跟 Lyft 前端工程師一起討論了我自己的 side project

我知道有些公司的面試官寫報告時,上面就要表示「如果今天我們招募了這個學生,你會不會願意當他的 Mentor,你會不會願意帶領他的成長?」這個就不只取決於你的程式碼是不是寫的很好,而是你這個人是不是好相處的,他會願意跟你在同個 Team 工作的。

面試時保持冷靜與自在

我自己是 learned this the hard way。

我還記得我在面試 Google 的時候就有那個壓力要持續開口講話,一不講話就覺得氣氛乾掉,好像有點尷尬、自己是不是顯得很白癡,連這個題目都不會解。

但到後面我就比較能自在、冷靜的跟面試官討論。

甚至有時候打起勇氣,跟面試官說 “Sorry, I think I can’t speak while coding. Let me just finish this part and tell you what I’m doing” 或者 “Sorry, can you give me 5 minutes to think on my own?” 像是我自己 Facebook 面試第二輪時候被考了一題跟數學推算相關的題目,我就跟面試官說我需要自己在紙上推演一下,最後拿到 Offer 的事實也證明面試官並不會因為這樣就給我差評,而我也因為那五分鐘在紙上推算出正確的演算法邏輯去寫出對的程式碼。

Clean Code

最後到了真的要把程式碼寫出來的時候,建議大家盡量遵循自己所選擇的程式語言的 Best Practice 來寫。盡量把寫 code 寫得乾淨、易懂(consistent indentation, meaningful names for variables and functions, don’t repeat code… 等等的,非常建議大家爬文讀一下一些 clean code 相關的知識,我自己在大小公司實習時發現這幾乎都是很被重視的習慣。而且也會帶給面試官一些既定印象。)。

甚至有些比較複雜的邏輯、一些 nesting if statements 可以寫一寫註解。

這不只是表現給對方看自己有好的習慣(他們也會相信你的習慣是來自你真的有 extensive coding experiences),同時也幫助你自己在面試時不會寫到第 60 行的時候忘記自己第 17 行那邊的程式碼在搞什麼。這個習慣在 Niantic 這種比較複雜的面試題目時,老實說真的幫助自己蠻多。

總結

面試終究是有運氣成分的。

失敗是難免的,心態的調適真的是很重要的一部分。我女朋友在 Google 上班,我第一個面試就是 Google 最後也失敗了,當下當然是失望的、非常失望的,但也沒辦法,每次失敗也只能繼續向前。我想這也是 Facebook 文化中我喜歡的 Move Fast 這部分。

這篇文除了紀錄、分享自己這六個月以來準備面試與真正進行面試的過程之外,我最後最後還是得說我自己的運氣真的不錯。Facebook 第一輪面試面的不是最好的狀態還是被過了,最後那輪也還好自己表現的不錯有板回顏面。LinkedIn 的面試也被問到了寫過的題目。

我也知道有很多人比我努力,但結果不見得會比我更好(當然,反之也有人本身能力很強,刷個一兩百題就能錄取 Facebook Google等一流大公司)。

我也想說錄取這些大公司真的不代表能力的全部。

就像我說的,我本身是不贊同以刷題方式面試來決定錄取不錄取的風氣。

今天我錄取了這些大公司,但是在我心目中比我厲害、我尊敬的朋友們還太多太多了。我自己也期許自己再繼續努力,事實上,我人現在也在紐約的某間咖啡廳裡思考著接下來 1.5 年 Cornell Tech 的生活要怎麼來度過:是要繼續做以前的 side projects 呢?Projectable 還是 Surphaze?還是花更多時間寫部落格?寫部落格的話,是要分享生活還是繼續分享找工作、或者申請研究所等經驗?我跟我女朋友也打算開始經營個粉專/Instagram 帳號好好記錄與分享我們難得的這趟旅程。她在 Google 、而我人在 Cornell Tech ,之後也應該會去 Facebook。

我要不要重新開始寫小說?

甚至寫本書好好記錄自己從台灣到香港、匈牙利、加拿大、美國的生活?更甚至,以此開始我好幾年前就想過要幫台灣學生籌備獎學金的計畫?

今天開始,這真的是從去年暑假開始申請研究所,錄取 Cornell Tech 之後又馬上開始準備找實習,這整整一年之後自己又再度重新掌握了自己所有的時間。

我也期許所有看這篇文章的朋友們,好好掌握自己的時間,永遠都做那個當下自己最想做、最棒的事情,我相信只要這樣做,最適合你的機會就會自然的降臨在你身上的!

#願原力與各位同在!

感謝

就像我說的,我這一路來也受了許多許多的幫助。能夠找到心目中理想的實習、這篇文能夠寫出來也得感謝——

感謝幾位前輩的各種經驗分享,真的受到了很多很多學長學姊的幫助(因此也才期許自己也可以 pay it forward 寫個文章好好紀錄並分享這幾個月來的努力)。另外也感謝家人的鼓勵支持,我媽也幫我念了很多經,說來很有趣,我目前去紐約這裡的關公廟拜拜的兩次,每次回來後都會收到 offer。

也真的真的很感謝我身後的一群好友。

到了今天,我真的覺得復興給過我最好的禮物就是這麼一群好友,包括我女友也是當時認識的最好的一群兄弟摯友。大家共同奮鬥,謝謝我的好友們從六七月起就跟我一起刷題準備找工,時不時打電話給彼此打氣,這幾個月來起起落落、當初被 Google 拒絕時的小低潮也是你們陪著我度過!

硬要賣一下 Cornell Tech 宿舍頂樓風景xD

--

--