2021 疫情找工作-面試分享 Google/MS/Amazon/Roku

Richard Chang
17 min readAug 13, 2021

--

僅此記錄一下自己在 2021 這半年多的時間,面試了九間公司,拿到了六個 offers 的歷程。

Photo by Simon Abrams on Unsplash

背景

十幾年的工作經驗,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 下手,有點像是 75 個基本題型,其他的題目多半是從這些來衍伸,基本題型寫完以後開始寫 CSpiration250 (這網站常常掛掉,可以搜尋 cspiration 關鍵字)。用一個 spreadsheet 做紀錄,遇到不會的或寫太慢的就標個記號過幾天再寫一次。另外練習邊寫邊講是一個很好的方式,平常我們比較不會這樣寫Code,但面試時重視的是你跟面試官之間的溝通,讓人家理解你的邏輯。

Linux 我是拿 jserv 大神的 Linux 核心設計系列講座 當作複習講義,再惡補一些 embedded system 常考題來準備。

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

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

總結

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

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

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

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

--

--

Richard Chang
Richard Chang

Written by Richard Chang

Have a cat named C++ and she often bites me

Responses (3)