Hi 大家好~
先自我介紹一下,我的是國立台灣大學資訊工程學系(Computer Science)學士以及碩士,
研究領域為電腦視覺以及影像處理。從台大畢業後進入趨勢科技當研發替代役的工程師
全職工程師經驗約3年。主要擅長寫C/C++。
役畢離職後決定開始行動追求以前的夢想:到美國軟體業闖關,所以先跑來矽谷唸
UCSC extension的學程班當作一個跳板。
最近課程結束了求職也告了一段落,於是寫了一些心得想分享給大家。
求職經歷:
以我個人這9個月的CS求職經驗來說,最重要的條件是有無在美國合法工作的身分,再來
是工作經驗,再來則是學歷。由於Certificate program是屬於比較特殊的無學位學程,
所以我經常得跟人資們說明清楚我的情況,像是我已經有碩士學位也有工作經驗,念這個
學程是為了合法身分等等,試圖說服人資不要把我當作new grad看待。我在2015年9月到
美國時就開始嘗試著投履歷了,但絕大部分都是沒下落的,然後會有一些獵人頭和人力資
源公司的人聯絡,但這些人一開始就會先詢問有無合法工作的身分,需不需要VISA
Sponsor,由於現在H1B競爭激烈,需要靠運氣才能取得,所以這一點變成很多公司徵才的
第一要件。願意忽略身分問題而給面試機會的公司基本上都是跨國大公司如Google、
Amazon、Apple、Bloomberg之類的,所以相較之下沒身分的人要拿到面試的機會非常的低
。我個人到美國的前半年只拿到了JP MORGAN和Google的面試機會而已。直到我快要取得
OPT前的三四個月,面試機會才開始增加。
我的求職策略是能請人幫忙內推就請人,沒有的公司就海投,投個一兩百家不為過。看到
有HR在FB社團發文就傳訊息問,Hacker News上的職缺適合的就寄信,LinkedIn上職缺都
給他申請下去,總之就是免錢似的投履歷就是了。不用想說這個職缺是否適合你,或你認
不認識這家公司,因為八九成的公司是連理都不會理你,所以不用想太多。這個策略主要
的目的其實是想辦法拿到面試的練習機會而已,能夠有越多的面試機會,才能讓剛從美國
來、連英文都還不是很熟悉的人多一點練習的次數。不過即使是我這樣的策略,我拿到非
內推的面試機會也是寥寥可數,內推的面試機會則是有50%左右。
此外LinkedIn上面的履歷盡量更新的豐富一點,有時候會有一些Recruiter寄信來問,不
妨多跟一些HR聊聊,即使他們公司最後沒打算給你機會也沒關係,只要你有跟他加到好友
,那他的HR的朋友就可以從他那邊看到你的履歷,能見度還是會增加的。
美國CS雖然職缺也很多,但想應徵的人更多,而且大多數公司都想找有合法工作身分的人
選。所以不要認為會寫程式就可以輕鬆來矽谷找到工作,那是完全錯誤的。
面試心得:
矽谷大多數公司的面試流程都是
線上測驗或電話面試(或兩者皆有)
通過第一關後邀請On site面試,連續1 ON 1車輪戰面試4~5關
通過On site interview的話,如果經理同意錄用,則進入談薪給offer
如果你過去對英文沒有下過很大的苦心去練習,那來美國遇到的第一關電話面試就會讓你
吃足苦頭。在CS界遇到印度人面試官是家常便飯的事情,印度腔英文、電話通訊的品質以
及無法使用肢體語言的限制,會讓電話面試成為初來美國求職的一大挫折。
以軟體工程師的面試而言,刷leetcode練習是必要條件,但不是充分條件,絕對不是像鄉
民說的leetcode刷完就一定找的到工作,面試中解出題目其實只是評分的一部份,你如何
跟面試官互動討論,說明你的思考,如何測試你的程式等等都很重要。就算真的全都解出
來,也不一定會拿到Offer,還得看同時間的競爭者的程度如何。
練習leetcode可以熟悉一些面試常考的基礎演算法和資料結構,但如果只是單純背題目的
話,一但遇到沒遇過的題目就很容易慌,所以要練的是心法而非架式,要懂的是演算法而
不是解題方法。除此之外,在面試前也可以多參考一下glassdoor、一畝三分地、
CareerCup上面的面試心得,會有一些最近該公司考的題目,可以稍微思考一下如果被問
到的是你,你會怎麼做。
以下是我個人的面試經驗
拿到offer: Nutanix, Microsoft
Onsite interview後被拒: Cisco, Facebook, Google, Two sigma, Youtube
Phone interview被拒: Apple, Yelp, JP Morgan, indeed
人資 screen後不符資格: linkedIn, dataminr, sportsvision ... 很多新創公司
履歷直接被拒或無下文: twitter, uber, airbnb, oracle, mozilla... 太多了記不清
其中內部推薦的有Facebook, Google, Yelp, Cisco, Microsoft, Apple, Nutanix
以下為一些公司的面試心得:
Cisco: 我是透過朋友直接內推給部門主管而拿到面試的,所以流程比較不一樣,我完全
沒有接觸到人資,從頭到尾都直接跟用人主管接洽。一開始是先用webex來一場電話面試
,是一個印度小哥,問的問題很多很雜,從網路基礎osi model, switch到資料結構演算
法的coding problem都有,面了約一小時才結束。過一個禮拜後聯絡主管而拿到onsite,
onsite共有五關,基本上全都是coding problem, 只有一關是偏system design。午餐是
由朋友帶我去吃公司的cafe。寄信詢問主管後主管說兩個禮拜內會有決定,然後會通知我
,但後來就完全沒有消息了,所以最後其實拿到的是無聲卡XD。不過Refer我的朋友有跟
我說面試官們對於我的Coding能力都覺得不差,只是有一兩位面試官覺得英文能力還得再
加強。同時那個職缺有另一個面試者因為還有QA的經驗,所以當時比較傾向於錄取那位有
QA經驗的面試者。
Facebook:
Facebook在去年底我剛開始唸書的時候就連絡我了,當時我跟他說我OPT隔年六月才生效
,不知道能不能先面試先抽H1b,人資說還是希望我OPT開始前幾個月才來面試,並跟我約
隔年四月再連絡。原本以為Facebook只是應付我一下,沒想到隔年四月真的連絡我了。面
試的流程一樣是電話面試然後onsite面試,由於當時剛好拿到Nutanix的Offer,所以問看
看人資能不能加快面試流程。不得不說Facebook的標語move fast真不是蓋的,效率極高
的結果就是將兩個禮拜後的電話面試提早成兩天後。電話面試完隔天就說要安排Onsite,
Onsite完隔兩天就發Thank you letter。Facebook的辦公室很寬敞,一整棟超大辦公室連
在一起,而且全都是開放式空間,頂樓還有個花園可以逛。Onsite面試內容有兩關是純粹
考Coding problem,一關為culture fit和coding,由於我是以experienced role來應徵
的,所以還有一關是專門考system design。收到感謝信後人資說雖然這次很抱歉沒有錄
取,但希望未來還是有機會能夠繼續合作。
Nutanix: 一家穩定成長的pre ipo 公司,由朋友幫忙內推而拿到面試。一開始電話面試
有兩次,第一次是印度人主管,考兩題跟binary tree有關的問題。第二次運氣很好遇到
同學認識的中國同事,所以就用中文聊聊天就過了XD 接著就接到onsite的通知,公司位
於san jose 機場旁邊的新創區,離downtown很近。這邊onsite總共有五關,內容也是
coding problem居多,但有一關是考數學證明題,算是比較特別的問題。公司裡面雖然沒
有廚房,但公司會提供午餐,我那天的午餐是美國蠻有名的一家pizza,帶我去吃飯的同事剛好是第二關電
話面試的中國人,就跟他到個謝聊個天後結束午餐。面試完後隔了一陣子都沒消息,所以
寄信詢問人資,人資收到信後就打電話一直問我對那個部門有興趣之類的,卻又不跟我說面試
結果如何。最後我跟他說如果我的面試回饋是偏正面的話我想要取消其他小公司的面試,
人資就聯絡我說要給我offer了。Nutanix是間很不錯的公司,package也開的不差,可惜我
因為opt簽證只有一年,選擇新創公司在未來簽證和身份取得的問題上會比較不方便。
YouTube: YouTube 是由Google 人資轉介紹給我的,因為當初我跟他們說我對YouTube 比
較有興趣。由於這時候我已經拿到微軟的offer,所以跟他們說我希望可以加快面試流程
。結果對方就決定直接跳過電話面試直接邀請我onsite。公司本部在San Bruno ,辦公室
區域不大,約只有三棟建築物,但裡面還挺開闊的。這邊我總共有5關面試,而且題目類
型比較多變。雖然也都需要白板coding, 不是單純的leetcode類型,而是system design
和討論。面試完後人資會通知說要不要送hiring committee, 如果面試平均分數過低就
不會送,送的話才有機會進入下一步。我最後是在hiring committee 被刷掉,人資說雖
然被刷掉了,但覺得我很有潛力,所以希望未來我能再去面試看看。
Google: 在YouTube 結果通知之後,我原本已經打算就去西雅圖微軟了,結果隔天
YouTube 人資說Google 有另一個部門對我有興趣,所以想問我要不要再試試看。於是我
又在面試地獄裡多打滾了一個禮拜。這次人資只幫我安排了三場面試,遇到的題目就是很
標準的leetcode形式,面試官也不太廢話,進來寒暄一下就開始寫白板。這次我依然是掛
在hiring committee這關,人資說有一個面試官覺得我的程式能力很強很好,但另一個覺
得我沒寫出最佳解,所以hiring committee 覺得我的能力還不夠穩定,於是決定不錄用
。最後人資希望我能夠再多練習一些題目,10個月後再跟她聯繫看看是否能夠再度面試。
Microsoft: 微軟這邊的狀況比較有趣一點,其實原本靠朋友內推都沒有下文,自己在網
路上投履歷也沒下文。直到我在一個fb社團看到一位微軟人資po文徵才,我就私訊聯絡她
,然後經過一些履歷的screen之後我拿到了第一關的線上測驗題。線上測驗總共有三題,
網頁很簡陋,就單純文字描述的題目和一個textbox給你寫答案。有兩題是演算法題,第
三題是system design題。由於當時已經先有了Nutanix offer, 所以我就很放輕鬆的去寫
,第三題因為題目描述太簡短,我直接回答說我看不懂題目XD,一小時的作答時間我只用
了20分鐘就繳卷。不期不待的我就默默接到onsite的邀請... 微軟的onsite面試公司會
直接幫忙訂機票住宿租車等等,餐費則是事後報帳。我參加的是現在微軟比較新的徵才方
式,有點類似海選般的活動。所有獲得onsite的候選人會在同一天一起到微軟的面試
building,然後一人分配一間會議室等著面試官進來車輪戰。我參加的是上午場總共四關
,從8點到12點連續面試。題目也是演算法和資料結構居多,但最後一關考了題system
design, 而且很類似第一關線上測驗的第三題那題我看不懂的問題... 有個有趣的點是上
午場總共十幾位候選人,大概有1/3是從Amazon 來面試的。面試前人資跟我們說他們的
opening很多,不用擔心其他人是競爭者,只要能力夠就可以被錄取。面試完後隔幾天人資打來問說面試的感覺如何等等,然後說有
兩個部門主管想跟我多互相了解一點,所以又多安排了兩通跟主管聊天的電話。聊完後人
資請我選一個我比較喜歡的部門,最後獲得該部門的offer。
Two Sigma: Two Sigma是唯一一個我沒有靠Refer而拿到的on site,一開始是在
hackerrank網站上寫該公司的線上測驗題,通過之後對方人資打來安排電話面試。電話面
試問了不少問題,包含簡答題以及coding題。之後人資寄信通知說邀請我去紐約曼哈頓
SOHO區的總部on site面試。面試為早上連續三關,中午吃完飯後會有早上的面試的回饋
,如果有通過的話下午會再三關。早上的前兩關都是考system design相關的題目,第三
個則是直接給你一台Ubuntu系統的電腦寫程式編譯跑過一遍,我是利用vim+gcc寫C++去實
作問題。吃完飯之後人資通知說不好意思沒有適合的位置給你,所以下午我就去玩樂紐約
了。Two sigma雖然是做程式交易的公司,但內部環境跟矽谷新創公司的風氣很像,也有
開放式空間、micro kitchen免費食物等等,網路上是說這家公司開的package非常的好,
所以要錄取也是頗有難度。
Apple: 雖然我沒有拿到Apple的onsite面試,但我覺得Apple這次給我的電話面試的方式
我還蠻喜歡的。Apple這次的面試跟其他公司不一樣,不是考演算法和資料結構,而是利
用線上偕同寫作的網頁來看我寫project。面試官一開始就在網頁上貼了一份小project的
程式碼約300行,然後稍微跟我講解一下這個project有哪些components,然後叫我編譯執
行、debug、新增功能等等。這樣的面試方式比較像是實際上在公司工作會遇到的事情,
也比較能看出面試者在工作時會遇到問題的思考方式和做法。這是我第一次也是唯一一次
在電話面試遇到這樣的考法,所以做起來速度稍微慢了點。可能是完成的功能不夠多所以
沒有進入下一關。
通常每一關面試完後都會有一小段時間可以問面試官問題,這邊建議是至少問個兩三題,
讓面試官覺得你對於該公司是有興趣的,同時你也可以多了解一點公司的制度和風氣。我
個人是有準備一些經典問題,當沒有特別想問的時候就拿出經典問題來問。我最常問的是
工程師在貴公司的一天是怎麼樣度過的,或是問說貴公司怎麼樣衡量一個工程師的績效、
貴公司對於剛進去的新人有沒有什麼幫助新人快速進入狀況的模式。
由於我的Offer數量不多,而且剛好是兩個不同地區的公司,所以要直接拿Offer去談薪資
不太容易,而且過去在台灣的工作薪資在美國並無參考價值,所以我並沒有跟公司討價還
價,Package跟我上網查的平均差不多後我就接受了。
(更新)
有不少人問我關於system design到底會考什麼呢? 這個問題其實很難回答,因為這類題
型範圍太廣,很難有辦法將他們歸類,不過還好還有一些脈絡可循。我推薦可以到這個網
站HiredInTech(http://www.hiredintech.com/system-design/)看看,裡面會有很多關
於面試問題的介紹以及練習方式。在美國現在軟體公司的環境之下,我認為研究
distributed system的架構是CP值最高、最容易被考到的,因為火紅的服務基本上都是幾
億幾千萬的使用者在用的,要怎麼設計一個能夠支援這麼多使用者的架構非常重要,所以
看一下像是Instagram、Twitter、Facebook等等的系統設計的架構會讓你對於這類的問題
有很好的想法可以跟面試官討論。我個人面試的經驗是一開始先跟面試官討論Use case、
和User Scenario,然後先從大方向開始,例如有Front-End負責接收使用者資料,然後有
Back-End sever從Front-End收資料,收到資料後要做甚麼處理,要如何存放到Database
等等。先譜出一個架構後再來討論可能會遇到的問題,像是
1. 使用者多的時候,伺服器服務無法負荷要怎麼辦(增加伺服器)
2. 伺服器怎麼增加?(Horizontal and vertical scaling)
3. 如何確保伺服器運作正常? (Load balance, failure detection)
4. 資料量太大,Query數量過多導致服務response變慢怎麼辦? (使用Cache)
5. 要使用什麼類型的Database? (SQL vs noSQL)
這類的面試大致上都不出這些範圍,所以可以花點時間把這部分弄熟,即使真的被考到了
也能回答出一些不錯的想法。
我的求職經歷大約是如此,以上心得是從我的Github轉來:
https://github.com/terry77228/UCSC-extension-for-Taiwanese/wiki
如果有人對於我念的學校有興趣的話,歡迎參考一下我的Github內其他頁面,如果有任何
意見、指教或想補充的也都歡迎大家來補完~
謝謝大家!