演算法面試經驗
轉自網路
本人是數院統計專業畢業,在某大公司做演算法方面的工作,面試過不少人。
有不少學弟學妹找我諮詢過機器學習/演算法方面的求職,其中不乏不是數學、統計、或計算機出身的同學。雖然我們北大的同學在簡歷篩選流程中優勢較大,演算法崗的面試難度著實不小,尤其是對於非科班出身的同學來講。主要有以下方面:
第一,數學基礎欠缺。我和同事在面試的時候都喜歡問一些比較基本(不代表簡單)的機器學習演算法的數學理論,常見的比如:Logistic迴歸的損失函式和梯度分別是多少、SVM的數學推導、GBDT迴歸的梯度代表什麼?一些不需要很強計算能力,但是很考驗功底的概率論小題我的一些同事也非常喜歡問,比如:如何生成概率為pi/4的事件?這些問題普遍都是會的人覺得很簡單,不會的人覺得很難。因此非常建議大家掌握機器學習的演算法的具體原理,最好手動推導過這些演算法的數學部分,而不是走馬觀花地看一遍。相信大家都有體會,看答案總覺得不難,但是自己不一定能想到。當然數學基礎好的同學可以自動忽略這條建議。概率論的話短期提高不容易也不經濟,建議靠刷題,前提是要理解而不是死背。機器學習演算法推薦Andrew Ng在Stanford開的CS229,網上資料都有,比coursera上的入門課要清楚得多。
第二,演算法底子薄。大家應該都上過計概和數算吧,但是真正學好的應該是少數。演算法崗對於演算法的要求雖然比不上更加工程的碼農,但是對於基本的資料結構和演算法還是要求要會的。之前看到一個段子是一個面試官對求職者說“雖然你也不算太強,但是我好不容易面到一個會寫動態規劃的,就給你offer了吧”。其實就我個人的面試經歷而言,很多求職者基本不會寫程式,可能只是sklearn、tensorflow、pyspark掉包俠。檢查自己是否夠格的一個rule of thumb就是看自己是不是Leetcode Medium難度的題基本沒問題。像BFS、DFS、DP還有樹、連結串列、陣列的各種常見題都需要掌握,不求深但求廣。如果完全沒有方向就直接掛掉了,但是如果能蹦出個名詞至少面試官還能給你點引導也許就能搞定了。不求Leetcode刷光,但是一定要寫一些程式碼,而不是純看別人程式碼。道理類似數學要自己推導。如果時間非常緊張,建議優先刷高頻題或面經,剩下的題只看想法不寫程式碼。
第三,沒有insight。要知道,在實際工作中,70%靠業務理解,30%靠技術。因此我們在選拔的時候,非常希望求職者能夠對於我們的業務有一些自己的理解,有相關實習經驗更佳。例如我是在廣告組,那麼至少是期待求職者知道CTR是什麼意思的,不然可能準備的關於CTR預測的面試題要先背景介紹了。我認識的搜尋組的同事問演算法題喜歡讓大家寫個intersection of two arrays,但是包裝在inverted index的背景下,如果不瞭解搜尋引擎的基本原理那麼就連題目都看不懂。網上能找到的資料確實比業界落後了不知道幾年,但是依舊是很有價值的。如果對搜尋引擎的原理感興趣可以看一下Stanford開的CS276材料,介紹得還算全面。
第四,實際動手能力弱。有一些童鞋可能並沒有特別好的實習經歷,也許只有個應用多元統計的課程專案這種資料量小到誇張,或者是MatLab做的本研之類的。這些專案不能說沒有價值,但是從我們業界角度,確實都是toy project。雖然並沒有期望一個應屆畢業生一入職就能上手,但是還是非常希望有過大資料工具的經驗和一些程式設計經驗。如果實在沒有機會可以做個Kaggle專案,雖然老套,但是有用。SQL、Spark這些至少寫幾個小程式也會很有幫助。我見過很厲害的數院學弟,SQL根本沒寫過,一問三不知。其實這些只是上手的話都一兩天就夠了。
還有一個建議就是要對症下藥。要好好準備一個幾乎是必考卻很容易被忽視的問題: “你有什麼問題要問我的嗎?”這個問題如果問得有新意會是很好的加分點。我遇到過的一部分求職者一看就都不知道我們組是幹什麼的,也感覺不到對我們組有特別的興趣。一些負面教材例如,“沒什麼問題”,“你都幾點下班啊”,“你們的新人培養方案是怎樣?”這些問題算是中規中矩,可能確實是會影響你的決定和將來工作體驗的問題。但是站在面試官的角度,這些問題跟我們組沒有太直接的關係,而且其實是過了面試之後適合跟HR討論的問題。最好能體現出強烈的對該組的業務有興趣,可以瞭解一下這個組的業務和需要的技能,問一下這個組有什麼計劃之類的(有一些面試官不喜歡這個問題,而且這個問題比較適合manager round問)。比如明天要去面B的搜尋部門了,那麼多看看搜尋引擎的內容,多看看B的最新面經。臨時抱佛腳往往還是很有用的,因為記憶比較新。當年本科期末考試不也都是這麼過來的哈哈。有一個技巧是在電話面試的時候瞭解這個組的業務,那麼在onsite面試前特意瞭解這個業務的相關業界知識,就解決了之前提到的沒有insight的問題。
最後推薦幾個連結
http://www.dscademy.com/probability-theory/problems/ 概率論練習
http://www.dscademy.com/applications/information-retrieval/ 搜尋引擎原理介紹
http://www.dscademy.com/applications/recommender-system/ 推薦系統介紹
http://infolab.stanford.edu/~ullman/mmds/ch9.pdf Stanford大資料探勘課程的教材中的推薦系統介紹
http://www.dscademy.com/languages/sql/ SQL基本語法
https://sqlzoo.net/ SQL練習