2017.08.14转锈,結(jié)束了兩周的等待,如愿以償開始了自己的美團實習(xí)生活楚殿,本來抱著三五個月走人撮慨,爭取下一份實習(xí)的心態(tài),沒想到一直到轉(zhuǎn)為暑期實習(xí)生脆粥、到通過留用面試砌溺、再到年后繼續(xù)實習(xí),直到今天变隔,我已經(jīng)在美團度過了615個日夜规伐。這里的人,這里的事匣缘,一切都十分美好猖闪。
寫本文的目的,是想通過自身的實習(xí)經(jīng)歷肌厨,來總結(jié)下一名算法工程師所需要具備的基本的能力萧朝,當(dāng)然,這僅僅是從我本人經(jīng)歷出發(fā)夏哭,如果你已經(jīng)對這個崗位有了深刻的認(rèn)識,那么你可以點擊退出献联;如果你仍然處于迷茫階段竖配,那么我希望本文能夠?qū)δ闫鸬揭欢ǖ膸椭?/p>
從我在美團這兩年的實習(xí)中的所做所見,作為一名應(yīng)屆算法工程師里逆,我認(rèn)為應(yīng)該具備下面的幾種能力进胯,當(dāng)然,這種能力針對那些偏業(yè)務(wù)的算法工程師原押,而非純研究型的胁镐。
1、算法的基本認(rèn)識:一名算法工程師诸衔,最基本的算法能力還是必須具備的盯漂。不過,隨著深度學(xué)習(xí)的發(fā)展笨农,傳統(tǒng)的方法如SVM等算法在實際應(yīng)用中已經(jīng)很少使用就缆,至少這兩年間我是沒有用過的,模型一般使用的是Xgboost和LightGBM作為Base谒亦,隨后使用深度學(xué)習(xí)方法或者強化學(xué)習(xí)方法進(jìn)行提升竭宰。當(dāng)然空郊,推薦領(lǐng)域的LR和FM等方法仍然有所使用。所以切揭,樹模型是一定要牢固掌握的狞甚,然后針對你不同的求職方向,學(xué)習(xí)一些相關(guān)的深度學(xué)習(xí)模型廓旬,以及深度學(xué)習(xí)模型中一些小trick哼审,如dropout、正則嗤谚、Batch-Norm等棺蛛。關(guān)于數(shù)學(xué),個人感覺深度學(xué)習(xí)的發(fā)展已經(jīng)開始弱化對于數(shù)學(xué)的要求巩步,不過基本的梯度下降旁赊、反向傳播、樹模型的推導(dǎo)椅野、LR的推導(dǎo)终畅、FM的推導(dǎo)等,還是必須要掌握的竟闪。
2离福、過硬的代碼能力:一名算法工程師,Python無疑是最適合我們的語言炼蛤,但是是不是只有Python就足夠了呢妖爷?當(dāng)然不是,算法工程師理朋,包含算法和工程兩個方面絮识。Python可以幫我們實現(xiàn)算法,還需要學(xué)習(xí)一門語言幫助我們的算法能夠應(yīng)用到線上嗽上。在美團次舌,我們使用的是Java語言,作為一名實習(xí)生兽愤,我還沒有機會接觸到能夠上線的代碼彼念,不過在未來,一定是需要負(fù)責(zé)線上代碼的浅萧,所以java語言也是需要熟練掌握的逐沙。
需要提醒大家的是,盡管你可能覺得一些數(shù)據(jù)結(jié)構(gòu)的知識洼畅,對于一名算法工程師來說僅僅是用來應(yīng)付面試酱吝,在實際工作中并不重要,這么想土思,其實是大錯特錯了务热。我們很可能在不經(jīng)意間忆嗜,就會需要用到數(shù)據(jù)結(jié)構(gòu)的知識,比如這兩年我用到最多的就是Trie樹崎岂。掌握好數(shù)據(jù)結(jié)構(gòu)捆毫,無論是對面試還是將來的工作,都是十分重要的冲甘。
3绩卤、數(shù)據(jù)處理和分析能力:一名偏業(yè)務(wù)的算法工程師,數(shù)據(jù)處理和分析的能力是必備的江醇。首先濒憋,一般我們都會為自己設(shè)定一個業(yè)務(wù)目標(biāo),比如整體的轉(zhuǎn)化率陶夜,那么我們通常會將此分為各個階段凛驮,并觀察每個階段的情況。比如分析外賣的整體轉(zhuǎn)化率条辟,可以劃分為曝光黔夭、用戶進(jìn)入商家頁、用戶進(jìn)入提交訂單頁羽嫡,到最后完成支付等幾個階段分別觀察效果本姥,一旦哪個環(huán)節(jié)出現(xiàn)問題,我們可以快速定位解決杭棵。其次婚惫,數(shù)據(jù)和特征決定了機器學(xué)習(xí)的上限,而模型和算法只是逼近這個上限而已魂爪。在使用機器學(xué)習(xí)或者深度學(xué)習(xí)模型時先舷,我們必須從大數(shù)據(jù)中提取我們的訓(xùn)練數(shù)據(jù),計算相應(yīng)的特征甫窟,并分析特征與我們的目標(biāo)之間可能存在的關(guān)系。
在剛?cè)ッ缊F的兩個月蛙婴,基本沒有接觸到模型相關(guān)的東西粗井,主要負(fù)責(zé)的是建立一整套產(chǎn)品的數(shù)據(jù)指標(biāo)框架,比如漏斗模型街图、留存率等等浇衬。盡管在當(dāng)時覺得很枯燥,但是現(xiàn)在想想對自己的提升還是十分重要的餐济。
說了這么多耘擂,數(shù)據(jù)敏感度是可以通過與數(shù)據(jù)打交道不斷培養(yǎng)的,但是基本的工具我們可以提前掌握絮姆。在美團醉冤,我使用最多的是spark sql和hive秩霍,這大概會占據(jù)我70%的時間。關(guān)于hive蚁阳,掌握一些常用的函數(shù)的使用方法铃绒,如concat_ws,row_number,case..when,if,get_json_object等等,對于spark sql螺捐,掌握其運行的基本原理颠悬,以及一些常見問題的處理方法。首先定血,學(xué)會如何處理數(shù)據(jù)傾斜赔癌,有時候因為一個數(shù)據(jù)傾斜問題,一整天都浪費在調(diào)試一個spark代碼中了澜沟,其次灾票,學(xué)習(xí)如何盡量減少spark任務(wù)的空間占用,同時加速spark任務(wù)運行速度倔喂,spark作業(yè)在線上調(diào)用時铝条,會占用公共資源,你的任務(wù)占用的資源越多席噩,別人占用的資源就越少班缰,同時,如果你的任務(wù)運行的快悼枢,也可以給別人的任務(wù)更多的空間埠忘。spark可以通過很多語言來實現(xiàn),不過我建議還是學(xué)習(xí)一下scala吧馒索,畢竟可以和java無縫銜接莹妒。除了spark和hive,掌握一定的excel知識也是必要的绰上。
4旨怠、模型的積累和遷移能力:在工作中,模型的積累同樣是必要的蜈块,現(xiàn)在模型五花八門鉴腻,如Transformer、Bert百揭、DIEN等都是這幾年才提出的新模型爽哎,對這些模型,我們需要不斷跟進(jìn)積累器一。同時课锌,光了解這些模型怎么做的還不行,關(guān)鍵是了解這些模型為什么要這么做祈秕。但是渺贤,光積累這些模型是不夠的雏胃,還需要與自己的業(yè)務(wù)相結(jié)合,針對一個業(yè)務(wù)問題癣亚,如果你能快速想到一個可行的解決方案丑掺,那么說明你的積累還算湊合,如果你無法想到一個合適的模型述雾,那說明你還差得很遠(yuǎn)街州。同時,對于你新學(xué)習(xí)的模型玻孟,學(xué)會反思能不能將其部分的思想應(yīng)用于你的業(yè)務(wù)問題唆缴,并對現(xiàn)有的模型進(jìn)行改進(jìn)。
好了黍翎,說了這么多面徽,我們怎么能從繁忙的工作生活中,了解到最新的論文信息呢匣掸?對于我個人來說趟紊,主要有以下幾個渠道吧:PaperWeekly公眾號、原創(chuàng)號主(從個人看來碰酝,許多熱門公眾號的內(nèi)容大同小異霎匈、送書、送資料送爸、互推這種活動铛嘱,使得公眾號商業(yè)化了,這些公眾號盡管關(guān)注人多袭厂,但我并不認(rèn)為它能帶來更多的價值墨吓。僅個人觀點,也許是我看的少纹磺,嘻嘻)帖烘、學(xué)習(xí)交流群名詞積累(在我自己的學(xué)習(xí)交流群,大家在交流的時候會說出一些自己不懂得模型橄杨,比如前幾天的深度樹匹配模型秘症,如果你不懂,把它記下來讥珍,回頭再詳細(xì)理解)历极、分享交流會(在美團窄瘟,一些交流會是十分有價值的衷佃,比如張俊林老師的推薦系統(tǒng)分享、王仲遠(yuǎn)師兄的知識圖譜分享等蹄葱。如果你沒有機會參與這些公司內(nèi)部的交流活動氏义,那么如DataFun社區(qū)提供的免費講座锄列,可以多報名參加)。
5惯悠、產(chǎn)品能力:好吧邻邮,人人都是產(chǎn)品經(jīng)理,我們RD有時候也是可以翻身做主人的克婶,不一定在任何情況下都聽產(chǎn)品經(jīng)理的需求筒严,我們需要對這些產(chǎn)品需求有自身的一個認(rèn)識。不得不說情萤,我在這方面還是有所欠缺的鸭蛙。并不是每個人都具備天生的產(chǎn)品思維,但只要你多看筋岛,多想娶视,多問,相信你的產(chǎn)品能力一定可以有所提升睁宰,重在積累肪获。
6、軟實力:軟實力包括思維能力柒傻、溝通能力孝赫、表達(dá)能力、文化修養(yǎng)诅愚、學(xué)習(xí)能力寒锚、團隊協(xié)作能力等等,上面這些是在工作中大家需要注重培養(yǎng)的违孝。
好了刹前,以上是我在美團實習(xí)近兩年來對于算法工程師這一職位的一點基本的認(rèn)識。接下來雌桑,如果你已經(jīng)取得了比較好的offer喇喉,那么到此你可以退出了,但是如果你還在準(zhǔn)備今年或者明年的校招面試校坑,我希望你可以繼續(xù)看下去拣技,我會和你分享一下去年校招過程中自己的一些經(jīng)驗:
筆試
提前批的公司有的是免筆試,而有的是免簡歷篩選耍目,筆試題型主要有幾種:
1膏斤、選擇題:選擇題涵蓋的內(nèi)容還是很多的,基礎(chǔ)編程知識如C++和Java邪驮、概率論莫辨、機器學(xué)習(xí)基礎(chǔ)、深度學(xué)習(xí)基礎(chǔ)、數(shù)據(jù)結(jié)構(gòu)等等
2沮榜、編程題:一般是leetcode中等難度
3盘榨、簡答題:簡答題主要是手推公式和業(yè)務(wù)理解。
面試
我在去年校招參加了十幾家公司的面試蟆融,收獲了10個左右的offer草巡,總體感覺是:公司對于算法工程師的要求越來越高。面試主要考察的點有以下幾個方面:
1型酥、實習(xí)山憨、論文、比賽:面試官一般會讓你先進(jìn)行自我介紹弥喉,然后會根據(jù)你簡歷上寫的實習(xí)經(jīng)歷萍歉、論文、比賽經(jīng)歷進(jìn)行展開档桃。所以簡歷上的東西一定要是你親身經(jīng)歷過的枪孩,可以按照STAR法則進(jìn)行講解。在這過程中藻肄,面試官會從算法理解蔑舞、業(yè)務(wù)理解等多個方面考察你。
2嘹屯、深度學(xué)習(xí)/機器學(xué)習(xí)基礎(chǔ):在聊完簡歷項目之后攻询,往往會考察一些算法的基礎(chǔ)。持莸埽考的是過擬合的解決钧栖、正則項、boosting模型等等婆翔,這一塊需要你對深度學(xué)習(xí)/機器學(xué)習(xí)基礎(chǔ)有所了解拯杠,同時對常見的模型有深入的認(rèn)識和理解。對于簡單的公式也需要理解和掌握推導(dǎo)(LR啃奴、普通神經(jīng)網(wǎng)絡(luò)反向傳播潭陪、RNN和LSTM的前向傳播、SVM最蕾、XGBoost等等)依溯。
3、手撕代碼:手撕代碼題各公司的難度不一樣瘟则,不過一般leetcode的中等難度的題就可以黎炉。小編建議,大家一定要把數(shù)組醋拧、鏈表慷嗜、二叉樹和動態(tài)規(guī)劃的題目掌握好宿百。
4、智力題:澈樘恚考的就是概率計算問題。
5雀费、業(yè)務(wù)理解:這一塊小編覺得是非常難的干奢,一般會給你一個場景,讓你設(shè)計一套算法流程盏袄,或者問你對于當(dāng)前你的項目忿峻,后續(xù)的工作方向等等。
6辕羽、其他:其他的面試官可能會考察一些工程上的問題如多進(jìn)程逛尚、多線程等、spark/hive等等刁愿。
下面是去年小編的面經(jīng)鏈接:
1绰寞、阿里(四面未通過):http://www.reibang.com/p/304e1023c4cb
2、百度核心搜索部(三面未通過):http://www.reibang.com/p/02d931d5c1c8
3铣口、知乎(三面未通過):http://www.reibang.com/p/40259bb05357
4滤钱、ThoughtWorks(初試+sp加試 通過):http://www.reibang.com/p/0b5514908683
5、美團留用面試(共一面脑题,通過):http://www.reibang.com/p/bbe21ff40724
6件缸、便利蜂(共三面,通過):http://www.reibang.com/p/51e2d16f16a5
7叔遂、貝殼(三面+sp假面他炊,通過):http://www.reibang.com/p/cd0a809cf198
8、一點資訊(共三面已艰,通過):http://www.reibang.com/p/fffc15c9d31d
9痊末、百度Feed(二面未通過):http://www.reibang.com/p/65032f77f903
10、貓眼(三面未通過):http://www.reibang.com/p/c32787be3dc8
11哩掺、搜狗(共三面舌胶,通過):http://www.reibang.com/p/8a116eb7fd32
12、小米(共兩面疮丛,通過):http://www.reibang.com/p/e34ebebae15f
13幔嫂、滴滴(共三面,通過):http://www.reibang.com/p/bc9d5f8206a0
14誊薄、拼多多(共兩面履恩,通過):http://www.reibang.com/p/a15bc7d0686a
15、愛奇藝(共三面呢蔫,通過):http://www.reibang.com/p/4ceb5de29c76
16切心、頭條(共三面飒筑,通過):http://www.reibang.com/p/5bc533d1bf62
可以看到,個人感覺自身還是有很多不足之處的绽昏,總結(jié)幾次面試失敗的原因协屡,主要有亮點,首先在于數(shù)據(jù)機構(gòu)題掌握的不佳全谤,比如百度的面試肤晓、知乎的面試;其次在于對于業(yè)務(wù)的理解不夠深入认然,還停留在領(lǐng)導(dǎo)派活补憾,埋頭苦干的地步,自己對于業(yè)務(wù)的思考不足卷员,比如阿里和貓眼的面試盈匾。
下面推薦一些資料幫你更好的進(jìn)行復(fù)習(xí)吧:
1、《統(tǒng)計機器學(xué)習(xí)》經(jīng)典中的經(jīng)典毕骡,建議至少讀兩遍削饵!
2、《百面機器學(xué)習(xí)》對一些面試常見問題進(jìn)行了總結(jié)和梳理
3未巫、深度學(xué)習(xí)500問:https://github.com/scutan90/DeepLearning-500-questions/
4葵孤、SVM:http://blog.pluskid.org/?page_id=683
5、李宏毅深度學(xué)習(xí)課:https://www.bilibili.com/video/av9770302?from=search&seid=9066694202064136038
6橱赠、李宏毅強化學(xué)習(xí)課:https://www.bilibili.com/video/av24724071?from=search&seid=11841282802558935758
7尤仍、李宏毅機器學(xué)習(xí)課:https://www.bilibili.com/video/av35932863?from=search&seid=7464664329294734466
8、線性代數(shù)的本質(zhì):https://www.bilibili.com/video/av44855426?from=search&seid=15873340646320697328
好了狭姨,說了這么多宰啦,最后希望你在今年的秋天或者未來的某個秋天,能夠順利拿到自己心儀的offer饼拍,同時希望你能夠不忘初心赡模,砥礪前行!加油师抄!