就業市場寒氣逼人,UC柏克萊博士詳談美國找工作經驗

在拿到博士學位後,如何找到一份心儀的研究方向的工作?找工作的過程中會經歷哪些過程?需要作何準備?在這篇文章中,一位來自加州大學柏克萊分校的電腦科學博士詳細介紹了自己找工作的經歷,希望給大家提供一些借鑑。

過去小半年的時間主要就在找工作和決定去向,趁著還沒入職工作的間隙,在這裡發一篇文章總結一下經驗,希望對後面找工作的朋友有幫助,也算是對這段經歷的一個記錄。

我找的是CV/DL 方向美國 Research Scientist的崗位。根據我的了解,Research Scientist 主要是做研究的地方有 FAIR, Google Research, MSR, NVIDA Research, Snap Research, OpenAI, DeepMind, 其他的地方除了一些較小範圍的組,可能有更多的工程或者產品上的工作職責;但是劃分也不是絕對的,而且同一個組每個人可能也不一樣。我投的是前一種為主,但是面試下來兩種的形式是基本共通的。下面我拋開具體公司的流程,按照環節來總結一下整個過程中的經驗。

投簡歷

根據我的經歷和聽聞,RS 的招聘一般都是面試前先具體定位到組:你想加入對方組,對方組的 manager 也覺得你的背景比較適合他們組,才會安排面試。一般不會是先通過公司層面的面試,再去匹配組。當然如果是多個組對你都感興趣,可以協調安排一起面,通過之後會再有一個匹配組的過程。簡歷在公司官網海投的效果不太好 ,尤其是大公司。找人推到公司內部的內推系統這種,也不推薦;因為這種情況一般不會匹配到組,可能很久之後才有人會看到你的簡歷。我有非常厲害的同學,因為只是找了一般的公司系統內推,而沒有拿到面試。

對於真正考慮去的地方,建議先定位想要去的那個組,然後通過組裡面或者臨近的組裡面認識的朋友師兄師姐來向 manager 推薦。這樣可以保證對方 manager 能看到你的簡歷,而且對 manager 來說,有人推薦的一般比去打撈簡歷靠譜很多。我非常幸運,很多朋友和前輩在這裡幫助了我非常多。我通過這種方法投的基本都拿到了面試,官網海投的大部分沒有音信。根據我過往的經歷,PhD 找實習面試也是一樣的道理,通過官網之外的渠道找靠譜一些。

通過這種方法投了,但是如果對方沒有招人名額的話那肯定也是不行了。20-21 兩年疫情嚴重的時候這個就是個問題,21 年末 / 22 年初的市場貌似開放了很多名額,很多組都在招不少人,但是 22 年下半年似乎情況又急轉直下了。

如果有名額,給面試的可能性看研究方向和成果。一般來說成果沒有辦法短時間最佳化,所以找工作肯定是越合適的組成功幾率越高。但也不是一定要求小方向上嚴格匹配,尤其是在做研究自由比較大的組和公司。有時候一些我以為並不是競爭特別激烈的非頭部大廠,但是實際上他們需要的方向和技能並不匹配我的,我就沒有收到訊息或者面試。

關於研究成果,理想情況是對方聽說過或者讀過你的工作;我就聽說有人文章很少,但是有一個工作非常牛,然後找到很好的研究崗位的。數量質量兼備可能是理想情況,這樣從 manager 和公司角度來說,你既能保持效率,又有機會搞大新聞。如果簡歷關順利通過,就到了面試環節,下面按照幾種面試種類分類來說。

電話面 (0-1 場)

英文 “Phone Screen”,一般半個小時,是看到簡歷覺得 ok,但是 onsite 面的成本太高,所以需要通過電話面來刷掉一些人。一般是簡單了解下你的研究背景,也有的公司是其他的形式,比如很短的一個 presentation,也有少部分很簡單的 coding 的。過了電話面就進入所謂 onsite,一般是 5-10 個面試安排在同一天或者有時候在相鄰的兩天。雖然叫 onsite,但是歷史原因了,現在為了方便都是遠端面。下面介紹的都是 onsite 面試中不同的內容。

Research talk (1 場)

onsite 當天第一場,一般是 45 分鐘的 research presentation,加上 10-15 分鐘問答時間。這個某種程度上可以給 onsite 的一天定調,如果講的效果比較好的話,應該對後面的面試會有幫助。一般後面要面試你的人會去視訊會議裡直接看。大部分情況下都被錄影了,後面在公司內部會公開被更多感興趣的人聽到。大概要做的就把自己過往的重點工作用一條主線串起來,講一個好的、能被聽眾聽懂的故事。不需要用到所有的工作;我認為一般重點講的不超過 3 個工作,太多了可能會顯得沒有重點。我認識的有兩個同學都是隻重點講了一個最近的工作,然後拿到了非常好的 offer。

網上有很多如何做好 research talk 的教程和建議,我也參考了很多。但是我的準備也是有一個問題,就是沒有把講的過程練習到很流利。這部分準備的時間取決於之前的材料有多全,有些同學就是把之前做的就很好的 PPT 拼接起來。每次講完,我也會看看有沒有什麼可以改進的地方。research talk 雖然很多公司是不會顯式打分的,但是應該是所有面試中比較重要的一環。

Coding 面 (1-2 場)

Leetcode 類型的 coding 題,其實沒有我想的考的那麼多,平均每個公司不到一題。我沒有被考超過 Leetcode 中等難度的題;就算是中等,也是其中比較簡單的。所謂的 AI coding 可能更多一些,就是 numpy, pytorch 或者是 ml/cv 的一些基本操作(比如 nms, iou, filtering, tensor 操作,但沒有手寫 back-propagation 這種)。這個因公司而異,有個別公司從頭到尾一道 coding 題都沒考。

我以前沒有搞過資訊學競賽,大概準備 Leetcode 類型題我花了一個月左右的時間。我買了個 Leetcode 會員,刷了可能 200 道左右 Leetcode 簡單和中等的題 (看到自己賬號 2014 年大一大二剛註冊的時候就刷了幾道困難題,還在論壇上和別人發過帖討論,有點感嘆自己老了)。每一個基本的考點,比如 DFS, BFS, DP, 連結串列等等,都至少做了幾道題。比較熟練之後,不用做到每個練習題都寫完整,想出思路即可,可能我在這裡又看了 100 道題。

coding 面也是有技巧的,比如如何在不會做的情況下做出一些分析,讓面試官給你一些提示,等等,網上也有很多教程。可以對著公司的常見題刷,好像出現重複題的概率還是挺高的,我在 Meta 前幾次實習面試就被一直問同一道題。

當然這裡我說的主要是偏研究崗位的;如果是偏工程的崗位的話,coding 肯定是會更多,或者可能全部是 coding,可能難度也會更高。

ML/Math(0-1 場)

有一些公司會考一些機器學習基礎知識。比如解釋 overfitting 的定義,如何判斷 overfitting 了,Adam 和 SGD 的區別。還有一些大一的數學知識,比如矩陣的特徵值分解,如何判斷正定,泰勒展開,梯度,導數相關的知識點等等。不是很多,大概有三分之一的公司考了,一般不會太難,稍微複習一下應該就能比較好地應對。沒有手推 SVM 這種。

Research 面(2 場或者更多,有的 6,7 場也是有可能)

這個大家找過實習的應該都會面的。總結介紹一下自己的過去的研究,挑出一兩個重點講一下,自己做了哪些貢獻。

常見問題有:對自己過往的工作回過頭來怎麼看,還有哪些地方可以改進的;將來打算做什麼方向;對某個小領域做個簡單的概括 / 怎麼看;我想做一個東西能不能這樣做,可能出現什麼問題;做一個東西總是做不好,有可能是哪些問題等等。

也有那種設計問題,給你一個場景,問你怎麼開始解決這個 ML 的問題,設計系統,一般是從如何整個 pipeline 角度來說,收集劃分資料,設定 metric 等等。也有那種問一個題目,看看你有什麼思路,有些就是他們工作中碰到的問題。Research 面可能是面試的主體部分,應該佔了所有比例的一半以上,所以得做好多次重複說一樣的內容的準備。

也有很多面試官會在這個環節中留很多時間讓你提問,或者介紹他們組的情況。如果你本來就認識面試官,在這一關有可能也沒有太多嚴格的考察內容,都是在聊天,或者給你介紹他們組的情況。

這輪如果面試完了,對方覺得從你這學到一些新的視角或者 insight,那可能是最好的。也有 Research 面和 coding 面混合的,前半部分 Research 後半部分 coding.

Behavior 面(0-1 場)

問一些過往的經歷 / 場景,你的處理方法,學到什麼,想看一看你工作中的性格品質。比如介紹一個工作中和別人意見不同的情況,以及最後是怎麼解決的。有些公司是有專門的一場面這個,有些是在其他面試中穿插著的,也有不面這個的。這個部分也需要準備一下,參見網上很多教程。準備過程基本上是,回想一些過去工作學習中發生的一些有趣的經歷做為素材,然後可以應對不同的問題做為答案。雖然我準備了,但是發現很多時候還是即興回答的。一般人可能很難面的很差,當然想出彩應該也比較難。這個按照亞馬遜的標準來準備,應對其他的就比較簡單了。

補充

每一家公司面試的方式和輪數不同,但是 research talk 和 research interview 一定是有的,我的理解也是在其他幾項過關的情況下,對方比較看重的。不同的公司面試也不一樣,這個在拿到 onsite 面試之後,有些公司會和你介紹面試大概面什麼,前期總體準備來說不太需要具體到每個公司。

最後分享一些自己的經歷。我完整面完了 8 家公司的 onsite,並且都集中在 2022 年 3 月。這期間平均每天(週末除外)大概有 3-4 場面試 / talk;強度最高的一次,是上午 8 點面到下午 5 點,每兩場中間 15-30 分鐘休息。正式的面試就有七八十個單場,所有面試和交談加一起遠超 100 場。

當然你也可以選擇,拿了想要的 offer 後就退出這個遊戲,然後專心休息或者做其他事情。但是我剛開始一方面是為了求穩,一方面也是因為確實投的地方都考慮去,就安排的比較多,雖然很累也很有收穫。最後給了 onsite 的這 8 家公司都拿到了 offer。還有少量一些沒到 onsite 就結束了的:有簡歷拒,有電話面後告訴我沒有名額,也有過了電話面和 coding 筆試,但沒給後續的面試。剩下的還有不少海投簡歷的沒音信。這些我大多也覺得不是特別 match,否則就會試著找人推來投了。

面試過程中感覺到,很多地方都是很好的機會,學到了很多東西,也認識了很多新的朋友、同行和前輩,manager 也都人非常好,很多組說可以給自由選擇工作內容的空間。糾結了很久,最終還是決定去 FAIR,部分也是因為我在 FAIR 實習過,從適應環境上來說風險相對低,內部工具的使用上也會比較容易延續。在此做一下記錄,網上找 research scientist 崗位的經歷分享相對較少,不希望自己以後淡忘了這段找工作經歷,也希望可以幫到後面畢業找工作的同學們,國內找工作的同學也歡迎參考。

原文連結:https://zhuanlan.zhihu.com/p/537028803 (作者:知乎使用者@劉壯)