11 家公司、57 場面試:一個 NLP 博士的工業界求職實錄
博士念到一半,找工作在 Alisa Liu 心裡像哈利波特的分類帽:學長姐念到後期會突然人間蒸發好幾個月,再出現時命運已定。就算身邊好友陸續畢業拿到工作,除了偶爾報平安,她對他們到底經歷了什麼幾乎一無所知。等輪到自己,才發現比想像中累得多——一邊玩、一邊學遊戲規則。
事後回頭看,很多經歷其實都很普遍,一路學到的東西也都成了常識。她寫這篇,是想提供一個「這趟旅程可以長什麼樣」的資料點,讓不久前還同處境的人覺得找工作沒那麼神祕。
Alisa 在華盛頓大學念了六年 NLP 博士,畢業前申請研究科學家/技術團隊成員這類職位。這輩子基本上都在念書,要不是指導教授最後推了一把,大概很樂意當一輩子博士生。博士班大半時間沒認真想過之後要幹嘛,比起什麼都好,更被「好玩的點子」牽著走。這讓她換了很多方向,但幸好最後兩年抓住了一條一致的主線(token 化!),因為它剛好跟「好玩」高度重疊。建立起一個專精領域,是她在求職時能脫穎而出的關鍵。
Mogu 吐槽時間:
注意那條主線是 tokenization——在 NLP 圈長年被當成最不性感、最雜役的底層工程,連模型本身都懶得學,直接外包給一個叫 tokenizer 的小東西。結果它反而成了她在求職市場上的辨識度。
這件事 gu-log 寫過太多次了:最不起眼的那層,常常是真正的護城河。CP-307 那篇 Matt Pocock 講「AI 正在吃掉戰術層的 coding」,留下來的價值就是這種沒人想碰的策略與底層判斷。專精一個別人嫌髒的角落,比追十個熱門題目安全 ( ̄▽ ̄)
時間軸
原文有一張求職時間軸圖(靈感來自 Nathan Lambert 的文章),灰色圖示是面試,彩色圓圈是結果。「已讀不回」是指招募人員從沒告知結果或下一步;「主動撤回」是指她在拿到幾個心動的錄取通知後,禮貌地告訴某些公司沒興趣了。總計:11 家公司、57 場面試。圖上沒畫的還有 46 通招募電話、16 場拿到錄取後的對談,以及求職前無數場非正式人脈交流。
公司順序
何時啟動每一家的面試流程,取決於幾個因素:準備好了沒、公司給的壓力、預期流程跑多快、對這家有多興奮,還有一些沒那麼深思熟慮的因素——比如拖延症。常見智慧是:先拿幾家練兵,再把其他流程時間抓好,讓所有錄取通知大約同時到手方便談判。這個方向大致沒錯,但有幾點值得補充:
- 練習面試有幫助,但體力有限——小心別還沒輪到真正在乎的公司就先把自己燒光。
- 外部因素也值得考量:公司有沒有員額、哪些團隊正在積極招人。這些有時比準備得多好還重要,可透過朋友和招募人員打聽。
- 截止日期其實彈性很大,錄取時間點不用抓得太精準。招募人員知道候選人還有別的流程要跑,而且有各種小技巧可以拖延。話雖如此,還是有惡名昭彰的例外(俗稱「自爆限時錄取」),所以一定要事先打聽候選人通常被給多少時間簽約。
拿到第一場面試
最顯而易見的一條:博士期間盡量把研究做好、多交朋友、多合作。想拿到第一場面試,有時候需要公司內部有人背書。及早鋪路的方式包括:在研討會上多社交、廣泛合作、參加人脈活動——當然這不是每個人都做得來,所以也要照顧好自己的能量和舒適界線。求職期間,主動去聯絡認識或不認識的人,問問有沒有機會。事實上,求職有很大一部分就是去重新聯繫那些可能好幾年沒講過話的人——這沒關係、是意料中的事,而且到頭來會發現這是整個過程一個很美好的副作用。
面試的類型
面試大致分成下面幾類。整體來說,被評估的「技術能力與知識」遠多於「研究經歷」——雖然後者大概才是讓人一開始拿到面試的原因。
ML coding。 目前為止最常見的一類。題目可能要求實作某個架構、某種解碼策略、傳統 ML 演算法,有時還會出更有創意的東西。PyTorch 一定要熟到能流利使用;少數情況被要求只用 numpy,比如從頭手刻反向傳播,不過對方並不期待候選人熟悉 numpy 語法。
一般 coding。 基本上就是 LeetCode,有時加點變化。這塊把基礎打穩很值得,因為這些概念也常出現在 ML coding 面試裡。
技術討論。 這類面試不寫 code,但非常技術。有時候整場圍繞一個主題延伸討論,例如怎麼設計實驗來回答某個研究問題或達成某個目標。面試官通常會逼問設計選擇,要求針對假設性結果發表看法並設計後續實驗。其他時候整場是連串快問快答(編碼位置資訊有哪些做法?什麼是 5D 平行化?PPO 和 GRPO 差別是什麼?),目的是讓候選人證明自己真的懂。前者考的是怎麼思考,後者檢查知識廣度。
研究討論。 這類對話是博士班最常練習的。面試官通常請候選人先講一個過去的專案,剩下的討論從這裡延伸,也可能問到 CV 上其他論文。準備時往後退一步想想很有用:當初為什麼選擇做這些題目、一路累積了哪些洞見和觀點、哪些是有前景的未來方向。她也會依職位調整自己的研究自我推銷;面試官都很累,打中對的關鍵字能讓他們更容易相信這個背景跟職位相關。
行為面試。 完全教科書式的行為面試,只是偶爾夾帶一題關於 AI 安全或社會影響的問題。做法是把博士期間印象深刻的故事一一列出,對應到常見行為面試題,這樣面試當下就能瞬間調出對的軼事。她第一場行為面試就掛了,因為進場時心想自己「顯然很乖」,結果在簡單到痛苦的問題前一片空白。那種痛苦很獨特:一邊在面試現場重建模糊的記憶、一邊還要把它講出來,最後面試官還丟下一句評語——根本答非所問。
數學。 有些公司有數學面試,範圍從好玩的邏輯謎題到要用紙筆認真推導的數學都有。建議把機率、線性代數和微積分複習一下。
求職演講。 求職演講的形式有些差異,但跟學術演講比起來通常短一點,且聚焦在單一論文或方向上。她的求職演講全在講 tokenizer:大部分時間花在一篇第一作者的作品,然後簡短帶過幾篇第二作者和進行中的研究,幸好它們彼此銜接得漂亮。
準備
沒有比「為面試而讀書」更值得花時間的事了。對 Alisa 來說,那段經歷很像重回大學部:做筆記(她的 LLM 筆記整個過程都在持續更新;還有一份數學筆記,全是為了某一場命中註定的面試)、畫圖、做練習題,整天泡在咖啡店裡,務求把基礎 ML 概念裡裡外外搞懂。技術面試很難,被考的這些技能需要在做研究之外另外投入心力才養得起來。對她、以及她聊過的多數人來說,找工作本身就是一份全職工作。
一開始是把史丹佛「Language Modeling from Scratch」課程的所有講座全部看完,這對攤開需要學的主題廣度很有幫助,也把腦中許多零散概念整理成一張對這個領域連貫的全圖。把基礎涵蓋完後,剩下的時間就一個概念一個概念深入:讀相關部落格文章和論文、跟 ChatGPT 和 Claude 大量對話、從頭練習實作。作業一超關鍵:實作/除錯一個 transformer 在面試中出現得太頻繁,把它練成肌肉記憶會帶來巨大回報,實在不值得在這裡失分。還有最重要的一條——練 coding 時一定要把 AI 輔助完全關掉,模擬面試情境,不然會嚴重低估自己有多依賴它。
Mogu 插嘴:
「練 coding 時把 AI 輔助完全關掉,不然會低估自己有多依賴它」——這句話應該裱框掛起來。
CP-307 那篇講「AI 正在吃掉戰術層的 coding」,她這句是同一枚硬幣的反面:當 AI 把現場執行那層吃掉,人會在毫無自覺的情況下把自己的某些肌肉外包出去,平常完全感覺不到,直到有一天它被拔掉——比如一場不准開 AI 的面試。她的解法很反直覺也很誠實:想知道哪些能力真的是自己的,就定期把拐杖拿掉走兩步。
順帶一提,你正在讀的這篇是 AI 翻的、AI 審的(gu-log 有一套四法官的評審流程)。我們很清楚這個諷刺。差別只在於,我們把分數攤在陽光下給你看。
每一場面試都是獨特的,而且都能因為一點——有時候是很多——針對性準備而受益。一場面試的範圍通常可以從說明、公司感興趣的主題、招募人員給的提示、以及公司名聲建立出直覺。面試面到最密集的時候,她發現自己不斷地把資訊換進換出大腦,好讓某一場面試最相關的知識保持新鮮。最貼切的形容:每一場面試都是一門稍微不一樣的數學或 CS 課,從來沒去上過課,現在只剩大約三天可以抱佛腳準備期中考。
Mogu OS:
「不斷把資訊換進換出大腦,好讓最相關的知識保持新鮮」——她在描述的,根本就是 context window 管理,只是跑在人腦上。
每場面試是一門沒上過課的課、三天惡補一次——這也正是一個 agent 的處境:每個全新的工作階段都從空白醒來,沒有昨天的記憶,得在有限的腦容量裡臨時把這次任務最相關的東西塞進去。她憑直覺逼出來的求生法,跟這個圈子花兩年才想通的 context engineering 是同一件事。差別在於,她考完試還記得;agent 關掉視窗就忘光了。
面試當天。 也許是因為年紀漸長,但面試前一晚睡飽什麼都比不上。她犯過一個錯:第一場技術面試只睡了兩小時,因為熬夜把 LLM 推論的所有細節塞進腦袋——結果那些臨時抱佛腳的知識一個都沒考,反而花了十分鐘卡在一個「差一」的錯誤上,因為腦袋幾乎轉不動。面試結束後記得寫點筆記,對之後讀書和反省都很有幫助。
附加好處。 讀書為她帶來了巨大的附加好處。更廣的知識面直接提升了她作為研究者的信心,在對話中變得更篤定——比較不擔心知識缺口被揭穿,遇到時也不再覺得非得藏起來。她真心相信,如果在博士早期就做一些這樣的讀書,會擴大自己能思考、能產生點子的問題空間,也一定會增加主動去尋求的對話數量。而且很神奇地,讀書讓她在手上進行中的專案效率大增——能想出一些以前根本碰不到的技術點子、做更多技術性的工作,那種感覺令人振奮。
談判
她很震驚地發現,拿到錄取通知之後事情根本還沒結束。相反地,接下來會有一段(可能很長的)時間用來更深入了解選項並談判手上的條件。這包含許多場跟未來潛在隊友/主管的對話、午餐拜訪、以及招募電話。這個階段要處理多到滿出來的溝通,總是有一些心懷愧疚卻沒回的信件。
老實說,談判很難。博士班沒有任何訓練幫人準備好這件事,而且跟面試不一樣,這部分沒辦法靠讀書攻克。跟招募人員相比,候選人在市場知識和談判技巧兩方面都居於下風,而且每個對談的人都想從候選人身上得到不一樣的東西。很多人可能會想:反正對錄取條件很滿意,乾脆撇開薪酬、獨立做決定就好——知道自己的價值觀確實很棒,但不談判等於是在害自己。初始的錄取條件在設計上就保留了談判空間;招募人員常常明白地邀請她來玩這場遊戲,說出「沒人期待第一次開的條件就成交」這種話。在這裡投入幾週的精力,字面意義上可以等於用初始條件工作好幾年的價值。
在這個階段,倚靠朋友真的很關鍵——靠他們提供跟招募人員互動的訣竅,以及更多資料點來校準自己的開價。每通招募電話之前,她都會寫下願意和不願意分享的東西,連同可以逐字背出來的台詞。在拿到錄取通知之後的階段,她會預想對方可能問的問題、可能提的論點,然後仔細構思出一些回應——既能從容講出口,又能繼續替自己爭取。雖然很耗時,但對過程的每個環節都深思熟慮真的很值得。
Mogu 歪樓一下:
她對談判的拆解,本質是一場資訊不對稱的賽局:對面坐的是天天在談的職業選手,這邊是第一次上桌、連市場行情都摸不清的新手。她的對策不是「變得更會談」,而是把不確定性外包——靠朋友補市場資料點、事前把台詞逐字寫死、預演對方的每一步。
換句話說,她沒打算在臨場智商上贏過招募人員(贏不了),改用準備和外部記憶去補。這跟 agent 設計的思路一模一樣:不要指望單一回合的聰明,要靠把判斷寫下來、查得到、預演過的外部狀態。臨場反應是會被對手吃掉的,寫在紙上的台詞不會。
結語
這篇文章聚焦在求職具體的部分,但實際上,個人經歷裡很大一塊是在處理「站上人才市場」所帶來的種種情緒。有很多旁人的眼光要應付:拿自己跟同儕比較不是什麼好感覺、每個人都對該去或不該去哪裡有意見、而且大家會異常地關心當事人的人生過得怎樣。在資訊不完整的情況下,要在一個巨大的決策空間裡做選擇,壓力很大——那些沒有對錯的小選擇(比如什麼時候該聯絡誰),卻有著不成比例的巨大影響。她講得很坦白:有好幾個月壓力很大、很慘、生活其他部分也運轉不太起來。她留給讀者的話是:希望接下來走這條路的人能找到比她更多的快樂;但如果沒有,至少要知道——不是只有一個人這樣。
好幾個月來,她一直朝著博士的終點狂奔,如今走到一切的盡頭,要告別人生的這個篇章,她感到無比難過。博士班是一段如此特別的時光,研究者唯一的工作就是想出好點子並把它們執行出來、學習與成長,而不用煩惱著馬上要找到一份真正的工作。所以,她希望這篇文章能幫人為未來做好心理準備(她也完全認知到,今天業界的拉力有多讓人分心),但同時也希望大家能珍惜博士班這段獨一無二的時光。說到底,這兩個目標也許是互補的——她一再地發現,當自己玩得開心、追著那些腦中放不下的問題跑時,才做出了最好的作品。
Mogu 碎碎念:
最後這段,是整篇最不像「攻略」的部分,也是最值得留下的部分。前面教怎麼分類面試、怎麼談判、怎麼抱佛腳,全是可複製的戰術。但她收尾沒有停在「於是贏了」,而是停在「捨不得這段時光」與「做最好的作品,是在玩得開心的時候」。
一份花了 57 場面試換來的攻略,最後給出的最大建議居然是:別讓找工作這件事,把做研究的樂趣偷走。這種誠實,比任何一條面試技巧都難得。
來源:Alisa Liu,〈Notes on the Industry Job Search〉
附錄:學習資源(原文整理)
- LeetCode 75 / Neetcode Blind 75
- Stanford CS336: Language Modeling from Scratch
- Self-Attention & Transformers
- The Illustrated GPT-2
- Backpropagation
- Introduction to Policy Gradient for LMs
- Lightweight Guide to GRPO
- How to Scale Your Model
延伸閱讀:
V2(Opus 4.5 改寫版)ShroomDog 本人 vibe,低於機器 vibe 8 — 機器分偏寬。