背景介紹
教育與自學經歷
我並非完全自學出身。我曾大量學習數學和經濟學,尤其是計量經濟學,其中包含許多統計建模方法,雖不盡然是機器學習本身,但有很多經典的統計方法。至於機器學習,我是自學的,參加了很多 Kaggle 競賽,這對我幫助很大。教育方面,我擁有數學碩士學位,這對我閱讀博客、論文以及理解模型內在機制非常有幫助。
職業生涯軌跡
我長期從事分析和報告工作,後來在現任雇主公司轉向數據科學和機器學習領域。機器學習在整個工作中只佔一小部分,大部分工作是數據管道和數據工程,最近我主要從事這方面的工作。不同公司對機器學習工程師的技能要求差異很大,就像數據科學家一樣,他們的工作範圍可以從模型建模到簡單的報告。
學習方式
我的學習方式是工作和自學相結合。有時在工作中產生想法,便會主動學習並實踐,即使沒有人要求。有時接到任務但不知如何解決,就會尋找不同方法,而機器學習通常是解決數據相關任務的最佳方法。此外,Kaggle 競賽也是學習應用機器學習的好途徑,在競賽中需要理解要優化的指標,嘗試解決不熟悉的問題。
工作經歷
公司規模與類型
剛開始工作時,我在非常小的公司。後來在職業生涯中,我在大型電信公司、銀行以及一些遊戲和賭博公司工作過,這些都是相當大的企業。
工作中使用的技術
在銀行和電信公司,由於高度監管,Python 或自製工具通常不可用,主要使用 SAS、Visual Basic for Application 和 Excel。在最近的幾家雇主公司,Python 是主要工具,用於創建和部署模型,以及數據服務。由於速度要求,Rust 也開始佔據一席之地。
成功的背景條件
理想的背景
我認為成功的機器學習工程師應具備將問題分解為小問題並深入理解的能力。STEM 領域的人通常具備這種能力,他們能從底層開始解決問題,避免過度設計。但這並不意味著需要特殊背景,任何人只要有正確的思考方式,都可以從事這一職業。
面試準備
過往面試經歷
我過去曾多次參加 Google 的面試,大多在篩選階段失敗,有一次進入完整面試流程但在最後一輪失敗。三年前我參加了 Meta 的完整面試流程,在其中一輪失敗,去年 Meta 再次聯繫我。我覺得 Meta 的面試是最難的。
準備時間
我從接到通知到收到 offer 大約花了半年時間,準備時間過長。我過度專注於 LeetCode 問題,因為我沒有軟件工程背景,而 LeetCode 問題主要涉及計算機科學一年級的數據結構和算法。由於年齡增長學習新事物變得困難,加上全職工作和家庭,很難找到時間學習,我花了幾個月時間練習了幾百道 LeetCode 題目。
機器學習與系統設計面試準備
-
Meta 提供的文件:Meta 提供的文件相當有用,能讓你大致了解面試的評估點,確保在設計中涵蓋所有要點。
-
實踐:找學習夥伴一起練習是最好的方法,我在 Discord 頻道找到了合適的夥伴。不同地區的人有不同的方法,美國的人更注重時間管理和結構化。
-
資源:網上關於機器學習系統設計的資源不多,博客和視頻對高級職位可能不夠深入。對於高級職位,面試中可能會有深入探討,而網上視頻往往缺乏這部分。
面試過程
整體感受
我將面試分為三天進行。編碼方面,我遇到的問題難度中等,最大的問題是讓面試官理解我的代碼乾跑。與三年前不同的是,這次面試官會讀出問題。面試時總會感到緊張,所以即使問題簡單,在面試環境下也可能變得困難,因此模擬面試很重要。
機器學習工程師面試
-
問題類型:在高級職位(E6+)的面試中,會有兩輪機器學習系統設計,問題類型不同。一輪面試中,我進行了 40 分鐘的獨白,面試官在最後進行了一兩次深入探討;另一輪面試中,面試官主要進行深入探討,問了大約 16 個問題,非常緊張。
-
準備效果:我的準備對面試有幫助,但仍有不足之處。例如,在第一輪面試中,我的建模可能不夠複雜,而第二輪面試官非常注重建模。
行為面試
-
重要性:行為面試對高級職位非常重要。Meta 對不同職位的工作年限有限制,可能是為了確保應聘者具備足夠的行為經驗。
-
面試內容:面試中會被問到不同類型的衝突,如與經理、同事的衝突。這是為了了解應聘者在工作中的行為表現。
-
準備方法:進行模擬面試非常重要,因為如果沒有在大型科技公司工作的經驗,很難知道如何組織故事。我與前 Meta 經理進行了模擬面試,他們給了我很多有用的建議。
面試後
等待回覆時間
我在完成最後一輪面試後大約三到四天收到了招聘人員的回覆,速度相當快,可能是因為我同時也在參加 Google 的面試。
錄取通知
-
offer 評估:與 Levels.fyi 相比,我覺得 Meta 的 offer 有點低,我也諮詢了一些現任或前任 Meta 員工,他們也有同感。但據我在不同 Discord 頻道的了解,這是目前的普遍情況。
-
談判:如果有其他公司的 counter offer,Meta 會將你的情況提交給薪酬委員會,可能會給出更好的 offer。我因為同時在參加 Google 的面試,最終得到了更好的 offer。
-
談判重點:Meta 在談判中,base 薪資的提升超出了我的預期,RSU 的提升最為顯著,一開始沒有簽約獎金,但後來也給了我。
團隊匹配
-
流程:我沒有預先分配團隊,是以通才的身份參加面試。高級員工的團隊匹配過程中,招聘人員會在內部推廣你的資料,經理可以瀏覽你的簡歷並聯繫你。
-
經歷:我與兩位經理進行了面試,第一位經理管理七個團隊,有三個 E6 職位,但我可能問了太多關於工作與生活平衡的問題,被認為對加入團隊不夠熱情。第二位經理主動聯繫我,我覺得與他和他的團隊很匹配。
-
注意事項:在團隊匹配過程中,如何展示自己很重要,這相當於又一次面試,而且不一定能成功匹配團隊。現在有些人在團隊匹配中會花費數月時間,所以盡快匹配團隊很重要。
對團隊的考量
-
工作與生活平衡:我通過在 LinkedIn 上聯繫同國籍的 Meta 員工,了解到歐洲的工作時間相對較為寬鬆,這對我很重要,因為我有學齡兒童,希望能有更多時間陪伴他們。
-
團隊評估:我還問了團隊給經理的評分、工作時間、團隊結構、成員資歷、是否有過高級別員工晉升等問題,以了解團隊的情況。
給觀眾的建議
-
LeetCode:不要只是死記硬背解題方法,要理解概念,因為面試中可能會遇到邊界情況或變體問題。
-
行為面試和機器學習系統設計:思考面試官的評估標準,按照一定的結構提供答案,並給出面試官需要的信號。
-
學習夥伴:找學習夥伴一起練習模擬面試,互相交流解題思路。
-
AI 工具:可以使用 AI 工具驗證自己的解題方法和思路,但要注意其可能存在的錯誤。