在美求職奇幻旅程,軟體工程師來分享

作者 | 發布日期 2017 年 04 月 08 日 12:00 | 分類 人力資源 , 職場 follow us in feedly

編按:作者為 Kenji Chao,講述他在美國拿到碩士學位之後,找尋軟體工程師職位的經驗,提供有志在矽谷工作的人,瞭解不同公司面試的過程和體驗。

故事的開始




2016 年 8 月,結束了在華碩將近 3 年的研替,告別了在 Moska Studio 的創業夥伴們,來到美國加州就讀 CMU 矽谷校區的 Master of Science in Software Engineering Program,開始了人生第一次長期待在國外的生活(如果出差不算),對我申請學校的過程有興趣的人,可以參考去年我發在 PTT 的錄取文:[錄取] CS CMU/Cornell Tech/Columbia/UC Davis

按照正常時程,這個 Program 要唸 4 個學期為期 16 個月,畢業規定是要修滿 8 門課 96 學分,其中第 3 個學期是給同學們自行去找公司實習的,所以大部分跟我一樣在 2016 Fall 入學的人都是預計 2017 年底畢業。但考量到我已經有 3 年以上的工作以及創業經驗,加上當時想來美國的目的就是為了工作,學校對我來說最好最棒最大的優點就是給我合法留在美國的身分,於是在來之前我就決定要兩個學期內修完 8 門課然後在今年 5 月畢業,並且同時找畢業後的全職工作。

在這樣的時間壓力下,同時要兼顧課業以及找工作絕對不是件輕鬆的事情,中間有好幾個月不分週末,我除了吃飯睡覺以外,不是在學校刷題、投履歷、準備面試、電話面試、寫作業,就是在其他公司面試,經過了幾個月的努力,從 10 月中開始的 5 個星期內面了 6 個 On-site Interview,拿到了其中 4 個 Full-Time Offer,這時開始心情就輕鬆了不少,學期一結束抽空回去台灣兩個星期,中間去日本玩了幾天然後回加州後又 Road Trip 去了 LA 玩了 5 天,1 月時把剩下的 3 個 On-site Interview 走完,當時抱著輕鬆的心情去面了一直以來最想去的公司── Square,整體面試體驗很好,跟未來的主管及 Engineer 聊得很開心,最後順利拿了 Offer,在 2 月初時簽約,結束了美國找工作的奇幻旅程。在這過程中接受了很多朋友們的幫忙,也累積了很多心得,為了讓記性不好的我在未來還是能夠回憶這些心得,在這邊記錄下來,希望對大家有幫助!

各公司面試心得

面試結果:

Offer Get:Square、VMware、Indeed(Seattle Office)、MemSQL(舊金山 Startup)、Veritas

On-site 以後被拒:Google、WhatsApp(Facebook)、Coursera、Tubular Labs(Mountain View Startup)

電話面試後被拒:Uber(無聲卡)、Palantir、Microsoft(On-campus)、DJI、Qualtrics

履歷被拒或是無聲卡:Facebook、Airbnb、Apple、Amazon、Lyft、Dropbox、Snapchat、Stripe、Zillow、Expedia、Yelp、Booking.com、Glassdoor、Quora、Twitch、Tesla、Cisco 等族繁不及備載。

其他:Twitter(OA 以後填完問卷無聲卡)、Riot Games(跟人資聊完覺得不適合)、Playground(一間還在醞釀中的 Stealth Startup,聊完發現不適合)

Square

投履歷方式:內推
面試流程:Recruiter 聊天→電話面試 2 關→On-site 面試 6 輪
結果:Offer Get

Square 這間公司一直是我最想去公司的前三名,我的前三名分別是 Airbnb、Facebook 跟 Square,原因是 Square 在 Android 開發者圈,提供了很多很好用 Open source 的 Library,連 Google 都會用,所以我幾年前在寫 Android 的時候就已經知道這間公司,覺得他們的 Android Team 真的很強很有心還把這些東西 Open source 回饋給開發者們,尤其是 Jake Wharton,應該是很多 Android 開發者心目中的神!

有別於其他公司採用白板面試,Square 的面試是用 Pair Programming,面試官會跟你一起坐在電腦前,挑選你想用的語言用你習慣的 IDE 來 coding,通常面試官一開始會提供 Starter code,接著你們會開始討論這個問題以及可能的解法,確認想法沒錯以後就開始 coding 了,面試官會在 coding 的過程中適時協助你或是 code review,我真心覺得這樣子的面試方式比較接近真實工作的樣子,尤其對於白板字非常醜的我來說,能用 IDE 解題簡直開心,Square 的面試問題比較生活化一點,他們會把相對枯燥的演算法問題包裝成應用問題,面試官也都非常樂於溝通,讓解題的過程變得滿有趣的!

內推後先跟 Recruiter 聊天,接著是 2 關電話面試,因為我個人比較喜歡 On-site 可以直接跟面試官互動,所以這 2 輪電話面試我都主動改成了 On-site。我的第一個 Phone Interview 是我整個面試過程中表現最差的一輪,差一點就被刷掉了,面試前一天我去參加 Tech Inclusion Career Fair,然後入住舊金山一間滿簡陋品質很差的飯店,當晚睡不太好隔天的面試又被安排在早上 9 點半,面完的當下我自己覺得表現非常 marginal,被拒絕也不意外,幸好運氣不錯,還是有下一輪的機會,事後 Recruiter 通知我拿到 Offer 的時候,也說我讓他非常印象深刻,因為他記得第一個面試我的 review 不到非常好,我肯定是下了很多努力才讓後來的面試拿到 sharp review。

正式 On-site 當天,Bart 因為有班列車沒有動力,造成 System-Wide 停駛,在 Bart 站乾等了 30、40 分鐘,最後面試時遲到約莫 15 分鐘,當時也沒太緊張,就跟 Recruiter 預告一下我會晚到,不至於讓第一個面試官等太久,當天面完去跟我朋友聊的時候才發現我好像被當成了 Experienced Hire,因為 Square New grad 的 On-site 通常只有 2 輪的 Pair programming interview,但我當天總共面了 6 輪,3 輪 Pair programming,1 輪 System design,1 輪 Resume deep dive,最後一輪跟未來的 Manager 聊天,面完隔一個工作天通知拿到了 Offer,效率超高!

Google

投履歷方式:內推
面試流程:OA 及問卷→On-site 面試 4 輪
結果:面試 Positive Feedback,被 Hiring Committee 拒絕

內推以後隔天收到 OA,題目是一般的演算法題不會太難,立馬做完以後隔天收到 On-site 的邀請,但是 Recruiter 以為我是 CMU 總部的學生,所以信中說要幫我安排匹茲堡的 On-site,我跟她說我人在加州,提供了我可以的時間以後請她安排 Mountain View 的 On-site,結果過了一個多星期,收到正式的 On-site 通知,結果居然還是幫我安排在匹茲堡……再度問 Recruiter 能不能安排我在總部面試,「No problem, we are working on rescheduling you in our Mountain View Office.」但我原本指定的時間不行了,於是重新安排,過了一星期才搞定 On-site 的安排,覺得 Recruiter 有點不專業。

Google 面試(前)的過程可以說是最戲劇化的,面試當天,睡飽飽精神好,準備要出門前接到一通電話,對方聲稱來自加州 Police Department,說我犯了什麼罪要我配合進行調查,接著電話轉到 FBI,說我犯了一個很嚴重的錯誤,要我核對一些資訊,當下其實滿緊張的,不過對於我到底犯了什麼錯,他說不上具體的原因,只回:「You have no idea what you have done!」當下只覺得 WTF,要調查我也說清楚原因麻,我跟他說我 30 分鐘後有一個很重要的面試,可不可以晚點再討論,對方回:「Mr. Chao, this is very important! You have to cancel your interview.」聽了以後拳頭都硬了,然後一直鬼打牆說要調查我但又不說為什麼,後來我實在受不了了,直接掛電話然後出門面試。

最後到 Google 的時候,距離面試開始還有 5 分鐘,但沒想到第一個面試官已經在 Lobby 等我了,沒有時間去想剛剛的那通電話,迅速整理一下心情就上囉!Google 的面試官不太會針對履歷問問題,流程大概就是先介紹自己 Team 在幹麼,然後就開始解題,最後留個幾分鐘讓我發問,這 4 輪裡頭只有 1 輪比較像是 LeetCode 的題目,其他比較像是平常工作上遇到的 Engineering Question,或是沒辦法在 45 分鐘內寫出最佳解的問題,所以我覺得更看重的是跟面試官的溝通以及面對難題的思考邏輯,這幾輪面下來除了 1 輪我覺得還可以再更好以外,其他 3 輪解題都頗順,雖然偶爾會犯一點小錯,但都有及時修正整體聊天也聊得頗開心。

面完過了一星期,Recruiter 通知 Positive feedback,要我提供成績單跟最新的履歷,過兩天要送 Hiring Committee 審核,這邊補充一下 Google 的 Hiring Process,在 Google 面試你的面試官沒有辦法決定你會不會錄取,面試完以後面試官會花點時間寫對於這個人的面試評價,然後提交給 Recruiter,由 Recruiter 根據 Feedback 來決定要不要送審查委員會(Hiring Committee),審查委員會過了以後會在給更高權限的 SVP 審核,通過了才會發 Offer,最後 Recruiter 打電話通知 Hiring Committe 沒審過,我禮貌性地問能不能給一些可能沒過的原因提供我進步的機會,Recruiter 回說因為他們不能給任何的 Feedback,叫我一年後有興趣可以再來一次 XD。

後記:面試完以後驚覺我應該趕緊處理早上的那通電話,回了學校問了同學才知道是詐騙,那一陣子很多人都收到類似的電話,還好當時沒被騙,不然面試可能去不成了。

MemSQL

投履歷方式:Stanford 就業博覽會
面試流程:就業博覽會解題→電話面試 3 關→On-site 面試 3 輪
結果:Offer Get

MemSQL 是一間舊金山的新創公司,CEO 跟 Founder 是 Facebook 的早期員工,做的是 In-Memory 的 SQL Database,面試的問題是我所有面試裡頭最難最有挑戰性,卻也讓我覺得最有趣面試經驗也最好的,拿到 Offer 以後我很認真考慮要去這間公司,對我來講這間就是年輕版的 Square,公司內部很有活力,Engineering Team 大約 50 人,而且持續擴張中,大部分都是 Native Speaker,如果我真的接了 Offer,一定會是所有公司裡讓我有機會學習最多東西的。

MemSQL 這間公司真的讓人印象深刻,在 Stanford 的招聘會上,其他公司跟你聊一聊以後收了履歷往往都沒下文,這間公司直接在攤位出了一道題目,要從一段 C code 裡面,找出可能的 runtime error,我跟我朋友討論以後,說服了他們的 Engineer 我們的答案是正確的以後,順利地拿到了面試。

我沒有看過一間公司的電話面試是需要 3 輪的,而且一開始面試的時候你也不會知道他們的面試流程,當我收到第三次電話面試的邀請時,我想說要是再有第四次電話面試我就不繼續面了(還好沒有),但後來我才理解到他們這 3 輪電話面試都是非常有針對性,第一輪要我從 Terminal ssh 登入他們的遠端 server,裡面有一個 C module,面試官簡單跟我講了怎麼 make and run 以後,就要我新增一個小功能,這種 C module 通常從獲取 input 到最後執行運算都需要經過好幾層,這個面試難的地方是考驗你 trace code 的能力,能不能很快看懂 code,找到對的地方修改並新增功能,這時候就挺慶幸有以前在華碩 BSP team 的經驗,培養了我應對這個面試的能力;第二輪是正常的演算法問題,但面試官的要求相當嚴格,除了 bug free 以外,要求我一直優化到最佳解,直到任何多餘的東西都沒有;第三輪面試官一打來,並沒有要我寫 code,直接要我用講的把一題+兩個 follow-up 用講的全部把解法講出來,這其實不簡單,你不能打字不能畫圖只能純粹用聲音解釋你的想法,經過了漫長的 3 輪電話面試以後,好不容易收到了 On-site 的邀約。

On-site 的前一天住在舊金山的 W Hotel,他們真的對應徵者非常有心讓我能住高級飯店,On-site 雖然只有 3 輪,但每一輪都要 1 小時真的讓我精疲力竭(正常一輪應該是 45 分鐘),而且 On-site 以後不考演算法題,直接考 System design,弄得我不要不要的。面完以後自己覺得 3 輪的表現分別是 Neutral、No Hire、Strong Hire,是有機會被刷掉的,離開前跟正妹 Recruiter 抱了一下 say goodbye,在舊金山市區走跳了一下,隔一個工作天拿到了 Offer,當下真的超級驚喜的!新創公司動作就是這麼快!

WhatsApp(Facebook)

投履歷方式:內推
面試流程:電話面試兩關→On-site 面試 4 輪
結果:On-site 以後被拒

WhatsApp 在 2014 年被 Facebook 收購,我當時是先投了 Facebook 的 Mobile Engineer,但被通知他們招滿了所以把我轉到 WhatsApp,Facebook 要拿到面試真的是很困難呀,雖然台灣大部分人都不用 WhatsApp,功能也不如 LINE 有趣及全面,但他們全球用戶超過 10 億人,市佔率還是挺高,而且值得稱讚的是他們全面支援 End-To-End encryption,對用戶的安全隱私可說是相當重視(雖然這功能一般大眾可能沒那麼 care 啦)。

電話面試是一般的演算法題,然後 follow-up 會問 multi-threading 的優化,2 關過了以後順利拿到 On-site,On-site 其中一輪是直接跟 CEO 對談,他看了我的履歷,稍微瞭解我以前做的事情後,就開始問網路層的問題了,他面試給人的感覺是由上對下而不是把面試者放在對等位置,問我知不知道 TCP、UDP 以及他們的區別是啥,我上次碰到網路層可能是大學上電網導的時候了,這方面的知識嚴重不足,我就坦承地跟他說網路層我不熟,但我會盡力回答,接著問我有沒有很常用 WhatsApp,有什麼功能是 LINE 有 WhasApp 沒有我覺得很值得一提的,雖然是閒聊但過程中他臉都有點臭語氣也不太好,面完我大概就覺得沒戲囉,其他 3 輪 2 輪面演算法,1 輪面 C 的 file system 相關的問題。

面試前我以為 WhatsApp 會像 Facebook 那樣,是在 open space 工作然後大家討論很熱烈,實際去面試發現完全不是,面了一整天,辦公室非常安靜,大家都坐在自己的位置上各忙各的,面試官也略顯嚴肅一些,整體的面試體驗沒有很好,明明都是在 Facebook 的 Menlo Park campus,氣氛卻完全不同,面完過幾天收到拒信。

VMware

投履歷方式:同學提供了 Recruiter Email 後主動寄信聯絡
面試流程:OA 及問卷→On-site 面試 3 輪
結果:Offer Get

我的 VMware 找工作經驗成功展示了時機的重要性,某天我的同學告訴我 VMware 最近在招人,Recruiter 已經發給他 OA,但他太忙了還沒有做,然後很好心地把 Email 給我,我當天主動聯繫 Recruiter 說我對他們的 Program 很有興趣,她跟我要了履歷以後推薦了一個 new grad 的 Propel Program,並且發給我 OA 以及問卷,我當天晚上馬上做完並且回覆 Recruiter,隔天收到了 On-site 邀請,我同學晚了我一天做 OA,結果 Recruiter 告知已經滿了,限量是殘酷的 QQ。

VMware 還算滿有心的,On-site 前一天提供 Palo Alto Hilton 的住宿,晚上有 Happy Hour 解答我們對面試流程還有關於 VMware 的任何問題,面試當天搭接駁車到公司以後先進行導覽,接著進行連續 3 輪面試,這是我第一個 On-site Interview,面試前略顯緊張,但我是屬於比賽選手,面試開始時緊張感就煙消雲散了,3 輪都答得很順,最後一個面試官,一進來就很帥氣地問我:「1 到 10 分,你給自己的寫程式能力幾分?」他都這麼帥了,我就帥氣地回答 9 分,接著他問我的兩題,我在不到 20 分鐘內都解出來了,接著他就說我們坐下來聊聊吧,結果坐下來的時候他的筆電弄倒了飲料讓他的褲子濕了一片……我不好意思幫他清理,於是他自己清理完後跟我說:「我今天總共要選兩個合格人選,在你之前面試的 8 個人裡面,我只看到 1 個不錯的,而你會是另外 1 個!」Oh yeah today is my day!最後我們提早其他人 15 分鐘結束面試,VMware 動作比較慢,兩個多星期以後才通知要發 Offer。

Coursera

投履歷方式:網上海投
面試流程:OA 2 輪→電話面試 1 輪→On-site 面試 5 輪
結果:On-site 以後被拒

Coursera 算是大家比較熟知的公司,但近幾年狀況好像沒很好,課程的質感感覺比不上 Udacity 呀!Coursera 拿到面試還是相對容易的,他們廣發 OA,OA 2 稍微難一些,然後電話面試主要是針對 OA 2 的內容優化以及問一些 Follow-up question,On-site 相對艱難,第一輪要面 2 個小時,帶著自己的電腦用他提供的 API 寫一個 coding project 來實作某個遊戲的 AI,評分的標準是看 coding style 還有遊戲的成功率,這題的難度如果沒有先準備過,根本不可能拿到高成功率,我表現沒很好成功率只有 35%;接下來兩輪分別跟 Engineering Manager 還有 Recruiter 聊,說是閒聊,但聽起來像是在問 Behavior question 以及履歷上的問題,然後接下來一輪是 Pair Programming,最後一輪是白板跟面試官討論 high level 的 Engineering question 不寫 code。

Coursera 整體給我的面試體驗還是滿好的,裡面的人大多是 Stanford 畢業,人也挺 Nice 的,但是面 Coursera 前心態沒有準備好,這是我第二個 On-site,當時太想拿到這間公司的 Offer,導致臨場表現沒有很好,加上題目難度也比較高,最後被拒絕了。

Indeed

投履歷方式:Indeed Prime
面試流程:Indeed Prime OA→Recruiter 聊天→電話面試 1 輪→On-site 面試 4 輪
結果:Offer Get

Indeed Prime 是類似 Hired 的一個找工作平台,先做完 OA,如果有過標準會有一個 Recruiter 來 Review 你的履歷,確認你現在找工作的狀態,一個星期後會讓你的檔案上線,其他公司對你的履歷有興趣的話,會透過 Indeed Prime 跟你聯絡,我同學跟我同一天做 OA,總共考 4 題,我全對但他最後一題有一個測資沒過,隔天我就被 Recruiter 聯絡而他那邊都沒消息。

檔案上線以後,陸陸續續有一些公司來聯絡,但大部分不是找 Contractor 就是要能馬上上工的,後來收到 Indeed 的邀請,他們是來找 New grad 的,電話面試的時候,當時網路狀況不是很好,整體答題狀況也普普,沒想到還是收到了 On-site 邀請,當時知道 Indeed 總部在德州時,還在糾結到底要不要去 On-site,後來想說藉由這個機會去奧斯汀玩,順便趁感恩節時去紐約玩一趟,就答應衝了!

實際去了奧斯汀一趟,真慶幸我有來,比我想像中的德州繁華許多,市區高級飯店林立,不過缺點是 Indeed 安排飯店居然是兩個人一間,跟不認識的人住實在是有些不太習慣,前一天晚上安排我們到一間餐廳一起吃飯,Indeed 人資以及工程師會跟我們聊聊回答我們一些疑問,正式面試當天,總共有約莫 20 個人,一起吃了公司內的早餐,然後一起聽了他們的長官簡報介紹 Indeed,接著就分成兩組,一組上午先做 90 分鐘的 OA,下午進行 3 輪面試,另一組則反過來,我上午先做 OA,難度頗高,像是模擬 Indeed 公司內部實際工作會遇到的問題,測資也相當棘手,90 分鐘後 20 個測資我只過了 11 個,接著就進入午飯時間,Indeed 給我的感覺就像是德州的 Google,辦公室大又華麗,人也不少又有 Free Food 也不錯吃,想必是德州軟體工程師的第一志願。

接著下午是連續 3 輪的 Coding Interview,我遇到的其中 2 輪都是 2 個人面我,另一輪則是 1 個人,Indeed 的面試是在一間沒有白板的會議室,所以是用白板筆直接在玻璃的牆面上解題,所以這邊要慎選白板筆的顏色,不然面試官可能看不太清楚 XD。這 3 輪整體的面試體驗非常好,感覺上 Indeed 的工程師好像都滿喜歡自己公司,其中一個工程師跟我聊到他在這邊快 5 年了,第二、第三年的時候感覺遇到瓶頸想要換公司了,後來公司為了留住他,讓他轉到公司內部其他有興趣的產品,讓他相當感激,目前也是做得頗開心。這 3 輪除了有 1 輪遇到的問題頗難,讓我寫到最後一刻才完成,其他 2 輪只有一個字:順!某一輪面到面試官問到了第三個 follow-up 的時候,面試官說:「這個答不出來沒有關係,因為這是我第一次在面試別人的時候問到這裡!」結束最後一個面試的時候,面試官還帶我去喝咖啡,最後送回人資集合處,拿了一些禮物告別了 Indeed,他們還讓我在奧斯汀多住一天,隔天才離開德州!

星期五面完,隔個星期一人資就通知要給我 Offer,有西雅圖跟德州的 Office 可以選!有西雅圖可以選真的讓人很驚喜!他們給西雅圖的整體 package 其實很好,我一度真的已經要去了,但最後 Square 的出現讓我跟 Indeed 說再見了!

Uber

投履歷方式:內推+Woo.io
面試流程:Recruiter 聊天→電話面試 1 輪
結果:內推履歷被拒,Woo.io 拿到電話面試以後無聲卡

Uber 感覺也是面試很難拿的公司,10 月的時候請朋友內推,過了 3 個多月直接收到拒信。中間無聊註冊了 Woo.io,這是一個匿名找工作平台,填完你的資料上傳完履歷以後,其他公司會看到 3 年 Android 工程師、2 年後端工程師以及你會的 skill set 的資訊,不會揭露你的個人資訊,公司對你有興趣以後你可以選擇要不要公開你的履歷讓他們看到,他們如果有興趣的話就會安排後續面試,我 Uber 的面試就是透過這個平台拿到的,面的是 Senior Software Engineer 職缺,當時跟 Recruiter 聊的時候,他說 Uber 過去這一年成長很快,從 3,000 人成長到 9,000 人,所以現在正面臨 Growing Pain,Entry Level 的人太多,能帶人的 Senior Engineer 太少,跟他聊得還不錯,所以他說雖然我還在學校,願意給我一次機會試試看,直接安排兩天後電話面試。

面試我的是一個女性工程師,當時 Uber 還沒有像過去這一、兩個月發生這麼多風風雨雨,而我當時也不知道 Uber 女性工程師比例是非常低的,面試的題目其實不算非常難,只是要當場在 CoderPad 上 Compile 跟跑測資,當天腦袋有點打結,雖然有寫出解法但中間很卡,對方很有耐心地跟我解釋,但我瘋狂鬼打牆不曉得她要我幹嘛,問了她好幾次到後來才搞清楚她要我優化的方向,面完以後知道自己機會不大,到現在也是無聲卡,結束這回合。

Palantir

投履歷方式:網上海投
面試流程:OA 1 輪→電話面試 1 輪
結果:電話面試以後被拒

Palantir 也是一間我覺得很酷的公司,以大數據分析出名,主要客戶為政府機構和金融機構,裡面的工程師感覺除了 Coding 能力以外,英文也要很好要能夠直接面對客戶,裡面員工大部分也都是 Native Speaker。透過網投拿到了 OA,難度比一般公司的 OA 高,問題類型是 data cleaning and processing,OA 過了以後拿到了電話面試,我敢說那天的發揮絕對是我所有電話面試表現數一數二好的,我手寫我口,邊講邊 coding 相當順,但是面完兩天後就收到了拒信,我自己覺得可能是閒聊的時候英文講得沒有很順,有的時候人生就是這樣,難免會自我感覺良好,但是敗在自己疏忽的其他地方。

其他

礙於篇幅限制,我並沒有把所有公司的面試流程及心得都寫出來,面多了會發現各公司的面試流程其實大同小異,對我投的其他公司有興趣的人,可以參考底下的「找工作詳細時程表」。

美國軟體工程師找工作指南

美國軟體工程師面試流程

美國找工作流程相對於台灣複雜許多,每一家公司的流程也不見得一樣,有些會省略一兩個步驟,大致上流程如下:

投履歷→跟人資聊天→Online Assessment(OA)線上程式測驗 1~2 關→電話面試 1~3 關→Onsite Interview 一天 3~6 輪→發 Offer

整個面試流程其實相當長,其中最難的部分是在投履歷那關,過去幾個月我投了 100~200 間公司,最後拿到的面試機會不到 20 間,拿到面試可以說是比面試本身還要難。

關於面試最重要的 3 件事

經歷了大大小小的面試,有成功的有失敗的,找工作的過程中也參考了各種人的面試心得,學習成功的心得,失敗的心得我也引以為戒,我歸納出面試過程中最重要的 3 件事:心態、溝通以及解題,其中心態 > 溝通 >> 解題,很多人會以為解題是重點,有些人除了解題以外也會注意溝通的重要性,但大多數人忽略了擁有良好的心態,或者說是心理素質,才是決定面試成敗的重要關鍵。

心態

這邊的心態不單單指面試的時候,而是指整個找工作的過程,找工作絕對是很艱難的,尤其在還沒有拿到第一個 Offer 之前,這就像是你在跑一場沒有固定終點的馬拉松,你永遠不知道終點在哪裡,但如果你擁有良好的心態以及心理素質,會幫助你更快到達終點。舉個例子來說,很多人在收到公司的面試邀請時,總會覺得自己還沒準備好,然後習慣性地把 OA、電話面試或是 On-site 面試往後延,讓自己有更充足的時間準備該公司的面試,這乍看之下沒什麼問題,但是你很有可能:

1. 錯過了最佳的時機:從公司的角度來看,絕對不會只發給你一個人面試的邀請,所以同一封信一定也發給了跟你同樣合乎標準的人,公司招人也一定是 First come first serve,有合格的人就會依序發 Offer,時間拖越久,公司的 headcount 只會越來越少,錄取的標準可能也會隨之變高,雖然說我們並不會知道每一間公司投履歷或是面試的最佳時機,但是我們只能把握我們的部分,早點開始總比晚點好。舉例來說,VMware Propel Program,我同學比我晚了一天寫完 OA,就因此沒拿到面試,Indeed 跟 Snapchat 也在今年 1 月的時候,通知他們 2017 年的 New grad 已經招完了,而以往全年都在招人的 Google,也在 3 月初的時候,取消所有 New grad 的電話面試以及 On-site Interview,這在往年是從來沒聽說過的,雖然我在 1 月底的時候要面 Google,但其實那個時候也已經晚了,要是再早一點面說不定更有機會。

2. 延後了自己成長學習的時間:面試準備再久,還不如一次正式上戰場來得學習得多,我個人非常提倡 「Fail fast, fail often, and learn more.」的概念,害怕失敗是不會成長,你要經常失敗、擁抱失敗並且從錯誤中不斷讓自己成長,不要糾結於短期的成敗,才是長期來說來自己持續成長的不二法門,我幾乎一拿到 OA 就是馬上做完,一有後續的面試邀約就會馬上安排,一方面讓公司覺得你很積極,一方面讓自己快速地從面試中學習成長,為再下一次的面試做準備,我的哲學是「如果你要花 120% 的時間準備,面試時要發揮 120% 的能力才能拿到 Offer,那代表你現在的能力還不夠,那沒拿到 Offer 也沒什麼好埋怨的」,誠實面對自己的能力,把握每一次面試機會,好好享受面試的過程,隨時隨地都在一個可以面試的狀態,雖然還沒準備好,但其實也準備好了!

另外,要學會平常心面對每一個面試,不要太看重你想去公司的面試,也不要隨意地去面你沒那麼想去的公司,這就跟男女交往一樣,很多人為了追求異性,太過在意對方,失去了自己的形狀,患得患失導致表現不好,而有些公司,或許之前比較沒聽過,對你來說沒那麼大的興趣,但是去了以後才發現整體面試體驗、公司文化很好你很喜歡,所以請放寬心胸去了解每一間公司,說不定會有意外的收穫。面試被拒也不要太難過,這只是代表現階段你們不適合而已,未來還是有機會的;拿到 Offer 我們可以開心,但是開心一天就好了,這代表你過去的努力有的回報,明天繼續努力,準備接下來的面試!

溝通

這是面試過程中相當重要的一環,換位思考一下,如果你是面試官,有兩個來面試的人都寫出了最佳解,一個人能夠很清楚的釐清問題、舉一反三,解釋他的思考過程給你聽,另一個則是相對木訥,只等到你問問題的時候才解釋,你會錄取誰呢?面試過程中除了考驗專業能力以外,也是在考驗這個人未來是不是一個適合的同事,我會建議不要把面試當成考試,也不要把面試官當成是由上而下出題目給你的老師,而是要想像你們現在是一起解決一個問題,把他當成同學或同事,盡量把你的思考流程解釋給他聽,不要覺得面試官什麼都知道了。另外,在面試時請忘掉你過去所做的題,即便是類似的題目,也會有不同的條件,面試官考查的重點也會不一樣,不要一聽到好像以前聽過的題目,就預設面試官一定是要問什麼,稍微釐清一下面試官的問題,完整瞭解他想問的問題,再開始解題,如果遇到你寫過的題目,建議跟面試官坦承你看過這題,這時面試官可能會要你講一下解法換下一題,或是他覺得沒關係就讓你繼續做題。當然,不是每一個面試官都很好溝通的,有一些面試官可能會擺臭臉,或是講的英文很難懂,但沒關係我們就做好我們能做的,面試官要是真的態度這麼差,也是未來你考慮要不要進這間公司的因素之一。

解題

由於近幾年 CS 太火熱了,軟體工程師的競爭者越來越多,導致題目一年比一年多,一年比一年難,在時間內解出題目已經不夠,還必須要寫出最佳解,我準備的方法不免俗的還是刷 LeetCode,但 LeetCode 已經從幾年前的 150 題成長到 500 多題了,我自己是覺得不可能全部刷完,切記題目無限,但是觀念有限,不要太在意刷的題數,我的建議是:相同類型的題目一起刷,今天做 LinkedList,明天做 Stack / Queue,後天做 Graph 以此類推,這樣相同觀念集中做吸收效率比較好,時間充裕的話,做題時先自己嘗試寫出一個可以通過的解法,這個按照題目難度可能短則 5 分鐘,長的話花好幾個小時都有可能,寫出一個解法後再去看討論區的最佳解,理解過後再自己寫一遍,把自己的 code 改到最好這題才算做完;但刷題到後期可能時間越來越緊迫,沒有那麼多時間可以讓你慢慢寫,這時候可以嘗試寫 15~30 分鐘,如果 30 分鐘內寫不出來,那代表實際在面試時遇到你可能也沒辦法解出來,這時候去看討論區的前三最佳解,找一個適合自己的解法,理解解法背後的原理以後,再自己寫一遍。LeetCode 畢竟比較死板,所以我自己也嘗試找了很多線上 Coding 的網站如 HackerRankInterviewBit 等等,詳細資料可參考底下的「參考資料」。

拿到 Offer 之後:談薪水

很多人在拿到理想公司的 Offer 以後,就覺得好開心找工作結束了,然後就接受了這個 Offer。我個人認為拿到 Offer 以後,下半場才開始!不管公司開給你多高的 package,我的建議是:Always Negotiate!這點真的跟台灣公司很不一樣,我們先來看看這則報導:How one Silicon Valley engineer negotiated a starting salary from $120,000 to $250,000 in just a few weeks。Haseeb Qureshi 在找工作的過程中,一開始拿到 Yelp 的 Offer 年薪 12 萬,後來接連拿到 Google、Uber、Stripe、Twitch 的 Offer,最後在他要接受 Google Offer 前(年薪 16.2 萬),他拿到 Airbnb 年薪 22 萬的 Offer,最後在 Google 跟 Airbnb 之間 Negotiate 到 Airbnb 給他年薪 25 萬的 Job Offer。這聽起來有點難以置信,但仔細想想,公司利用資訊不對稱,發給 10 個合格的面試者一樣的 Offer,這個 Offer 可能是根據這個職位給出的公定價,如果今天有一個面試者,表現非常好,公司內部的人非常想要他,他的價值其實遠高於這個薪水,他如果沒有談薪水就接受了這個 Offer,對公司來講絕對是賺到!Haseeb Qureshi 也在他的部落格,寫了這兩篇文章 Ten Rules for Negotiating a Job Offer / How Not to Bomb Your Offer Negotiation 教大家怎麼談薪水,個人覺得有些地方參考就好,畢竟一樣的方法並不一定適用每一個人。

我自己個人的經驗是只跟我自己會想去的公司談薪水,不要玩弄其他公司的感情 XD。我總共跟 3 間公司談過薪水,他們全部都幫我加薪了,當然不會像上面的文章那麼扯,談薪水當然也不是跟 A 公司說,嘿我有 B 公司的 Offer,你們能幫我加薪嗎?這樣子顯得太隨便不負責任了,要求加薪是一件很慎重的事情,我的做法是寫一封文情並茂的 E-mail,告訴對方我真的很喜歡你們公司,但是我現在真的沒有辦法做決定,接著講述幾個你值得對方為你加薪的理由,這個每個人狀況不一樣,但是記住這些理由一定要誠懇,最後再度表達很想去這間公司,期望對方開出更高的價碼來讓你更容易做出決定。

如何選擇公司

這也是大多數人常忽略的一個問題,很多人會直接根據公司的名氣或是錢的多寡來決定自己的下一份工作,這雖然滿實際的,但也失去了探索自己到底要什麼的機會,好的公司會有爛缺,爛的公司也會有好缺,爛缺也會有好的地方,好缺也會有鳥的點,況且公司是你清醒的時段裡,會花超過一半以上時間待的地方,所以我真心建議大家選公司的時候,問問自己想要在什麼環境跟什麼樣的人工作,想要學什麼技術,5 年後的自己會是怎麼樣子的,做出最適合自己的選擇!

我在台灣第一份工作是去了華碩,當時找研替沒想太多,只是想留在台北,對自己未來要進的 Team 也沒好好研究,糊裡糊塗就進去了,但只能說我強運,工作上讓我學到很多,Work Life Balance 也很好不太會加班,又讓我在 2015 年有出差到美國 Google 3 個月的機會,真的是不能再好了。

有了第一份工作的經驗,這次我在選擇公司時,相對慎重許多,簡單來說選擇好的部門比好的公司重要,我自己則是考慮三個點,第一,公司的文化以及產品我認不認同/喜不喜歡,第二,我能不能在一個讓我持續成長的環境工作,跟一群聰明而且願意分享知識的工程師們一起工作,打造有意義的產品,第三則是考量薪水以及地點,我做決定時盡量會去考慮前兩項,但因為前兩項比較難量化,所以或多或少還是會受到第三點的影響。當時在我接到 Google Recruiter 通知說要送 Hiring Committee 審查我的資料時,我有想過萬一拿到 Google Offer 我要怎麼在 Square 跟 Google 之間選,當時的想法是不管結果我都會去 Square,差別只在如果有 Google Offer 的話會更有本錢跟 Square 談薪水,原因是因為 Square 面試時有一關就是跟我未來的 Manager 聊,我覺得他是個有想法也很有熱忱的人,我預期在他底下做事我會有發揮的空間,再加上 Square 的 Android Team 一直讓我很嚮往,裡面的工程師感覺也都很樂於溝通,另外就是 Google 對 New grad 是先給 Offer 再選組,所以你在決定 Offer 的時候是不知道你未來會在哪個 Team,這點確實讓我很卻步。

美國工作好找嗎?

先講結論:New grad 找工作真的越來越艱難了,大部分的公司還是缺有經驗的!

不管你在台灣有沒有工作經驗,如果你沒有在美國工作的經歷或是你目前是學生身分,基本上你就會被當成 New grad,即便我們會爭論說,在台灣的工作經驗是真的有用很紮實,但對公司來講,他沒有必要冒險或是花時間在沒有美國工作經驗的人身上,所以為了方便起見就會被當成 New grad,換句話說,很多時候跟你競爭的人也是有好幾年工作經驗,要找到工作真的是一年比一年難。人在美國,常常會聽到哪間公司在裁員,哪間公司最近縮招了,有的時候被裁員的甚至就是自己的同學,真的會明顯感覺到近幾年景氣真的沒有之前好。聽過一些人,直到畢業前都沒找到工作,甚至是直到畢業後快半年,已經決定要回台灣了,才好不容易拿到 Offer;另外我有個同學,覺得他能力很好,表達能力好、英文也比我好很多,但因為他是台灣大學畢業後直接過來念碩班,所以沒有什麼公司給他面試的機會,他總共只拿到兩間公司的 On-site 邀請,最後都拿到 Offer 了。每次看到這些故事,都會明白其實沒有身分的外國人在這邊找工作,壓力確實都很大,我們最後會看到的大部分都是成功的例子,但更多的卻是還在找工作或是失敗或是相當相當艱難的故事,所以不要存有美國就是機會很多找工作就相對容易的幻想,每個機會背後有著是更多的競爭以及更多的努力。

結語

感謝有耐心的讀者終於看到最後,我花了很多時間回憶並且把這些心得記錄下來,我講的不見得都是對的,很多時候只是我個人的心得,畢竟這些心得很有可能只是倖存者偏差,適用我的不見得適用另外一個人,不適用我的也不見得對你沒用。但是有一些經驗是通用的:永遠要誠實面對自己的能力,不斷讓自己能力進步往更好的方向走,不要被短期結果影響,要記住人生是長期累積的結果也是一個連續的過程,找到工作也只是個開始,開始工作以後會有大大小小的挑戰需要去面對!最後,希望這篇文章能夠對你有幫助,真的希望能夠在世界的舞台看到更多台灣人,讓更多人知道台灣,讓我們以身為台灣人驕傲,大家加油!

參考資料:

書單

《Cracking the Coding Interview: 189 Programming Questions and Solutions》
《Elements of Programming Interviews: The Insiders’ Guide》

面試準備

LeetCode
HackerRank
InterviewBit
Google Code Jam
GeeksforGeeks
Hired In Tech
演算法筆記
我的 System Design 總結

投履歷

Indeed Prime
Woo.io
AngelList
Grace Hopper 2016 Resume Database
LinkedIn
HandShake
Triplebyte
Who’s Hiring Me
Hired
Career Fair
內推
各公司 Career Page

公司評價、薪資及數據

Paysa
Glassdoor
Crunchbase
CrunchBase Unicorn Leaderboards
The Billion Dollar Startup Club
一畝三分地

找工作詳細時程表

拿到 Offer 的

Square
9/23 內推
9/29 跟 Recruiter 電話聊天
10/28 Phone Interview 第一關(自願改成 Onsite)
12/5 Phone Interview 第二關(自願改成 Onsite),當天通知 Onsite
1/6 Onsite Interview
1/9 通知 Positive Feedback,之後給了正式 Offer
2/3 正式簽約

Indeed
9/18 註冊 Indeed Prime
9/21 寫 OA
9/23 跟 Indeed Prime 電話聊天
9/26 Indeed 主動聯絡我
10/12 Phone Interview
10/17 通知 Onsite
11/18 Onsite Interview
11/21 給 Offer

MemSQL
10/4 Stanford Career Fair 當場解題,投履歷
10/7 Phone Interview 第一關
10/14 Phone Interview 第二關
10/20 Phone Interview 第三關
10/21 通知 Onsite
10/28 跟 recruiter 聊天 @ MemSQL
11/11 Onsite Interview
11/14 給 Offer

VMware
9/28 寄信給 Recruiter,收到即時回覆,填妥相關資料並寄履歷,拿到 OA 之後當天寫完回覆 recruiter
9/29 通知 Onsite
10/17 Onsite Interview
11/4 給 Offer

Veritas
10/6 收到系統信將在 Grace Hopper Conference @德州進行面試,我主動回覆希望能讓我在 Mountain View 的 Headquarters 面試
10/7 拒絕我
10/11 又說可以考慮安排面試,發給我 OA 我當天寫完
10/12 通知 Onsite
11/4 Onsite Interview
11/22 給 Offer

Onsite 後被拒

Google
12/5 內推
12/6 做完 OA 以及問卷調查
12/7 通知 Onsite
1/20 Onsite Interview
1/27 跟我要成績單,通知要送 Hiring Committee 審核
1/29 Hiring Committee 審核不過

WhatsApp(Facebook)
8/30 內推 Facebook Intern
10/1 通知要求選組,我傻傻地選了 Front-End 作為第一志願
10/7 跟 Facebook recruiter 電話聊天,被問了一堆 javascript 的問題,答得不是很好謝謝再聯絡
11/13 內推 Facebook Mobile Engineer
11/17 被告知職缺滿了,履歷被轉到 WhatsApp 安排面試
12/7 Phone Interview 第一關
1/5 Phone Interview 第二關
1/31 Onsite Interview
2/2 收到拒信

Coursera
9/10 收到 OA1 並且做完
9/12 收到 OA2
9/17 做完 OA2
9/20 收到通知安排面試
9/26 Phone Interview
9/28 通知 On-site
10/24 Onsite Interview
10/27 收到拒信

Tubular Labs
9/22 海投
9/30 跟 recruiter 電話聊天
10/4 收到 Take Home Coding Challenge
10/6 做完 Take Home Coding Challenge
10/17 通知電話面試
10/26 Phone Interview
11/9 Onsite Interview
11/16 Recruiter 打電話來拒絕

放棄 Onsite

Location Labs
9/22 海投
9/25 做完 OA
10/17 通知電話面試
10/21 Phone Interview 第一關
11/3 Phone Interview 第二關
11/7 收到 On-site 邀請,我拒絕

Phone Interview 被拒或無聲卡

Uber
10/15 內推
1/20 收到拒信
12/19 註冊 Woo.io
1/10 Uber 透過 Woo.io 對我表示興趣
1/15 開放 Uber 取得我的完整履歷
1/24 跟 Recruiter 聊天
1/27 Phone Interview

Palantir
9/22 海投
10/13 收到 OA 並且做完
10/14 Recruiter 聯絡安排 Phone Interview
11/2 Phone Interview
11/4 收到拒信

Microsoft
9/27 Microsoft Campus Day @CMU-SV 投履歷
11/2 On Campus Interview
12/12 收到非常有禮貌的拒信

DJI
10/31 跟 recruiter 電話聊天
11/7 Phone Interview
11/15 收到拒信

Qualtrics
11/26 海投
11/29 安排電話面試
12/13 Phone Interview
12/21 收到拒信

Twitter
10/25 海投並收到 OA
10/28 做完 OA
12/21 收到罐頭信說會在 3/31 以前做出決定

聊完天發現不適合

Riot Games
10/12 跟 recruiter 電話聊天

Playground
8/24 跟 recruiter 電話聊天
8/31 跟 VP of Software 聊天 @Playground

履歷被拒或是無聲卡

Facebook、Airbnb、Apple、Amazon、Lyft、Dropbox、Snapchat、Stripe、Zillow、Expedia、Yelp、Booking.com、Glassdoor、Quora、Twitch、Tesla、Cisco 等等族繁不及備載

Career Fair

Stanford Career Fair
10/4 Stanford

Tech Inclusion Career Fair
10/27 San Francisco

Apple Day
11/1 Apple

Microsoft Day
9/27 CMU-SV

(本文由 Kenji Chao 授權轉載;首圖來源:pixabay)