【學長姊帶路】台灣 Google 軟體工程師 面試分享
原標《2023 台灣 Google 軟體工程師面試心得 — 刷題要刷到什麼程度才有機會通過面試 》
文/鄭元傑 Yuanchieh
網路上已經有蠻多 Google SWE 面試相關的優質分享,關於刷題的準備都蠻類似,但整體流程覺得有蠻大的改變,想說也簡單分享自己這次的面試流程與經驗,尤其是前陣子三月大裁員風波後的在台大舉徵才,希望可以幫助最近想要面試 Google 的人
自身是在新創圈擔任 Backend Engineer 打滾七年,刷題主要是這兩三年比較有在刷,這是第一次面試 Google 蠻幸運有拿到 L4 Backend Engineer Offer
流程
同樣是先 recruiter call + phone screen,接著 onsite 部分改成 3 關 coding 1 關 behavior question,目前全遠端可以拆開面試,behavior question 與 team match 合併,面試官直接是我未來的 team manager
具體 timeline 如下
- 2023/05/12: 請朋友內推
- 2023/05/16: 填完 Google 內部申請單,選好職缺投遞,當天就收到 recruiter 來信
- 2023/05/29: Recruiter call
- 2023/06/05: Phone Screen,隔天就收到通過的消息,但 Recruiter 說要找到 potential team match 才會 onsite
- 2023/06/12: 收到新成立的 Backend Team 有興趣面試,確認 onsite 時間
- 2023/06/14: Google onsite coding 兩關 (台灣人一英一中)
- 2023/06/15: Google onsite coding 一關 (美國人英文面)
- 2023/06/19: Google onsite behavior question 一關 (未來 Team manager 英文面)
- 2023/06/29: 收到 HR 通知說面試過程不錯,但沒有 headcount OYZ,建議轉面 L5
- 2023/07/14: 峰迴路轉有 headcount 了,最後確定 offer
面試準備
採用 C++ 面試,平常工作完全沒在用,因為台灣硬體缺偏多,用 C++ 面試聽說面試會比較好安排 (面試官多),對於 Team Match 也有幫助
刷題部分
同其他大大的分享,我覺得 Leetcode medium 刷熟就好不太需要練習到 hard
我一開始是先刷 Neetcode 分享的 150 題清單,當時因為在工作轉換期所以安排白天刷 4 ~ 5 個小時,一週刷 5 ~ 6 天,固定參加週賽練習在有時間壓力且不知道題型的狀況下解題,後期基本 1e2m 解得出來就好
具體練習上是以相同主題來刷,如果遇到卡住 10 分鐘就去看詳解,接著把相似題也都練習過加深印象
怎樣算刷熟 medium
這也是我當時蠻疑惑的地方,要到多熟才能去面試,我自己覺得刷題大概有四個階段
1.熟悉基本語法與題型
像我採用 C++ 面試平常工作都沒用上,所以需要花時間去熟悉 STL libray 的使用以及每個操作的時間複雜度
基本題型如 array / linked list / sliding window / Dynamic Programing 等先將 150 題刷過一遍
這一階段大概一題 medium 30 分鐘左右,成功率 70%,其餘 30% 就去看詳解學習
2.看到主題就想到模板
接下來進入第二遍刷題,此時看到主題基本就能蠻流暢解出來,同一個主題刷個 5 ~ 10 題基本就能抓出解題的模板 (不是死背),像是 Binary Search / Sliding Window / BFS / DFS / DP 大概看到就知道哪些資料結構跟流程是必備的,如 BFS 基本就是 queue + visited set → 初始化哪些東西放進 queue → 怎麼找 neighbor + 標記 visited
這個階段會額外要求 coding style 部分,基本的變數名稱、排版等都要注意,畢竟面試不單純題目寫完,而是要展現自身的工程能力
此時大概 medium 25 ~ 30 分鐘解完,成功率大概 85%
參加週賽偶爾卡住,但 1e1m 應該沒問題
3.清晰掌握題目
接著進入第三遍刷題,這一個階段基本上看到題目可以很快展開不同的情境,很直覺的推斷出解題思路,比較具體的展現如 853. Car Fleet、1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit,這兩題我蠻喜歡的,第一次解花蠻多時間,但到這個階段我最一開始把 test case 列完,心中大概就有個解題的框架跟雛形
這個階段會額外練習在題目一開始先用註解釐清所有 test case,並給出完整的解題想法與時間複雜度計算,琢磨後沒問題才動手做,有時候會實作到一半才發現當初想法有漏洞,但就是盡可能修正,如果有不順的狀況額外多刷相似題
建議可以跟朋友互相 mock 會很有幫助
基本上 medium 25 分鐘左右解完,成功率應該有個 90% 以上,週賽 1e2m 應該 OK,偶爾 medium 卡一下但還算能解出來
4.面對 medium 有十足的把握
雖說是十足把握但偶爾還是會卡住 XD 但基本上看過的題目就很快解出來,隨機挑 medium 15 ~ 20 分鐘應該妥妥的
這個階段我用 mindmap 依據主題與題型整理經典或是相對不熟的題目,我在 coding 關卡前會花一到兩小時快速掃過去,每個主題挑個一兩題練一練維持手感與增強信心,基本上面的題目都可以 10 分鐘解完
使用 metabase 整理,建議自己整理一次所以就不另外放出來
這個階段不太會搞混不同的解法與題型,隨機挑題目都可以很清晰地解完,建議可以刷 Leetcode 的 Google List,按照 Frequency 高到低往下刷,hard 直接跳過無仿
此時練習會模擬面試流程
1.先完整的闡述解題思路與時間複雜度
2.列出 test case 與 edge case
3. 實作貼合思路,沒有太多的意外或調整
4. 實作過程記得練習邊寫邊闡述想法,例如「這邊我想要避免 edge case 所以 if 判斷 xxx」 / 「這邊 while loop 是在做 xxx 然後根據題目終止條件設定 yyy」
5. 試著先 dry run,用自己的測資去驗證,這點在面試非常重要
整體我面試遇到的難度在 medium 左右,沒有遇到 hard 也算是蠻幸運的,大概最多 45 分鐘遇到 3 題 medium
隨機挑 medium 在 15 分鐘左右解完會比較穩
實際面試心得
- 考官都蠻 Nice 的,尤其有一關是早上七點多跟美國 Googler 面試,他一開始花 2 ~ 3 分鐘鋪陳且語調很溫和,讓我放鬆蠻多的
- 面試 45 分鐘後會有 5 ~ 10 分鐘問問題,我都是問「請問你覺得在 Google 與其他公司最大的不同在哪? / 在 Google 內什麼能力是最重要的?需要繼續刷題嗎?」
基本都是回答 Googler 素質不錯 + 溝通能力很重要,因為同事也都蠻聰明有主見 - Coding style 蠻重要,而且要知道為什麼這樣寫,如 function parameter 我用 const + pass by reference 就有被問這樣寫的好處是什麼
- 如何設計測資非常重要,面試都會問怎麼設計測資確保足夠覆蓋,我的描述大概是每個 if 判別式的邏輯有覆蓋到、如果有 array 或 recursive 就要有空陣列或是 edge case 去判斷等
Behavior Question
這部分可以參考 Huli 大大的清單整理 還有 Terry 大大的分享,建議可以額外了解 Googleyness,調整自己答題的方式與面向,像我自己就有遇到「有沒有團隊遇到比較低潮的時候,那你有做什麼嗎?」、「有沒有設下什麼目標是沒有達成的?為什麼沒有達成?」的問題
回答方式基本採用 STAR 原則,不過在準備 Google 時我有刻意再縮短回答的時間,盡可能很快切到重點減少鋪陳,主要是考量到時間不長 (45 分鐘),回答後我會在詢問「請問這樣有回答到的你問題嗎?有需要多補充嗎?」,一方面是因為用英文回答我不確定有沒有表達清楚,另一方面也想確認是面試官有興趣才多延伸,避免浪費回答機會
談薪水
基本上 level.fyi 有參考資訊,不過我本身也沒有其他 offer 可以去 compete,所以只有在聽到第一次報價時爭論一下 (說我預期可以在高一點),然後就有被小調整一些 XD
建議還是至少表達一下想法可能有額外多一點收穫,但更高明的談薪技巧我也不會,就簡單分享一下自身經驗
結語
能夠一次就上算是非常幸運,很感謝朋友幫忙內推與 mock,但前陣子看到大裁員風潮,即使現在拿到 Offer 也是抖抖的
不過趁年輕也還是想要拼拼看,親身體會看看世界級的軟體工程,而且幸運的是拿到 Backend 職缺不用轉做硬體或其他的開發,未來有更多的內容再分享
額外補充
雖然這次準備大概一個月刷 200 題,但我前兩年有開始準備,分享一下準備的過程與為何當初沒有去面試,希望給大家一些額外的參考
- 第一次準備:參加九章算法與九章算法強化班,當時朋友面上 Google 就是參加這兩個課程,後續他也推薦我去上,真的很像補習班照表操課,每週要花約 20 小時看視頻寫題目,如果是刷題小白我覺得是蠻不錯的入門選擇,課程不便宜 2 ~ 3 萬
當初上完課花了約 3 ~ 4 個月,但刷完有點疲乏沒有堅持住,所以就沒有去面試 - 第二次準備:2022 年因為前公司各種狀況又想要準備面試,重新燃起刷題的熱情,每天花一個小時刷 2 題堅持了半年,後來遇到下半年 headcount freeze 就沒有投遞
總結之前的經驗,我覺得給自己設定一個明確的時間區間 + 專注在 medium 題目就好 / 準備一定程度就投遞試試看,會是一個比較有效的策略,像我之前花太多時間準備到疲乏,沒有太多時間去反思與琢磨自己的解題思路,相對比較浪費時間且低效
本文由 鄭元傑 Yuanchieh 授權轉載, 原文: 《 2023 台灣 Google 軟體工程師面試心得 — 刷題要刷到什麼程度才有機會通過面試 》
___________
你也有經驗想分享嗎?快來投稿賺稿費吧!
瀏覽 1,296 次