2021年互聯(lián)網(wǎng)秋招算法崗面經(jīng)總結(jié)
秋招面經(jīng)?
作者:李金澤,清華大學(xué),Datawhale作者
From:Datawhale
前言
一晃接近三個(gè)月過(guò)去了,秋招也到了尾聲,之前一直忙于寫(xiě)畢業(yè)論文,現(xiàn)在在這里想總結(jié)一些自己求職互聯(lián)網(wǎng)大廠算法崗的面經(jīng)和心得,希望幫助后來(lái)的學(xué)弟學(xué)妹們收獲自己心儀的offer。
今年的算法崗求職較往年競(jìng)爭(zhēng)也更加激烈,可以預(yù)見(jiàn)以后進(jìn)大廠的算法崗會(huì)變得越來(lái)越難,比如美團(tuán)北斗去年的準(zhǔn)入門(mén)檻是一篇CCF A,而今年直接提升到了兩篇CCF A,難度提高了一倍,加之疫情的影響,我認(rèn)識(shí)的很多手握頂會(huì)的本科學(xué)弟們以及海外的同學(xué)們也加入到了找工作的大軍中,因此今年算法崗的競(jìng)爭(zhēng)堪稱史上巔峰,真的是八仙過(guò)海,各顯神通。不過(guò),找工作不僅需要實(shí)力,運(yùn)氣和方法也缺一不可,下面我就談?wù)勎易约旱男穆窔v程。
背景
本人Top2碩士在讀,非計(jì)算機(jī)科班,兩篇論文在投,投遞崗位的方向主要為推薦/廣告/機(jī)器學(xué)習(xí),在整個(gè)秋招的過(guò)程中,共參加了8場(chǎng)面試,阿里、百度、京東、美團(tuán)、拼多多、快手、小紅書(shū)、平安。
最后僥幸獲得了7家公司的offer,其中6家ssp,1家sp,薪資待遇40+W-70+W不等。
可能很多人會(huì)覺(jué)得我應(yīng)該有多家大廠的實(shí)習(xí),但其實(shí)我并沒(méi)有,由于父母的工作受到了疫情的影響,導(dǎo)致我今年從疫情開(kāi)始到7月初一直都在家里幫父母的忙,從而錯(cuò)過(guò)了暑期實(shí)習(xí),看到周?chē)耐瑢W(xué)都拿到了大廠實(shí)習(xí)的offer,當(dāng)時(shí)的我只感覺(jué)自己的秋招應(yīng)該和互聯(lián)網(wǎng)無(wú)緣了。
每個(gè)人的秋招只有一次,如果不奮力一搏,又怎會(huì)知道最終的結(jié)果。抱著這個(gè)念頭,我在7月初就趕緊放下了父母的工作,全身心的備戰(zhàn)秋招。在這里,我就要講一講我的方法了,大部分互聯(lián)網(wǎng)公司算法崗基本是三輪技術(shù)面+一輪HR面,技術(shù)面每輪的面試時(shí)間大致是一個(gè)小時(shí),主要考察coding能力、基礎(chǔ)知識(shí)和項(xiàng)目/競(jìng)賽。由于時(shí)間的不足,在這三個(gè)方向上我做了時(shí)間的分配,我的復(fù)習(xí)順序是基礎(chǔ)知識(shí)->項(xiàng)目/競(jìng)賽->coding能力。
1.基礎(chǔ)知識(shí)
除了極少數(shù)公司會(huì)在一上來(lái)就要求你做一道編程題以外,大部分互聯(lián)網(wǎng)公司都會(huì)在你的自我介紹和論文之后開(kāi)始進(jìn)行基礎(chǔ)知識(shí)的考察,因此它的重要性不言而喻。基礎(chǔ)知識(shí)的復(fù)習(xí)有兩種途徑,一是看書(shū),二是看視頻,這取決于你對(duì)哪一種途徑接受知識(shí)的速度更快。我選擇的是看書(shū),一是因?yàn)橐曨l不一定講得面面俱到,二是視頻質(zhì)量如果不過(guò)關(guān),很有可能某些細(xì)節(jié)的講述是錯(cuò)誤的。以推薦/廣告崗位為例,我主要看如下書(shū)籍。
周志華的西瓜書(shū)《機(jī)器學(xué)習(xí)》 李航老師的《統(tǒng)計(jì)機(jī)器學(xué)習(xí)》第二版 DL圣經(jīng)《深度學(xué)習(xí)》,又名花書(shū)。 《百面機(jī)器學(xué)習(xí)》 《概率論與數(shù)理統(tǒng)計(jì)》、《線性代數(shù)》、《凸優(yōu)化》 推薦/廣告:《深度學(xué)習(xí)推薦系統(tǒng)》、《計(jì)算廣告》等
如果時(shí)間有限,可以直接去看第二本藍(lán)皮書(shū)和第三本花書(shū),這兩本書(shū)一定要從頭到尾仔仔細(xì)細(xì)的過(guò)一遍,因?yàn)榛A(chǔ)知識(shí)的考察無(wú)外乎就是機(jī)器學(xué)習(xí)或深度學(xué)習(xí)里的知識(shí)。當(dāng)這兩本書(shū)過(guò)完一遍之后,再看西瓜書(shū)的效率就會(huì)快很多了。
除此之外,第四本書(shū)可以留在你將要面試的那幾天著重去學(xué)習(xí),因?yàn)槟阌辛饲皫妆緯?shū)的知識(shí)做鋪墊,第四本書(shū)就可以當(dāng)成八股文去背了。前提是一定要在你理解這些知識(shí)之后,因?yàn)閱渭兊乃烙浻脖趁嬖嚬倨鋵?shí)很容易就會(huì)發(fā)現(xiàn)破綻,畢竟現(xiàn)在每個(gè)人都會(huì)背。
對(duì)于本科學(xué)習(xí)過(guò)的線代和概率論,建議大家也復(fù)習(xí)一遍,因?yàn)樵谖业拿嬖囘^(guò)程中就有面試官”殘忍“的提問(wèn)了,雖然概率不高。對(duì)于學(xué)有余力的同學(xué),可以去看一些推薦/廣告方向的工業(yè)界人士出版的書(shū)籍,這一塊的知識(shí)考察往往會(huì)穿插在整個(gè)面試中,有的面試官會(huì)在最后當(dāng)成開(kāi)放題進(jìn)行考察。
其次,基礎(chǔ)知識(shí)的復(fù)習(xí)也很容易會(huì)遺忘,面對(duì)這個(gè)問(wèn)題,我一般會(huì)將高頻考點(diǎn)的知識(shí)寫(xiě)在ipad中,然后每晚會(huì)去復(fù)習(xí)一遍,這樣一個(gè)月下來(lái),基礎(chǔ)知識(shí)應(yīng)該就可以爛熟于心了,這一段的復(fù)習(xí)就可以告一段落了。
2.項(xiàng)目/競(jìng)賽
項(xiàng)目/競(jìng)賽一般會(huì)在基礎(chǔ)知識(shí)之后進(jìn)行考察,這些一定要提前準(zhǔn)備好,寫(xiě)在簡(jiǎn)歷里的項(xiàng)目一定是要自己親自做過(guò)的,因?yàn)橐坏┟嬖嚬賳?wèn)到了項(xiàng)目中某一個(gè)部分的代碼是如何實(shí)現(xiàn)而你又回答不上來(lái)的話,在他心里對(duì)你的印象就會(huì)非常減分,并且會(huì)懷疑候選人的誠(chéng)信問(wèn)題。所以,我的方法是將之前做過(guò)的項(xiàng)目重新再做一遍,包括代碼部分。
這一塊看似會(huì)花費(fèi)大量時(shí)間,實(shí)則并沒(méi)有那么長(zhǎng)。具體來(lái)說(shuō),我會(huì)先將做過(guò)的項(xiàng)目重新梳理一遍,畫(huà)出整個(gè)項(xiàng)目的流程圖,然后再逐行復(fù)習(xí)自己的代碼。等代碼復(fù)習(xí)完之后,再刪掉重新寫(xiě)一遍,這一步驟因人而異,取決于你的記憶能力。
競(jìng)賽方面,常用的競(jìng)賽模型如GBDT、XGBoost、LightGBM、FFM、DeepFFM等一定要了解。最后,如果你的論文或項(xiàng)目與面試官所做的方向非常的match,你通過(guò)這一面的概率也將會(huì)大很多。
3.coding能力
代碼能力是計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的基礎(chǔ)能力,求職技術(shù)方向的同學(xué),無(wú)論是測(cè)試、開(kāi)發(fā)或算法,互聯(lián)網(wǎng)公司在這一塊的考察都是重中之重。
一般而言,大廠在每一輪的技術(shù)面中,至少會(huì)出一道編程題,多的會(huì)直接上三道編程題讓你做(我就遇到了...),難度主要集中在easy和medium,少數(shù)喪心病狂(褒義詞)的面試官會(huì)出hard題。而考察范圍已是圈內(nèi)公開(kāi)的秘密,就在《劍指offer》和Leetcode上,因此刷題成為了大家求職路上必須要邁過(guò)的一道坎,這個(gè)坎沒(méi)有人可以幫到你,只有靠你自己。我在碩士階段也沒(méi)有刻意的去刷過(guò)題,只有本科時(shí)刷過(guò)洛谷,下面是我Leetcode賬號(hào)上提交次數(shù)的統(tǒng)計(jì):

我是從8月初開(kāi)始集中在Leetcode上刷題,一直刷到了10月份,《劍指offer》也是在Leetcode上刷的,平均每個(gè)月刷題數(shù)是300。可能很多人都覺(jué)得300道根本不可能完成,確實(shí),如果你按照Leecode官方的題號(hào)順序去刷根本不可能,但如果是按照題目類(lèi)型(標(biāo)簽)去刷,每天刷10道,一個(gè)月也就完成了300道。
一開(kāi)始可能會(huì)很慢,但基本上每個(gè)類(lèi)型的題目當(dāng)你刷夠20道以后,都可以總結(jié)出該類(lèi)題目的代碼模板,所以前期會(huì)慢一點(diǎn),越往后則會(huì)發(fā)現(xiàn)刷題速度越來(lái)越快,可以理解為先苦后甜。而對(duì)于刷題的方法,可以分為三輪進(jìn)行:
a.第一輪:優(yōu)先效率。當(dāng)一道題花了十五分鐘去思考也沒(méi)有思路時(shí),則果斷選擇直接看答案。
b.第二輪:培養(yǎng)思路。你需要對(duì)以前做過(guò)的每一道題都要有一個(gè)大致的映像,并且知道解題的方法是什么。這一輪其實(shí)最難度過(guò),因?yàn)槿藢?duì)事物的遺忘是有規(guī)律的,而我們需要想辦法客服這個(gè)規(guī)律。在這里推薦一下我的方法。我在刷完每一道題之后,會(huì)在ipad上注明題號(hào)以及題目名稱,然后將該題的解題思路寫(xiě)下來(lái),最后還會(huì)重寫(xiě)一遍代碼。這樣,以天和周為單位不斷地復(fù)習(xí)之前的題目,就可以做到以后遇見(jiàn)它們時(shí)可以迅速反映出是用什么方法解決這道題的。
c.第三輪:完善思路。當(dāng)我們順利度過(guò)了第二輪之后,第三輪則需要學(xué)習(xí)每道題目的多種解法,比如TopK問(wèn)題可以用快排變形/堆/二叉查找樹(shù)/計(jì)數(shù)排序四種方法解決。在我的面試過(guò)程中,有些面試官會(huì)在你AC一道題后還會(huì)要求寫(xiě)出最優(yōu)解,這往往決定你的面評(píng)是否能達(dá)到較高級(jí)別,也就是能否拿到sp以上級(jí)別的offer,并且一道題如果學(xué)會(huì)了多種解法,也會(huì)讓你加深對(duì)這道題的理解。因此,我建議大家要學(xué)會(huì)用多種解法解決一道題,并且要培養(yǎng)出能快速AC的能力。
PS:在這里,我要推薦一下自己免費(fèi)加入的Leetcode每日打卡和競(jìng)賽群,圈內(nèi)俗稱殘酷群。國(guó)服前一百位的選手在該群都有好幾十人。規(guī)則很簡(jiǎn)單,每日完成題主發(fā)布的Leetcode題號(hào)以及每周在美服上打Leetcode周賽,但周賽排名靠后的小伙伴會(huì)要求發(fā)紅包,這個(gè)機(jī)制也是為了督促大家快速成長(zhǎng)。所以秋招不是刷題之路的終點(diǎn),而僅僅只是開(kāi)始。
面試投遞
在完成了基礎(chǔ)知識(shí)->項(xiàng)目/競(jìng)賽->coding能力的復(fù)習(xí)后,時(shí)間節(jié)點(diǎn)也移動(dòng)到了八月中下旬,這時(shí)很多公司的秋招正式批即將開(kāi)始。由于我錯(cuò)過(guò)了提前批的投遞,而提前批往往都沒(méi)有筆試,所以正式批只能先參加筆試再進(jìn)行面試。經(jīng)過(guò)血與淚的磨練后,在這里給大家的建議是,有提前批投提前批,無(wú)提前批投特殊計(jì)劃,重要的事情說(shuō)三百遍。
原因有兩點(diǎn):
提前批的競(jìng)爭(zhēng)壓力小,投的人少,先拿到offer的概率很大; 正式批的筆試題一般有一定難度,且刷人主要看AC題目的數(shù)量,比較殘酷。而且據(jù)我身邊同學(xué)的例子,有很多人筆試完之后公司就杳無(wú)音信了,要問(wèn)就是在篩選,實(shí)際上你已經(jīng)妥妥變成了備胎(有戀愛(ài)經(jīng)驗(yàn)的人都懂),然后在公司的池子里歡快的游動(dòng)。除此之外,若感覺(jué)自己還沒(méi)有準(zhǔn)備好,則可以等待幾天再投遞,但千萬(wàn)不要錯(cuò)過(guò)提前批的截止時(shí)間。
所以提前批的面試能把握的還是盡量要把握,哪怕你覺(jué)得自己只準(zhǔn)備了60%,但萬(wàn)一成功了呢?
因?yàn)槊嬖囃ㄟ^(guò)這個(gè)事情,實(shí)力與運(yùn)氣都需要, 在你的實(shí)力和別人差距不大的情況下,實(shí)力不夠,也可以運(yùn)氣來(lái)湊不是嗎。
部分面經(jīng)
以下面經(jīng)均為各個(gè)公司的正式批,由于時(shí)間有點(diǎn)久遠(yuǎn),有些考點(diǎn)已經(jīng)不記得了。
京東
一面:
介紹論文、項(xiàng)目,很詳細(xì)。包括每一個(gè)環(huán)節(jié)是怎么實(shí)現(xiàn)的,損失函數(shù)是如何設(shè)計(jì)的,模型是如何訓(xùn)練的等等。 代碼題:Leetcode 713:乘積小于k的子數(shù)組;Leetcode 297:二叉樹(shù)的序列化和反序列化。 GBDT、XGBoost、LigthGBM的區(qū)別與聯(lián)系。 送入LR前,如何處理數(shù)據(jù)(特征工程)。
二面:
介紹論文、項(xiàng)目,很詳細(xì)。 Transformer中的Scaled Dot-Product Attention為什么要縮放(兩點(diǎn))。 Transformer中的Position Embedding是怎么實(shí)現(xiàn)的?為什么? bagging和boosting與偏差和方差的關(guān)系以及原因。 如何解決數(shù)據(jù)不平衡的問(wèn)題。 假設(shè)檢驗(yàn)的兩類(lèi)錯(cuò)誤。 MSE、MAE與貝葉斯估計(jì)的區(qū)別。 為什么快排比堆排快? 口述算法題:對(duì)一個(gè)商品的價(jià)格、數(shù)量、購(gòu)買(mǎi)人數(shù)進(jìn)行分次排序,不改變之前的排序結(jié)果。
三面:
由于一、二面表現(xiàn)好,三面直接過(guò)了。
美團(tuán)
一面:
介紹論文和項(xiàng)目,很詳細(xì)。 代碼題:面試題17.24:最大子矩陣;Leetcode 695:島嶼的最大面積。 介紹一下DSSM。 開(kāi)放題:關(guān)于雙塔模型的應(yīng)用。
二面:
介紹論文和項(xiàng)目,以及論文中的涉及到的baseline模型。 代碼題:面試題01.08:零矩陣,寫(xiě)出兩種解法。 XGBoost 如果損失函數(shù)沒(méi)有二階導(dǎo),該怎么辦。 聊天+反問(wèn)。
三面:
介紹論文和項(xiàng)目,非常詳細(xì)。 介紹實(shí)習(xí),說(shuō)說(shuō)實(shí)習(xí)印象中最深的點(diǎn)。 開(kāi)放題:部門(mén)中的某個(gè)應(yīng)用場(chǎng)景你會(huì)怎么解決。 職業(yè)規(guī)劃,個(gè)人希望做的方向。
拼多多
一面:
介紹論文和項(xiàng)目。 AUC是如何實(shí)現(xiàn)的,它對(duì)均勻正負(fù)樣本采樣是否敏感,并用代碼實(shí)現(xiàn)。 BERT與ALBERT的區(qū)別。 介紹一下DKN模型。
二面:
介紹論文和項(xiàng)目。 過(guò)擬合如何解決+具體方法追問(wèn)。 代碼題:Leetcode 42:接雨水。 知識(shí)圖譜表示學(xué)習(xí)有哪些模型。 聊天+反問(wèn)。
阿里
一面:
介紹論文和項(xiàng)目。 代碼題:Leetcode 382:鏈表隨機(jī)節(jié)點(diǎn),并口述蓄水池采樣算法的推導(dǎo)。 概率題:將一根木棍分成三段,求這三段構(gòu)成三角形的概率。 開(kāi)放題:一個(gè)超級(jí)大文件,每一行有一個(gè) ip 地址,內(nèi)存有限,如何找出其中重復(fù)次數(shù)最多的 ip 地址。
二面:
介紹論文和項(xiàng)目。 論文后續(xù)可能提升的點(diǎn)以及想法探討。 說(shuō)一說(shuō)Graph Embedding和GNN的區(qū)別。 代碼題:Leetcode 23:合并K個(gè)升序鏈表。 聊天+反問(wèn)。
三面:
介紹論文和項(xiàng)目。 介紹一下最能體現(xiàn)自己工程能力的項(xiàng)目。 如何提高推薦線上的性能。 強(qiáng)化學(xué)習(xí)在推薦中的應(yīng)用及探討。
總結(jié)
最后,我想談一談自己對(duì)于面試的看法。無(wú)論是競(jìng)賽、論文還是大廠實(shí)習(xí),這些都是為了方便你拿到面試的資格,哪怕你三者都沒(méi)有,但只要公司愿意向你發(fā)起面試,你都應(yīng)該好好努力。
而最終是否能順利拿到offer以及offer的等級(jí),主要還是取決于你的面評(píng),一個(gè)非常好的面評(píng)是幫助你拿下大廠sp以上offer至關(guān)重要的因素,因此切忌面試緊張,如果你緊張,可以心中默念歐米豆腐。
祝愿大家都能拿到自己心儀的offer!
往期精彩:
【原創(chuàng)首發(fā)】機(jī)器學(xué)習(xí)公式推導(dǎo)與代碼實(shí)現(xiàn)30講.pdf
【原創(chuàng)首發(fā)】深度學(xué)習(xí)語(yǔ)義分割理論與實(shí)戰(zhàn)指南.pdf
?技術(shù)人要學(xué)會(huì)自我營(yíng)銷(xiāo)
