▲XChange知識共享計畫。(圖/XChange)
圖文/XChange
繼「如何從零開始自學程式開發:我花了三年,從香港商學院來到紐約與矽谷實習的旅程」分享自己花三年跨系轉資工的經歷後,有不少人私訊問我出國後準備實習面試的種種細節,正好最近 XChange 邀稿、北美研究所也都放榜了,把這段經驗寫篇文記錄起來!
「撇除掉找工作時的壓力,我個人是真心認為這些面試是好玩的。」 — me
從申請到錄取的流程
以實習來說,一般申請流程會比全職工程師更簡單一點。實習生的面試流程基本上是「投遞履歷」、「履歷篩檢」、「線上測驗」和「電話面試」,而全職工程師在電話面試通過後會再進行「現場面試」。當然,如果被公司邀請去參加現場面試,包括機票與食宿在內,幾乎所有的開銷都會由公司報銷的。
以我唯一報帳的一次來說,來回機票、飯店費用、在當地 Uber 跟吃飯的費用都是報帳核銷的。
我的時間軸
5 月底開始刷題 LeetCode
8 月開始投履歷。
9 月初開始收到線上測驗。
9/24 是我第一個面試。是跟 Google 面試,在完成他們的線上測驗後。
11 月初收到第一個錄取(來自 Yahoo/Oath)
11 月後續陸續通過 LinkedIn, Niantic & Facebook 面試、獲得 offers!
更詳細的時程紀錄,包括我自己申請了哪幾家公司、哪些公司給我面試機會、哪些面試沒過、為什麼沒過,我有另外分享在 XChange 官方部落格裡面。這篇文會講得更廣泛,主要介紹整體流程,從投遞履歷的方式、刷題訓練、最終到收到錄取通知的流程與教學。
2018/19 矽谷軟體實習申請記: Facebook, LinkedIn, Google, Niantic, Yahoo and more“Kevin, Update from Facebook”
投遞履歷,如何被員工從內部推薦? LinkedIn 使用甘苦談。
就效率而言,投遞履歷最好的方法是透過內部員工,也就是公司內部的員工把你直接推薦給 HR。員工推薦一個人之後,HR 是會跟這個內部員工告知進度,也就是最最最至少的狀態下,你的履歷會有更高的機率被 HR 看見、不會淹沒在眾多的申請裡面石沈大海。
這時候平常經營關係就很重要。
很多人覺得申請工作是一個可以關在房間裡面,一個人去做到的事情。
但其實申請這些實習的幾個月裡面,我也發現到其實申請個工作,會去做 networking、經營人脈的人是有很大的好處的。
如果有間自己理想的公司,你沒有認識任何人可以幫你推薦,就更要想辦法去「廣交善緣」,去 LinkedIn 找找那公司的員工。找到人後,我個人的建議是也不要馬上劈頭就說自己想要被 referred,畢竟我想是沒有人喜歡被當工具使用的(但也有人持相反意見,認為應該越直接越好;不要浪費自己與對方的時間)。
一般來說,我自己的方式還是從交朋友開始。我會送出交友邀請,然後寫個禮貌性的 note,簡單的自我介紹、表達自己希望多認識這家公司。類似以下內容。
Hi, hope you are having a good day. I'm Kevin from Cornell Tech, currently looking to apply for an internship position at
根據我自己在 LinkedIn 上面的使用數據來說,大概只有 10–20% 左右的機率會被回覆,我的猜想是已經在工作的人應該就比較少使用 LinkedIn 這個平台。
這樣亂槍打鳥一兩週後,我發現還是透過朋友介紹的成功率還是高些。
在 LinkedIn 上搜尋的時候,著重去找那些與自己有共同好友的人,然後去請那位共同好友幫自己引薦一下。我自己就透過這樣的方法,聯繫到了兩家我自己很喜歡的矽谷新創企業。
履歷篩檢
至於履歷本身的內容,其實就跟如何申請美國名校一樣,我相當同意理科太太在跟蔡康永的影片最後提到的點(我前一篇文也有引用到),包含履歷與 cover letter 等等的申請文件裡面就是「要讓讀的人覺得你是一個奇怪的東西。」
蔡康永 x 理科太太 - 那些理科嬰兒不知道的事
同樣的道理也適用在找工作、找實習上。
不論是美國名校、或者矽谷大公司,他們收到的申請都是動輒上千上萬份的,其中也絕對不乏成績頂尖的學生。申請時千萬不要期待競爭對手弱,不要想要做雞群之首,而是要想辦法讓自己在牛群中也做頭、也突出。
這些一年錄取上千個實習生的大公司,他們一定會想找「特別」的人進來試試看。萬一他能力不好,頂多也是損失幾個月的基層薪水。能力好的實習生,實習結束後自然會收到 return offer、被邀請隔年回來做全職員工。
畢竟,矽谷裡也是有「實習就是長達三個月的面試」這種說法的。
就像理科太太說他在文件裡強調自己高中參與的半導體競賽一樣,我的申請文件裡面也反覆強調一個主題 “I build”。
「我會把東西做出來。」
不論是履歷或是 cover letter 裡面,我都盡量去把自己課餘的 projects 寫出來,表現出自己「只要走在路上想到一個點子,回家就會去把它做出來看看」的優點與形象。至於履歷的格式與其他細節,我就暫時不去介紹這些網路上都找得到的內容,如果大家真的有興趣的話,也可以先參考看看我當初的履歷。
▲Kevin提供給讀者參考的履歷。(圖/Kevin)
演算法面試
雖然用內部推薦的方式,自己的履歷會比較容易被注意到,但是不論透過哪種方式投遞履歷後(並不會因為被內推而省略任何程序),如果 HR 欣賞你的履歷,他就會再發給你一個線上測驗,或者有些公司會省略這個程序,直接發電話面試邀請。
▲邀請大概會長這個樣子,包含時間、期限等等內容。截圖來自某公司寄來的邀請。(圖/Kevin)
不論是線上、電話或者現場的形式,通過層層關卡來到這個最後階段,公司就是要確認你寫程式的實力。
而我說的「好玩」指的也就是這段。
這半年間,為了應付演算法的面試,我自己也刷了四百題的 LeetCode。先不論這個風氣的好壞(老讀者知道我並不認同),但是不能否認的是刷題的過程也是有些好處與學習,會讓自己對於一個語言的熟悉度提高,也讓自己能夠更批判性的去看一段程式碼。
一段程式碼寫得好不好,首先當然看它是否能達成目的,但同時,它的運算效率也很重要。
我實際舉個例子。
▲LeetCode 裡面的第一題: two sum。(不過,實際面試不大可能遇到這麼簡單的題目)。(圖/Kevin)
大家可以看一下題目敘述,大致上是給你一個 array of integer numbers 跟 target number,你能不能從 array 裡面找到兩個數字加起來是 target,然後回傳那兩個數字的 index。
看到這裡,如果你願意的話可以暫停一下,思考一下你會怎麼解這題。
>>
我認為最淺顯易懂的答案,可能是寫兩個迴圈去檢查每兩個數字的組合。
for (int i = 0; i < nums.length; i++) {
for(int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
return new int[]{i, j};
}
}
}
但是你看,這樣的程式碼跑起來速度比 62% 的人都慢(Leetcode 會把你的程式碼運行速度跟其他人提交的程式碼比較)。
▲這樣的程式碼跑起來速度比 62% 的人都慢。(圖/Kevin)
這樣一來,等於是我們跑了整個 array 兩輪,是 O(n²) 的時間複雜度。
當我們看第一個數字的時候,要檢查他跟第二個、第三個、第四個一直到最後一個的數字加起來的合。看第二個數字的時候則要從第三個一直看到最後一個,以此類推。如果有 n 個數字,就要比對 n² / 2 個數字。也就是說,n 每增加一個,這段程式所花的時間就會以指數成長。
看你這樣解,面試官就問了:「能不能用一次迴圈、O(n) 的時間複雜度,就解決這個問題呢?」
答案是可以。利用 HashMap 這個資料結構,去記錄曾經被檢查過的數字。
ap
只要每看到一個新的數字,我們就記錄起這個數字跟他的 index,然後繼續看下個數字,同時檢查看看我們有沒有曾經看過會跟這個新的數字加起來變成 target 的數字。如果有的話,我們就回傳那個數字的 index 跟現在的 index。如果沒有,我們就繼續一邊紀錄、一邊檢查下個數字。
如此一來,就可以用 O(n) 的效率去達成同個目的,達成大幅度的加速。
▲用 O(n) 的效率去達成同個目的,達成大幅度的加速。(圖/Kevin)
透過這些簡單的例子、很簡單就能看出的好習慣,就算是更難的題目也是一樣的道理,面試官通常能以此判斷一個學生/工程師是不是熟悉不同資料結構的用法與優缺點,甚至融入在自己的思維當中、熟練運用,常常也就區分出「錄取」跟「不錄取」的區別。
面試完,還不要馬上放鬆、也別忘記禮貌
很多人覺得面試完,就只能聽天由命了。
但我是那種沒辦法坐著乾等結果的人,不管是不是還有下一輪的面試,在一次的面試結束後,電話掛掉前面試官通常還會問你有沒有什麼問題想問,這時候千萬不要當個乖乖牌說沒事了。不要急著打開 Netflix 追劇。用最後的幾分鐘,跟面試官多聊聊,只要讓他認為你是一個有想法的人,你就多了一分成功的機率。
畢竟,有些公司的面試計分項目中就包含了溝通的能力。
我舉個自己的例子。
我在面試 Niantic (Pokemon Go) 的時候,我自認我當時演算法的表現並不是特別的好,但是結束前當他給我機會問問題的時候,我問他認為公司哪裡最好、趁機轉個話題跟他說說我認為 Pokemon Go 遠遠不止是一個遊戲,它讓網路世界的流量重新回到現實世界的交流。打個比方,想想看新科技對於老年人來說原本是多麼的遙遠,想想 Instagram、想想 Snapchat,而這款遊戲讓多少老年人又重新年輕起來、去戶外走走、去交朋友。這樣的影響力是我欣賞並且想加入這家公司的原因之一。
當然,我內心也真的是這樣想的。
也不是說去拍馬屁,而是我會鼓勵大家(不只是為了面試而已)平時就多沉下心、想想自己對於科技的一些想法。面試時,去分享自己對於這家公司的反思,從而讓自己變成一個特別的被面試者。說穿了,面試官也是這家公司的工程師,沒有人不喜歡談論自己苦心做出來的 projects 的。再怎麼嚴肅的面試官,聊到這個話題也都會侃侃而談的。而且換個角度想,面試官讓你錄取,等於是邀請你成為他的同事,對吧?所以在短短的一小時電話中,去讓自己的形象變得鮮明、變得像是個好同事就是比想像中還要重要許多的功夫了。
電話掛掉後,也不要忘記禮貌,寫一封信件去謝謝對方花時間面試自己,同樣的一個小時,這位面試官本來也許可以慢慢吃飯、或者坐在咖啡廳多喝一杯咖啡。
怎麼說,我阿嬤也是這樣教的啊。做人有禮貌總不會錯的。
總結 — — 要選擇哪個 offer?
如果一切順利、運氣也不錯的話(是的,我認真覺得面試運氣成分很重要),最後拿到 offer 後就角色對調、換你當大爺了。當你面試的公司給你一個錄取通知後,就從公司選人,變成是你要從所有的錄取公司裡面選一家去了。
有些公司會直接開出月薪、也有算時薪的,甚至我拿到的其中一個錄取通知是直接叫我自己開價碼的。
我個人是覺得錢不是最重要的因素,而是你喜不喜歡這家公司。
你認不認同這家公司的價值?
你覺得這家公司能不能給你更好的未來、你想要的未來?
不管怎麼說,選了一家公司後,你就是那家公司的一份子了。
我當初在 Facebook, LinkedIn, Niantic 這三家中做選擇,最後也的確沒選薪水最高的。看過我的舊文章的讀者可能會覺得「喔,又來了 — — 」,但是我一向在選擇下一步時都是問自己這麼一個問題:
「如果我現在選擇不去 XXX 公司,十年後的我會不會好奇要是我當初去了,現在是不是會很不一樣?」
我的建議是,如果你覺得你到時候會好奇,而且如果時光機存在的話,你會想坐上去張望看看的話,那就現在做出那個選擇吧。畢竟,時光機大概是不會出現的。
最後謝謝 XChange 這次的邀請,正好能好好紀錄與回饋這些心路歷程。
最後一樣老規矩,文章後分享一些與本文有關聯、自己又常常被私訊問的問題的答案!
凱鈞的常遇問題 FAQ
第一問/到底要多早丟履歷?
越早越好!
我自己是五月底開始刷題,然後八月中丟出第一份履歷。
尤其如果你想加入 FLAG (Facebook, LinkedIn, Amazon/Apple, Google) 這幾間矽谷企業,最好早點丟出你的履歷,否則很快就會招滿。舉個真實的例子,我八月中就申請了 LinkedIn 這家公司的實習,十月初完成最後一輪面試。雖然面試狀況很好,自認最好的表現之一。但是,這些大企業面試完,面試官並沒有權力決定要不要錄用你,他們要寫報告給上面專門做錄用決定的委員會「Hiring Committee」去決定。
而他們面試的學生實在太多了,Hiring Committee 光是要處理我的面試就已經排隊排到十月底。我直到十一月初才收到面試過關的通知,那時面試已經過去整整一個月了,而且十一月初剩下的名額已經不多了。收到面試通關後,因為公司已經招滿人而不被錄用的大有人在。
我也不想嚇唬大家,
而且重新強調一次,矽谷那邊好的公司很好,實在不一定要 FLAG 這幾家。
我自己當時就為了 Slack & Robinhood 這兩家公司到處尋找、建立關係。
但是如果你真的執著想要加入 FLAG 這幾間,手腳還是要快一些的,申請人實在爆炸多。
而且也不用有「刷題準備好了」再丟履歷的想法。
首先是刷題永遠不會夠,再來是收到面試通知後,HR 會跟你約時間,如果你沒信心馬上上場,跟他約個兩三週之後也是可以的。(但一樣不要太晚,否則可能招滿)
第二問/刷題刷到怎樣才算夠了?
簡短的回答是,就像上面說的,刷題永遠刷不夠XD
但其實「刷題刷夠了」這件事也真的不是開始面試的前提。
我對大家的建議是,刷到你看到一個新的題目會開始有「直覺」的時候。不論是要解決這題,需要用到的演算法或者資料結構,如果你看到一個問題,你腦中會浮現一個直覺:
這題適合使用二分法、指針、或者怎樣的排序法,為什麼?
這題適合使用 stack, queue 或者什麼結構去儲存資料,為什麼?
那我覺得你就已經準備的很夠了。
而我覺得這也是刷題真正對一個工程師有好處的部分。
現實工作中遇到的問題並不會是很直觀的叫你去排列一組資料,但是當你擁有這種直覺後,遇到需要建立一個系統的時候,很自然的也會靈活使用各種資料結構與演算法去達成自己的需求,甚至把系統本身做得非常有效率而不浪費計算機資源。
而要有這種直覺,每個人需要的刷題量也都不一樣,我自己與身邊的朋友普遍認為一百題是會開始有 “sense” 的一個基本量。當作參考資料,我有朋友是刷了一百題上下,就可以通過 Google 面試,而我自己最後則是刷到四百題。
第三問/有沒有一些撇步是 Kevin 可以偷偷教的
有,當然有!
關於投遞履歷,如果你是女生,美國這邊有一個 Grace Hopper Conference,基本上就是舉辦連續好幾天的博覽會、展覽與演講去鼓勵女性進入科技業市場,而博覽會之外,他們同時也舉辦就業展 Career Fair。畢竟這是一個全美規模的活動,規模甚至會比學校的 Career Fair 更大,包括 FLAG 與 Salesforce 等大企業都會參展,缺點就是要門票、而且很貴,不過每年都有人參加當天就當場面試、當場拿到 offers 回家。
如果你不想飛去、或者你是男生,也不要緊,他們有提供線上 resume database 讓你上傳你的履歷。所有參展的公司都會在這個資料庫裡面尋找適合的學生直接發面試通知。
我自己身為一個男生也透過這樣拿到 Salesforce & Google 的面試。
男生怕尷尬的話,也可以不要去現場面試、跟他們改成電話面試。
另外兩性都被鼓勵參加,同性質、但是規模比較小一點的博覽會還有 Tapia Conference。這個一樣是要門票、也不便宜,但是一樣有線上可以遞交的履歷資料庫。
每年都有很多台灣人不知道這兩個展覽,錯過一些機會。
這些資料在大陸的一畝三分地上面都很熱門,也很建議大家在找工作的時候多多利用這個平台。雖然並不是什麼值得鼓勵的事情,但是上面很多大陸人會分享自己面試時遇到的題目,他們不知道為什麼似乎相信這麼做會給自己運氣⋯⋯
雖然我自己是沒有真的遇到一樣的題目,但是看一看,面試前一週,大概知道自己下週要面試的公司喜歡考哪方面的題目,依此去下苦功也是有幫助的。況且,也的確是有人真的就遇到同樣題目的。
最後,
就像我說的一樣,準備再充足,面試還是有運氣成分的。
自己能做的事情好好做,不要想鑽漏洞,剩下的老天會眷顧你的。找工作這種事沒重要到要賣自己的品格,更不要犧牲自己的健康,最最最不要去犧牲跟家人朋友在一起的時間。皇天不負苦心人,願意花時間看我這篇文的你們已經代表你們願意去努力了,祝你們好運!
我們未來見!
未來還有更多重要的事情,下一代的未來還靠我們去建立呢!
另外,我也做了一個匿名提問箱,如果有讀者想要匿名問些問題、或者給我一些回饋,也歡迎大家多利用這個線上工具給我匿名的訊息。我收到的問題會慢慢累積成下一篇部落格文章的題目與內容,甚至是在未來規劃直播與大家有更多的交流媒介,以方便一一回答、分享大家所遇到、所想知道的矽谷求職與生活點滴!
許凱鈞的匿名提問箱
XChange
台灣最活躍的網路產業工作者社群,自 2016 年成立三年以來,持續推動實體互動式講座 #產業大聚 與 #海外工作同學會、產學串接專案 #數位內容大使、知識型長期職涯共筆 #Medium知識共享計畫,從線上到線下,凝聚網路圈海內外人才。核心成員近 100 人皆以業餘時間遠端協作,舉辦 30+ 場實體講座,影響人次 5000+,並於 2018 年末於上海、北京、東京、雅加達、新加坡成立 5 大海外分社。
留言版