追蹤

Wigo

努力著,去實現一個更好的未來。Facebook Software Engineering Intern 2019/Cornell Tech Connective Media Class of 2020/ kevinhsu.info

矽谷軟體實習申請 ft. Facebook, LinkedIn, Niantic, Yahoo


前言

自己前些日子在Medium上寫了一篇文章分享自己過去半年在美國申請實習的相關經驗,所以想說趁寒假有空、稍微調整下內容重新分享在 Blink 上,給自己原本交友圈外的朋友們,有需要時也能參考我過去半年來準備面試的經驗與一些小撇步。
 
我想說的是,不管是不是在申請美國的軟體工程師職位,希望這些內容(各家公司的面試體驗、我自己如何準備面試等等)對於對這方面工作有興趣的台灣朋友們也都有參考的價值。
 
一些最基本的背景資料,我自己目前在紐約念研究所。大學時期最一開始是念商學院,四年前開始自學寫程式、三年前正式開始跨修資工學程。
 
 
 

面試結果

錄取: Facebook, LinkedIn, Niantic (Pokemon Go), Yahoo
面試後被拒: 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.
 
(以下我會分享幾間我個人覺得特別有分享價值的面試體驗,假如你對於有列在以上、但我沒特別分享的公司有興趣的話,歡迎留言詢問!)
 

Google

總體來說,我覺得 Google 面試難度真的滿高的,也是讓我學習非常非常多的一個過程。我自己一開始其實也並不希望這麼早面試 Google 這家大魔王,但是因為自己把履歷上傳到美國 Grace Hopper Conference Resume Database 裡面後被 HR 主動聯絡,自己一個熱血過頭就硬著頭皮上了。
 
首先,GHC 是美國這邊一個有名 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 的這次面試經驗,把我打回原形、好好反省,也給我了很好很好的經驗值,對於後面的其他面試幫助實在很大。
 

Facebook

Facebook 面試絕對是幾間大公司裡最有效率的。臉書一向以「Move Fast 」為他們的中心思想,整個申請流程也是效率十分高。被內推之後隔不到一週就收到 HR 的聯繫來約面試;第一輪面試後兩天也馬上收到通知、並且約最後一輪面試;最後這輪面試更誇張,傍晚面完,下個工作天就馬上收到錄取通知。
 
最後一樣再談一下 Facebook 的面試難度。
 
我個人認為面試難度這種事情其實也很看運氣。看面試官當下的心情(?)還有他決定要出的題目。但就個人經驗而言,我覺得難度是 Google ≥ Facebook > LinkedIn。面試官給我的印象上是 Facebook & LinkedIn 的面試官比較願意討論。遇到卡關的時候,都還滿願意跟我先討論我打算運用的演算法跟資料結構,確定我的方向正確之後才開始寫 code 避免白費時間寫出錯誤的 code。
 

Niantic

我個人從這款遊戲問世的第一天就開始玩到今天。但除了這款遊戲本身在台灣很紅、想必大家都知道之外,我再稍微介紹一下 Niantic 這家公司的背景。他們其實原本的 Google 的一部分,2015 年的時候才又獨立出來成為一個公司。他們內部的工程師很大部分都是從 Google 一起出來的,工程技術(尤其 AR/VR, Gaming 相關)強度絕對夠,發展其實也不錯,最近也不少大公司的工程師會往那邊跳槽。
 
畢竟是 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) 複雜度)、二分法的邏輯是怎麼運作的等等。
 

怎麼申請?怎麼投履歷?

一般而言內推都是最有用的。
 
Facebook, LinkedIn, Niantic 這三家我通通都是透過內推的方式申請的。找內推人的方法有很多,如果你有朋友在這些公司工作、願意幫你內推的話是最好,因為內推的同時,對方也要在系統上幫你寫一下推薦的原因,如果只是找陌生人、他根本不認識你的話這邊可能就會寫得很籠統。
 
但是如果真的是比較冷僻的公司,像是 Niantic 我真的沒有認識朋友在那邊工作的話,LinkedIn 是你的好朋友。上去 LinkedIn 搜尋該公司的員工,去找有什麼人是比較有共通點的,有沒有大學的校友,沒有的話有沒有至少是台灣人、甚至大陸人的可以聊聊。
 
再來第二有用的應該是學校辦的 Career Fair,但是我學校這邊的 Career Events 幾乎都是紐約這邊的公司,而我因為女朋友在舊金山那邊上班、我也很執著於那邊的工作,所以幾乎沒用到學校的活動(但是 Oath/Yahoo 就也是這樣拿到的面試),我就不好多評論。
 

怎麼在面試時表現自己?

我非常認同一個論點:「面試官會在前五分鐘內決定對你的印象,然後接下來的半小時都是在找證據去 support 他的那個既定印象」。開頭的自我介紹真的很重要,要在那短短的五分鐘內介紹自己,讓對方對你有好的印象,甚至欣賞你,那麼之後的 coding 部分就算犯點小錯再修正,他可能都會往好的方面想說你是能快速偵錯的工程師。
 
很多人自我介紹就只是很簡單講說自己是誰,在哪裡念書。
 
但我會建議大家利用這個難得的面試官邀請你開口的時間,好好講自己的熱忱在哪,自己念資工、寫程式是為了什麼更大的目標(為此,我也建議在出發去美國前的暑假可以做個可以 show 的 side project 來證明自己。Lyft 面試時前十分鐘我的面試官也跟我一起玩玩看我的網站)。雖然有時候可能很 cheesy,但是我覺得這小小的習慣就拯救了自己不只一次。
 
我知道有些公司的面試官寫報告時,上面就要表示「如果今天我們招募了這個學生,你會不會願意當他的 Mentor,你會不會願意帶領他的成長?」這個就不只取決於你的程式碼是不是寫的很好,而是你這個人是不是好相處的,他會願意跟你在同個 Team 工作的。
 

面試時保持冷靜

我還記得我在面試 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等一流大公司)。
 
我也想說錄取這些大公司真的不代表能力的全部。
 
就像我說的,我本身是不贊同以刷題方式面試來決定錄取不錄取的風氣。今天我錄取了這些大公司,但是在我心目中比我厲害、我尊敬的朋友們還太多太多了。我也期許所有看這篇文章的朋友們,好好掌握自己的時間,永遠都做那個當下自己最想做、最棒的事情,我相信只要這樣做,最適合你的機會就會自然的降臨在你身上的!
 

哈囉,我剛來到 Blink 這個新的社群

 

老實說,我對於在 Blink 還不是很熟悉,自己之前也常常在這邊潛水看文章,最近無意見滑到才想說有空也把自己的一些文章搬運過來,分享一些最近的經歷給這社群裡的朋友們參考看看。如果回饋不錯、大家對於這類型的文章有興趣(也歡迎大家留言告訴我你們想看什麼樣的內容),我會再慢慢搬運/修稿舊的文章過來,也寫寫新的內容(包括暑假開始在臉書總部實習的生活分享)跟大家分享!

有興趣的朋友可以發摟我的 Medium 主帳 (https://medium.com/@kchsu),我的所有文章基本上都還是會最先在 Medium 上發布,慢慢經過一些 feedbacks 、調整、再搬運到其他社群平台 :)


本文章發表於:面試版

加入172

Wigo

Cornell Tech Connective Media

追蹤 62 鼓勵作者

努力著,去實現一個更好的未來。Facebook Software Engineering Intern 2019/Cornell Tech Connective Media Class of 2020/ kevinhsu.info

鼓勵作者

目前持有 Blink Coin: Loading..

選擇禮物


愛心

(Coin 10)

幫高調

(Coin 20)

咖啡

(Coin 30)

掌聲鼓勵

(Coin 40)

崇拜眼神

(Coin 50)

驚呆了

(Coin 60)

神人4ni

(Coin 70)

花束

(Coin 100)

鑽石

(Coin 300)

紅寶石

(Coin 500)

藍寶石

(Coin 1000)

黃寶石

(Coin 3000)


送出鼓勵



發表匿名文章不會出現你的大頭圖與名稱,你可暢所欲言,但文章內容務必遵守「佈告欄使用規範」!


回應

送出回應


12 則回應

暱稱

2019-01-10 #1

好佛的分享 😍

0

匿名

2019-01-10 #2

鼓勵了作者

0

匿名

2019-01-10 #3

鼓勵了作者

0

37天

2019-01-10 #4

非常優秀的分享!歡迎來到Blink喔,期待看到你持續發文~~~~

0

魚魚

2019-01-10 #5

好猛!!

0

匿名

2019-01-11 #6

好強!!!

0

匿名

2019-01-11 #7

鼓勵了作者

0

匿名

2019-01-14 #8

歡迎來blink~~~

0

匿名

2019-01-16 #9

鼓勵了作者

0

匿名

2019-01-16 #10

鼓勵了作者

0

匿名

2019-03-02 #11

鼓勵了作者

0

匿名

2019-03-13 #12

鼓勵了作者

0

想回應這篇文章嗎?也想發表文章嗎?
馬上登入來發表文章、追蹤作者、收藏文章或回應文章吧!

註冊 登入