2022 ML Job Interview Experience in Taiwan (Amazon/Google)
Background
在今年決定離開前公司後,就期許自己未來順利找到工作的話,要記錄自己的面試過程,分享給有需要的人。很幸運能在兩三個月內達到目標,所以我來還願啦 XD。
我的上一份也是出社會的第一份工作是 Machine Learning Scientist,主要的工作內容就是 ML 在醫療影像上的應用。我們去年達成通過 FDA 的里程碑,是很特別也很有成就感的經驗,有面試官跟我說他對於我這個經歷印象很深刻 XD。因為對 ML 這塊領域比較熟悉也比較喜歡,所以這次找的工作都是偏 ML 相關的,沒有純 SDE 的。
Summary
- Not getting job interviews
– Agoda
– AMD
– Atlassian
– Binance
– Datadog
– Microsoft
– Shopee
– WorldQuant - Interview opportunities
– Yahoo (電面後被拒)
– Qualcomm (offer get)
– Amazon (offer get)
– Google (final round 後被拒)
– QuantumBlack (婉拒 final round)
這次我把目標設定在有一定規模的外商,主要跟自己的經歷和職涯規畫有關,陸續投遞了超多間不同產業的公司,雖然收到很多無聲卡跟拒絕信但也因此獲得許多面試機會。多拿到面試機會的好處就是能夠從真實的面試了解自己還不足的地方,在下次的面試就能夠表現更好。個人認為這還蠻重要的,好幾次的 mock interviews 都比不上一場真正的面試,所以在丟履歷時也要有技巧,盡量能夠安排幾場面試在自己最想要去的公司之前,比較能夠習慣面試的壓力進而發揮出最好的自己。
Preparation
和大多數人一樣,我也是透過 leetcode 大量刷題來累積解題的經驗和直覺,先從經典的 Blind 75 開始先練到能夠看到題目就有想法,再來可以針對公司的高頻題去做 (雖然個人這次的面試經驗覺得不太有用 XD),有空也可以參加 weekly contest,整個面試的過程我寫了三四百題左右。寫題目的過程中通常我會給自己 10 分鐘左右,如果沒想法,直接看討論區會是最有效率的學習方式,不然真的會寫到懷疑人生,然後會很想知道討論區的大神們 (對就是 lee215) 腦袋的結構是長怎樣 XD。心態上我覺得不見得一定要追求在有限的時間解出最佳解,如果可以當然很好,但重點放在能夠跟面試官協作共同解決一道問題會是更好的,因為大部分面試官想要看的是,如果這位面試者是我的同事,我有沒有辦法和他溝通共事,解出問題反而是次要的。這裡整理幾個注意事項給大家參考:
- 和面試官溝通,確認雙方對問題的理解有共識
- 了解input有沒有一些可以利用的特性(如有排序過的array)以及output的格式
- 先敘述自己解題的大方向(如我想要用BFS/DFS解這道問題),取得面試官的認同
- 解題的過程可以加簡單的註解
- 完成後記得設計測資驗證程式碼的正確性
- 主動分析時間空間複雜度
- 注意變數名稱的前後一致性
- 解題的過程如果有卡住的情況,ask for hint!
ML 相關的準備我這次是以課堂會學到的基礎知識為主,自己的專業領域因為平常都在碰所以沒有特別花時間複習,如果大家有針對 ML 面試的準備方法的資源也歡迎分享給我。這裡列了幾個我覺得重要的主題:
- bias variance tradeoff
- linear/logistic regression
- L1/L2 regularization
- bagging/boosting/AdaBoost
- decision tree/random forest
- k-means/gaussian mixture model
- recall/precision/F-score
- ROC/AUC
- PCA
- SVM
- cross-validation- convolution feature map size/receptive field
- ReLU/sigmoid/tanh/softmax
- SGD/Momentum/Adagrad/RMSprop/Adadelta/Adam
- dropout
- batch normalization
- binary cross entropy loss
- data augmentation
- image classification
- object detection
- RNN/LSTM/Transformer/BERT
Yahoo
Data Scientist / Research Engineer
1. Data Scientist Phone Interview
面試官是兩位台灣的 data scientists,一開始就先考一題 coding,難度 easy,很久之後刷了 leetcode 發現有幾乎一模一樣的 XD,但當時我卡了超久才勉強擠出一個解答,後續問了幾題 ML 相關的基礎知識,也回答得普普通通。當下結束後就覺得完蛋了,一個月後不意外地被拒了。
2. Research Engineer Phone Interview
Data scientist 被拒絕之後又被找去面了 research engineer,面試官是台灣的 hiring manager,問了一點工作經驗跟介紹他們的團隊,基本上就像是一個老前輩在聊聊天而已 XD,結束的時候他說請我等一下 HR 的通知不過後續也沒有消息了,個人猜測是因為前一次經驗被冷凍了。
Qualcomm
Computer Vision Engineer, Deep Learning
1. Online Coding Test (4 Coding Questions)
一開始 HR 主動聯絡說對於我現職的產業有落差太大的疑慮,後來是主管對我的履歷有興趣決定給我這個機會。面試前 HR 寄了一個連結說要完成一個線上考,總共考了四題,三題我覺得都算是 medium 偏 easy 的程度,跟 linked list, priority queue, quick select 有關,leetcode 都有類似的題目,還有一題是考 C++,當下看到傻住因為我 C++ 都忘光光了 XD
2. First Round Virtual Interview
First round 是跟對我的履歷有興趣的主管聊,後來發現因為他是我研究所實驗室的大學長 XDD,整體面試的過程很開心,他很仔細地問了我的 publications 還有偏實務上的 ML design,並帶我過一次 online coding,詢問我的解題思路,然後看到我 C++ 那題笑著跟我說你 C++ 很不熟齁 XDD,最後他給我很好的 feedback 說會幫我 move 到 final round,只是我如果確定入職後需要加強 C++ 的部分。
3. Final Round Virtual Interview (Presentation + 4 1–1 Interviews)
Final round 總共五關排在同一天,第一關是一小時的 presentation,我選擇報我的碩論。第二關是美國的工程師,問了我許多 ML 基礎知識,最後寫了一題 leetcode easy 的問題。
第三關是美國的 principle engineer,也會是這個職位的主管,人很和善,介紹這個職位扮演的角色以及工作內容,問了很多 open questions,都是 ML 相關,譬如如果你再解決一次碩論的問題,你會怎麼改進。最後剩一點時間他說我們來寫一道問題吧,我覺得比較偏實務上會遇到需要實作的功能,很明顯不是 leetcode 會有的問題 XD,時間關係我當下只有闡述我的想法但最後沒有寫出來,他請我當回家作業寫,我最後真的有寄給他他也有回覆我。
第四關是兩位台灣的資深工程師,比較特別的是有問我修課經驗,問題主要是 behavior, ML 相關,給我的感覺是想到什麼問我什麼,其中一位還跟我承認說他沒什麼面試別人的經驗不知道要問什麼 XDD。最後一關好像是 HR manager,也是簡單問幾個 behavior 相關的問題,我印象蠻深刻的是她跟我說我覺得你現職很好啊 XDD。
整體面試下來我覺得 Qualcomm 的面試強度適中,online testing 相較於 live coding 壓力小很多,後續 1-1 也都沒有問太刁鑽的問題。不過我面試完之後過了大概快兩個月才收到 offer,整個過程還蠻煎熬的,本來還以為沒希望了,可能表現沒有太好所以不是前幾順位的 XD。
Amazon
Amazon Lab126, Applied Scientist
1. First Round Virtual Interview (Coding + ML)
面試官是美國的工程師,請我簡單介紹我的工作經驗和研究後,針對我的研究主題詢問 ML 的相關基礎知識,最後 coding 考了很知名的 design question,但我那時候 leetcode 還沒刷得這麼勤勞,沒寫出最佳解 QQ。
2. Virtual Onsite Interview (Presentation + 2 Coding + 2 ML)
Final round 總共五關排了兩天,第一天的 presentation 我一樣選擇報我的碩論,過程還蠻驚險的,因為 A 家他們自己的通訊軟體沒有單獨分享某個畫面的功能(註:感謝網友提醒,其實是有只是當時我不太熟悉),我做的小抄完全看不到 XDD,還好因為之前面試 Qualcomm 有練習過好幾次,最後算是順利完成。
第二關考的是 ML,面試官是兩位美國的工程師(一位shadow),先針對我的研究主題詢問相關基礎知識,也問到該領域的最新發展,再來是根據他們工作上比較常碰到的主題和我討論相關 ML 的問題,還有一個對應的 coding 題目,不過只有請我闡述我的想法而已。
第三關考 coding ,是一位美國的 manager,初次見面直接來一題 leetcode hard 的 string 問題,當下第一個反應就是,完了,我有看過耶但我還沒看懂討論區的解答呀 XDD,只能用自己想得到複雜度比較高的解法硬解,自認為沒有解得非常好。
第四關考的也是 ML,也是兩位美國的工程師,主要針對我的研究領域詢問相關的問題,我覺得問得很深入,也看得出面試官是有做功課的,剛好是自己的專業所以回答得都蠻切中要點的。
最後一關個人猜測是 bar raiser,考了一題 string 相關的 design,leetcode 應該是沒有,個人覺得難度 medium 偏 hard,有提出一個面試官也覺得可行的做法,但是在 implement 的時候炸了,自己評估是這次面試以來第二差的 coding 表現。
另外 Amazon 每一關的面試一定都有 behavior questions,考的就是他們很有名的 leadership principles,網路上的相關資源很多,這裡就不再贅述。我自己的準備方式是根據過去的工作經驗用 STAR 的架構整理幾個故事,並蒐集幾個常見的問題嘗試回答看看並做修改,盡量讓自己準備的故事能夠回答所有的問題。另外失敗的經驗一定要有,並且要能讓面試官了解你在過程中是怎麼解決問題以及學習到什麼,我舉一個例子給大家參考:
Situation: 因產品的缺陷導致客戶的使用頻率下降
Task: 重新贏回客戶對產品的信心以及重新建立彼此合作的關係
Action: 做了全面的分析確認問題並闡述如何解決的方法
Result: 在一周內成功解決問題,客戶的滿意度和使用率也有回升
整體下來我覺得 Amazon 的面試蠻硬的,除了全程英文之外,要準備的面向很多,coding 是全部裡面最難的,ML 也問得很深入,BQ 每一關至少都問了三題,自己算是很幸運有順利拿到 offer。後來聽朋友說我面試的這個職缺是 L5,不過最後的 feedback 認為我 L5 還不夠格但給了我 L4 的 offer,而且職稱在面試的過程中變了幾次,我也不曉得為什麼 XD,最終給的是 applied scientist。
Software Engineer, Machine Learning, Pixel Camera
1. First Round Virtual Interview (Coding)
面試官簡短了解我的背景後,出了一題 string design,我覺得難度 medium。當初和 HR 聊的時候有提到希望能爭取 senior level ,不過這輪的 feedback 認為雖然溝通無礙和解題思路清晰,但是 coding 還不到標準,好在 HR 有幫我爭取後續以 junior level 評估。
2. Virtual Onsite Interview (2 Coding + Domain + G&L)
Final round 被安排了四天一天一場,第一關用英文進行 coding,開始之前面試官還跟我說他會全程錄音(?。題目比較偏 number simulation,先來一題 easy 的基礎題後考了一題 medium 的 follow-up,設計得蠻巧妙有趣的。第二關是兩位華裔工程師(一位 shadow),考 BQ 相關的問題,問得蠻仔細地,會一直追問下去。第三關也是 coding,考了 island 問題 (但我好像沒在 leetcode 看過),難度 medium 偏 hard,要拐個彎才想得到解法,實作不難。最後一關考 ML design,請我設計一個 google 本身有的功能,因為第一次接觸到這種類型的問題有點不知所措,回答得有點散亂,沒有整體的系統架構,最後也有問了幾題基礎知識。
過了一周 HR 通知我說面試沒過 QQ,也跟我 debrief 一下整體的 feedback,本來以為是 ML 那關炸掉,但 HR 表示面試官覺得雖然看得出我沒有設計系統的經驗,但認為我有把教科書上的相關知識拿來套用,因此給我過,反而是 coding 兩關都跟 first round 一樣,覺得我思路 ok 但實作沒有達到要求。
在面試 Google 之前就有聽說他們面試是非常不容易通過的,雖然結果不如自己預期,但也不太意外。個人認為他們 coding 題目其實沒有比較難(以我這次面試下來的感覺),但是標準很高,用 leetcode weekly contest 來比喻的話就是你的 code 要能夠按一次 submit 後就 accepted,不然會有很重的 penalty ,而且還會看你的 coding style 是不是符合一定的標準。之後有機會的話再挑戰看看 XD。
QuantumBlack
Data Scientist
1. Technical Online Tests (Coding + ML)
這間是 McKinsey 旗下的公司,工作內容比較像是顧問,會和客戶討論釐清問題後利用 ML 的技術幫助客戶解決,算是蠻特別的工作型態。面試之前先收到兩個 online tests,一個是 ML 相關的選擇題,另一個是兩題 easy~medium 的 coding 和一題 ML design,環境已經幫你裝好常用的套件直接要你寫出 ML 的演算法 XD,我想大概只有這家是這樣考。
2. First Round Interview (ML)
因為有簽 NDA 的關係不能透漏太多資訊,主要會針對工作經驗詢問 ML 相關的知識,也會設計一些情境討論如何使用 ML 的技術解決問題。不過後來因為有接受其他 offer 所以沒有完成,也沒有進到最後一輪的面試
Conclusion
這次的面試之旅終於告一個段落,過程老實說很艱辛,裸辭的壓力真的很大,每天戰戰兢兢地拼命刷題,自己回想起來都覺得不可思議,不曉得自己是怎麼撐過來的。最後的成果算是遠超出自己的預期,拿到 offer 的當下真的是開心到不行,很感激這一切,也很謝謝這一路上幫助我的人。感謝看到這邊的你/妳,如果能夠對你/妳有幫助,就達到我寫這篇的目的了,有問題也可以留言讓我知道。最後祝福大家找工作之旅都能順利!
瀏覽 3,774 次