準備面試時,常參考版上的文章得到很多資訊與方向,取之於社會用之於社會,故決定分
享自身經驗,第一次發文,如果有錯誤或排版問題請見諒
背景 : 教育大學資工學士,四大資工偏所碩士,無實習和競賽經驗,三個月發哥正職經
驗,TOEIC 870分
—— Google ——
# Timeline
D+0 google career申請
D+2 HR寄信通知
D+32 pre-screen question
D+45 mock interview
D+66 一面coding interview
D+80 二面 coding interview(二場英文一場中文)
D+81 三面 googleyness and leadership(中文)
D+87 通知面試結果
D+90 Team match(fit talk)
D+129 Hiring committee通過
D+133 收到offer letter
# 面試過程分享
HR Pre-Screen question
人資會問基礎Data structure與algorithms問題,可能根據職位加考一兩題相關題目,
我是被問C++相關問題
可參考leetcode討論區心得 : https://leetcode.com/discuss/interview-experience/
1133071/google-initial-phone-screen-interview-questions
一面 Coding interview
難度 easy~medium,考array相關sort, map使用,先用暴力解,follow up再改進
performance,不過感覺有些太緊張,溝通比較少,改進time complexity後想不出如何保
持time complexity下改進space complexity,後面經過提醒才了解其實可以增加time
complexity來減少space complexity。
二面 Coding interview
第一關 英文面試: (Lean Hire)
難度 medium,考queue、priority queue相關問題,總體來說還蠻順的,可能是當天
第一場面試,還是有點小緊張,改code的時候沒有一次改到最好,確定可以work的時候才
改成可讀性更好的,感覺在溝通和coding的順暢度扣了一點分。
第二關 英文面試: (Hire)
難度 medium,考phrase input相關問題,寫code途中有發現index問題,有跟面試官
說給我一兩分鐘,把index相關問題思考改好,follow up是新增不同的char或string
size增減。
第三關 中文面試: (Hire)
難度 medium,考graph相關問題,題目宗旨略為類似leetcode 310題,follow up在圖的
邊上增加更多條件,第二個follow up並沒有實作,只有說出大致解題方向,面試官也認
可是可行的,只是有很多boundary case沒考慮到,且較正解麻煩許多。
三面 googleyness and leadership (Hire)
問常見的BQ問題,按照HR提醒用STAR法則+learning來進行回答,若有做一些動作讓後續
可以避免發生類似issue也可以說出來。
—— Kronos (Infra team) ——
# Timeline
D+0 投履歷
D+7 收到codility測驗邀請
D+22 一面
D+44 二面
D+50 寄信詢問後續 -> 感恩的信 感謝有你
# 面試過程分享
Codility測驗
第一題 : 考stack + 字串處理,有些類似leetcode 150的感覺
第二題 : 我使用priority queue解,大概是考sort、基礎資料結構應用之類的
第三題 : 考Graph,可參考https://leetcode.com/discuss/interview-question/867806
/q3-online-microsoft-interview-finding-rome
一面Coding interview
總共有兩場面試,題目都根據order book會有的相關操作展開,我使用priority queue
、stack相關資料結構操作,follow up是探討如何讓程式跑更快,除了一般的time、space
complexity上的改進以外(透過binary search or 額外的空間紀錄),也有提到pass by
reference、const之類的也可以在實務上增進程式效能,建議segment tree、lazy
propagation也需要看一下。
二面Coding interview
考C++相關概念,Polymorphism、virtual、smart pointer、lambda function,並透過前
面所詢問的觀念,直接考二題實作上應用上述概念的考題,沒有預期到會考相關的概念,
整體上沒有答得很好,不過也學到許多。
# 準備方式
1. Leetcode : 根據blind75、Neet code roadmap刷,重要的基礎題基本上都4-5刷,討
論區不同的解法也都看過,確保自己理解他的做法,而且細節一定要自己想過,例如為什
麼在某個地方變數才+1或變數目前的意義,可以加深對不同演算法、資料結構的使用。
刷到後面其實大部分的題目都可以想出一個解法,只是常發生TLE或是有想法但實作會卡
關,只能透過多練習來補強,程式最佳化的想法推薦參考Cracking the code interview
中的BUD方法來思考。
2. Cracking the code interview : 若基礎感覺不夠紮實的,可以參考,這本書涵蓋大
部分面試會需要知道的解題觀念與技巧,裡面題目我自己是沒有實際寫過一遍,只有看過
一遍解答,確認自己看懂而已。
3. DS & Algo : 遇到不會的Data structure或 Algorithms就youtube搜尋,基本上會有
很多優質的講解影片。
4. Behavior question: 可以先整理人生發生的大小事,Ex專題、當兵、成績進退步之類
的,並根據網路上的BQ問題,把他歸類為挫折(困難)、最有成就感、最有創造力…之類的
。在進行面試的時候可以根據題目問的方向馬上想到相關的事情,稍微修改敘述的方向後
,再透過STAR法則回答。
5. 談薪水 : 參考tech job n talk podcast
# 面試注意(個人想法)
1. 學著怎麼用文字講解、溝通你的solution,建議可以先用example case先go through
一遍solution,確認沒問題後再開始寫code,寫code的時候可以先寫一個框架再開始填空
格或使用註解,來確保面試官可以理解並跟得上你的想法,並記得always think out
loud。
2. 釐清題目,除了題目意思、答案怎麼產生以外,input 格式、大小、順序都是可以詢
問討論的地方,例如google第一關面試我就不小心預設input是排序好的,感覺扣了一點
分。
3. Coding style要簡潔,面試官能懂看得懂比較重要,Ex 變數名稱要有意義、記得加空
格,不一定要追求leetcode討論區很酷的寫法,Ex 單獨寫一行++/--比在if condition裡
面++/--易懂、寫true/false condition直接寫 變數==數值比直接放變數為condition易
懂。
4. 需要思考時間的話,可以直接跟面試官說你會一兩分鐘不說話來思考,避免面試官以
為你需要幫助,而給你提示造成扣分或打亂你思緒。
5. 寫完除了dry run一遍以外,可以透過實際跑Test case的方式確保程式正確性順便找
bug,如果有bug,在找bug的過程也記得think out loud,跟面試官分享你目前的想法,
找到之後也可以說一下bug產生的地方,順便跟面試官閒聊 Ex有點緊張…之類的,盡量
讓google meet充滿快活的空氣。
# 心得
準備面試真的是一個漫長的過程,能持之以恆不斷努力十分重要,適當的出去走走或尋
求宗教上的心靈寄託,保持心態的穩定也能幫助面試準備,最後感謝DC群一起刷題的朋友
和一直支持我的家人們,也祝在準備面試的人都可以找到理想的工作。
--