# 2024 Google Taiwan Gen SWE 面試心得 ## 背景 學經歷: 四大機械學碩,兩年多的台廠豬屎屋軟韌經驗,主力寫C/C++,技能樹embedded相關。 LeetCode: 約900題(E: 20%, M: 55%, H: 25%),contest rating 2200分左右。 ## 路線選擇 1. General Software Engineer: 只考coding 2. Firmware Engineer: 考coding跟domain knowledge Gen SWE跟FWE是兩個不同的職缺,各有負責的recruiter,跟負責FWE的recruiter討論過後覺得對domain knowledge信心不夠,又加上準備FWE也還是要刷一些題,所以就下定決心純刷題挑戰Gen SWE。 題外話一下,網路上還看過Embedded SWE的面試分享,面試過程也是會考domain knowledge,但不知道Embedded SWE跟FWE面試流程的實際差異,不過可以確定的是Embedded SWE的職稱是SWE,FWE的職稱就是FWE。 ## Timeline * D-3: Recruiter從LinkedIn主動聯絡,約時間面談 * D+0: Phone screen,跟Recruiter面談,沒有技術問題,確認完工作經驗跟LeetCode進度後就開始介紹職缺,結束後直接在Google careers選想要的職位申請面試 * D+14: Technical phone screen,1場coding,45分鐘 * D+18: 收到phone screen結果,安排onsite(註1) * D+28: Virtual onsite,2場coding,各45分鐘 * D+32: Virtual onsite,1場coding,45分鐘 * D+33: Virtual onsite,1場G&L,45分鐘 * D+38: 收到virtual onsite結果,安排1場fit talk * D+39: Fit talk,30分鐘,但這場談完覺得不適合,後續一周內又面了3場fit talk * D+46: 跟recruiter討論fit talk的最終選擇並確認用人主管願意收人 * D+53: 收到offer letter(註2) 註1: 如果是有工作經驗的人,technical phone screen後要先team match成功才會安排virtual onsite,而且G&L的面試官就會是該團隊的成員。Onsite通過後會先安排原本match的team做fit talk,但如果原本match的team突然沒缺了或是fit talk聊完發現彼此沒那麼合拍,那就會重啟team match尋找其他對你有興趣的團隊。 註2: 正常來說用人主管願意收人後要先送hiring committee審核,審核通過了才會開始跑offer letter的流程,但因為這次面的是L3而且每關的成績都是positive,所以跳過hiring committee審核的流程直接拿到offer letter。 ## 面試過程 因為是申請L3的職缺,所以coding都是單純的DSA,沒有system design,都用C++實作,面試用英文還是中文進行就看面試官決定。Coding題目不方便透漏,體感大概是leetcode contest rating 1600分的medium暖身,後續follow-up大約是2000分起跳的medium-hard。 面試過程中強烈感覺到這幾點很重要 1. 溝通 溝通順暢可以加速釐清題目需求,而且討論過程中通常可以感覺到面試官的引導,避免往錯誤的方向去想浪費掉寶貴的面試時間。整個面試過程中要持續把腦中的想法講出來,一開始可以先講暴力解暖暖身,讓面試官知道你思考過多種解法,如果想法卡住了也要清楚表達卡在哪裡,持續跟面試官溝通,直到兩方達成共識討論出最佳解。 2. Coding style Coding style是工程師的基本素養,面試的某一關有被刁了一下readibility,而且好的coding style搭配口頭講解可以讓面試官輕鬆跟上你的實作,避免面試官沒跟上你的想法要重新溝通浪費面試時間。 3. 速度 一輪面試就45分鐘,面試開場寒暄一下確認面試環境正常大概就3分鐘去了,剩下的時間要解掉2題,所以1題大概20分鐘左右要解掉。這20分鐘內要跟面試官溝通釐清題目需求、想解法、實作以及測試你的code,所以實際上實作的時間可能不到10分鐘,要有快速把想法轉換成code的能力。 ## 面試準備 ### 英文 面外商一定會遇到全英文的關卡,但工程師的討論不會用到太複雜的單字或句子,加上碩班的時候要全英文meeting算是有練過,所以英文這塊就沒進一步加強,只有在刷題的時候會刻意用英文自言自語講解思考跟實作的過程。對英文沒有自信的可以先上網查SWE mock interview的影片,以影片的英文程度為目標來練習。 ### Coding #### 第一階段: 建立主題認知 以Neetcode 150清單開刷,剛開始能解出easy跟簡單的medium就很不錯了,想不出來就去看解答沒關係,這階段的目標是對常見的題型建立基本認知並熟悉C++ STL container,所以效率比較重要。 #### 第二階段: rating 2000分 刷完Neetcode 150就可以開始參加LeetCode周賽,一開始對自己沒自信的話可以先參加以前的周賽,也就是virtual contest,讓自己熟悉周賽的情境。 周賽就像是一場沒有面試官的面試,考驗有時間壓力下的解題速度,而且賽後會給你一個rating讓你量化自己的程度,我打周賽的時候剛好有個叫0x3f的YT頻道會做賽後講解並預測每題的分數甚至還提供題單讓大家可以依據主題加強練習,所以常常跟著這個頻道提供的題單去加強練習不熟悉的主題。 這個階段就是根據自己的rating把各個主題的題目都好好刷過一遍,先挑個人rating +100以內的題目來練習,當你把各個主題符合你rating的題目都仔細練習過後,後續再打周賽rating就會開始上升,rating上升之後再把之前跳過的題目刷一遍,重複循環打周賽跟解題的過程,目標是把rating衝到2000分。 刷題過程中要注意不是單純寫出最佳解就可以了,同一題要盡量嘗試多種解法,暴力解、次佳解以及不同做法的最佳解都要練習。當遇到一種解法可以應用在多個題目時,也要去分析這些題目共通的核心問題,這樣以後遇到新題目時,只要發現類似的核心問題就可以把這個解法拿來用。 #### 第三階段: 練習面試技巧 & rating 2200分 2000分過後就可以開始練習面試技巧了,平常解題時要練習用英文一邊講解思路一邊實作來模擬面試的情境。同時也要開始練習LeetCode討論區中分享的FAANG面題題目,如果有面試題目剛被分享也還沒人提供解法,就把你的解法PO上去,用英文描述解法並提供程式碼以及複雜度分析,而且要設計test case驗證解法是否正確,如果看到別人的解法有bug就留言提供一個test case讓他的解法fail,在討論區跟大家討論解法的過程就跟面試類似,請好好利用LeetCode社群的力量。 除了練習面試技巧之外,也要繼續維持打周賽以及賽後檢討的習慣讓rating持續上升,這階段的目標是2200分,我自己花了超過半年才達到這個分數。2200分是我爬文歸納出來的目標,僅供參考,並不代表說低於2200就面不上或超過2200就穩上,只能說達到2200之後就可以比較有自信的去面試。 ## 心得 準備過程中也看了很多篇FAANG面試分享文,除了競程選手外,也會看到刷題數不多或rating不高就直接進外商的高手們,反過來說也有rating 2200+但抽到超難題目被刷掉或是被hiring committee拒絕的例子,只能說coding和溝通能力是基本盤要先顧好,而剩下的部分還需要一些運氣才能順利拿到offer。 自己在刷題的過程中也認清實力不如那些高手們,所以心態上就是好好努力練習把不足的地方補上,這樣就算面試失敗了也能告訴自己有好好努力過了不會後悔,可能這次就只是運氣差了一點,大不了明年再挑戰一次。 在整個面試過程中,對我來說等待team match是最焦慮的部分,網路上也常看到有人team match等了好幾個月才有回應,甚至遇到人事凍結等等慘案。這段時間就只能持續跟recruiter保持聯絡,多關注新開的職缺並主動跟recruiter申請,最後看哪天出現投緣的用人主管把你撈起來,後續還要祈禱hiring committee願意發offer。 最後給豬屎屋軟韌想挑戰Google的朋友們,我個人認為豬屎屋軟韌背景在team match時算是優勢,畢竟Google在台灣開的缺有很大一部分都是embedded相關,至於最難的coding跟英文就只能利用寶貴的下班時間來加強了。平常也可以持續更新LinkedIn把工作成就量化出來吸引recruiter聯絡,或許某天就會拿到不錯的面試機會。 祝大家職涯發展順利!
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up