秋招必備:斬獲騰訊offer的簡(jiǎn)歷分享!
關(guān)于簡(jiǎn)歷+面經(jīng)分享,希望大家對(duì)大家秋招有所幫助。
面試
這次春招實(shí)習(xí),一共面了7家公司,經(jīng)歷了20多輪面試,拿了6家offer,最終選擇了騰訊的CDG騰訊廣告部門,推薦算法崗位,base深圳。
不同于其他面經(jīng)分享面試官問(wèn)的具體題目,我主要是從大方向分享如何準(zhǔn)備面試,授人以魚(yú)不如授人以漁。分為簡(jiǎn)歷、自我介紹、考察知識(shí)點(diǎn)三部分。
1 簡(jiǎn)歷
簡(jiǎn)歷一定清晰簡(jiǎn)潔,不要花里胡哨,內(nèi)容控制在一頁(yè)。參考下面這個(gè)模板

除了自己的基本信息外,最重要的就是要項(xiàng)目(實(shí)習(xí)、比賽、論文都算作項(xiàng)目一種)。有兩點(diǎn)需要注意。第一點(diǎn)描述項(xiàng)目的時(shí)候不要只羅列關(guān)鍵字!HR和面試官希望能夠在項(xiàng)目描述中看到候選人在整個(gè)項(xiàng)目中的工作,遇到了什么困難,如何解決,如何對(duì)流程進(jìn)行推進(jìn)與思考。因?yàn)檎莆站唧w的技術(shù)是一方面,掌握對(duì)AI這種存在不確定性的項(xiàng)目的思考方式和把握更重要。候選人需要展示出對(duì)項(xiàng)目問(wèn)題的深入理解和insight。舉例感受一下:
一個(gè)不好的例子:
本人項(xiàng)目中使用了TensorFlow、協(xié)同過(guò)濾、FM、GBDT+LR、DeepFM、DIN等推薦算法
首先這些關(guān)鍵詞并不是同一個(gè)邏輯概念。其次,完全看不出你是如何使用以及為什么使用這些算法,讓人感覺(jué)像是在堆砌名詞,印象很不好。因?yàn)槲抑皡⒓恿撕芏郃I算法比賽,項(xiàng)目里寫的都是比賽經(jīng)歷,這里以比賽舉例。
一個(gè)好的例子:
我首先對(duì)數(shù)據(jù)EDA發(fā)現(xiàn)不少缺失值,使用xxx進(jìn)行填充。然后根據(jù)賽題背景構(gòu)造了xxx等特征。模型線下驗(yàn)證發(fā)現(xiàn)過(guò)擬合現(xiàn)象,通過(guò)使用xxx特征篩選和正則化解決。同時(shí)使用aaa、bbb、ccc進(jìn)行多模型加權(quán)融合。將融合后的數(shù)值作為最終結(jié)果值。參賽隊(duì)伍共xxx人,最終獲得冠軍。
這樣一段描述就很有層次地描述出了項(xiàng)目的推進(jìn)過(guò)程,遇到的問(wèn)題和改進(jìn)方案,最終取得的成績(jī)。
2 自我介紹
一般面試開(kāi)頭就是自我介紹。自我介紹不要照著簡(jiǎn)歷念,應(yīng)分為三大塊:
個(gè)人信息:學(xué)歷,校園經(jīng)歷 項(xiàng)目:項(xiàng)目含金量如何,取得了怎樣不錯(cuò)的成績(jī)。目的就是讓面試官覺(jué)得你很厲害。前提是符合事實(shí),不要瞎編,否則發(fā)現(xiàn)后會(huì)被拉進(jìn)黑名單。 技術(shù)棧:很多人會(huì)忽略這一重要點(diǎn)。算法范圍那么廣,每個(gè)人都有側(cè)重點(diǎn),說(shuō)出自己擅長(zhǎng)的技術(shù)棧,這樣面試官才好針對(duì)性提問(wèn)。
作為開(kāi)頭,一定不能緊張,不然會(huì)影響接下來(lái)面試的發(fā)揮。所以最好自己事先寫下來(lái)練習(xí)好,語(yǔ)速要平穩(wěn),保證在2分鐘左右即可。
3知識(shí)點(diǎn)
3.1 數(shù)據(jù)結(jié)構(gòu)與算法
數(shù)據(jù)結(jié)構(gòu)包含:數(shù)組、鏈表、棧、隊(duì)列、樹(shù)、散列表、圖。數(shù)據(jù)結(jié)構(gòu)本質(zhì)是描述數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系
算法包含:排序、查找、五大經(jīng)典算法(動(dòng)態(tài)規(guī)劃、回溯、分支界限、分治、貪心)。計(jì)算機(jī)解決問(wèn)題其實(shí)沒(méi)有任何奇技淫巧,它唯一的解決辦法就是窮舉。算法設(shè)計(jì)的本質(zhì)無(wú)非就是先思考「如何窮舉」,然后再追求「如何聰明地窮舉」。「聰明的窮舉」分為兩部分:「去掉重復(fù)的窮舉」、「去掉不必要的窮舉」。比如,備忘錄法,用數(shù)組保存求過(guò)的結(jié)果,用空間換時(shí)間,這就是去掉重復(fù)的窮舉;動(dòng)態(tài)規(guī)劃根據(jù)最優(yōu)子結(jié)構(gòu),使當(dāng)前問(wèn)題只與某幾個(gè)子問(wèn)題有關(guān),從而大大減少問(wèn)題分解次數(shù),這就是去掉不必要窮舉。
注意:很多文章喜歡把遞歸當(dāng)做一種算法,這樣是錯(cuò)的。遞歸是一種編程寫法,如同循環(huán)一樣。
準(zhǔn)備這一部分的最好方法就是刷題。算法發(fā)展時(shí)間短,不同于數(shù)學(xué)發(fā)展那么多年,形成了定理公式。數(shù)學(xué)做一道題,是從這道題涉及到哪些公式著手。而算法做一道題,是看這道題涉及到哪些知識(shí)點(diǎn),這些知識(shí)點(diǎn)與以往的哪些題目相聯(lián)系,相當(dāng)于是把不會(huì)的題目,分解成會(huì)的題目,用以前的解法框架,幫助解決不會(huì)的題目。比如說(shuō),讓你求解一個(gè)迷宮,你要把這個(gè)問(wèn)題層層抽象:迷宮 -> 圖的遍歷 -> N 叉樹(shù)的遍歷 -> 二叉樹(shù)的遍歷。然后讓框架指導(dǎo)你寫具體的解法。所以整個(gè)過(guò)程是在鍛煉你的抽象思維,訓(xùn)練你透過(guò)問(wèn)題找框架。
抽象思維是程序員必備技能,因?yàn)橛?jì)算機(jī)本質(zhì)上就是一門抽象的藝術(shù)。具備好的抽象思維對(duì)學(xué)習(xí)能力也是一種極大地提高。后面我會(huì)單獨(dú)寫一篇文章,講解什么是抽象思維,如何訓(xùn)練抽象能力。
另外刷題要有章法,比如:先刷10道動(dòng)態(tài)規(guī)劃,了解其套路后,再去刷回溯。而不是每天隨機(jī)刷題。
資料推薦:
LeetCode網(wǎng)站、劍指offer
3.2 機(jī)器學(xué)習(xí)
人工智能、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)關(guān)系如下:

我們一般說(shuō)機(jī)器學(xué)習(xí)都是指除了深度學(xué)習(xí)以外的機(jī)器學(xué)習(xí),也稱為傳統(tǒng)機(jī)器學(xué)習(xí)。雖然近幾年深度學(xué)習(xí)越來(lái)越火,但是很多領(lǐng)域還是在使用機(jī)器學(xué)習(xí),并且學(xué)好機(jī)器學(xué)習(xí),對(duì)于AI算法基礎(chǔ)和知識(shí)廣度都有很大提高。
機(jī)器學(xué)習(xí)模型非常多,全部掌握不現(xiàn)實(shí),我給大家羅列幾個(gè)經(jīng)典,也是面試中常考的模型:邏輯回歸、SVM、樹(shù)模型、集成學(xué)習(xí)、樸素貝葉斯、K-Means聚類、PCA。(EM、最大熵、概率圖這些考的少,能了解是加分項(xiàng))。
在學(xué)習(xí)過(guò)程中,各個(gè)模型是相互聯(lián)系的,不要孤立去分析單個(gè)模型。比如:邏輯回歸,我認(rèn)為是最基礎(chǔ)、也最重要的模型:

邏輯回歸=線性回歸+sigmoid激活函數(shù),從而將回歸問(wèn)題轉(zhuǎn)換為分類問(wèn)題 邏輯回歸+矩陣分解,構(gòu)成了推薦算法中常用的FM模型 邏輯回歸+softmax,從而將二分類問(wèn)題轉(zhuǎn)化為多分類問(wèn)題 邏輯回歸還可以看做單層神經(jīng)網(wǎng)絡(luò),相當(dāng)于最簡(jiǎn)單的深度學(xué)習(xí)模型
通過(guò)邏輯回歸由點(diǎn)及面,就能演化出如此多模型。再比如樹(shù)模型。我們把以決策樹(shù)為基礎(chǔ)的一系列模型統(tǒng)稱為樹(shù)模型,也是AI比賽中最常用的模型。
決策樹(shù)經(jīng)歷了三次改進(jìn),ID3、C4.5、CART,主要區(qū)別在于一個(gè)根據(jù)信息增益劃分特征、一個(gè)根據(jù)信息增益率、一個(gè)根據(jù)基尼指數(shù)。 隨機(jī)森林=決策樹(shù)+Bagging集成學(xué)習(xí) GBDT=決策樹(shù)+AdaBoost集成學(xué)習(xí) XGB是陳天奇2014年提出,相當(dāng)于GBDT的工程改進(jìn)版,在實(shí)用性和準(zhǔn)確度上有很大提升。比如:使用泰勒二階展開(kāi)近似損失函數(shù),支持處理缺失值、在特性粒度上并行計(jì)算等等特性。 LGB是微軟2016年提出,對(duì)XGB進(jìn)行了改進(jìn),使用單邊梯度采樣算法減少不必要的樣本;在尋找最優(yōu)分割點(diǎn)時(shí)采用直方圖算法使計(jì)算代價(jià)更小;支持類別特征... CGB是Yandex2017年提出,對(duì)類別特征進(jìn)行了更完美的支持。
所以學(xué)習(xí)模型,要由點(diǎn)及面,層層遞進(jìn)。這樣不僅方便理解,也有利于歸納總結(jié),同時(shí)還能鍛煉搭建知識(shí)體系的能力。
資料推薦:
李航《統(tǒng)計(jì)學(xué)習(xí)方法》,我認(rèn)認(rèn)真真看完了這本書(shū),并對(duì)重要模型公式進(jìn)行了一步步推導(dǎo),收獲很大。每次重讀這本書(shū)都能有新的收獲,值得反復(fù)閱讀。
周志華《機(jī)器學(xué)習(xí)》聽(tīng)說(shuō)也不錯(cuò)
工具:
numpy、pandas、scikit-learn這三件套需要熟練掌握,特別是scikit-learn,幾乎實(shí)現(xiàn)了所有機(jī)器學(xué)習(xí)算法。如果自己想實(shí)現(xiàn)某個(gè)算法來(lái)加強(qiáng)理解,也可以參考scikit-learn源碼。
3.3 深度學(xué)習(xí)
前面也提到了,深度學(xué)習(xí)本屬于機(jī)器學(xué)習(xí),但是鑒于其發(fā)展迅速、應(yīng)用越來(lái)越廣泛,所以單獨(dú)拿出來(lái)說(shuō)。深度學(xué)習(xí)每年新模型、新技術(shù)層出不窮,一味追求新技術(shù)不可取,要先打好基礎(chǔ)。比如:對(duì)于一個(gè)簡(jiǎn)單的全連接神經(jīng)網(wǎng)絡(luò),包含訓(xùn)練算法(正向傳播、反向傳播),激活函數(shù)(sigmoid、ReLU、Maxout、softmax等),正則化(L1和L2、Dropout、提前早停等),優(yōu)化算法(隨機(jī)梯度下降、Momentum、Adagrad、Adam等)
掌握了基礎(chǔ)后,再根據(jù)自身領(lǐng)域?qū)W習(xí)相關(guān)的模型。大部分人找工作屬于這三個(gè)領(lǐng)域:
計(jì)算機(jī)視覺(jué)(CV):卷積神經(jīng)網(wǎng)絡(luò)(CNN)及其改進(jìn)。 自然語(yǔ)言處理(NLP):循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)及其改進(jìn),Transformer、Bert等。 推薦算法:Embeding、Wide & Deep及其改進(jìn)。
這三個(gè)領(lǐng)域既有所不同,又相互聯(lián)系。比如:NLP中根據(jù)前面n個(gè)單詞預(yù)測(cè)下一個(gè)單詞,如果我把單詞看成商品,那么這就成了推薦算法中個(gè)性化推薦問(wèn)題。所以推薦算法中借鑒了很多NLP模型。因此我們?cè)趯W(xué)習(xí)的時(shí)候不要僅局限于當(dāng)前領(lǐng)域,也要關(guān)注其他領(lǐng)域。當(dāng)其他領(lǐng)域出現(xiàn)新模型,取得不錯(cuò)進(jìn)展時(shí),要思考能不能應(yīng)用在自身領(lǐng)域上。總而言之,這些知識(shí)是對(duì)立統(tǒng)一,我們要用辯證的思維去學(xué)習(xí),去思考。
資料推薦:
《DeepLearning》,又名「花書(shū)」被譽(yù)為深度學(xué)習(xí)領(lǐng)域圣經(jīng)。這本書(shū)寫的很好,但是內(nèi)容太多了,一口氣吃完不現(xiàn)實(shí)。適合當(dāng)做工具書(shū),時(shí)不時(shí)拿出來(lái)翻閱。
邱錫鵬《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》
工具:
TensorFlow、Pytorch。工業(yè)上偏向于TensorFlow,學(xué)術(shù)界偏向于Pytorch。別壓注單個(gè),建議兩個(gè)都學(xué),至少要能看懂別人的代碼。因?yàn)檎撐拇a復(fù)現(xiàn)有的用TensorFlow,有的用Pytorch。
3.4 推薦算法
推薦系統(tǒng)包含了推薦算法。推薦系統(tǒng)架構(gòu)如下:

數(shù)據(jù)層:前后端通過(guò)埋點(diǎn)記錄用戶日志數(shù)據(jù),KaFka消息隊(duì)列將數(shù)據(jù)存入HDFS大數(shù)據(jù)文件系統(tǒng)中。這一層技術(shù)棧是Hadoop、Spark大數(shù)據(jù)組件
策略層:平常所說(shuō)的推薦算法就是指這一層,需要重點(diǎn)掌握。首先是召回,主要根據(jù)用戶部分特征,從海量的物品庫(kù)里,快速找回一小部分用戶潛在感興趣的物品,然后交給排序環(huán)節(jié),排序環(huán)節(jié)可以融入較多特征,使用復(fù)雜模型,來(lái)精準(zhǔn)地做個(gè)性化推薦。召回強(qiáng)調(diào)快,排序強(qiáng)調(diào)準(zhǔn)。這一塊重點(diǎn)掌握模型:協(xié)同過(guò)濾、矩陣分解、FM、Embeding、Wide&Deep及其改進(jìn)。
應(yīng)用層:根據(jù)業(yè)務(wù)需求而不同。比如:廣告點(diǎn)擊、商品推薦、短視頻推薦。
后面我會(huì)寫一篇文章,分享我的推薦算法學(xué)習(xí)路線。
資料推薦:
王喆《深度學(xué)習(xí)推薦系統(tǒng)》,這本書(shū)高屋建瓴的介紹了推薦系統(tǒng)整體架構(gòu),發(fā)展歷史以及未來(lái)趨勢(shì),各種推薦模型的演化之路,很適合前期用來(lái)搭建推薦系統(tǒng)知識(shí)框架。但是具體的模型并沒(méi)有深入講解,還得自己去看論文。這個(gè)也很正常,作為算法人員,經(jīng)常看論文是必須的,就像開(kāi)發(fā)人員要時(shí)常看官方技術(shù)文檔。
3.5 其他
除了數(shù)據(jù)結(jié)構(gòu)與算法之外,操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、計(jì)算機(jī)組成原理、數(shù)據(jù)庫(kù)也是計(jì)算機(jī)中最基礎(chǔ)、最重要的課程。在開(kāi)發(fā)崗面試中必考,算法崗考得相對(duì)少,但是掌握這些基礎(chǔ)知識(shí),很能提升編程素養(yǎng),建議還是學(xué)一學(xué)。雖然我是計(jì)算機(jī)科班出身,但是之前這方面比較薄弱,去年寒假,我在家把這些課程又重新好好學(xué)了一遍,收獲很大!后面我會(huì)面向非科班的算法人員,對(duì)這些課程各寫一篇文章進(jìn)行形象化介紹,讓非科班算法人員既能有一個(gè)大概的了解,同時(shí)又能不拘泥于細(xì)節(jié)導(dǎo)致顛倒學(xué)習(xí)重心。
AI算法技術(shù)方面,我不會(huì)寫基礎(chǔ)教程文章,因?yàn)檫@些教程網(wǎng)上太多了,我寫出來(lái)也不一定有別人好。我主要寫工作中經(jīng)過(guò)實(shí)踐的算法技術(shù)和前沿知識(shí)。內(nèi)容上一定要有自己的想法,不可照搬。
目前我研究生生涯已過(guò)了一半,這期間我最大的收獲不是AI算法知識(shí),也不是那些比賽榮譽(yù),而是學(xué)習(xí)思維和人生感悟。這兩把武器就像生活中的錨點(diǎn),讓我面對(duì)人生洪流時(shí)不至于被沖垮。
