【學長姊帶路】Google、Amazon 軟體工程師 面試準備策略

原標《Google追夢計畫》

文/Bo

Chase excellence, success will follow.

2022年4月,不知道哪來的勇氣突然覺得可以挑戰外商看看。

其實當時的想法也很簡單,目前履歷上的兩間公司都算小公司,在這個年紀應該要找一家大招牌跳看看了,而且既然是未來規劃當然是有夢最美,目標就放在外商吧,軟體工程師的外商首選,那不意外的就是Google了吧。

回顧一下自己的工作經驗,幾乎都是Embedded相關,如果想面Google軟體的話,除了重新整理自己的LinkedIn還有一份英文履歷外,在網路上看了許多分享面試外商的準備,英文就不用多說了,再來你一定會看到的建議就是Leetcode刷爆,還有Cracking the coding interview這本書,真的不錯。

曾經有玩過Leetcode,但當時是用C寫的,後來發現用C寫Leetcode真的太吃力不討好了就放棄了,刷的題數應該還沒破百題吧,我想說反正我履歷都準備好了,邊刷題的同時有職缺我就丟,也沒這麼快會有面試吧,就算有的話也可以賺到一些面試經驗。

2022年6月,第一次接到Google Recruiter的mail,這時的我放下了一顆大石頭,因為如果能收到面試邀請的話,至少代表我的履歷能讓我拿到這張門票,後面就是看個人造化了吧。

雖然看過一些面試分享,但實際參與還是有點緊張,我把跟Recruiter的電談排在7月,我以為這就是第一場技術面試了,後來才知道Google的Recruiter其實是很想幫助每個面試的人都能找到他們最好的位置且發揮自己最好的實力,明顯感受到跟以前面試的經驗差很多,Google稱面試者為Candidate也就是候選人,我還是很驚訝一個小小的名詞改變能有這麼不同的待遇感受。

可能是第一次面試Google,Recruiter有做簡單的技術問答,確認一下面試者是否能進入面試階段,不然會浪費彼此的時間,那時我對資料結構演算法只有基礎的瞭解沒有很熟,大概錯了一兩題但還是讓我進下一場面試了。

終於要進入惡名昭彰的Google技術面試階段了,我把時間排在8月,同時也買了Leetcode Premium快速抱一下佛腳,針對Google常考的題目下去刷,這時題數大概在200左右。

2022年8月,迎來第一次的技術面試,一上來就是三題,後面的題目是前面的進階延伸題,難度大概是1. Easy 2. Medium 3. Medium-Hard,當時的我懵懵懂懂,第一題雖然是輕鬆過關的,但後面的題目腦袋中只有暴力解,而且實作也碰到了一些狀況,最後自己也知道涼了,索性問一下面試官的看法,他覺得解題的思路是對的,再加油把基礎補齊吧。

第一次嘗試宣告失敗,但同時也讓我看清楚面對的對手是誰,只要清楚了目標,剩下就是一步一步前進了。

既然買了Leetcode Premium,就把所有功能都用上吧,在Leetcode裡有一個Explore區塊,根據不同的資料結構及演算法分成了很多的單元。

照著順序把所有的單元資料都看過,也照著裡面安排的順序練習題目,很快的我就對資料結構及演算法有更深一層的了解,這時候回頭看當初面試的自己,不禁佩服當初的勇氣。

2022年10月,因為Explore Card的練習,題數很快的達到了300題,其中我也丟了許多不同的外商職缺,除了對跳槽的渴望,另一方面也發現面試也需要累積經驗,所以只要商標夠大職缺相符,我就丟爆。這時也跟過去大學的朋友們組成了外商刷題讀書會,除了分享自己的刷題以外也當作模擬面試來講解自己的解題思路,我覺得這對之後面試的溝通能力幫助也不少。

這時收到了Amazon Ring的來信,要先做一個Online Assessment,主要就是線上做兩題coding考試並且寫下解題思路,通過才會有之後的面試機會。OA是在HackerRank平台上做的,這平台的題目體感好像比Leetcode簡單一點,但題目的描述很長,我還以為在考英文閱讀能力。OA通過後Recruiter約我電談,結論是測驗結果OK但是現在人事凍結了,所以就到這邊為止了。

一直到11月中Recruiter通知有另一個職缺,但又要再考一次OA,沒什麼就是塊小蛋糕,通過OA後順利拿到下一輪面試機會,這時候被告知面Embedded都是用C++來考,之前刷Leetcode都是用Python來寫,只能說太方便了。但因為我之前的工作都是用C寫,所以我只要了一個禮拜的時間來快速熟悉一下C++,這時候題數達到了550題。

2022年12月,第一次挑戰Amazon Ring,第一場基本上也是技術考試,但Recruiter說Amazon很注重行為面試,幾乎每一場面試都是一半行為面試一半技術考試,所以除了刷題熟悉C++以外,還要另外準備一下自己的履歷,把工作經驗組織成一個比較完整的故事方便自己回答。面試開始,一上來就被要求用英文自我介紹,應該還行吧至少我這樣認為,介紹完面試官說切回中文,再來的行為面試應該也算順利,如果你對自己的過去的工作夠投入且有一定的成長,你一定也會有一些印象深刻的工作經驗可以分享,搭配網路上或是書上有很多教你如何搭建故事的方法,基本上應該是不難才對。

緊接著就是技術面試了,考了兩題其實都不難,現在回想起來應該都是Easy而已,但面試官的追問問題,讓我發現自己對現代C++的理解還太淺了,尤其是寫Embedded的環境下對資源的掌握很重要,當你不知道你宣告一個unordered_set需要花掉多少資源的時候,面試官可以合理的懷疑你對系統的掌握度不夠,最後雖然我題目都有解出來,但可能是追問的問題沒有讓面試官滿意,之後也沒有進到下一關了。面試官最後告訴我Amazon是FAANG裡面最操的,然後不歡而散,這又是另外一個故事了。

2023年2月,過完年迎來的是科技業大凍結時代,很多大外商也在這時傳出大批裁員的消息,網路上哀鴻遍野都說應徵市場很冷,剛開始拿到Google跟Amazon Ring的面試邀約,我覺得我的履歷應該是沒問題的,但在這個階段不管我丟多少職缺,都是石沉大海,就算我重新設計了履歷,又把應徵的目標門檻下修,累積投的職缺應該不下30個吧,還是連一個面試機會都沒有。

沒有面試機會只能暫時怪罪給大環境吧,這個時間讓我更專注的在提升自己的面試力,除了學習現代C++的底層架構外,Leetcode也能讓我明顯感覺到自己的進步,看到新的題目開始不會一片空白,手邊能拿出來解題的資料結構跟演算法也越來越多,除了刷題以外,也嘗試了Mock Assessment還有參加每週一次的Contest,平常刷題刷到驕傲的時候我就會來比個Contest,總是能很有效的打擊我的自信心。另外就是找一些Side project來做,我覺得還蠻有效能化解內心的焦慮心情,電子紙月曆的專案也是在這時候啟動的,這時的題數來到了750題。

2023年4月,收到Google Recruiter的mail,原來我的email沒有壞啊,收到信的時候還是非常感動,又一次的機會落在我身上,當然得失心也更重了,難免會想如果這次又沒進不知道又要等多久。但很快調整了心態,先把目標降低放在進入面試第二階段來鼓勵一下自己吧,只要能比上一次進步,至少說明我的努力方向沒錯了。Recruiter發現我上次面試已經是好幾個月前了,特地幫我安排了一次Mock Interview,我一直以為又是線上測驗,結果是真人的模擬面試啊。

可能因為是模擬面試,加上我一直以來都在刷題也看到自己的成長,這次的面試已經沒這麼緊張了,感覺什麼題目來應該都沒問題才對。開場先自我介紹後馬上就進入解題環節,這次比較特別的是解題部分面試官要求切換到英文模式,這倒是第一次用英文去解題,只能說英文這種東西一定要保持在隨時能用的狀態比較好。題目大概是Easy的程度,這次解題很大的不同是我更能掌握面試的節奏了,從確認題目內容、輸入資料的範圍,再來是給出自己的解法並解釋選擇這個資料結構的原因,再到邊講解邊實作,實作完後用測試資料口頭Run過一次流程,我自認為算是流暢的吧,大概是因為題目很簡單的關係,不過也要看跟面試官溝通頻率有沒有對到。

可能解題夠快,剩了蠻多時間跟面試官討論這個程式遇到特殊案例時的處理方法,面試官也請我寫出註解來清楚定義輸入的資料範圍。整個面試都很愉快,最後面試官也給了幾個不錯的建議,例如可以把程式再切開方便驗證跟解說,還有對Testcase的選擇,這對之後的面試也有不少幫助。

2023年5月,原本預計月初要進行第一輪的正式面試,但Recruiter說他跟模擬面試的面試官討論後,說是可以直接跳過第一輪面試,真的驚喜又意外,原本訂下進入第二輪面試的目標就這樣莫名其妙的達成了,不免讓我懷疑那場模擬面試真的是模擬面試嗎。

第二輪面試就比較硬了,總共三場的技術面試,其中還包含Embedded相關的Domain Interview,而且是在幾天內完成這三場,因為要花點時間補Domain Knowlage,就跟Recruiter要了快一個月的時間,這段時間除了加強相關的題目外還另外補了一堂RTOS的線上課程,雖然後面完全沒考到OS的部分就是了。

第二輪第一場是一個美國面試官,因為時區的關係面試排在一大早,題目很Embedded,大概就是之前工作很常遇到的,解析從Sensor獲得的Raw Data,對應到Leetcode的話大概是考bit manipulation相關的題目,如果有相關背景的話應該算是Easy吧,都是基本操作。之後問的延伸問題也是嵌入式才會用到的volatile前綴宣告,一開始聽不出來面試官試要問這個,經過提示之後好險還是答出來了,整體來說對自己表現還是很滿意的。

第二輪第二場面試在同一天的下午,是台灣面試官,雖然Recruiter當初說第二輪的兩場coding面試都是用英文,不過這場是中文面試,題目也是bit manipulation相關,應該是Medium等級吧,但不知道是不是一天排兩場面試太緊湊的原因導致這場的狀況很差,題目只給兩行註解,面試官也沒有多加解釋讓我自己閱讀,讀完之後跟他討論一下我對題目的理解並給出初步方案,面試官也同意我開始實作了,實作完之後面試官顯得有點錯愕,問我是不是做完了,後來他請我再確認一下題目我才發現題目理解錯誤了,到這個時候大概心態就已經崩了,雖然已經正確理解題目了但也只想得到暴力解,經過面試官的提示後雖然想到了比較好的解法,但我跟面試官的溝通頻率一直對不上,之後的實作腦袋早就是一團亂,基本的Index換算我卻一片空白。原本45分鐘的面試面到了一個小時,直到時間到了沒辦法再繼續coding,我還是沒有寫出我心中想的解答,對自己的表現非常不滿意,面試結束還是一直耿耿於懷,最後因為開車心不在焉還跟別人擦撞,真的是得不償失,大家開車上路請專心。

隔天沒有面試,我整理一下心情研究了昨天的題目,真的不難,今天看就是簡單的Index換算而已,也算是再學了一次教訓,首先要把心情穩住才能有辦法好好解題,心態崩了就連Easy都有可能絆倒你。

第二輪第三場面試,也是一大早但是是中文面試,面試官一直帶著親切的笑容,請我先自我介紹放鬆一下,接著是面試題,這次有完整的題目,面試官的語速有點慢,解釋完題目又帶了幾個案例是跑了一下,這時我發現面試題目就是我前天搞砸的那一題,到了道德抉擇的時間了,因為面試官語速比較慢,導致我發現撞題的時候已經花了一些時間了,這時候要告訴面試官然後用剩下的時間面對新的題目呢,還是要繼續解這題我昨天才練習的題目呢。

我選擇了繼續做題,我快速的講解解題思路並且寫出我的解法,之後面試官開始問延伸問題是否能再優化以及code的驗證方法,根據一個小提示之後應該是給出了面試官滿意的答案,之後在共同討論進階題的時候到了面試結束的時間。

之後Recruiter跟我說三場面試拿到了兩個Pass,而且其中一場拿到了outstanding的評價,也就是最後一場面試,這時的我一點也開心不起來,覺得自己不配這個結果,而且認為很快會被發現然後被淘汰掉。

但顯然是沒有人注意到,Recruiter說原本的職缺曾經有兩個Pass送到Hiring Committee結過被Reject的經驗,所以他建議我換一個職缺試試看,也幫我安排了第三輪的Behavioral Interview加上Fittalk共一個小時的面試。

第三輪的面試也順利結束了,談的還算愉快職務內容感覺也跟經歷有部分重疊,Recruiter說再上一層的主管也點頭了所以會開始準備資料送Hiring Committee,到結果出來可能要約兩週的時間,這段時間只能等待。HC的結果有三個,Accept、Hold、Reject,其中Hold就是會根據HC對面試紀錄中有疑慮的部分加開面試來確認Candidate是否符合預期。這時Leetcode的累積題數來到了1000題。

這兩個禮拜的時間非常難熬,除了我什麼都沒辦法做以外,我一直在後悔面試中沒有提出撞題的狀況,所以我認為HC會發現這個狀況然後直接Reject,如果是能力不足面不上就算了,但如果因為這種狀況被淘汰的話,我可能會一直悔不當初。但反過來想萬一我直接就錄取了,我可能也會因為這個小運氣,覺得自己不配這個職位吧。

就在這個心情忐忑不安的狀況下終於熬過了兩週的時間,終於收到了HC的結果,Recruiter告訴我說要加面兩場面試,HC對技術面試及行為面試都有一些疑慮,技術方面就不用說了,就是說爆炸的那一場,至於行為面試HC認為我講的故事都太偏技術面了,想要聽更能展現軟實力的一面。

所以應該沒事了吧,只要再準備兩場面試,就跟之前的撞題沒有關係了,就在隔天Recruiter問我說,當初第二輪兩場面試題目一樣有沒有主動告知面試官呢,我內心一震想說涼了,只能據實以告說擔心時間不夠而沒有告知,後來他們開會討論這個狀況也認為確實很難當場決定是否要告知,所以維持原本的安排,加面兩場面試。知道這個結果也算是如釋重負,心裡最大的阻礙沒了,剩下就是好好準備最後兩場面試了。

2023年7月,原本我想安排隔週就面試,但Recruiter想安排上面最放心的人來加面,時間不好排只能排到了7月中,讓我又多了兩週的時間,可以重新整理心情調整節奏,更仔細的準備這兩場背水一戰。這次兩場面試排在同一天,而且是接在一起的,就是第一場結束後15分鐘馬上接著第二場面試。

第四輪第一場面試,這次的題目就比較難一點了,而且跟原本說要加面的方向不完全一樣,整體大概是Medium-Hard的程度,一開始沒什麼想法,先提出了一個暴力解出來,面試官也答應實作了,在實作的過程中發現有可能存在一些Testcase會造成無限迴圈,主動提出這個疑問之後面試官拿出原本隱藏的Testcase說確實是有這種狀況,順便讓我試著推導一下什麼條件下會出現無限迴圈,我勉強給出了一個答案面試官也放我過了,在code裡面放入避開無限迴圈的判斷條件。(事後在複習的時候發現我推導的條件並不完整,還存在更多造成無限迴圈的可能,雖然我也很想知道真實的答案,不過也查不到類似的題目就只能這樣了。)之後面試官當然沒有放過這個暴力解,問我能不能改善效率,可能前面做得很順,腦力也被打開了,剛好想到適合的資料結構來加速查詢的速度,也得到面試官的認可且實作也完成了。整體對自己這次技術面試的評價還是不錯的。

第四輪第二場面試,這次的行為面試非常的硬,沒有給我自我介紹的時間,一上來就開始問問題直到結束,所以大概問了十幾題吧,雖然我已經做了很多的準備,把所有可能的問題相對應的經歷故事都準備好了,但在砲火連發的狀況,最後還是有點不知道自己在講什麼的狀況,不過整體來說對自己表現還算滿意啦,應該還是在預期之內。

面試完當天Recruiter就跟我說技術面試那場表現還不錯,之後詢問他們也說會開始準備送第二次的Hiring Committee,這次就只有Accept跟Reject兩種結果了。

2023年8月,這次送HC的感覺明顯跟上次不太一樣,一方面也是最後一次不會再加面了,另一方面也是對前面兩場加面的表現還算滿意。但實際收到Recruiter通知HC過關的時候,內心還是蠻激動的。一個小插曲是原本面試的職缺已經有人在最後的流程了,所以Recruiter說會再把我的面試結果及履歷給其他的Team manager看,如果有興趣的話再另外做Team match,因為HC已經過了,所以只要有match就可以直接談Offer了,而且這個權力可以維持一年。

隔天收到Recruiter通知有三個Team總共四個職缺可以讓我選,還是頗受寵若驚的,約了隔兩天跟其中兩個manager談看看。到這個階段就很輕鬆了,沒有考試沒有壓力,就是單純討論職務內容看雙方是不是都有興趣,當天下午Recruiter回覆說其中一個Team對我很感興趣,如果選這個的話流程上可能會比較快且風險比較小,其實我對兩個職缺都有嘗試的意願,所以就果斷答應了。

後面就沒什麼太大的意外了,就是等Recruiter一路跑流程直到正式offer到手,Happy ending。

總體來說,我認為Google的職缺還是很值得挑戰看看的,在準備的過程中不斷感受到自己的成長,感謝讀書會的夥伴們、身邊支持的朋友們還有感謝當初下定決心的自己。

文由 Bo 授權轉載, 原文: 《 Google追夢計畫 

___________

你也有經驗想分享嗎?快來投稿賺稿費吧!

瀏覽 1,495 次

覺得不錯的話就分享出去吧!

發佈留言

Back to top button