從疫情到求職寒冬,我的算法求職經(jīng)歷
《從杉數(shù)到滴滴》系列又來(lái)啦
概況
10月底開(kāi)始面試滴滴的社招崗位,11月17日停止工作,11月24日被通知offer被撕,12月3日通過(guò)快手面試,又過(guò)了兩周入職,差不多經(jīng)過(guò)了一個(gè)多月的時(shí)間,這中間一共收到了這么幾家公司(精確到部門(mén))的面試邀請(qǐng)。
字節(jié)跳動(dòng)tiktok推薦算法工程師
字節(jié)跳動(dòng)抖音推薦算法工程師
騰訊游戲AI算法工程師(應(yīng)用研究崗位)
快手商業(yè)化廣告算法工程師
百度上層排序組搜索推薦算法工程師
正仁量化投資公司研究員(quant)
以上均為實(shí)習(xí)。最終快手,百度和正仁量化通過(guò)了面試。加上之前的滴滴國(guó)際化算法工程師社招崗位,一共經(jīng)歷了7個(gè)部門(mén)的面試。這些公司有互聯(lián)網(wǎng)也有金融,面試的風(fēng)格雖然大部分受制于面試官,但公司的文化,部門(mén)的核心程度,部門(mén)所做的工作,都影響著面試的氛圍和難度。因此希望通過(guò)幾個(gè)部門(mén)的面試題對(duì)比,能夠讓大家更好地了解目前找實(shí)習(xí)的難度,并希望更多對(duì)此感興趣,但對(duì)前景迷茫的朋友,能夠更有方向,拿到自己喜歡的offer。
注意:所有的面試題均有一些小小的改動(dòng)(有的是改了問(wèn)法,有的是改了細(xì)節(jié),有的則是模糊處理等等),但大體上不影響對(duì)比和理解。同時(shí)不推薦大家去背面試題(除了leetcode),因?yàn)楹芏嗝嬖嚬贂?huì)有換題,考察面試者能力也有千奇百怪的考法。
01
字節(jié)跳動(dòng)tiktok/抖音推薦算法工程師
字節(jié)跳動(dòng)的推薦算法不用多說(shuō),絕對(duì)是核心中的核心。他們家面試有三輪,每一輪都會(huì)有代碼能力的考察。我們放一些題目具體來(lái)分析。
tiktok
敘述集成學(xué)習(xí)的好處
敘述gbdt與隨機(jī)森林的區(qū)別與聯(lián)系
敘述xgb可以調(diào)整的參數(shù)
敘述非均衡問(wèn)題的可能的處理方案
代碼題:給你一個(gè)數(shù)組,在這個(gè)數(shù)組中找出不重合的兩段,讓這兩段的子段和之差最大,返回最大差
敘述推薦系統(tǒng)的協(xié)同過(guò)濾算法的原理
敘述描述向量相似性的可能方案
是否了解Spark與Flink?
代碼題:給定一個(gè)正方形的中心點(diǎn),給定平面上的其他點(diǎn),給定一個(gè)整數(shù)K,找到一個(gè)合理的,邊長(zhǎng)最小的正方形,可以涵蓋最少K個(gè)點(diǎn)。
敘述word2vec的原理
敘述常見(jiàn)的降維方案
敘述過(guò)擬合的定義與神經(jīng)網(wǎng)絡(luò)降低過(guò)擬合的可能的解決方案
是否了解梯度下降法相關(guān)的優(yōu)化方法
代碼題:一個(gè)m長(zhǎng)有序數(shù)組,一個(gè)n長(zhǎng)有序數(shù)組,找它們的中位數(shù)。
問(wèn)如果一個(gè)推薦系統(tǒng)給一個(gè)視頻錯(cuò)誤了添加了流量,有什么可以糾正的方法?
抖音
聊簡(jiǎn)歷
代碼題:大數(shù)乘法,要求復(fù)雜度O(n log n)。
我們就不回答這些題了,大概的描述和公司的對(duì)比才是這一篇文章的主要內(nèi)容。想看對(duì)題目的解釋和分析,可以看一下我的知乎live。
對(duì)于這些題目,我們可以把它們分為三塊:機(jī)器學(xué)習(xí)基礎(chǔ)知識(shí),深度學(xué)習(xí)基礎(chǔ)知識(shí),代碼題。
機(jī)器學(xué)習(xí)基礎(chǔ)知識(shí)
1-4,11,13(題號(hào)就辛苦大家按順序數(shù)一下!)考查機(jī)器學(xué)習(xí)的基礎(chǔ)知識(shí)。對(duì)于算法工程師而言,機(jī)器學(xué)習(xí)基礎(chǔ)知識(shí)是重中之重。算法工程師在大廠中,是真的需要靈活運(yùn)用各種模型,寫(xiě)各種Python和C++/Java,并且進(jìn)行分析的。在一些深度學(xué)習(xí)組更是需要時(shí)常跟進(jìn)頂會(huì)paper。
深度學(xué)習(xí)基礎(chǔ)知識(shí)
6,7,10,12考察對(duì)深度學(xué)習(xí)的了解,這需要結(jié)合部門(mén)的業(yè)務(wù)來(lái)看。推薦,尤其是抖音/tiktok的推薦,都是極度依賴深度學(xué)習(xí)模型的,因此面試官希望面試者具備這方面的了解。
代碼題
5,9,14,包括抖音的2是Leetcode中的題目,leetcode是一個(gè)刷題社區(qū),也是互聯(lián)網(wǎng)大廠考察算法與數(shù)據(jù)結(jié)構(gòu),代碼能力的題庫(kù)。一般我們會(huì)使用社區(qū)中,leetcode標(biāo)記的難度(easy,medium,hard)來(lái)判斷面試的難度。刷過(guò)leetcode的可以看出來(lái),這四個(gè)題有2個(gè)是hard,有一個(gè)是ACM競(jìng)賽難度(大數(shù)乘法的最快算法是快速傅立葉變換),對(duì)于算法面試來(lái)說(shuō)已經(jīng)是地獄難度了。
場(chǎng)景題
15是場(chǎng)景題,也可以認(rèn)為是業(yè)務(wù)面。
字節(jié)跳動(dòng)(Bytedance)的面試難度,個(gè)人認(rèn)為在國(guó)內(nèi)可以排前三(有句話說(shuō)得好,叫通過(guò)Google面試不一定能通過(guò)字節(jié)面試)。面試tiktok部門(mén)的時(shí)候在三面被刷,面試抖音部門(mén)的時(shí)候更是一面直接被刷(所以面經(jīng)也只有兩個(gè)題嗚嗚嗚)。
02
騰訊游戲AI算法工程師(應(yīng)用研究崗位)
騰訊游戲也是騰訊一個(gè)相對(duì)核心的部門(mén),因此內(nèi)部的工程師也是具備很強(qiáng)的算法與工程能力的。
聊簡(jiǎn)歷
類似字節(jié),問(wèn)決策樹(shù)的構(gòu)造,GBDT,XGB等常見(jiàn)模型。
敘述一下強(qiáng)化學(xué)習(xí)的基本原理,并列舉一些Value-based的算法。
敘述一下繼承和多態(tài)的概念與區(qū)別。
敘述一下反射的含義。
代碼題:Leetcode 戳氣球。
這里很有特點(diǎn)的題目就是3-5。
3考察了強(qiáng)化學(xué)習(xí)的一些細(xì)節(jié)。這是因?yàn)?strong style="box-sizing: border-box;">游戲部門(mén)有很多算法是依賴強(qiáng)化學(xué)習(xí)的。
4-5考察對(duì)軟件開(kāi)發(fā)的基礎(chǔ)知識(shí)的了解,也是我面別的部門(mén)的時(shí)候沒(méi)有遇到過(guò)的情況。這是因?yàn)轵v訊游戲部門(mén)的工程師很多時(shí)候會(huì)算法開(kāi)發(fā)一起做。
另外,6也是一道hard。
我因?yàn)闆](méi)有太深入研究過(guò)強(qiáng)化學(xué)習(xí),開(kāi)發(fā)那一塊也做得少,因此這一塊回答的一塌糊涂??赡芤?yàn)檫@個(gè),盡管代碼題我背出來(lái)了,但一面結(jié)束之后也就沒(méi)下文了。
03
快手商業(yè)化廣告算法工程師
快手面試有兩輪,每一輪都有代碼能力的考察??焓稚虡I(yè)化是一個(gè)近兩年快手開(kāi)始重視的部門(mén)。雖然不是最核心的(最核心肯定還是快手短視頻推薦什么的),但是也是一個(gè)業(yè)務(wù)量很大,嚴(yán)重依賴深度學(xué)習(xí)的部門(mén)。
聊簡(jiǎn)歷
機(jī)器學(xué)習(xí)基礎(chǔ):gbdt,xgb,常見(jiàn)評(píng)判指標(biāo)等。
是否了解sigmoid函數(shù),求它的導(dǎo)數(shù)和簡(jiǎn)便表達(dá)。
cross-entropy是什么?用在什么場(chǎng)景?
了解CNN嗎?感覺(jué)它和一般的ANN相比設(shè)計(jì)思路差別在哪里?
矩陣分解的基本思路?
代碼題:拓?fù)渑判颉?/p>
代碼題:二叉搜索樹(shù)中找第K大。
代碼題:找一棵樹(shù)中,兩個(gè)節(jié)點(diǎn)的公共祖先。
代碼題:反轉(zhuǎn)鏈表。
總體的考察點(diǎn)和字節(jié)跳動(dòng)很像:機(jī)器學(xué)習(xí),深度學(xué)習(xí)(3-6),代碼能力。但是區(qū)別在于快手的關(guān)注點(diǎn)更加集中于業(yè)界常使用的一些知識(shí)點(diǎn)上。對(duì)于代碼題的考察也聚焦于常見(jiàn)的算法與數(shù)據(jù)結(jié)構(gòu)的簡(jiǎn)單應(yīng)用,難度適中但考察的面廣。我個(gè)人不太喜歡刷偏難怪的東西,因此很對(duì)我胃口,當(dāng)然最后也就通過(guò)了面試。
04
百度上層排序組搜索推薦算法工程師
百度面試也是三輪,但是第三輪是經(jīng)理面(總監(jiān)面),前兩輪有對(duì)代碼能力的考察。百度作為老牌BAT之一,近兩年倒是不止一次的被人吐槽過(guò)業(yè)務(wù)下滑,但是他們家的原始技術(shù)的積累和成熟度,說(shuō)是國(guó)內(nèi)頂尖肯定還是沒(méi)問(wèn)題的。
聊簡(jiǎn)歷
機(jī)器學(xué)習(xí)基礎(chǔ):lr,svm(硬間隔與軟間隔),gbdt,xgb,它們?nèi)绾巫霾⑿谢模?/p>
敘述優(yōu)化中共軛梯度法和牛頓法的原理。
word2vec原理?
介紹一下LSTM和GRU的設(shè)計(jì)思路與對(duì)比。
敘述Attention,Transformer和Bert的原理。
代碼題:Leetcode 編輯距離,交叉鏈表。
總體來(lái)說(shuō)百度的面試難度介于快手和字節(jié)之間。代碼題為1個(gè)hard和1個(gè)medium,但對(duì)基礎(chǔ)知識(shí)的考察比較嚴(yán)謹(jǐn)和細(xì)節(jié)。另外百度這一個(gè)部門(mén)的面試題,可能學(xué)nlp的人看到會(huì)狂喜,這是因?yàn)榘俣人阉鲬?yīng)對(duì)的絕大部分場(chǎng)景都是自然語(yǔ)言,自然需要很多自然語(yǔ)言處理方向的知識(shí),通過(guò)面試題5,6,以及代碼題的編輯距離,其實(shí)都能看出來(lái)這一點(diǎn)。
不過(guò)這里要感謝的是三輪面試的面試官都是比較nice的人,聊完我們加了微信,也問(wèn)了一些nlp相關(guān)的問(wèn)題,補(bǔ)充項(xiàng)目的方法等等。我沒(méi)有學(xué)過(guò)nlp的東西,因此回答基本上都比較一知半解,對(duì)深度學(xué)習(xí)訓(xùn)練遇到的常見(jiàn)問(wèn)題更是毫無(wú)思路。雖然二面的小哥和我說(shuō)“在項(xiàng)目經(jīng)驗(yàn)這一塊上,你不能加分”,但可能看在我其他問(wèn)題回答的還行,所以還是給我通過(guò)了面試。
05
滴滴國(guó)際化算法工程師(社招面試)
滴滴我一共經(jīng)過(guò)了四輪面試(2輪技術(shù)面,2輪業(yè)務(wù)面),如果加上HR面,那么就是六輪面試……u1s1,雖然他們家HR撕了我的offer,但是他們的leader和同事還是比較友好的。滴滴國(guó)際化部門(mén)是一個(gè)新的部門(mén),也會(huì)做拼車(chē),順風(fēng)車(chē)等滴滴核心業(yè)務(wù),但總體的數(shù)據(jù)量還比較初期,因此算是一個(gè)中規(guī)中矩的算法崗位。
聊簡(jiǎn)歷
機(jī)器學(xué)習(xí)基礎(chǔ):決策樹(shù),隨機(jī)森林,xgb,lgb,gbdt,svm(核函數(shù),正定性等),sgd。
代碼題:四則運(yùn)算表達(dá)式解析
代碼題:Dijsktra算法
敘述Adam的原理,用到了物理的什么概念?
敘述CNN中卷積和池化的原理。
敘述Python中tuple,list,set,dict的區(qū)別。
是否了解在線學(xué)習(xí)?舉出它的核心思路。
討論深度學(xué)習(xí)中“雙下降”曲線的出現(xiàn)原因。
敘述MapReduce的原理。
是否了解Kafka?
敘述Spark中RDD的設(shè)計(jì)原理?
場(chǎng)景題:青桔單車(chē)的地區(qū)分配和人力調(diào)動(dòng)問(wèn)題。
到了社招面試的階段,可以看出對(duì)基礎(chǔ)知識(shí)的要求相比較實(shí)習(xí)面試要高了一個(gè)層次,考察更加靈活,同時(shí)也有增添對(duì)深度學(xué)習(xí)(5,6),分布式(10,11,12)和Python(7)的考察(盡管部門(mén)用不到深度學(xué)習(xí))。同時(shí)加了專門(mén)的業(yè)務(wù)面,考察一個(gè)人對(duì)一個(gè)具體業(yè)務(wù)的設(shè)計(jì)思路。這很多時(shí)候是希望面試者已經(jīng)具備了在某一些業(yè)務(wù)上的深入了解,并且希望在入職之后,能夠很快上手,并且完成核心任務(wù)。換句話說(shuō),如果實(shí)習(xí)生是進(jìn)去學(xué)習(xí)的話,那么正式崗就是進(jìn)去扛大旗的。我?guī)缀鯖](méi)有工作經(jīng)驗(yàn),所以業(yè)務(wù)基礎(chǔ)幾乎為0,這也使得在最后談薪資的時(shí)候,沒(méi)有比較明顯的競(jìng)爭(zhēng)力。
06
正仁量化投資公司研究員(quant)
量化投資屬于金融行業(yè)。不同于傳統(tǒng)的金融業(yè)務(wù),基金等,量化投資(quant)是相對(duì)比較tech,比較需要理工科思維的一個(gè)崗位。對(duì)于這一家公司,大家可以在百度搜索,在此非常感謝他們提供面試機(jī)會(huì),并給我這個(gè)小白詳細(xì)介紹了他們做的事情和對(duì)應(yīng)的背景。
quant沒(méi)有相關(guān)的題庫(kù),面經(jīng),是因?yàn)橄啾容^互聯(lián)網(wǎng)來(lái)說(shuō),招聘更加自由,且沒(méi)有硬性對(duì)leetcode的考察。比方說(shuō)他們正在做一個(gè)降維,就會(huì)直接把這個(gè)主題丟給面試者,希望面試者和他們討論一個(gè)方案。當(dāng)然quant正式崗還是很卷的崗位,對(duì)應(yīng)的面經(jīng)也和互聯(lián)網(wǎng)技術(shù)面試差別很大,這里我們就不詳細(xì)介紹了。
07
對(duì)比與面試準(zhǔn)備技巧
回頭看這么幾家公司的面經(jīng),有各自的特點(diǎn),但也有很多共通的地方。
關(guān)于Leetcode
互聯(lián)網(wǎng)公司考察leetcode幾乎已經(jīng)成為了一個(gè)共識(shí),大部分情況下算法工程師考察的難度都是medium,但是對(duì)于相對(duì)核心的組,考察hard的可能性也存在。不過(guò)這個(gè)也取決于面試官的認(rèn)知,有的面試官就很不喜歡leetcode,但又很希望考察代碼能力,那么就有可能通過(guò)考察Python,開(kāi)發(fā)基礎(chǔ)知識(shí),或者簡(jiǎn)單的算法與數(shù)據(jù)結(jié)構(gòu)模版題來(lái)達(dá)到這個(gè)目的。就我個(gè)人的面試經(jīng)驗(yàn)來(lái)看,字節(jié)跳動(dòng)的面試官更有可能在leetcode上出偏難怪的題目,因此對(duì)于他們家來(lái)說(shuō),面試之前多刷leetcode就是一件很有必要的事情。
關(guān)于算法面試的知識(shí)儲(chǔ)備
對(duì)于算法工程師來(lái)說(shuō),基本上面試題可以拆分為機(jī)器學(xué)習(xí)基礎(chǔ),深度學(xué)習(xí)基礎(chǔ),業(yè)務(wù)能力,代碼基礎(chǔ)這幾塊。對(duì)于一些更加特殊的部門(mén)(比如說(shuō)騰訊游戲,菜鳥(niǎo)物流等),還有可能會(huì)考察到強(qiáng)化學(xué)習(xí),運(yùn)籌優(yōu)化等。其實(shí)脈脈,??途W(wǎng)中已經(jīng)有了很多的面經(jīng),但需要強(qiáng)調(diào)一句話:務(wù)必結(jié)合業(yè)務(wù)來(lái)判斷考察的知識(shí)點(diǎn)。像xgb,gbdt等考點(diǎn)絕對(duì)是高頻中的高頻,這是因?yàn)閷?duì)于比較傳統(tǒng)的問(wèn)題(用戶增長(zhǎng),風(fēng)控等),以gbdt為代表的樹(shù)模型占有絕對(duì)的王者地位。具體的面試考察點(diǎn)我在我的知乎live中也有給大家總結(jié)。
關(guān)于學(xué)習(xí)方法與學(xué)習(xí)資料
勤學(xué)習(xí)和拓寬視野是一個(gè)算法工程師必備的能力。事實(shí)上這里的面試題,有很多我都不能夠很好的答出來(lái),但是這里我依然推薦大家勇敢和自信的向面試官表達(dá)自己的觀點(diǎn)。實(shí)際的工作場(chǎng)景中,主動(dòng)溝通和隨和是讓工作這一件事情變得愉快的非常重要的品質(zhì),因此這一點(diǎn)其實(shí)能給面試官非常積極的暗示。不過(guò)這一件事情也是有好有壞的,推薦主動(dòng)表達(dá)不代表推薦胡說(shuō)八道,因此最好大家保持對(duì)這一個(gè)行業(yè)的興趣,多尋找相關(guān)行業(yè)的學(xué)習(xí)資料。諸如Datawhale,李宏毅課程,天池,Kaggle等都是很好的開(kāi)源資料。我的專欄就更不用說(shuō)了(滑稽)
關(guān)于“內(nèi)卷”帶來(lái)的競(jìng)爭(zhēng)壓力
最后一點(diǎn)是關(guān)于競(jìng)爭(zhēng)壓力的問(wèn)題。對(duì)于應(yīng)屆生面試(工作經(jīng)驗(yàn)1年及以下)或者實(shí)習(xí)生面試,面試官的考察中幾乎不會(huì)涉及到業(yè)務(wù)面。更進(jìn)一步地說(shuō),對(duì)于項(xiàng)目經(jīng)驗(yàn)相關(guān)的問(wèn)題,面試官都會(huì)相對(duì)比較寬容,除非他們部門(mén)完完全全不缺人。但也不要輕視“聊簡(jiǎn)歷”這三個(gè)字,因?yàn)楹?jiǎn)歷造假或者浮夸是招聘中極為常見(jiàn)的現(xiàn)象,所以是否對(duì)簡(jiǎn)歷項(xiàng)目有很好的掌握和理解,也是面試官需要重點(diǎn)考察的一個(gè)部分。但是如果是傳統(tǒng)的社招面試,則業(yè)務(wù)面是一個(gè)很關(guān)鍵的部分,畢竟如果沒(méi)有幾年的工作經(jīng)驗(yàn),其實(shí)公司招聘一個(gè)人就很難保證這個(gè)人有足夠的經(jīng)驗(yàn)去快速上手并承擔(dān)公司的業(yè)務(wù)。
08
小結(jié)
衷心希望世界和平
