2022 轉職前端的海外求職與面試心得 (Amazon 與 ByteDance/TikTok 等)
嗨,相信妳會點入這篇文章,可能是因為妳看到轉職前端的標題,也可能是有海外求職的打算。在往下讀之前請先讓我介紹自己,以及說說這篇心得會談些什麼。假如妳有覺得符合妳的需求再往下讀,可能比較不會浪費時間 (因為文章會有點長 XD)。
我的背景是大學讀文組,在 2020 年初透過 Alpha Camp 的實戰課程轉職軟體業 (Alpha Camp 是一個線上 coding bootcamp,詳見此)。2021 年時,在有約一年半開發經驗時首次海外求職 (心得詳見去年寫的這兩篇文章,《2021 轉職前端工程師的海外求職 (德荷英日新) 心得 I — coding bootcamp 之後的能力養成篇》、《2021 轉職前端工程師的海外求職 (德荷英日新) 心得 II — 找工作與面試篇》)
去年後來去了一間在柏林的新創公司,不過在待了一年後因為一些原因,所以決定換工作 (詳見這篇反思)。今年 (2022 年中旬) 算是帶著兩年半經驗展開第二波海外求職之旅。今年這篇文章會先聊申請與準備概要,接著會分享實際的面試經驗。這篇適合的讀者,可能是 2 – 3 年經驗的中階工程師。如果是剛從 coding bootcamp 出來的工程師,我會比較推薦讀我去年寫的那兩篇。
求職歷程概述
雖說我先前在德國的公司,但今年德國的大公司反而都沒有拿到任何面試 (例如 SAP、DeliveryHero 等)。另外就是,在德國或歐洲的軟體工程師工作機會很多,但是大公司的機會沒有比較多 (雖然有不少各行各業的大公司,但多數都不是以軟體為主),畢竟大公司也就只有那幾間。所以我這次主要還是透過 LinkedIn 搜尋,然後被轉去各大公司的招募官網自己投遞。而我的投法,基本上是不看地點,覺得適切的職位就申請;因為對我來說,這階段的目標是先進大廠,任何地點的大廠都可以。
而我這次自身經驗是有拿到 Amazon (英國倫敦)、Booking.com (荷蘭)、Twitch (APAC 遠端)、ByteDance/TikTok (新加坡)、Shopee (新加坡) 等大公司的 OA 或面試。最後有錄取 Amazon 與 ByteDance/TikTok。
從結果而論,雖然我有錄取 FAANG 公司,也錄取目前世界最大獨角獸公司,但連面試都沒發給我的公司不勝枚舉 (基本上你想得到的國際軟體大公司我都投了)。這讓我深刻體會到,在不穩定的大環境下求職,真的蠻大一部分的因素不在自己的掌握中。舉例來說,今年新加坡我也有投 Foodpanda,然後連面試都沒有拿到,而在我投的當週,就看到他們新加坡辦公室大裁員。而新加坡 Shopee 雖然有拿到面試,但 OA 與一面結束後,等了快三週沒收到回覆,然後就看到新聞報導出他們大裁員 (九月底時),所以就沒有後續。
因此,很可能不是因為個人的學經歷、面試表現導致沒拿到面試或沒錄取;申請者能做的,就是把履歷編修到最好、面試準備充足,然後在機會來的時候,用盡全力把握住。
準備過程
這次我的準備分成兩個部分,一部分是加強前端,因為 ByteDance 類的公司在這部分會問得很深入。我是直接找考古題,可以去稀土掘金上面找,或是上網搜「字節跳動面經」等面試心得。前端除了知識點外,也很常考前端白板題。前端白板題基本上就是能夠自己寫出各類效用函式 (例如 debounce
、 curry
、 deepClone
等等),以及能自己寫出 Promise.all
這類方法。假如不知道怎麼寫的話,我在準備這次面試時,有整理了最常考的手寫題與解答,歡迎參考《前端面試 — 常考的 JavaScript 手寫題總彙整》。
除此之外,我也有特別針對各個過去有使用過的函式庫,去了解背後實作的原理。我去年就有被問到 Redux 的效能問題以及如何改善,假如沒有理解 Redux 是如何被實作出來,就沒辦法跟面試官深度討論如何改善其效能。這個準備方向也讓我今年在面試,被問到 React Query 背後如何實作時,有辦法跟面試官有一定深度的討論。
另一部分則是資料結構與演算法白板題。去年我在準備時,先讀過一次《Cracking the Coding Interview》,然後還看完 AlgoExpert 上的 160 題演算法題。也因為去年有花這些時間打基礎,我今年就沒有再用那兩個資源,而是直接買 LeetCode Premium 來刷。會買 Premium 主要兩個原因,一個是可以看到公司的標籤,這點是基於我去年的慘痛教訓,去年面 Shopee 新加坡被問到的演算法題,是該公司在 LeetCode 上的高頻題,結果我沒刷到,當下寫不出來,面試就掛掉了。另一個買 Premium 原因是跑程式碼比較快,寫錯了重跑也不會有冷卻時間,畢竟時間就是金錢,這點我覺得很有價值。
對於我去年寫的資料結構與演算法準備心得,今年的我仍然會推薦 Google 工程師 NeetCode 的頻道 (它現在有出付費課程,但我覺得免費的 NeetCode 150 就非常足夠)。今年我額外推薦 Netflix 的資深工程師 ThePrimeagen 在 Frontend Masters 上面開的演算法課程《The Last Algorithms Course You’ll Need》。Frontend Masters 其他課程要訂閱費才能看,但這堂課是完全免費的 (非常佛心)。我覺得跟著 ThePrimeagen 的思考脈絡,會對資料結構與演算法有新的一層理解,所以很推薦要打底的人可以上。
在練習刷題時,一定要練習邊寫邊講 (think aloud)。溝通思路可說是跟解題一樣重要 (這篇文章提到,題有解出來以為會過面試,結果後來沒過,因為被認為溝通太差)。剛好 ExplainThis 的另一個共筆作者也有在準備刷題,所以我們每週末都會約一次幫彼此模擬面試。在實際面試前,我刷了約兩個月,總共刷了快三百題 (幾乎平均一天五題),其中一半以上是 Medium,次之是 Easy,Hard 沒有寫太多。
最後,我在這次的準備過程中,也陸續整理了一些筆記,有興趣的人可以逛逛本站 explainthis.io (未來會持續新增,歡迎關注)。以下分享各間公司的面試心得。
ByteDance/TikTok
ByteDance 是我最早面試的大廠,我面的是 TikTok 某個組的前端職位。這次面試下來,對 ByteDance 的印象就是效率非常驚人、速度非常快,早上投履歷,下午收到面試邀約。每一輪也都是結束不到一小時,就收到下一輪的面試邀約。如果沒有特別排比較晚的面試時間,ByteDance 應該可以在兩週內完成面試。ByteDance 已經是十萬人以上規模的公司,還能維持這種效率與速度,怪不得底下的產品這幾年海放競爭對手 (例如 TikTok 最近搞得 Snap 與 Meta 股價慘慘慘)。因為 ByteDance 在面試部分沒特別簽保密條款,加上網上多半也都直接分享題目,這邊我也直接把遇到的提列出來。
一面 (資深工程師)
一開始先請我自我介紹,我有分享我轉職的過程,有被問「決定轉工程師後,為什麼轉職前端? 」。接著針對履歷提問主要是針對過往專案與產品提問 (對過去用過的技術務必要好好複習),以及有問「做過最有挑戰的專案」。
履歷提問完後就是一連串的知識問答題。先從 React 開始問,先問了用過哪些 Hooks,然後追問 useEffect
的實作 (如網上的面經,在面 ByteDance 這類大廠,不能只會用某個東西,還需要能說出背後是如何實踐的),具體追問了 dependency array 用途、背後機制,然後追問為什麼 dependency array 是空的時候只會在 component mount 時執行、後面不執行? 如果 dependency array 傳入物件或陣列會怎麼樣? 如果傳入 ref 會如何? 然後問 useLayoutEffect
與 useEffect
差別?分別適合的場景為何?
React 問完後問了比較基礎的網路問題,主要針對 HTTP 提問,後面有追問 HTTP caching 的機制。追問 eTag
與 Last Modified
哪個優先? 為什麼? 追問 304 的 response body 是什麼? 為什麼是如此? (這題算陷阱題,因為 304 沒有 response body,關於 HTTP caching 的題目,可參考這篇)。
網路問題後換 JavaScript 題。這時就開啟了線上 IDE (ByteDance 用自家的 Lark,裡面可以一邊視訊一邊用線上 IDE,很方便)。進到 IDE 後,面試官先貼了一段程式碼,要我在不執行的狀況下,說出程式碼的輸出是什麼 。基本上熟悉 Event Loop 與 Micro-task、Macro-task 運作,這題都能答對 (詳見這篇)。判讀題我有順利答對,於是接著進到 JavaScript 白板題,是要實作出 lodash 的 .get
,我也順利寫出來 (有興趣的可以看 《請實現 Lodash 的 .get()》。
總的來說是密度很高的一場面試,60 分鐘問好問滿,有過往經歷問題、有知識類問題 (JavaScript、React、網路題都包含) 以及有手寫類的白板題,算是很全面的一場面試。
二面 (團隊的用人主管)
自我介紹後,針對履歷提出一些技術討論,有特別問我過去寫單元測試、E2E 測試的經驗。接著就進到知識類的問題,包含問了 JavaScript 中 Map 物件與一般物件有什麼差別?都是鍵值對,為什麼已經有了物件,後面還需要加入 Map? (這篇寫很清楚推薦讀讀)
接著問了前端的各種趨勢類問題 (我講了蠻多最近社群討論熱烈的 Solid、Fresh、Qwik 等,以及他們解決了哪些其他前端框架遇到的問題)。然後因為我是寫 React,被問到對 React 18 的理解。知識類的題告一段落後,最後由一題白板題結尾,是一題 LeetCode Medium 難度的字串處理,花了二十分鐘左右順利寫出來。
三面 (整個大組的技術主管)
這個面試跟前沒兩關不太一樣,沒有自我介紹,一開始就直接來一題 LeetCode Medium,基本上是 3Sum 的變化題。因為是很熟的題型,所以我蠻快就解完了。解完後問 React 的問題,主要問 React Fiber 是為了解決什麼過去的問題? 是如何實作的? 因為這題算是高頻考古題,所以也有順利答出來。接著問網路題,也是 HTTP 不過是針對 HTTPs 的 s 問,也是題高頻考古題。最後有一題前端的系統設計題,花了二十分鐘左右討論如何設計一個 Typeahead 的前端。
三場技術面試下來,覺得 ByteDance 的面試真的很扎實,基本上每一關都有前端題與演算法題,而且三關著重的方向都稍有不同;三關下來從 JavaScript、React、CS 知識點,到前端的趨勢與系統設計,幾乎涵蓋了各類題型。
四面 (人資)
順利通過三關技術面試後,最後進到人資關。這關是由我面試的組的 HRBP 來面。HRBP 有再介紹一下 ByteDance 的文化、我面的組在做的事。網路上也有不少人資關被刷掉的經歷分享,所以這關也不能掉以輕心,各類行為面試的問題要好好準備。人資問的問題背後主要是看跟 ByteDance 文化的契合度,所以事先讀一下公司文化會很有幫助。
在人資面之後一週後收到錄取通知。TA 也在通知時跟我說三輪技術面試的面試官分別給的反饋,三輪的反饋都蠻一致的,對我的溝通能力、前端知識掌握度、實際寫程式能力 (白板題) 三輪都是正面評價。但其中兩個面試官有提到因為我過去沒有實際做過大規模的產品,所以在經驗這塊他們會覺得還需要多累積。這個反饋其實正是我今年想要申請大廠的主要原因,我轉工程師兩年半來,做過最大的產品用戶量級也不過日活二十萬; TikTok 這種破億用戶量級的產品,真的是我缺少的經驗。
瀏覽 6,196 次