[心得] Google TW SWE 面試心得(下)
※ [本文轉錄自 Soft_Job 看板 #1WwLD9Kl ]
(文長警告)
上一篇提到 2019 年底聯繫上 HR 開始全職刷題六個月,
到了 2020 年中面試完收到拒絕信,灰心了好一陣子。
但也沒辦法,還是只能乖乖回去公司上班。
這次回公司上班其實也獲得一個不錯的契機,
因為加入了有兩個印度人在內的 scrum team,
所以每天都得使用英文討論進度,英文聽說能力大幅提升,
發現自己竟然可以聽懂印度腔英文時真的有點驚喜 lol
在工作閒暇之餘,自己一直保持著一天寫個一兩題的習慣,
大概到 2020 9月開始,Leetcode 開始出現 30 days challenge,
用意是希望你能夠每天完成它指定的題目,完成會有獎勵。
也是從這個契機開始,找一些朋友組了一個解題讀書會。
這個讀書會其實後來對我的表達訓練幫助非常大,
我們的跑法是這樣:
1. 先看當天題目難度設定時間:
easy 10 分鐘,medium 20 分鐘, hard 30 分鐘
開始計時之後才開始看題目。
2. 只能按 submit,不準按 run code。
3. 在時間內 AC 的人留言自己作法的時/空複雜度,跟 WA 次數。
4. 時間到直接停手,沒 AC 的人輪流說自己的想法,
再換有 AC 的人照著複雜度跟 WA 次數排序,較差的人開始分享自己的 code,
要徹頭徹尾的說出自己的策略,code 每一行的用途,跟有沒有機會再改善。
5. 最後來看解答跟討論區,討論區主要看 lee215 跟 StefanPochmann 兩位神仙,
不過這兩位大神的 code 有時候會太過簡化,
不建議面試時把 code 寫的跟他們一樣,
但他們的邏輯跟作法非常值得讓人學習,而且語言特性用得淋漓盡致。
另外也推 DBabichev 和 awice,他們的 code 說明會比較詳盡,
看起來會比較容易消化,滿建議有看到這些人的文章都可以打開看看。
我們一開始原本只打算把這個 30 days challenge 寫完就好,
結果 Leetcode 官方後來直接把這個變成 monthly challenge event,
一直到現在都還有,所以讀書會就一直跑到現在都還在跑 XD
也差不多這個時間點開始,每週準時參加 Leetcode weekly contest。
之後也有參加 Codeforces, KickStart, CodeJam,
之中 CF 的定位比較偏向競技用途,覺得對於學習觀念的成效有限,漸漸就沒再參加。
變成每週 LC weekly/bi-weekly,每月 KS,報名 2021 CodeJam,這樣的模式。
但其實 KS 跟 CodeJam 題目有點太閱讀測驗,但畢竟是 Google 辦的就加減參加。
參加 contest 主要用途是為了訓練抗壓性跟時間掌握能力,
讓你臨場感受在有限的時間內完成給你的 coding 任務,
也是一個量化自己成長幅度的方式。
LC contest 要在一個半小時內寫完 1e2m1h,
一開始我通常只能寫完 1e1m,會在寫第二個 medium 題目超時。
而到面試前,已經幾乎可以 easy 從看題目到 AC 穩定在 5 分鐘內完成。
1e2m 幾乎穩定可以在 40 分鐘內完成,剩下的 hard 就隨緣慢慢寫。
時間到之後我會把自己的解法 po 在討論區上,
順便可以寫下自己的策略跟估計時/空複雜度。
這一步真的滿重要的,有時候你以為寫了一個很厲害的解法,
結果 most votes 的解法硬是比你強一個等級(通常都是 lee215 的解 lol)
而且有時候看到自己的解法是 most votes 第一名時真的會很有成就感。
大概過這著這樣的平日上班開讀書會,假日打比賽的生活一段時間後,
就決定 2021 年初開始再來請一次六個月的育嬰留停好好準備。
有人可能會問是哪家公司這麼好可以一直請,
其實法規規定一個新生兒在三歲前,總計可以請兩年的留停,
但只有前六個月有勞保局補助,剩下的就真的是吃老本在撐了。
(如果真的想知道是哪間公司,是一間曾經差點買下 Google 的老牌網路公司 XD)
其實這次請留停前也有跟主管和大老闆說清楚,這次留停應該是不會再復職了。
以一個破釜沈舟的心態來抓住未來可能的機會。
這次因為已經累積超過 600 題,而且上次面試發現自己有些觀念掌握的不太好,
所以改以主題式複習方式,把所有寫過的題目分類,
用一個 Notion page 筆記下來,把自己的解法都整理貼上去,
同一個主題的內容與解題手段都弄通弄熟後,才往下一個主題前進。
這邊要再強調一次,千萬不要執著於累積的題數,
刷題只是為了幫助你掌握觀念,掌握觀念與解題手段才應該是真正的目標。
很推薦 Leetcode 的 learning cards: https://leetcode.com/explore/learn/
如果是從頭準備起可以從這邊下手,
搭配 Cracking The Coding Interview 應該可以掌握七成的內容。
剩下三成內容可能就要靠自己歸納統整出來,像是 DSU 跟 BIT 就要靠自己去了解。
另外關於 system design,其實我沒有額外分配太多時間在上面,
一個原因是因為網路上搜集到的消息是 system design 主要是拿來分辨 L4/L5 的指標,
L5 以上(含 L5)是一定會問,但如果是面 L4 以下(含L4),
比較會問到的是 OO design 或是 system design related 的問題。
而且我也有問了幾個挑戰成功 L4 的朋友,
有些是完全沒被考到 sd,有些是 sd 答很差但最後還是 qualified。
所以我最後有點賭的只從這裡面挑一些內容配飯加減看:
- https://github.com/checkcheckzz/system-design-interview
- https://github.com/donnemartin/system-design-primer
- https://www.interviewbit.com/courses/system-design/
就這樣一直準備到大約 2021 二月左右,收到了「Hello from Google」為標題的來信,
約了簡單的 chat 後就直接說可以再幫我安排 phone interview,
這次投的缺是 General Software Engineer,
心裡想著這應該是近期我自己設定的最後一次機會了。
(其實我有問過 HR,現在似乎?沒有三振條款,
但會希望你每次的 feedback 都比上一次更強,不然可能會拉長 cd 時間)
於是很保守的約了五月再開始整個流程,也給自己更多的時間消化吸收整理的內容。
然後大約在四月中左右,開始請朋友幫忙 mock interview,
個人認為 mock interview 絕對是鄰近面試前最需要做的一件事。
我的做法是把朋友真的當主考官,跟他約時間開 google meet 跟 doc,
開始後不嘻嘻哈哈,真的讓自己親臨現場。
他會從 Leetcoce 中隨機選 Google tagged 1e1m 共兩題,
然後請他把 constraints 跟一些他認為我應該要問他的題目敘述拿掉,
在「最多只給一個必要的 test case」的情況下把題目貼在 gdoc 上給我,
然後我該做的事情就是:
1. 詢問可能的 constraints 與某些 edge cases
2. 列出至少三種不同類型的 test cases
3. 先「說」出自己直覺的暴力解,再想想看可以從哪個觀念解,think aloud
4. 確定得到可以寫 code 的訊號後開始動手寫
5. 盡量對自己每一個打下的字元都充分考慮,不修修改改
6. 邊 code 邊說這樣寫的用意
7. dry run 自己列的 test cases
8. 給他明確的「已完成」訊號
9. 以上儘量掌握在 easy 10 分鐘和 medium 20 分鐘的限制內
這其實也是真正面試時最重要的流程,大量 mock interview 可以讓自己越做越好。
我跟我朋友那時間每天都會進行一場這樣的 mock,
超級感謝他,也有說好以後他有需要我也會陪著他這樣做 QQ
於是終於到了 phone interview 的那天,是中文對談的場次。
遇到一個很棒的面試官,跟他溝通都很輕鬆,真的像是在跟同事一起寫 code 一樣。
一開始先來一題 easy,是某個知名演算法的子題,
直接列 test cases 後口述做法後立刻寫完 code,
他還問我說是不是常在打比賽 XD
第二題是一題 medium 偏 hard,聽完題目後列了 test cases,
口述了心中想到的方法後,直接被告知那我們來解第三題好了,他相信我寫得出來 XD
第三題是一題 hard,一樣列 test cases 後給直觀解,
然後再進一步思考要怎麼做更好,這題我想了比較久一點,
幸好最後有想到之前在某個 hard 的題目中有用過的手法,順利解開。
然後時間也差不多,閒聊了一下就這樣愉快的結束。
這一場我自己給的評價是 positive,
果然幾天後就收到進入 onsite 的通知。
這次的 onsite 安排了四場 ds/algo 跟一場 G&L,
沒有 sd 的場次,因為 HR 說我去年有表示想換,所以今年就換了。
一樣分成兩天,一天三場 ds/algo,另一天一場 ds/algo 和一場 G&L。
onsite 第一場是全英文對談,
這場一樣以一個 easy 暖身開場,
一樣秒解後,面試官還問: "Are you sure about your solution?"
很緊張地再 dry run 兩次都沒問題,
結果他笑著說: "Just want to check you have enough confidence with your code."
然後表示這確實是最佳解,也沒有可以再最佳化的地方了,做得好。
然後就進到下一題 lol
第二題他一開始有說這會是一個題組,有點難把這個題目歸類難度,
是個比較偏向 open-ended question 的問題。
大致上就是寫個他要求的東西,他會再問些進一步的問題,
你再思考改善方式這樣。
這個題組其實不太像是傳統的 ds/algo 問題,
個人是把它歸類為 L4 以下可能會面對到的 sd related 問題吧。
時間差不多時也就稍微閒聊一下,他還說如果我有機會進去遇到他可以跟他說聲嗨 XD
也是滿愉快的結束這一場,個人自我評價是 positive。
onsite 第二場也是全英文對談,是個撲克臉面試官,
一樣的 easy warm up 秒解,追問了一個 medium 等級的 follow-up
一樣的照流程寫完 code 後,再被問了一個不同的 medium 題目,
這個 medium 我給了兩種方向的解法,分別會對 time/space 有 trade off,
沒有寫 code 就結束這回合,因為是撲克臉所以也感覺不出 feedback,
但是因為最後一題在思考解法時中間有點差錯,是被引導糾正回來的,
所以自己給的評價是 neutral。
onsite 第三場是中文對談,是個口氣稍微嚴厲點的面試官,
只被問了一題,原本以為一樣是 warm up,結果提出解法後的正確性證明直接卡關,
被面試官直接說:「沒法證明正確性之前建議不要這麼做。」
只好退回來以直觀想法重新開始。
後來實在想不到直觀想法以外的解法,卡了一陣子面試官就主動給 hint,
好在拿到 hint 後很快的給了一個解法,面試官再在這個解法上問了一些優化方向,
就結束了這場面試。
想說慘了完蛋,跟前面兩場的手感完全不一樣,自己給了評價是 negative。
事後去網路上找有沒有類似這題的題目,結果原來 Leetcode 有一模一樣的題目,
難度等級是標為 hard。
onsite 第四場也是中文對談,是個笑笑撲克臉的面試官,
笑笑撲克臉的意思就是他從頭到尾都是笑臉,但是會笑得讓你有點緊張。
這次一開始就一樣是 easy warm up 秒解,被面試官問說是不是有在當助教 XD
然後他說原本他打算再問兩題,看這樣我直接回答第二題就好。
結果這題我一下子就看出是什麼類型的題目,但子結構一直抓不準卡超久。
一開始他說沒關係別緊張時間還很多,試了一陣子後我還懷疑我自己是不是走錯方向。
於是他就給了 hint 說方向是對的,要我繼續,
好在他給完 hint 後沒多就終於抓到關鍵點提出解法,
寫下 code 花了點時間處理 edge case,整個完成時超時大概五分鐘。
滿感謝這位面試官願意多給我這五分鐘,讓我最後能寫完完整的 code。
這場自我評價 neutral。
接著最後一場是 G&L,這場對 Google 來說好像是一個門檻值,
feedback 只會有 pass/no pass,似乎不會拿來打分數,
所以我大概用 STAR pattern,參考這裡:https://zhuanlan.zhihu.com/p/40915843
歸納了幾個方向的回答就上場了。
這一場題目大概分為「你以前的經驗」與「假設性問題」,
只要照著 STAR pattern 應該都算滿好回答的。
至此終於完成所有 onsite interviews,
隔了一個禮拜 HR 週三告知會送 HC,然後很罩的幫我塞進週五的 HC session,
當天下午就知道過 HC 了,當下真的抱著老婆小孩一起歡呼 QQ
接著就是 team match,跟談薪水,team match 之前我有在板上發問,
一些前輩給的建議滿好的我就不再多說了。
薪水其實我沒什麼談,只能說有些 Youtuber 真的滿厲害的 XD
現在就是等著收到正式 offer letter 到來的那天。
回首過去的兩年半真的是一場奇妙旅程,
請了兩次六個月的育嬰留停在前公司應該也是前無古人吧!
好在最後的結果是不錯的,才能以一個倖存者的角度分享這些事蹟,
希望我的例子也能給一些還沒上岸的板友加油打氣,
big G 失敗好幾次真的是正常的,尤其在努力了之後卻沒有好結果的當下真的會很沮喪,
但只要持之以恆,總有一天可以看到那出口的光芒 :)
最後想再分享的是,
面試前我自己有許願,如果上了之後要來分享我寫過題目的所有解答,
目前正在慢慢施工中,再請期待~
最後的最後,雖然文中一直強調刷題的題數不是重點,
但還是任性地想曬一下最後完成的題數,證明我的努力。
Cheers!
--
推強者
推
厲害厲害 推一個
優秀! 恭喜輪大過關斬將取得門票, 跟google 比起來
我們的面試像玩具.
辛苦了!大恭喜努力有回報!
推!!
如果是美國學校畢業的在google總部的都沒這麼硬
真的很佩服你,祝福你。
lee215真神人+1 XD
你下半段分享是突飛猛進阿
我覺得前兩次最大的盲區就出在以題數估計自己能力。 以為 600 題好像還行,但其實之中真正的關鍵題可能沒幾題,甚至根本沒弄懂。 只能以自身血淚教訓分享給大家,題數真的不是重點。 然後我自己感覺除了解題這個維度以外, 面試當下也有被評價其他維度的東西,這有點難說清楚, 有點像是估量看看你有沒有辦法在一片迷霧中找到出口的那種感覺。 太快找到出口還會把霧弄的更濃一點這樣 lol 另外就是穩定度差異了,有 mock interview 真的差超級多, 真心建議所有人面試前都要好好 mock 一下。
推
推
......我太難了
講那麼多這裡的人看不懂啦 錢有GG三寶輪班多嗎哈
恭喜
看不懂啦 直接推
請問最後是L4的offer嗎?
是
推 太強了!
強者推 沾沾喜氣
這過程真的好努力
厲害
能感受到你的喜悅,感謝分享!
恭喜 祝一帆風順
看完後發現好累,我果然注定當魯蛇 QQ
推
真的太猛了 恭喜
推推
這毅力太神了
Hoogle SW 表示幹嘛這麼累
恭喜啊 感覺好累
強
每個人的google面試真的都不一樣
太厲害了
我上次面試他問我寫python我直接說我不會 哈哈哈哈
我太懶了
推
厲害, 向你看齊
推
神阿
推 已崇拜
分享推~
美國那邊跟台灣難度會不一樣嗎?
PUSH 真的是漫漫長路 怕!!!
太強大了
Congrats!
太強大了 有工作家庭小孩 還可以這樣準備
超級感謝我老婆,我刷題時她一個人顧大寶跟嫩嬰,辛苦程度可能我的好幾倍 QQ
我過去一年拿了八次lc比賽前一百,每關也寫兩題,
後來被HC拒絕了,事後想想應該是完全沒有mock int
erview,不知道面試時該注重什麼,結果面試當下完
全沒test
好厲害!列 test cases 主要是展現出你考慮地很周全,範圍界定地非常清楚。 也許你下一次就上了,加油!
強 雖然刷題數不是重點,但我看過說這些話的人
但都一堆題,感謝分享 希望自己也可以觀念穩固為主
*都寫一堆題
爽啦
感謝分享
恭喜!
推,感謝分享!
感謝分享
感謝分享
推神人無私分享!
L4 240-280 /year
推認真態度
有夠硬,恭喜你
好用心 充滿毅力努力
push
恭喜
神人推
太猛!
推
感謝分享
你真的好強耶!!汗顏!準備這麼充分!!
抹布大謙虛了,每位前輩一定都是付出了相當程度的努力。
超棒的分享
恭喜!
跟老闆說不會再復職也沒有薪水為什麼不直接提離職
呢?
當初考慮兩個點: 1. 直接提離職的話,未來被問到「目前薪水」會居於劣勢, 現在的工作其實就是一份 competing offer。 2. 勞健保,留停的話雖然是自己繳全額,但是不會被中斷。
厲害! 好奇最後team match選擇?
一個最近成立的 team,硬體相關,職務內容不知道能不能說就不說了 XD
哈哈沒事 祝新職務順利囉
恭喜!被抹布大推文了
role model
感謝前輩分享,讓我見識到Tier 1公司的準備方式了
推
推
推分享!!
真的是長見識...
感謝分享,真的很厲害
強者推!
有妻小刷題真的痛苦無比
推 強者
推認真努力的強者
強阿!
推!謝謝分享!
上面的 lc八次前100 超神的耶
這樣也會失敗喔QQ
推
恭喜!只能說這準備真的十分充分,但也很需要勇氣
毅力驚人。如果是一邊上班一邊刷題就真的會崩潰
很好奇台灣如果有四個面試官,會跟這個一樣每個都會
考程式嗎
SWE 面試應該都是 ds/algo + OO/system design 的組合,lead 層級以上就不知道了。
找一份工作要準備兩年半 我要向你學習
感謝分享
強 恭喜
推 好文
推
恭喜
強者!
推 天道酬勤
恭喜!感覺這篇也會嚇退不少人XD
推
強者推,更佩服你的勇氣走出舒適圈
太強,看完只覺得自己好魯QQ
不知道進去之後是否也這麼高強度的工作,感覺以前ht
c進去的那一票根本沒多少可以達到這種水準XD
推,恭喜
太強了 必須推推
看完準備,真是令人佩服
推,強者感謝分享
真的很努力 恭喜
推強者
推 強者
推
認真又有實力給推
推 相比我的準備真的不上進...
真的很厲害
好內捲的競爭@@
感謝無私分享
超強
太強了 恭喜!
懷疑hxc進去的那一票有這麼強嗎?現在新人的標準拉
這麼高喔?
推推 謝謝分享
恭喜,看完了,辛苦你了
超強推一個!感覺超級硬的
推!
看你準備成這樣 更不敢去面試了QQ~
美國team較注重創意設計,測試在印度&台灣
台灣的google一開缺絕對不缺鮮肝強者應徵
請問Cracking The Coding Interview這本你是看
原文還是中譯本? 中譯本怕翻譯不好白買
可以說一下嗎 感謝
我是買中譯本,確實有些翻譯不是那麼精準,不過大致上是沒什麼問題。
推強者
Stefan的解法真的是只敢體會,小的學不來…看完之
後真的覺得自己走錯行了…
看到出神入化的 iterator 用法真的會懷疑自己 XD
推恆心毅力真強者
準備得很充分阿...猛
請問刷提語言是?
Python 3,理由我有寫在 Soft_job 那同一篇底下,有興趣可以過去看看。
佩服 推推
很好奇進去的工作內容難度,以及壓力?
足夠努力又足夠強, 這兩篇文應該M
超強 感謝分享!
可是G裡面C++還是大宗吧
對,但是如果 JD 不限語言的話, 面試時個人覺得 Python 比 Java 跟 C++ 有更多天生優勢, 理由我有寫在 Soft_job 的同一篇底下,但也是個人意見而已啦僅供參考沒有一定。 但有些 JD 是有限制語言的,要先看清楚想投的缺有沒有限制。
※ 編輯: wheels (118.161.78.211 臺灣), 07/12/2021 14:09:41推強者
恭喜
厲害 真強者!
推 恭喜
想詢問哪裡找的到leetcode讀書會
推強者
小弟接下來要進on site,看到你這篇我已絕望,準備
程度差太多了..恭喜大大
推個真強者
L5 ?
推強者,也沾一下光,希望自己將來也有機會進google
95
[心得] 面試分享 Google/MS/Amazon/RokuMedium 好讀版 前言: 在 2021 這半年多的時間,共面試了九間公司,拿到了六個 offers。 過程中從版上得到很多有用的資訊,希望這篇分享也能對大家有點幫助。88
[心得] Google TW Software Engineer 面試心得本人目前在新加坡,最近剛收到offer,所以想來記錄一下心得 去年九月在linkedin收到hr面試邀請, 因為和hr說要準備一下,所以面試開始是在一個月後的十月 我自己比較喜歡寫c++,工作上用golang,刷題和面試都用c++ 1) Phone interview: medium65
[心得] Google TW SWE 面試心得# Google TW SWE 面試心得 背景: 3yoe,做了兩年豬屎屋後受不了工作型態轉職Backend,目前約一年後端經驗 無奈薪水太低加上今年上半年各種外商擴招就開始面試 3月在LinkedIn 收到Google recruiter面試邀約,大多數recruiter都建議可以先準備一個46
[心得] 面試分享(非本科4年 Line/Appier/17... (12家軟體版的各位大大們好, 常常在軟體版看到各offer請益還有面試心得, 想說我最近面試到一個段落了, 有幾個候選offer,所以也來寫個心得回饋軟體板 先說說個人背景及面試動機,45
[心得] 代po Google SWE Offer以下附上心得分享: 前陣子拿到 Google offer,之前在準備面試時看前面幾位大大的文章很受啟發,趁記憶 還比較清晰時分享一點準備心得,希望能對正在準備或之後想準備有一點幫助。 以下文字比較偏個人看法,如果用詞有些不太恰當還請大家包涵;Google 大神很多,個 人資訊就盡量不提。40
[心得][美國] 幾年的面試者+面試官經驗鑑於近年來LeetCode刷題被神化,被認為是面試必備 所以我想以5年多以來無論是當面試者還是當面試官的經驗 來分享一下如何準備面試 首先先分享一下我的經歷 我不是什麼強者,沒有參加過ACM競賽,Code jam頂多做兩題39
[心得] 代po 北美Google general SWE面試心得代PO ----- 前言: 最近準備入職google了,想說在這邊回發一下心得文回饋一下大家。這邊注重在我是怎麼 準備面試的。文筆不太好請見諒。19
[心得] 後端面試 17 SmartNews Mercari背景: 112 資工碩畢,工作經驗 8 年,其中 6 年是 backend 1. 17 media 104 上面看到,直接到他們的 bamboohr 上面投,應徵職位是 sr. backend eng. pretest: 5 題程式題限時 2 小時,整體難度約 leetcode 中偏難,題數多蠻吃熟練度11
[北美] Leetcode刷起來 分享刷題之我見之前找工作時我恨透刷題了 說實在話 Leetcode上面medium以上的題目 很多並不是你不會 而是因為你沒練過 在一輪面試(扣掉閒聊大概只有40分鐘)根本寫不出來 最後下場就是落得去外包公司吃屎 蹲了三年實在不願意一輩子吃屎 只好開始跟大家一起刷題4
Re: [討論] 刷題 Python or C++不太確定原原po找的是台灣公司還是美國公司 不過我可以分享一下我這一兩年灣區面試的心得 1. 該用何種程式語言 It depends. 一般來說新人或是general hire的面試不會特別要求你一定要用哪種語言 這種情況選你最熟悉但又有足夠的函式庫的語言通常不會錯