我在美團這兩年,從實習到工作的總結

結束了兩週的等待,如願以償開始了自己的美團實習生活,本來抱着三五個月走人,爭取下一份實習的心態,沒想到一直到轉爲暑期實習生、到通過留用面試、再到年後繼續實習,直到今天,我已經在美團度過了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、面經分享

1、阿里(四面未通過)

https://www.jianshu.com/p/304e1023c4cb
2、百度核心搜索部(三面未通過)

https://www.jianshu.com/p/02d931d5c1c8
3、知乎(三面未通過)

https://www.jianshu.com/p/40259bb05357
4、ThoughtWorks(初試+sp加試 通過)

https://www.jianshu.com/p/0b5514908683
5、美團留用面試(共一面,通過)

https://www.jianshu.com/p/bbe21ff40724
6、便利蜂(共三面,通過)

https://www.jianshu.com/p/51e2d16f16a5
7、貝殼(三面+sp加面,通過)

https://www.jianshu.com/p/cd0a809cf198
8、一點資訊(共三面,通過)

https://www.jianshu.com/p/fffc15c9d31d
9、百度Feed(二面未通過)

https://www.jianshu.com/p/65032f77f903
10、貓眼(三面未通過)

https://www.jianshu.com/p/c32787be3dc8
11、搜狗(共三面,通過)

https://www.jianshu.com/p/8a116eb7fd32
12、小米(共兩面,通過)

https://www.jianshu.com/p/e34ebebae15f
13、滴滴(共三面,通過)

https://www.jianshu.com/p/bc9d5f8206a0
14、拼多多(共兩面,通過)

https://www.jianshu.com/p/a15bc7d0686a
15、愛奇藝(共三面,通過)

https://www.jianshu.com/p/4ceb5de29c76
16、頭條(共三面,通過)

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

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

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

長按二維碼關注小小挖掘機

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