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

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

