[心得] 面試分享 Google/MS/Amazon/Roku

軟工

101930


Medium 好讀版
https://bit.ly/3xUvBax

前言:

在 2021 這半年多的時間,共面試了九間公司,拿到了六個 offers。

過程中從版上得到很多有用的資訊,希望這篇分享也能對大家有點幫助。

-------------------[文長分隔線]----------------------------------

背景

十幾年的工作經驗,Android 底層 kernel, framework 到 app 都有摸過,待過台商歐商
美商,千人大公司跟十人小新創都蹲過,近幾年一直在不同新創公司之間流浪。


TL;DR
No Offer:PayPay, ChitChat, Ubiquiti
Offer:BlueOcean, TomTom, Google, Amazon, Microsoft, Roku

---

1. PayPay — Android App

號稱日本最大的支付公司,如果錄取會要求 relocate 到日本。
看到積極擴編 Android app team 的消息,又說不需會日文,於是主動投遞。

面試流程:

履歷審查 -> Coding Challenge -> 一面 -> 二面 -> no offer

Coding Challenge 是要你寫一個匯率相關的 app,本身需求不難,大概就是要會接
remote api 到手機顯示的程度,但比較特別的是要求只能用 kotlin 並一定要寫 unit
tests。題目上說大約需要3–4小時,我覺得不太可能XD,最後花了一個週末寫完。交作
業後十天左右通知進到下一關面試。

第一場面試有兩個面試官,一位濃厚日本腔從頭到尾沒說超過五句話,另一位英文很好,
主要是由他提問,一開始先從你寫的 Coding Challenge app 開始仔細地問你的架構設計
,問你為什麼要用 A 寫法不用 B 寫法,unit test 測試為什麼是測這裡不是測試其他地
方等等,然後依據你的回答帶出一些其他的 Android App 開發上的問題討論,像是記憶
體管理,效能優化,apk size 縮小等等,個人覺得蠻專業的,都是問實務上會遇到的問
題。中間也有就你的 resume 經歷提問,看到我有一些 C++的經驗,面試官忽然很有興趣
的跟我討論了一些 JNI 相關的寫法,整個過程是蠻融洽的。

最後不免俗的考了一題 String Encoding,難度大概是 LeetCode Easy-Medium,順利解
完以後加了一個 follow up,不知為何當下忽然腦袋當機,沒有解得很完全時間就到了,
面試官就笑笑的說沒關係,結束了這場面試。而我視訊一結束馬上想到怎麼寫最佳解,心
想完蛋了這關應該不會過。沒想到一週後收到通知要二面。

第二場面試是我遇過最奇妙的面試經驗,一開始面試官用英文說抱歉他英文不好所以會全
程用日文面試,然後旁邊坐了一位女翻譯負責幫他翻譯成英文,我回答英文再靠翻譯轉成
日文。可想而知這流程很卡,有時候講到一些專業術語時翻譯員一臉疑惑,我也不知道最
後她最後到底翻了什麼XD
扣除溝通問題之外,面試內容是還蠻專業的。包含了 behavior question 和 一些基礎
的 system design,感覺上都是他們真實遇到的一些情境變化而來的考題,面試完當下覺
得蠻有把握進入下一關的,結果沒想到幾天後收到一封不錄取通知,還寫說無法告知原因
,沒得到任何 feedback 感覺很差啊!

整體來說 PayPay 的面試感覺是好的,過程中可以感受到他們對於產品品質的要求,注重
單元測試,專業度上是加分的。溝通上雖然強調工程團隊不會日文沒關係,但像第二場面
試這種需要翻譯的場合也許還是會遇到,可能適合懂一點日文的工程師去挑戰。另外大部
分外商面試失敗都會給 feedback,希望你半年一年後再來試試,這點日商不知道是不是
民情不同。我覺得畢竟面試時間都花了,能給一些 feedback 還是比較好的做法,希望他
們未來能參考。


2. Ubiquiti — Android App

優比快是市佔不錯的網通公司,這間是獵人頭推薦的。

面試流程:一面 -> no offer

這場面試蠻災難的,從一開始溝通上就有點問題,獵人頭那邊是說第一場面試只會討論之
前做過的 projects 還有 app 架構,結果還是考了一題 LeetCode Binary Tree,沒什麼
準備的情況下勉強寫了出來,但 Code 有點醜 XD。而技術問題有些讓我蠻傻眼,像是請
你背出你知道的 design patterns 之類的,我覺得面試官類型是那種心中有一個答案,
你的回答如果不是他的解答就會追問到他滿意的回答為止。這種方式也沒什麼對錯,只是
我面試的其他公司會比較注重你的思考過程和如何取捨,比較有討論互動。

過程如此不順,當然隔天就收到不繼續面試的回覆。


3. ChitChat 趣聊科技 — Android App

ChitChat 也是獵人頭推薦的新創公司。應該算是陸資,做的項目有點奇妙,應該說是遊
走在灰色地帶的 app

面試流程:一面 -> no offer

一開始先是一個技術面試,過了一下履歷,問了一些 Android 問題都還算基本,然後比
較有趣的是會問到一些平常面試不常見的問題,像是 apk decompile/smali/repack 等等
,結束後接續另一場 manager 面試,詳細解釋了公司在做的項目,才讓我恍然大悟,原
來世界上還有這種經營的方法。因為遊走在灰色地帶,所以我可能表現的興趣缺缺,面試
官就問說:如果我們發 offer 給你,你是不是也不會來?我也很誠實的說應該不會 XD,
他就笑笑說有興趣再聯絡我們,結束了這場面試。


4. BlueOcean 藍海智能 — AI system

藍海智能公司在竹北,主要做 AI 晶片的新創公司,朋友內推。

面試流程:一面 -> 二面 -> offer

第一場的面試官是軟體大主管和一位資深工程師,主要在問履歷做過相關的項目,以及你
在其中負責的部分,過程中我有點疑惑,因為他們需要的人似乎跟我的專長沒有非常符合
,頂多就是一些 Linux 開發的經驗算是相關。後來大主管有跟我解釋,因為他們做的東
西很新,市場上也未必找得到完全符合需求的求職者,所以他們主要想找有基礎而且學習
快的人。結束前閒聊了一下公司組織架構,基本上蠻扁平的,然後裡面好像蠻多人是從發
哥跳槽的,也提到預計今年招到 100 人。

第二場面試就直接跟台灣的 GM 談了,大概過一下履歷之後就開始聊天了,GM 人蠻親切
的,有特別聲明他們不是陸資,是外資+大陸老闆 XD,聊了一些公司發展願景之後就直接
問我期待薪資,我就報了個期待數字,然後問竹北通勤很遠能不能補助交通費,他都寫在
一個小本子上然後說內部評估後再跟我說。

結果:offer get. 薪資蠻有誠意的直接比我報的數字再 +20%。


5. TomTom — Automotive Systems (Android)

TomTom 在地圖領域大家應該不陌生,這次面試是 TomTom 的 Recruiter 從 LinkedIn 主
動聯繫。

面試流程:一面 -> Android assessment -> 二面 -> offer

第一場面試官是兩位 PM ,全程英文。除了一些履歷相關的問題之外幾乎都在問
behavior questions,根據 Recruiter 的說法是 TomTom 希望先確定是適合公司文化的
人,才會進到技術面試階段。

幾天後收到通知,下一關要寫一個 Android app assessment 上傳 source code,題目蠻
單純的類似一個購物車 app,有一些必備需求及加分題,我覺得都沒有很困難。寫完上傳
之後三天收到二面通知。

第二場面試有三名面試官 (PM/Android Lead/Architect),本來以為會深入討論
Android app assessment 的細節,結果只有稍微問一下架構為什麼這樣設計,接著問了
一些基本的 Android 開發上常見的問題,以及履歷的一些細節,最後討論了一些
behavior questions 就結束了。整體而言算是比較輕鬆的一場技術面試。

結果:offer get. 薪資大概在我預期的邊緣。跟 Recruiter 溝通時委婉的提到其他公司
的 offer 比較好,後來 Recruiter 也很有誠意幫忙回去溝通,三天後提了一個新
offer (微調 base+簽約金)。


6. Microsoft — Sr. Software Engineer

我面試的是微軟的 Device Team,目前主要產品是 Android 手機 Surface Duo,其實這
個團隊主力是微軟併購 Movial 來的,所以對於在微軟做 Android 這件事就沒有很意外
了。這次面試是微軟的 Recruiter 從 LinkedIn 主動聯繫。

面試流程:五關 (兩關中文三關英文 各 45 mins) -> offer

第一關 Coding test:寫了三題 LeetCode ,難度介於 Easy-Medium,涵蓋了 主要的資
料結構 Linked List/Tree/Stack/Queue 等等。

第二關 Android questions:先從履歷中跟 Android Framework 比較相關的地方開始問
起,懂 Window Manager 和 Activity Manager 會比較吃香,我這邊比較吃虧這兩塊都不
是熟悉的領域,後來面試官還說:我怎麼覺得 BSP team 比較適合你 XD。

第三關第四關非常像:先問了一輪履歷經驗,再帶出一些 behavior questions,最後說
來寫個 coding 吧,第三關出了一道 Linked List,第四關出了一題 Stack + follow up
,都不難大概是 LeetCode Easy-Medium 等級。

第五關有點偏 system design,困難點在於直接把 Surface Duo 可能遇到的問題拿出來
討論,像是雙螢幕 UI 交互的一些情境,如果有對這個產品下過功夫研究應該可以答的更
好,我是回答得有點吃力啦,一來是對這產品真的沒有很熟,二來是英文沒有好的可以流
暢的邊想邊回答,雖然最後拿到 positive feedback,但過程中真的汗流浹背。

結果:offer get. 薪資一線水準。


7. Google — Firmware Engineer

Pixel team。朋友內推

面試流程:六關 (五關中文一關英文 各 45 mins) -> offer

第一關 Coding test: LeetCode Bit Manipulation 變形題。

第二關 Embedded System Coding: ISR/Lock/Multi-threading 相關實作細節

第三關 Domain knowledge + Coding:Domain knowledge 問得很深,會根據你的回答再
繼續追問細節。最後考了一題 LeetCode 沒看過的 string parsing 問題。

第四關 Behavior questions:討論一些工作上會遇到的情境,主要看你遇到一些困難的
時候會用什麼方式應對,也提到跟不同時區團隊合作時需要大清早或深夜工作的情況。

第五關 Coding test:考了一題二維空間比大小,印象中 LeetCode 有看過類似但細節不
同的問題。

第六關 Domain knowledge + Linux kernel questions:問了蠻多作業系統相關的細節,
還好面試前有乖乖去複習過一遍 OS,大致都答的出來。

面試完 HR 說 feedback 都蠻正面的,但送 HC 等了一陣子,過了兩週才正式通過。

結果:offer get. 薪資一線水準。


8. Amazon — Embedded Software Engineer/System Development Engineer

這次面試是 Amazon 的 Recruiter 從 LinkedIn 主動聯繫。 部門是 Sidewalk team。

Amazon 面試最特別的就是非常強調他們的 14 leadership principles,有興趣的人可以
搜尋一下關鍵字會看到很多討論。

面試流程:OA -> phone screen (中文 1 hr) -> on-site 四關 (全中文 各 1 hr) ->
Candidate Chat -> 加面一關 SysDE -> offer

Online Assessment:用 HackerRank 寫兩題 135 分鐘,除了寫程式以外還要用一個篇幅
解釋你的想法,外加 15 分鐘的 work style questions。我覺得重點都不是在考演算法
,而是細心和 edge case,我第一題測資 15/16 pass,第二題 11/16 pass,都沒有全過
,當下想說慘了 OA 就要爆了,結果幸運的進到下一關 phone screen。

Phone Screen:由 Hiring Manager 面試,主要是討論履歷做過的案子,也分享了一下
Sidewalk team 目前的規劃及未來目標。也很感謝有特別提醒我 Amazon 非常注重
behavior questions,14 leadership principles 更是面試必問,讓我有所準備,不然
後面幾關應該會被問倒。

第一關:30 mins behavior questions + 30 mins coding。前面 behavior questions
因為有所準備,當下要套入哪個 14 leadership principles 都還回答的蠻順利的。
Coding 部分出了一個棋牌遊戲,要你從 class 設計開始一直寫到某個指定的功能,我覺
得時間有點太趕,前面還花了幾分鐘讀懂遊戲規則,最後硬寫了一個效能不好的版本出來


第二關:30 mins behavior questions + 30 mins system design。System design 方面
是設計一套 IOT 警示系統,從硬體、網路、雲端各種架構去思考這套系統,並討論不同
情境底下的 trade off。關於 System Design 這方面比較沒有特別去準備,所以就以自
己的經驗去提出第一個版本,再根據面試官的問題去修正。

第三關:behavior + embedded system + coding。這場除了老樣子 behavior
questions (14 leadership principles!!) 之外,問了比較多 embedded linux 相關的
domain knowledge,像是 Booting sequence、memory layout、ISR 等等,最後剩十多分
鐘忽然說還是來寫個 coding 吧,就出了一題計算 time interval overlap,難度應該
是 LeetCode Medium,這題因為下一場面試時間直接接在後面,剩十幾分鐘實在太趕,一
開始方向不對就很難完成,最後有些部分只能用註解跟口述解釋我的作法。

第四關:behavior + coding。因為 onsite 是連續的面試,面到這場已經有點精神疲憊
。Coding 題目跟 string encode/decode 有關,當下只能寫出一個非最佳解,看得出來
面試官沒有很滿意,過程中大概也知道他希望的解法是什麼,但最後就有種氣力放盡的感
覺 XD,有被連續面試轟炸過的人應該可以體會。

Candidate Chat:這場半小時是不計入面試評分的,由一位非常資深的 Amazon 大主管來
跟你聊聊公司團隊工作等等,事後去搜尋了一下資歷相當驚人呀,我覺得這場還不錯,有
一種被重視的感覺。

過了大概一週,收到 Recruiter feedback,簡單說就是 Domain knowledge 不錯但
Coding 差一些,Coding 的部分他們覺得 SDE 要能寫出最佳解,但我有些關沒有寫出來
,所以想把我轉 SysDE,SysDE 在 Amazon 的定義就是在特定領域專精但 Coding 比較普
通的職缺,於是要求我再加面一場 SysDE。本來當下覺得還要再面試! (心態炸裂),
但 Recruiter 很專業態度也很好,最後還是被說服了多面了一場,
基本上就是確認我 embedded system 方面的知識夠不夠而已。

結果:offer get. ESDE 轉 SysDE。薪資也是一線水準但底薪比較低,靠簽約金跟股票撐
起來。


9. Roku — Sr. Software Engineer

Roku 是美國現在電視棒一哥,台灣團隊成立不久,公司設在竹北。這次面試是 Roku 的
Recruiter 從 LinkedIn 主動聯繫。

面試流程:OA -> phone screen (英文 1.5 hrs)-> on-site 五關 (全英文 各 1 hr)
-> offer

Online Assessment:用 HackerRank 寫三題 60 分鐘,題目涵蓋 Bit
Manipulation/Sort/String/Array,我覺得題目相對來說不難,大概 45 分鐘寫完測資全
過,花五分鐘整理一下 code 就交卷。

Phone Screen:花了一些時間討論履歷做過的案子以及一些 embedded system 相關的問
題,然後考了一題 min/max grouping,寫了一兩個解法面試官覺得 ok,但問我有沒有更
快的解法,我想了一個 DP 解但卡住寫不完,面試官最後說沒關係不用這麼複雜,還分享
了一個不用 DP 但比較快的解法。

第一關:問了一堆 C++ 語法,static/extern/virtual function/shared_ptr 還有各種
繼承問題等等,然後考了一題 hashmap,測資全過。

第二關:問了蠻多 embedded system 相關的問題,考了一題 group division,也是測資
全過。

第三關:也是問履歷及 embedded system 相關的問題,考了一題 LeetCode Easy 等級的
,測資全過。

第四關:一位英國人面試官,主要問 Behavior questions 以及介紹 Roku 的歷史、團隊
及未來發展,也提到 Roku 現在正在大幅擴張階段,收了很多不同國家的人又要同時保存
公司文化,是一個挑戰。

第五關:面試官是一個很嗨的大叔,但口音有點重,有時候真的聽不太懂他在說什麼,考
了兩題 Coding,是那種 math trick 題,因為他很嗨會邊講邊大笑,所以光理解題目就
花了好一番功夫,我覺得寫的不怎麼樣,但他似乎沒有很在意。

結果:offer get. Roku 薪資也是一線水準,比較特別的是可以讓你選擇股票佔總收入的
比例 (9–20%),而且如果當年度股價跌太多,公司會補差價給你。(太佛心了吧!)

---

準備方向

一月開始寫 LeetCode,三月開始嘗試面試,六月密集面試,整個過程大概半年。

LeetCode 最後大概寫了 240 題,使用語言是 C++。

有蠻多人建議分類刷題,我自己是不太喜歡,因為會有先入為主的想法,比如說當你在
寫 stack 這個類別的題目時,還沒看題目你就知道這題跟 stack 有關,但當面試時其實
你不知道會遇到哪種題目,如果練習時就保持這種未知感,我自己覺得比較有幫助。

我自己是從某位大大分享的

Blind Curated 75 https://leetcode.com/list/xoqag3yj/ 下手,

有點像是 75 個基本題型,其他的題目多半是從這些來衍伸,
基本題型寫完以後開始寫

CSpiration 250 (這網站好像時好時壞 可以搜尋一下關鍵字)

用一個 spreadsheet 做紀錄,遇到不會的或寫太慢的就標個記號過幾天再寫一次。
另外練習邊寫邊講是一個很好的方式,平常我們比較不會這樣寫Code,
但面試時重視的是你跟面試官之間的溝通,讓人家理解你的邏輯。

Linux 我是拿 jserv 大神的

Linux 核心設計系列講座 https://beta.hackfoldr.org/linux


當作複習講義,再惡補一些 embedded system 常考題來準備。

Behavior questions 建議直接準備一次 Amazon 面試,因為 A 社超級重視這個,準備過
一次其他間的 behavior questions 相對都輕而易舉。

最後,務必至少找人 Mock Interview 一次,非常非常有用。


總結

我覺得這次疫情爆發對我來說剛好是個機會,幾乎所有的公司都改成線上面試,時間上也
因為 WFH 的關係比較好安排。這次面試準備比較久,也很幸運的拿到了幾個不錯的
offer,特別感謝幾位朋友,不管是幫我 mock interview 或是分享面試方法,都對我有
很大的幫助。

其實早在 2016 就曾經挑戰過 Facebook,當時第一輪面試就爆了,讓我一直有點陰影。
事隔多年回頭看看,當時準備真的十分不足,不懂得跟面試官討論想法 (think out
load),練習的題目也不夠多,失敗也是很合理的。

但有時候覺得面試也很吃運氣,可能剛好跟面試官不對盤、剛好考了一題你最不會的問題
、或是剛好有其他更厲害的人競爭同一個職缺,都有可能跟喜歡的工作擦身而過,能做的
只有多認真準備與多面試幾間公司累積經驗吧!

希望這些分享能幫助到大家!

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.35.236 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1628870944.A.C3B.html
kvjo1樓這包真的很solid 08/14 00:17
kvjo2樓paypay 的部份感覺比較意外 08/14 00:18
ken13253樓好強 08/14 00:19
kvjo4樓哥 你的射擊範圍有點廣 .... 08/14 00:20
Inglenook5樓 08/14 00:24
felizzZ6樓不好意思 可以請問亞馬遜第一次電面完大概多久會有回音呢 08/14 00:34
felizzZ7樓,謝謝 08/14 00:34
qk33808888樓 08/14 00:36
siriusu9樓 08/14 00:43
本人10樓回 felizzZ 大, 我是一週左右 08/14 00:56
felizzZ11樓感謝Chiel大大,祝你新公司一切順利 08/14 01:02
felizzZ12樓感謝Chiel大大,祝你新公司一切順利 08/14 01:04
felizzZ13樓感謝Chiel大大,祝你新公司一切順利 08/14 01:19
xrururururu14樓大推 08/14 01:35
Phenomenon15樓恭喜,太強了! 08/14 01:36
longlyeagle16樓cool cool 08/14 01:37
bill199217樓猛 不過領域也太廣 08/14 01:40
touurtn18樓Think out loud 08/14 01:49
jack9130319樓大神… 08/14 01:49
xxi51120樓恭喜,方便透露什麼是一線水準嗎 08/14 01:50
ppc21樓超強 08/14 01:56
taipoo22樓謝謝分享 08/14 02:07
yuffieAK4723樓PUSH 08/14 02:08
algorithms24樓 08/14 02:11
wheels25樓跨了超多領域,超強! 08/14 02:21
baobomb26樓強者 08/14 02:29
kopk15927樓推 好猛 08/14 02:41
jinmin8828樓太猛了 08/14 03:18
bowin29樓推,congrats! 08/14 05:12
shiauji30樓超強! 08/14 06:29
更多心得
[心得] 學店生前端轉職面試心得
[心得] 代po 十年一夢 2019年錄取Google
[心得] 非本科自學/產業小尖兵轉行
[心得] 2021 ML / SWE 面試心得(文長)
[心得] 31歲非本科無經驗後端轉職心得
[心得] 29歲的我資策會結訓
[心得] 北美MLE找工經歷分享
[心得] 北美 Google general SWE 面試分享