必看!兩年美團算法大佬,做的個人總結

這篇文章是轉載至「小小挖掘機」公衆號,作者「石曉文」個人在美團工作兩年,如何從一個實習生逐漸成長爲大廠算法工程師的經驗分享,乾貨很多,非常值得大家學習。所以推薦給在座每位癡海的讀者,希望對大家的職業規劃有所幫助。

01

2017.08.14,結束了兩週的等待,如願以償開始了自己的美團實習生活,本來抱着三五個月走人,爭取下一份實習的心態,沒想到一直到轉爲暑期實習生、到通過留用面試、再到年後繼續實習,直到今天,我已經在美團度過了615個日夜。這裏的人,這裏的事,一切都十分美好。

寫本文的目的,是想通過自身的實習經歷,來總結下一名算法工程師所需要具備的基本的能力,當然,這僅僅是從我本人經歷出發,如果你已經對這個崗位有了深刻的認識,那麼你可以點擊退出;如果你仍然處於迷茫階段,那麼我希望本文能夠對你起到一定的幫助。

從我在美團這兩年的實習中的所做所見,作爲一名應屆算法工程師,我認爲應該具備下面的幾種能力,當然,這種能力針對那些偏業務的算法工程師,而非純研究型的。

1、算法的基本認識

一名算法工程師,最基本的算法能力還是必須具備的。不過,隨着深度學習的發展,傳統的方法如 SVM 等算法在實際應用中已經很少使用,至少這兩年間我是沒有用過的,模型一般使用的是 Xgboost 和 LightGBM 作爲 Base,隨後使用深度學習方法或者強化學習方法進行提升。當然,推薦領域的 LR 和 FM 等方法仍然有所使用。所以,樹模型是一定要牢固掌握的,然後針對你不同的求職方向,學習一些相關的深度學習模型,以及深度學習模型中一些小 trick,如 dropout、正則、Batch-Norm 等。關於數學,個人感覺深度學習的發展已經開始弱化對於數學的要求,不過基本的梯度下降、反向傳播、樹模型的推導、LR 的推導、FM 的推導等,還是必須要掌握的。

2、過硬的代碼能力

一名算法工程師,Python 無疑是最適合我們的語言,但是是不是隻有 Python 就足夠了呢?當然不是,算法工程師,包含算法和工程兩個方面。Python 可以幫我們實現算法,還需要學習一門語言幫助我們的算法能夠應用到線上。在美團,我們使用的是 Java 語言,作爲一名實習生,我還沒有機會接觸到能夠上線的代碼,不過在未來,一定是需要負責線上代碼的,所以 Java 語言也是需要熟練掌握的。

需要提醒大家的是,儘管你可能覺得一些數據結構的知識,對於一名算法工程師來說僅僅是用來應付面試,在實際工作中並不重要,這麼想,其實是大錯特錯了。我們很可能在不經意間,就會需要用到數據結構的知識,比如這兩年我用到最多的就是 Trie 樹。掌握好數據結構,無論是對面試還是將來的工作,都是十分重要的。

3、數據處理和分析能力

一名偏業務的算法工程師,數據處理和分析的能力是必備的。首先,一般我們都會爲自己設定一個業務目標,比如整體的轉化率,那麼我們通常會將此分爲各個階段,並觀察每個階段的情況。比如分析外賣的整體轉化率,可以劃分爲曝光、用戶進入商家頁、用戶進入提交訂單頁,到最後完成支付等幾個階段分別觀察效果,一旦哪個環節出現問題,我們可以快速定位解決。其次,數據和特徵決定了機器學習的上限,而模型和算法只是逼近這個上限而已。在使用機器學習或者深度學習模型時,我們必須從大數據中提取我們的訓練數據,計算相應的特徵,並分析特徵與我們的目標之間可能存在的關係。

在剛去美團的兩個月,基本沒有接觸到模型相關的東西,主要負責的是建立一整套產品的數據指標框架,比如漏斗模型、留存率等等。儘管在當時覺得很枯燥,但是現在想想對自己的提升還是十分重要的。

說了這麼多,數據敏感度是可以通過與數據打交道不斷培養的,但是基本的工具我們可以提前掌握。在美團,我使用最多的是 spark sql 和 hive,這大概會佔據我 70% 的時間。關於 hive,掌握一些常用的函數的使用方法,如concat_ws,row_number,case…when,if,get_json_object等等。

對於 spark sql,掌握其運行的基本原理,以及一些常見問題的處理方法。首先,學會如何處理數據傾斜,有時候因爲一個數據傾斜問題,一整天都浪費在調試一個 spark 代碼中了,其次,學習如何儘量減少 spark 任務的空間佔用,同時加速 spark 任務運行速度,spark 作業在線上調用時,會佔用公共資源,你的任務佔用的資源越多,別人佔用的資源就越少,同時,如果你的任務運行的快,也可以給別人的任務更多的空間。
spark 可以通過很多語言來實現,不過我建議還是學習一下 scala 吧,畢竟可以和 Java 無縫銜接。除了 spark 和 hive,掌握一定的 excel 知識也是必要的。

4、模型的積累和遷移能力

在工作中,模型的積累同樣是必要的,現在模型五花八門,如Transformer、Bert、DIEN 等都是這幾年才提出的新模型,對這些模型,我們需要不斷跟進積累。同時,光了解這些模型怎麼做的還不行,關鍵是瞭解這些模型爲什麼要這麼做。但是,光積累這些模型是不夠的,還需要與自己的業務相結合,針對一個業務問題,如果你能快速想到一個可行的解決方案,那麼說明你的積累還算湊合,如果你無法想到一個合適的模型,那說明你還差得很遠。同時,對於你新學習的模型,學會反思能不能將其部分的思想應用於你的業務問題,並對現有的模型進行改進。

好了,說了這麼多,我們怎麼能從繁忙的工作生活中,瞭解到最新的論文信息呢?對於我個人來說,主要有以下幾個渠道吧:
PaperWeekly 公衆號

原創號主從個人看來,許多熱門公衆號的內容大同小異、送書、送資料、互推這種活動,使得公衆號商業化了,這些公衆號儘管關注人多,但我並不認爲它能帶來更多的價值。僅個人觀點,也許是我看的少,嘻嘻。

學習交流羣名詞積累

在我自己的學習交流羣,大家在交流的時候會說出一些自己不懂得模型,比如前幾天的深度樹匹配模型,如果你不懂,把它記下來,回頭再詳細理解。

分享交流會

在美團,一些交流會是十分有價值的,比如張俊林老師的推薦系統分享、王仲遠師兄的知識圖譜分享等。如果你沒有機會參與這些公司內部的交流活動,那麼如DataFun社區提供的免費講座,可以多報名參加。

5、產品能力

好吧,人人都是產品經理,我們 RD 有時候也是可以翻身做主人的,不一定在任何情況下都聽產品經理的需求,我們需要對這些產品需求有自身的一個認識。不得不說,我在這方面還是有所欠缺的。並不是每個人都具備天生的產品思維,但只要你多看,多想,多問,相信你的產品能力一定可以有所提升,重在積累。

6、軟實力

軟實力包括思維能力、溝通能力、表達能力、文化修養、學習能力、團隊協作能力等等,上面這些是在工作中大家需要注重培養的。

02

好了,以上是我在美團實習近兩年來對於算法工程師這一職位的一點基本的認識。接下來,如果你已經取得了比較好的 offer,那麼到此你可以退出了,但是如果你還在準備今年或者明年的校招面試,我希望你可以繼續看下去,我會和你分享一下去年校招過程中自己的一些經驗:

1、筆試

提前批的公司有的是免筆試,而有的是免簡歷篩選,筆試題型主要有幾種:

1 選擇題

選擇題涵蓋的內容還是很多的,基礎編程知識如 C++ 和 Java、概率論、機器學習基礎、深度學習基礎、數據結構等等。

2 編程題

一般是 leetcode 中等難度

3 簡答題

簡答題主要是手推公式和業務理解。

2 面試

我在去年校招參加了十幾家公司的面試,收穫了 10 個左右的offer,總體感覺是:公司對於算法工程師的要求越來越高。面試主要考察的點有以下幾個方面:
1 實習、論文、比賽

面試官一般會讓你先進行自我介紹,然後會根據你簡歷上寫的實習經歷、論文、比賽經歷進行展開。所以簡歷上的東西一定要是你親身經歷過的,可以按照STAR法則進行講解。在這過程中,面試官會從算法理解、業務理解等多個方面考察你。
2 深度學習/機器學習基礎

在聊完簡歷項目之後,往往會考察一些算法的基礎。常考的是過擬合的解決、正則項、boosting 模型等等,這一塊需要你對深度學習/機器學習基礎有所瞭解,同時對常見的模型有深入的認識和理解。對於簡單的公式也需要理解和掌握推導(LR、普通神經網絡反向傳播、RNN 和 LSTM 的前向傳播、SVM、XGBoost等等)。
3 手撕代碼

手撕代碼題各公司的難度不一樣,不過一般 leetcode 的中等難度的題就可以。石曉文建議,大家一定要把數組、鏈表、二叉樹和動態規劃的題目掌握好。
4、智力題

常考的就是概率計算問題。
5 業務理解

這一塊小編覺得是非常難的,一般會給你一個場景,讓你設計一套算法流程,或者問你對於當前你的項目,後續的工作方向等等。
6 其他

其他的面試官可能會考察一些工程上的問題如多進程、多線程等、spark/hive等等。
3、面經分享

阿里(四面未通過)

https://www.jianshu.com/p/304e1023c4cb2

百度核心搜索部(三面未通過)

https://www.jianshu.com/p/02d931d5c1c83

知乎(三面未通過)

https://www.jianshu.com/p/40259bb05357

ThoughtWorks(初試+sp加試 通過)

https://www.jianshu.com/p/0b55149086835

美團留用面試(共一面,通過)

https://www.jianshu.com/p/bbe21ff407246

便利蜂(共三面,通過)

https://www.jianshu.com/p/51e2d16f16a57

貝殼(三面+sp假面,通過)

https://www.jianshu.com/p/cd0a809cf1988

一點資訊(共三面,通過)

https://www.jianshu.com/p/fffc15c9d31d9

百度Feed(二面未通過)

https://www.jianshu.com/p/65032f77f90310

貓眼(三面未通過)

https://www.jianshu.com/p/c32787be3dc811

搜狗(共三面,通過)

https://www.jianshu.com/p/8a116eb7fd3212

小米(共兩面,通過)

https://www.jianshu.com/p/e34ebebae15f13

滴滴(共三面,通過)

https://www.jianshu.com/p/bc9d5f8206a014

拼多多(共兩面,通過)

https://www.jianshu.com/p/a15bc7d0686a15

愛奇藝(共三面,通過)

https://www.jianshu.com/p/4ceb5de29c7616

頭條(共三面,通過)

https://www.jianshu.com/p/5bc533d1bf62

可以看到,個人感覺自身還是有很多不足之處的,總結幾次面試失敗的原因,主要有兩點,首先在於數據機構題掌握的不佳,沒有學會舉一反三,比如百度的面試、知乎的面試;其次在於對於業務的理解不夠深入,還停留在領導派活,埋頭苦幹的地步,自己對於業務的思考不足導致面試失敗的,比如阿里和貓眼的面試。

4、資料推薦

下面推薦一些資料幫你更好的進行復習吧:

1《統計學習方法》

經典中的經典,建議至少讀兩遍!

2《百面機器學習》

對一些面試常見問題進行了總結和梳理

3 深度學習500問

https://github.com/scutan90/DeepLearning-500-questions/

4 SVM

http://blog.pluskid.org/?page_id=683

5 李宏毅深度學習課
https://www.bilibili.com/video/av9770302?from=search&seid=9066694202064136038

6 李宏毅強化學習課
https://www.bilibili.com/video/av24724071?from=search&seid=11841282802558935758

7 李宏毅機器學習課

https://www.bilibili.com/video/av35932863?from=search&seid=7464664329294734466

8 線性代數的本質
https://www.bilibili.com/video/av44855426?from=search&seid=15873340646320697328

寫在最後

說了這麼多,最後希望你在今年的秋天或者未來的某個秋天,能夠順利拿到自己心儀的 offer,同時希望你能夠不忘初心,砥礪前行!加油!

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