逆天改命!如何拿到心儀的算法工程師Offer?

逆天改命!如何拿到心儀的算法工程師Offer?

然而,經常參加面試的同學肯定有過這種感覺,即使面試過程非常順暢,即使你本身是一個麪霸,甚至 god like,也經常有失手的時候。所以很多同學把面試歸結爲一門“玄學”。那麼算法工程師的面試真的是一門玄學嗎?

本文先來講一講算法工程師的必備技能,再嘗試給大家解答有什麼方法能讓你在玄之又玄的面試中逆天改命。

今年是我作爲算法工程師工作的第七個年頭,期間拿到過 hulu,阿里巴巴,騰訊,美團以及一些 startup 的算法工程師 offer,也作爲面試官面試過清北,海外,北郵,以及一些二本學校等不同背景的百餘位 candidates,作爲面試者和面試官的經驗還比較豐富。所以希望自己的經驗能對你有所幫助,也非常歡迎其他面試官能夠多留言探討自己的面試經驗。

那我們直入主題,到底什麼技能纔是一名合格的算法工程師應該具備的技能呢?面試官又會如何驗證你的這些技能呢?

算法工程師面試技能雷達圖

雖然每個一個崗位都有 JD,但拋開具體的崗位要求,從稍高的角度角度看待這個問題,一名算法工程師的技術素質基本可以拆解成下面四個方面:知識、工具、邏輯、業務。當然廣義來講,這四項素質也適用於所有 IT 工程師。

我非常喜歡用雷達圖來表示一個人的能力範圍,可能小時候看聖鬥士看多了,當時研究官方出的黃金聖鬥士能力雷達圖研究了半天,現在也沒好到哪去,只不過變成了喜歡研究候選人的能力雷達圖了。。下面畫出了大數據行業幾個相關職位的能力雷達圖,大家可以初步體會一下。

在這裏給大家推薦一個python系統學習q羣:515267276有免費開發工具以及初學資料,(深度學習,機器學習,神經網絡,人工智能,數據分析,網絡爬蟲等)


不同崗位的技能雷達圖

簡單來說,任何工程師都應該滿足四項技能的最小要求,比如我曾經面試過一位計算廣告算法工程師 candidate,這位同學發過一些計算廣告相關的 paper 和專利,從 research 的角度是不錯的人選,但當我想稍微驗證一下他 coding 的能力時,他明確告訴我說他不願意寫代碼。這就是不滿足“工具”這項技能的最小要求,自然是不能通過面試的。

在最小要求的基礎上,算法工程師的能力要求是相對全面的。其實所謂算法工程師,就是因爲你不僅應該是一位合格的“工程師”,還應該再次基礎上有算法的改進和實現的能力。除此之外,大數據工程師更注重大數據工具和平臺的改進,研究員則在知識和邏輯層面相對突出。有些臨時抱佛腳的同學喜歡惡補知識,不注重理解業務和模型本身的內在邏輯,是我經常見到的面試“悲劇”情況。

當然,只用四個詞描述四個方面的能力還是過於形而上了,這裏我們用一些具體的內容來描述一下算法工程師的四個技能點:


知識:主要是指你對 machine learning 相關知識和理論的儲備

工具:將你的 machine learning 知識應用於實際業務的工具

邏輯:你的舉一反三的能力,你解決問題的條理性,你發散思維的能力,你的聰明程度

業務:深入理解所在行業的商業模式,從業務中發現 motivation 並進而改進模型算法的能力

也許還不夠具體,那我們再從一個實際例子中體會一下,比如我去面試“計算廣告算法工程師”的職位,上面四項對應着哪些具體的能力呢?


知識:主流 CTR 模型以及預算控制,流量預估,bidding 策略等模型算法的原理和技術細節

工具:coding 能力,spark、flink、tensorflow、ps-lite 等模型訓練、serving 相關工具

邏輯:算法題,模型之間的演化關係

業務:展示廣告和搜索廣告在構建模型時的區別聯繫,如何根據公司的 business model 制定模型的 objective

當然,上面只是讓大家體會一下什麼是這四項素質,真實的計算廣告算法工程師面試中,你不一定要都掌握,也不一定侷限於這些內容。如果你遇到一位資深的面試官,他不會預設一個框架往面試者身上套,而會從面試者簡歷出發檢驗面試者能不能達到這四項素質的標準。

那麼問題又來了,面試官會如何在"限定的時間內"檢驗你這四項素質能不能達到"技術合格"的標準呢?

既然是限定的時間,面試官就不可能拿出一本西瓜書,從頭問到尾,也不可能拿出一本葫蘆書,從 100 道面試題中抽出 50 道給你來個馬拉松問答。面試官要做的是在 1 個小時的時間內確認你能力的"深度"和"廣度"。 所以在這裏面試官就像一個採樣算法,要從你腦子裏採幾個點,把你的能力雷達圖描繪出來。

重點再重複一邊,面試官會從“深度”和“廣度”兩個維度構建你的能力雷達圖

對於"深度"方面,有經驗的面試官會從你已經做過的項目中挑出你最擅長的部分做層次式的遞進。一位面試同學介紹自己實習時候用過 XGBoost 預測股票漲跌,那面試官可能會由淺入深依次考察下列問題:

GBDT 的原理(知識)

決策樹節點分裂時是如何選擇特徵的?(知識)

寫出 Gini Index 和 Information Gain 的公式並舉例說明(知識)

分類樹和迴歸樹的區別是什麼?(知識)

與 Random Forest 作比較,並以此介紹什麼是模型的 Bias 和 Variance(知識)

XGBoost 的參數調優有哪些經驗(工具)

XGBoost 的正則化是如何實現的(工具)

XGBoost 的並行化部分是如何實現的(工具)

爲什麼預測股票漲跌一般都會出現嚴重的過擬合現象(業務)

如果選用一種其他的模型替代 XGBoost 或者改進 XGBoost 你會怎麼做,爲什麼?(業務 + 邏輯 + 知識)

這是一條由簡歷出發,由“知識”爲切入點,不僅考察了“知識”的深度,而且還考察了“工具”、“業務”、“邏輯”深度的面試路徑。

當然,如果你介紹的項目是實現了一種類似阿里 DIN 的 CTR 預估模型。那麼問題路徑可能是這樣的:


softmax 函數的定義是什麼?(知識)

神經網絡爲什麼會產生梯度消失現象?(知識)

常見的激活函數有哪些?都有什麼特點?(知識)

挑一種激活函數推導梯度下降的過程。(知識 + 邏輯)

Attention 機制什麼?(知識)

阿里是如何將 attention 機制引入推薦模型的?(知識 + 業務)

DIN 是基於什麼業務邏輯引入 attention 機制的?(業務)

DIN 中將用戶和商品進行了 embedding,請講清楚兩項你知道的 embedding 方法。(知識)

你如何 serving 類似 DIN 這樣的深度學習模型(工具 + 業務)

這條路徑側重於考查“知識”深度的路徑。爲了彌補其他方向考察的不足,面試官肯定還會問一個從工具或者業務出發的問題來確定你其他方面的深度。

因爲面試官選擇的是你最熟悉的領域深入下去,我們可以假設,如果一位面試者在最擅長的項目中都答不上一些細節性的問題,那幾乎可以肯定你在任何其他領域的鑽研都不夠深入,你的技能雷達圖的面積肯定是一個很小的面積。也有像我之前所提到的一些臨時抱佛腳的面試者,也許知識方面達到了要求,但經不起面試官對“工具”和“邏輯”的考察,這也毫無疑問會“悲劇”。

如果面試者的能力深度達到了最低的要求,下一步面試官會確定你能力的廣度,對於任何算法工程師,我都會隨機 check 以下幾個知識點:

NN,RNN,個別聚類算法,模型評估等知識的理解程度

spark 的調優經驗,model serving 的主要方法,parameter server 的原理

GAN,LSTM,online learning 的基本理解

embedding 方法,attention 機制,multi task,reinforcement learning,online learning 的基本理解

對於廣度的檢查是比較隨意的,個別答不上來無傷大雅,但如果超過一半以上的知識點都 miss 了,可能有點說不過去。因爲我要知道你是一個關注前沿,喜歡學習的人,試想除了你自己做過的項目,其他知識了了,那我可以肯定你不是一個對技術有熱情的人。很多面試官很看重“熱情”這個屬性,因爲正是對技術的熱情支撐你今後的學習,有些問題你可能不知道,你也要儘量用自己的理解去推導,去討論。

在這裏給大家推薦一個python系統學習q羣:515267276有免費開發工具以及初學資料,(深度學習,機器學習,神經網絡,人工智能,數據分析,網絡爬蟲等)

好了,關於算法工程師面試中的能力雷達圖講完了,如果你嫌我太囉嗦,沒關係,甩給你一張思維框圖,你發給任何沒看過這篇文章的人,也都會對我說的內容一目瞭然。

面試是一門玄學,如何逆天改命?

但經常參加面試的同學肯定有過這種感覺,即使面試過程非常順暢,即使你本身是一個麪霸,甚至 god like,也經常有失手的時候。所以很多同學把面試歸結爲一門“玄學”。面試是一門玄學,這句話有沒有道理?面試到底“玄”在哪裏?爲什麼“強”如作者(臉皮太厚了。。)參加了 10 餘場大中小公司面試,也有兩場沒拿到 offer,原因是什麼,是因爲玄學嗎?有什麼方法能讓你在玄之又玄的面試中逆天改命嗎?我來嘗試給大家一個解答。

一個前提

首先這裏有一個前提,敢稱面試爲玄學的人必然是一個技能面積廣闊的人。你室友面了五家公司,有一家沒有給 offer,那可能是玄學導致的,你面了五家公司,一家都沒給 offer,那是你的實力太弱,請回家繼續苦練本事,擴大你的技能雷達圖。

三個原因

在你實力足夠的前提下,通常是三個方面的原因導致你無法得到 offer,這裏面有主觀的原因,也有客觀的原因,甚至有不可抵抗力的因素,看看大家能不能找到屬於你的那一條。

 玄學之一:你可能不是面試官想一起工作的人。

站在面試官的角度,我經常把面試官給 candidate 通過的根本原因歸結爲一句話“找到了一個技術合格且願意一起工作的人”。

所以面試通過要滿足兩個基本要求,一是“技術合格”,二是“願意一起工作”二者缺一不可。所以在你技能合格的前提下,面試官願不願意與你一起工作就成了一個關鍵且略主觀的問題。

但這看似草菅人命的標準其實是有背後的深刻邏輯的。往俗了說叫做看看 candidate 投不投緣,往大了說叫做符不符合公司文化,往實在了說,是要 check 你是不是能夠順利的與同事交流協作,得出合理的技術解決方案。

再進一步說,從工作和學習的區別的角度看,工作中知識的重要性其實是逐漸在降低的,軟素質的要求逐漸在升高,你很有實力,但你傳播實力的能力同樣重要,就像 Facebook 總在強調的 impact,Hulu 在晉升 senior 時要考察的跨組合作,其實都在考察你的溝通能力。如果你在面試中連你未來的同事都聊不來,那你如何去跟別的組的同事協調呢?你甚至會跨 office 跟別的城市甚至別的國家的團隊溝通,你又怎麼能在複雜情況下一起解決問題?所以跟你的面試官聊得來是第一步。

爲了驗證你未來會不會是一個合適的同事,面試官通常會用拋出一些開放性的問題與你討論,這個問題可能來自一些業界通用的問題,比如請你設計一個“千人千面”的電商主頁商品類別排序模型;也許會來自一些生活中的算法,比如請你設計一個微信隨機搶紅包時生成紅包金額的算法或機制;還有可能就來自面試官的工作實踐,比如我在構建 CTR 模型的時候,遇到了嚴重的數據 bias 的問題,有沒有什麼辦法解決。

這類題的特點很明顯,非常開放和發散,開放到題目本身並不清楚。正是因爲不清楚,所以面試官想要的效果是請你去主動提問題,我們一起去設計一個模型或系統來解決這個問題。在這樣的前提下,有下面兩類 candidate 可能會被我無情的拒掉:


面試過於被動,被面試官生硬的推着走。比如針對“微信搶紅包”這個問題,有的面試者就一句話,“每次用一個隨機數生成器生成一個紅包金額不就行了”。如果是這樣的話,你作爲工程師的嚴謹性就蕩然無存了。面試官爲了讓你繼續下去,還要向你提問,比如你考慮過沒有紅包金額的總體分佈問題?等等。而面試官期待的是這個問題被你推動着走下去。比如在問題不太清楚的前提下你應該反問面試官,每個紅包的金額有沒有上限和下限?需不需要考慮計算效率問題?我能否在紅包產生時就預算好所有紅包的金額等等。

思路受限,沒有嚴謹性、開放性和創新性。在實際的工程問題中,解決一個問題不可能只有一個 solution,解決一個問題的 solution 也不可能是一句話能說清楚的。比如我想跟你討論一下如何設計一個電商主頁商品類別排序模型。看到這個問題,很多人會直接說我想用 DNN 建一個 CTR prediction 模型來排序。這當然可以,但最好請你拋出這個解決方案的時候嚴謹地系統地想一想這個問題,順着工程實現的思路去跟面試官討論下去,比如 1、都能得到哪些數據和 feature;2、數據量有多大,數據延遲有多大;3、objective 如何制定;4、結合具體業務,我能不能把商品類別當作一個 item 來對待,或者把類別內部的商品當作一個 item 來對待;5、我能否使用 learning to rank /ctr prediction/ 多分類模型來解決這個問題;6、採用什麼模型架構更適合這個問題等等。在實際面試中,你可能無法想的這麼細,但請體會這個意思,作爲算法工程師,你應該足夠嚴謹、開放、活躍、創新。

 玄學之二:你的技能樹無法精確滿足當前 position 的要求

這個問題在社招的情況下尤爲突出。很多資深的工程師說感覺面試表現不錯,算法題最優解,設計題聊半天,面試官全程微笑,就是不發 offer。這樣的情況絕大可能就是你的經驗不能精確符合職位要求

大家要注意“精確”二字。在有些情況下公司對面試者的工作經驗的要求是精確到系統模塊級別的。同樣是計算廣告算法工程師,我們團隊可能就想招一個做 yield optimization 或者“預算控制”算法的,你說你搞 CTR 搞得風生水起,發了無數篇頂會,但你沒搞過這個方向,不能即插即用,那隻能對不起,作爲同行爲你點個贊,但 offer 沒有。

前段時間還跟 facebook 一位前同事聊天,說他們就想招一個搞大規模並行機器學習平臺的人。那你說你是做 ranking 的,你用 tensorflow 或者 mxnet 用的飛起,但沒實現或者修改過源碼,沒自己搭建過 parameter server,那也只能對不起,點贊奉上,offer 沒有。

針對這類問題有沒有解決之道?其實是有幾點大家可以注意的,在找工作之前還是要儘可能的多讀幾遍 JD,找到那些跟一般 JD 有區別的,或者 JD 上明確寫的“最好有 XXX 經驗”,看與自己的經驗是否匹配;有條件的 candidate 可以多跟獵頭或者對方 hr 溝通一下,甚至能夠找到內推渠道的同學可以找團隊的成員瞭解一下內幕消息,都是很有必要的。

 玄學之三:不可抵抗力

上篇文章作者說到參加過十幾場面試,但還是有兩個公司沒有給 offer,一個是 eBay 美國總部,一個是百度某算法部門。eBay 掛掉的原因是當時英語實在太差了,設計題和開放題答得很差,沒有跟面試官更有效的互動;百度的原因就是不可抵抗力,大約記得是 15 年底的時候,已經拿到口頭 offer 了,但突然因爲某事件全 baidu 的校招和社招 offer 都暫時停止了,這就屬於不可抵抗力因素了。雖然後來跟 baidu 又有聯繫,但錯過了那個時間節點,也就不考慮了。

可能不可抵抗力的因素在北京這個“寒冷”的冬天會更多一些,有沒有解決之法?也是有的,大家沒事多去北京西郊臥佛寺拜一拜可能會逆天改命。

現在可以把算法工程師面試的技能框圖全部補全了。


北京的這個冬天有點“冷”,在文章結束前給身在寒冬的同學幾點建議:


寒冬就應該廣積糧,緩稱王,猛攻自己的技能弱點,讓自己更有實力迎接春天;

中高端職位永遠不缺,真正合格的算法工程師永遠是稀有物種,努力做金字塔中上部的那塊磚;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章