[心得] Google TW SWE 面試心得(下)

看板Tech_Job作者時間2年前 (2021/07/10 15:59), 2年前編輯推噓135(135022)
留言157則, 136人參與, 2年前最新討論串1/2 (看更多)
※ [本文轉錄自 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 失敗好幾次真的是正常的,尤其在努力了之後卻沒有好結果的當下真的會很沮喪, 但只要持之以恆,總有一天可以看到那出口的光芒 :) 最後想再分享的是, 面試前我自己有許願,如果上了之後要來分享我寫過題目的所有解答, 目前正在慢慢施工中,再請期待~ 最後的最後,雖然文中一直強調刷題的題數不是重點, 但還是任性地想曬一下最後完成的題數,證明我的努力。 https://imgur.com/a/foiHUlO Cheers! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.0.15 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1625903945.A.52F.html ※ 轉錄者: wheels (114.43.0.15 臺灣), 07/10/2021 15:59:31 ※ 編輯: wheels (114.43.0.15 臺灣), 07/10/2021 16:00:00

07/10 16:04, 2年前 , 1F
推強者
07/10 16:04, 1F

07/10 16:07, 2年前 , 2F
07/10 16:07, 2F

07/10 16:09, 2年前 , 3F
厲害厲害 推一個
07/10 16:09, 3F

07/10 16:10, 2年前 , 4F
優秀! 恭喜輪大過關斬將取得門票, 跟google 比起來
07/10 16:10, 4F

07/10 16:11, 2年前 , 5F
我們的面試像玩具.
07/10 16:11, 5F

07/10 16:12, 2年前 , 6F
辛苦了!大恭喜努力有回報!
07/10 16:12, 6F

07/10 16:15, 2年前 , 7F
推!!
07/10 16:15, 7F

07/10 16:23, 2年前 , 8F
如果是美國學校畢業的在google總部的都沒這麼硬
07/10 16:23, 8F

07/10 16:23, 2年前 , 9F
真的很佩服你,祝福你。
07/10 16:23, 9F

07/10 16:24, 2年前 , 10F
lee215真神人+1 XD
07/10 16:24, 10F

07/10 16:28, 2年前 , 11F
你下半段分享是突飛猛進阿
07/10 16:28, 11F
我覺得前兩次最大的盲區就出在以題數估計自己能力。 以為 600 題好像還行,但其實之中真正的關鍵題可能沒幾題,甚至根本沒弄懂。 只能以自身血淚教訓分享給大家,題數真的不是重點。 然後我自己感覺除了解題這個維度以外, 面試當下也有被評價其他維度的東西,這有點難說清楚, 有點像是估量看看你有沒有辦法在一片迷霧中找到出口的那種感覺。 太快找到出口還會把霧弄的更濃一點這樣 lol 另外就是穩定度差異了,有 mock interview 真的差超級多, 真心建議所有人面試前都要好好 mock 一下。

07/10 16:32, 2年前 , 12F
07/10 16:32, 12F

07/10 16:46, 2年前 , 13F
07/10 16:46, 13F

07/10 16:51, 2年前 , 14F
......我太難了
07/10 16:51, 14F

07/10 16:57, 2年前 , 15F
講那麼多這裡的人看不懂啦 錢有GG三寶輪班多嗎哈
07/10 16:57, 15F

07/10 17:01, 2年前 , 16F
恭喜
07/10 17:01, 16F

07/10 17:06, 2年前 , 17F
看不懂啦 直接推
07/10 17:06, 17F

07/10 17:12, 2年前 , 18F
請問最後是L4的offer嗎?
07/10 17:12, 18F

07/10 17:14, 2年前 , 19F
推 太強了!
07/10 17:14, 19F

07/10 17:15, 2年前 , 20F
強者推 沾沾喜氣
07/10 17:15, 20F

07/10 17:16, 2年前 , 21F
這過程真的好努力
07/10 17:16, 21F

07/10 17:22, 2年前 , 22F
厲害
07/10 17:22, 22F

07/10 17:23, 2年前 , 23F
能感受到你的喜悅,感謝分享!
07/10 17:23, 23F

07/10 17:24, 2年前 , 24F
恭喜 祝一帆風順
07/10 17:24, 24F

07/10 17:30, 2年前 , 25F
看完後發現好累,我果然注定當魯蛇 QQ
07/10 17:30, 25F

07/10 17:31, 2年前 , 26F
07/10 17:31, 26F

07/10 17:36, 2年前 , 27F
真的太猛了 恭喜
07/10 17:36, 27F

07/10 17:38, 2年前 , 28F
推推
07/10 17:38, 28F

07/10 17:39, 2年前 , 29F
這毅力太神了
07/10 17:39, 29F

07/10 17:44, 2年前 , 30F
Hoogle SW 表示幹嘛這麼累
07/10 17:44, 30F

07/10 17:59, 2年前 , 31F
恭喜啊 感覺好累
07/10 17:59, 31F

07/10 18:06, 2年前 , 32F
07/10 18:06, 32F

07/10 18:07, 2年前 , 33F
每個人的google面試真的都不一樣
07/10 18:07, 33F

07/10 18:10, 2年前 , 34F
太厲害了
07/10 18:10, 34F

07/10 18:12, 2年前 , 35F
我上次面試他問我寫python我直接說我不會 哈哈哈哈
07/10 18:12, 35F

07/10 18:12, 2年前 , 36F
我太懶了
07/10 18:12, 36F

07/10 18:23, 2年前 , 37F
07/10 18:23, 37F
還有 84 則推文
還有 6 段內文
07/11 15:25, 2年前 , 122F
認真又有實力給推
07/11 15:25, 122F

07/11 15:37, 2年前 , 123F
推 相比我的準備真的不上進...
07/11 15:37, 123F

07/11 15:55, 2年前 , 124F
真的很厲害
07/11 15:55, 124F

07/11 16:07, 2年前 , 125F
好內捲的競爭@@
07/11 16:07, 125F

07/11 16:35, 2年前 , 126F
感謝無私分享
07/11 16:35, 126F

07/11 16:57, 2年前 , 127F
超強
07/11 16:57, 127F

07/11 17:22, 2年前 , 128F
太強了 恭喜!
07/11 17:22, 128F

07/11 17:31, 2年前 , 129F
懷疑hxc進去的那一票有這麼強嗎?現在新人的標準拉
07/11 17:31, 129F

07/11 17:31, 2年前 , 130F
這麼高喔?
07/11 17:31, 130F

07/11 17:54, 2年前 , 131F
推推 謝謝分享
07/11 17:54, 131F

07/11 19:30, 2年前 , 132F
恭喜,看完了,辛苦你了
07/11 19:30, 132F

07/11 19:33, 2年前 , 133F
超強推一個!感覺超級硬的
07/11 19:33, 133F

07/11 20:25, 2年前 , 134F
推!
07/11 20:25, 134F

07/11 20:25, 2年前 , 135F
看你準備成這樣 更不敢去面試了QQ~
07/11 20:25, 135F

07/11 22:28, 2年前 , 136F
美國team較注重創意設計,測試在印度&台灣
07/11 22:28, 136F

07/11 22:30, 2年前 , 137F
台灣的google一開缺絕對不缺鮮肝強者應徵
07/11 22:30, 137F

07/11 22:37, 2年前 , 138F
請問Cracking The Coding Interview這本你是看
07/11 22:37, 138F

07/11 22:38, 2年前 , 139F
原文還是中譯本? 中譯本怕翻譯不好白買
07/11 22:38, 139F

07/11 22:38, 2年前 , 140F
可以說一下嗎 感謝
07/11 22:38, 140F
我是買中譯本,確實有些翻譯不是那麼精準,不過大致上是沒什麼問題。

07/11 23:08, 2年前 , 141F
推強者
07/11 23:08, 141F

07/11 23:12, 2年前 , 142F
Stefan的解法真的是只敢體會,小的學不來…看完之
07/11 23:12, 142F

07/11 23:12, 2年前 , 143F
後真的覺得自己走錯行了…
07/11 23:12, 143F
看到出神入化的 iterator 用法真的會懷疑自己 XD

07/12 01:25, 2年前 , 144F
推恆心毅力真強者
07/12 01:25, 144F

07/12 03:29, 2年前 , 145F
準備得很充分阿...猛
07/12 03:29, 145F

07/12 07:48, 2年前 , 146F
請問刷提語言是?
07/12 07:48, 146F
Python 3,理由我有寫在 Soft_job 那同一篇底下,有興趣可以過去看看。

07/12 09:57, 2年前 , 147F
佩服 推推
07/12 09:57, 147F

07/12 10:13, 2年前 , 148F
很好奇進去的工作內容難度,以及壓力?
07/12 10:13, 148F

07/12 10:39, 2年前 , 149F
足夠努力又足夠強, 這兩篇文應該M
07/12 10:39, 149F

07/12 11:36, 2年前 , 150F
超強 感謝分享!
07/12 11:36, 150F

07/12 12:39, 2年前 , 151F
可是G裡面C++還是大宗吧
07/12 12:39, 151F
對,但是如果 JD 不限語言的話, 面試時個人覺得 Python 比 Java 跟 C++ 有更多天生優勢, 理由我有寫在 Soft_job 的同一篇底下,但也是個人意見而已啦僅供參考沒有一定。 但有些 JD 是有限制語言的,要先看清楚想投的缺有沒有限制。 ※ 編輯: wheels (118.161.78.211 臺灣), 07/12/2021 14:09:41

07/12 16:04, 2年前 , 152F
推強者
07/12 16:04, 152F

07/12 23:44, 2年前 , 153F
恭喜
07/12 23:44, 153F

07/13 12:58, 2年前 , 154F
厲害 真強者!
07/13 12:58, 154F

07/13 13:28, 2年前 , 155F
推 恭喜
07/13 13:28, 155F

07/14 11:00, 2年前 , 156F
想詢問哪裡找的到leetcode讀書會
07/14 11:00, 156F

07/15 13:13, 2年前 , 157F
推強者
07/15 13:13, 157F
文章代碼(AID): #1WwLDaNT (Tech_Job)
文章代碼(AID): #1WwLDaNT (Tech_Job)