2022 Google Taiwan SWE (new grad) 面試心得

JC
8 min readApr 1, 2022

--

畢業之後休息了一陣子,準備方式比較偏向短期衝刺,一個半月全職刷題。寫這篇文章的目的除了分享一些準備心得,也希望可以鼓勵到大家!

Timeline

Google 的面試時程超級長!前後大概快三個月,建議一開始就丟!等結果的過程再去面試其他家(其他公司面試心得可參考:2022 新鮮人軟體工程師面試心得)。

  • 1/24:Phone interview
  • 2/15:Onsite interview 1&2
  • 2/16:Onsite interview 3&4
  • 2/17:Onsite interview 5
  • 3/07:Hiring Committee(HC) approved
  • 3/21–3/25:Team Match
  • 3/31:Offer get!

LeetCode 練習方式

會建議買 Premium,top company 題目其實蠻有幫助。由於之前沒有刷題經驗,所以這部分我主要分成兩階段:

1. 根據主題練習

因為很多東西都忘的差不多,一開始是先針對不同主題複習過一次(例如 Array、Stack/Queue、Binary Search、Tree、Graph、Trie…等)。再到 LeetCode 做該類的高頻題,這部分我先從 easy 開始(從 easy 入手比較可以建立信心)。每個主題大概會順個 7–10 題左右,確保自己對這個主題有一定的熟悉程度。

在寫題目時,讀完題目後要先有一些想法,如果時間複雜度極差也要先寫出來。submit 後,如果發現自己寫的時間/空間複雜度不是落在平均範圍,再去嘗試優化複雜度。最後再去看 solution/discussion,了解別人的思路。

這裡分享一些不錯的網路學習資源:

2. 隨機練習

每個主題都大概練過之後可以開始隨機做題目,這部分我是用 company tag 下去練習。隨機刷題是在訓練解題思路,讓自己在看到新題目的時候不會完全沒有頭緒,而是讀完題目後,要大概知道應該是什麼類別的主題、可以怎麼解、edge case 可能有什麼等。當然一開始可能不會想到最佳解,所以這部分我的練習方式如下:

  1. 看完題目,練習口述自己的想法,分析時間/空間複雜度(想像有一個人在聽你面試)。
  2. 到 solution 看有沒有比自己解法更好的時間/空間複雜度,有的話就稍微看一下 title,嘗試往這個方向去思考。
  3. 持續 think out loud。寫完 code 練習做 dry run,不靠 submit debug。

遇到沒想法的題目怎麼辦?

看解答!給自己幾分鐘掙扎,如果真的完全沒想法就直接去看答案。一開始我也很抗拒看答案,但一直想不出來就越挫敗,其實不用硬逼自己想出來,有些解法的切入點是不管再怎麼想都會想不到。如果這題我是看解答寫的,就會再多做這題的 related questions。

Easy/Medium/hard怎麼分配?

一開始我先從 easy,寫到最後都直接練 medium,但有些 easy 的 follow up 蠻有挑戰性的,也不用看到 easy 就都跳過。hard 我超少碰,只寫經典hard 題。

解法要都會嗎?

一題的解法可能有多種,選一個自己最熟悉的方法就好了,其他可以參考,偶爾練習切換一下思路,但不一定都要很熟。

面試過程

關於 Google 常考的題目類型?不一定。像我都沒有遇到 DP,所以還是要對每個主題有一定的掌握。今年因為疫情關係,所有面試都是線上進行。

Phone interview(英文)

Phone interview 算是門票,過了之後才有接下來的五場 on-site。這場題目是 Matrix 相關的。兩個 follow up,第二個 follow up 有拿 hint,程式碼都有完成。

Onsite*2(中文)

第一場題目類型偏向 design,面試官給蠻多 hint 的,個人認為這一場表現不是最好,因為是 open end 題目,很多東西都要自己設計或假設,沒有寫到最佳解。第二場有兩題,第一題 Binary search 相關,有 follow up,第二題 tree 相關,兩題都有做完整的 dry run,都沒有拿 hint。

Onsite*2(英文)

兩場都是印度 Googler 面試,皆是 medium 難度+一個 follow up,程式碼都有完成,也都沒有拿 hint。第一場考 DAG,follow up 面試官說不用寫程式,他想知道我會怎麼解就好了。第二場一開始我誤會題目意思,花了不少時間列舉範例跟面試官討論才理解題目。

這兩場的面試官會不斷地質疑你的每一個思考步驟,why this?解決辦法就是用更多的例子去說明自己的思路;另外他們也會問你「這部分為什麼要設計這種資料結構?」「這樣時間複雜度是多少?」全部都確認沒問題之後,才會開始寫 code。

Behavior Question*1(中文)

這場多以團隊合作經驗相關問題為主,面試官會給你一些情境題,問你會怎麼做,或是有沒有相關的經歷。基本上不要回答的太糟糕,這部分都可以很順利。

Team Match(中文/英文)

所有面試結束後,recruiter 會搜集面試結果送 HC 審核。通過 HC 後才會有 team match 流程,有開缺的 team manager 會從 pool 裡面挑選有興趣的 candidate 來安排 fit talk,所以每個人被安排到的 fit talk 數量不一定(我的話是五場)。

每場 fit talk 大約半小時,manager 會大致介紹自己的 team 大概在做什麼,有興趣的話,可以再多問一些自己想深入了解的內容。最後 recruiter 會搜集雙方的意願,安排 candidate 到其中一個 team。

面試重點

1. Clarify the problems

看到問題不用秒解,先跟面試官確認題目限制,以及自己理解的 input/output 是否和面試官一樣。例如 array 的話 sorted or not、graph 是不是 no cycle 等等。

2. Keep communication

「確保面試官有跟上自己的思路,不要讓面試官在狀況外!」這部分不能只是自個一直說話,而是要讓面試官「理解」自己的說出來的東西,跟面試官確認自己的想法。如果不確定自己的思考方向對不對也可以跟面試官討論(因為有一題我蠻擔心自己往錯的方向思考,問了之後,面試官說 yes, you’re close to the solution.)。

3. Think out loud

想到什麼說什麼。這樣的話如果有卡住的地方或是想法錯,面試官(可能)會適時提供思考方向或是糾正。另外也可以嘗試把思考的東西打出來,優點是在寫 code 的時候就可以按照自己的思路去寫,避免因為太緊張寫出來的和講的不一樣,也可以避免程式碼刪刪改改。

4. Clean code

Google 蠻注重 coding style,所以變數、function名稱要易讀,不要用意義不明的命名。(coding style 可參考:Google C++ Style Guide

個人心得

1. LeetCode 重質不重量

不用為了拼題數自亂步調,面試前我大約寫了兩百多題,把經典題和 top questions 做熟就好了(做熟:二刷或三刷+,通透基本概念和解題思路),基本上其他新題目就是轉換一下概念就可以了。

2. Mock 超級無敵重要

能多 mock 就 mock!找到願意一起努力的夥伴,除了可以多做練習,也可以互相鼓勵。mock 除了可以培養解題的時間控管能力,多練習也才不會怕!

3. 英文面試要有心理準備遇到不同國家的人

基本上準備 Google 面試還是要有一定的英文溝通能力。像我兩個英文場都是排到印度的 googler,當下有點挫,第一場語速太快+腔調的原因,有點沒跟上。後來有請面試官稍微放慢一下速度,才漸入佳境。

4. 溝通!溝通!溝通!

我覺得面試過程「溝通>>>>程式能力」。每個面試官風格都不同,有些會都不說話,要主動跟面試官確認想法,也有些面試官會反覆詢問你每一行 code 的用意。過程除了不斷地表達思路,也要努力和面試官達成共識。

5. 心態上的調整

我不是很厲害的人,一開始光寫 easy 都可以花 20 分鐘以上,後面才慢慢提升手感和思考速度,這兩個月看到各種心得文都覺得我是去被洗臉的吧。分享一句朋友說的:「每個人都有自己的學習步調,找到適合自己的就好。」

附上 LeetCode 截圖給大家提升信心!

最後決定加入 ChromeOS team,真的非常感謝這一路上幫助過我的人,很幸運走完了這一趟面試旅程!也祝看完這篇文章的你未來一切順利!

如果喜歡我的內容,請幫我按讚/拍手,或分享給有需要的人。有任何問題也歡迎留言詢問!

--

--