电竞比分网-中国电竞赛事及体育赛事平台

分享

萬字長文 | 2023屆推薦算法崗面經(jīng)總結!

 520jefferson 2022-06-15 發(fā)布于北京


大家好,這里是NewBeeNLP。轉眼間2023屆春招實習已接近尾聲,由于疫情影響,今年找個大廠實習確實很難,今天就給大家分享一位23屆同學找算法崗實習的總結,最終拿下抖音APP、快手主站和美團優(yōu)選的推薦算法崗offer,希望能幫助到下半年找工作的小伙伴們,以下為原文。

985渣碩,保研本校之后因為沒有大規(guī)模開發(fā)的經(jīng)驗,再加上不太想背八股,所以轉算法。研究方向是醫(yī)學圖像,SCI2區(qū)一篇水刊醫(yī)學+計算機結合論文。

組內有做推薦算法的于是花了一個月時間轉推薦,慢慢對推薦感興趣。21年底有個非常好的朋友(阿里P8級別的)把我撈去了小紅書實習,base北京,接觸到了企業(yè)級別的推薦算法。推薦算法實習的意義可能就是接觸線上+業(yè)務,畢竟在學校里面是不能碰到這種場景的,推薦算法需要大數(shù)據(jù)+場景支撐。

萬事開頭難,原本遲遲沒有下決心的,4月初的時候一天晚上下班,字節(jié)hr打電話給我(本科大三的時候曾經(jīng)投遞了字節(jié)的簡歷,后來因為身體原因沒有面試),問我有沒有意向,剛好hr是抖音app推薦算法團隊的,所以下決心開始準備春招實習。可以說投得非常晚,準備得也很晚。于是回到了學校開始準備。因為是第一次開始海投,沒經(jīng)驗所以沒錄音,回憶一下大概,可能漏掉了很多問題跟細節(jié)。

一. 抖音APP推薦

一面4.8下午18:00

當時其實自己還在小紅薯實習,所以請了一天假。

  1. 自我介紹
    答:語速放慢,背;

  2. 挑一個小紅薯的項目仔細介紹
    答:主要在小紅薯做了一些向量召回+點召回工作,語速放慢,慢慢講;

  3. 模型的時效性怎么樣?
    答:我是t - 1更新,還會離線把ANN結果寫入redis,因為線上qps目前暫時不支持;

  4. 聊聊AUC吧。
    答:隨機取兩個樣本,正樣本排在負樣本之前的概率;

  5. 追問:AUC怎么快速計算
    答:把樣本按照預測值排序,編號從大到小,看正樣本的編號,巴拉巴拉~。PS:這里主動輸出了一下知識,簡單證明了一下 曲線下面積 = AUC的物理定義;

  6. 線上線下AUC不一致怎么辦?(這里有點懵,而且因為沒有做過排序,只能按照自己的閱歷盡可能全面去回答。)
    答:有可能召回側拿到的樣本是之前舊版本排序模型的結果,會導致模型間的gap,采樣的時候要變換方式;檢測離線訓練模型有沒有過擬合;檢查線上線下特征是否一致(可能存在穿越現(xiàn)象);導致線上線下auc不一致最可能出現(xiàn)的情況就是樣本穿越,因為離線訓練計算auc是所有樣本一起計算的,而線上不可能出現(xiàn)一個用戶去點擊排序給另一個用戶的item的情況,所以過濾掉那些點擊為0,或者點擊率過高的用戶)

  7. 你們排序是怎么做的,時效性如何?(可能是看到我對第6個問題的回答,直接轉向了排序)
    答:目前基建還不完善,沒有prerank,postrank,rerank階段,排序側只有一個排序模型wide&deep,排序模型是實時的,每30分鐘線上發(fā)射session label,然后把樣本+特征dump到云上,模型自動訓練。

  8. 召回的時候具體怎么做的?
    答:每天離線訓練完之后,模型會產出當天的向量,寫到oss上,下游消費向量建立NN索引(HNSW),然后我再刷一遍全量的商品,把nn結果寫入redis,線上從用戶畫像取用戶lastn,做trigger selection和時間衰減,最后送到排序模型。

  9. 如果現(xiàn)在我上一路DSSM召回,發(fā)現(xiàn)AB實驗效果不好怎么辦?
    答:首先看樣本+特征。召回的樣本是不是跟當前線上排序模型關聯(lián),特征穿越之類的;其次看當前召回渠道的結果是不是跟線上已有的重復;追問了一下還有呢?當時有點緊張,只能說那就加大流量,5%不行就到10%,再不行就到20%。到這里面試官笑了,感覺這才是他想要的回答,hh。

  10. 兩道Easy算法題。
    10.1. 一個m * n棋盤,只能往右或者往下走,問從左上到右下路徑和的最小值。簡單dp(當時直接用二維dp寫的,寫到一半自己就說了其實可以用滾動數(shù)組,然后又讓用滾動數(shù)組寫了一遍)
    10.2. 斐波那契數(shù)列第n個數(shù)。當時看到這個想到肯定是有別的想考的,所以就把記憶化,跟直接用數(shù)組保存比較了一遍。最后又問我時間復雜度能不能再低?我說通項公式,有追問還有其他方法嘛?當時緊張給忘了,面試剛結束就想起來了 ,其實就是矩陣的n次方,然后就轉化成快速冪了,O(logn)。

二面4.12晚上20:00

一面面完不到半個小時直接約了二面。

  1. 自我介紹
    答:語速放慢,背;

  2. 挑一個你做的比較熟悉的召回渠道,詳細講一下(跟一面差不多)
    答:dssm召回巴拉巴拉。其中著重提到了樣本的問題,想讓面試官問我。

  3. 你剛剛提到了樣本,說說你的樣本具體是怎么做的
    答:召回本身最看重的也是樣本,又巴拉巴拉一堆,又著重講到了負采樣(因為負采樣的邏輯都是我自己做的,所以比較熟)。

  4. 說說你負采樣具體是怎么做的
    答:第一版i2i在batch內隨機負采樣,并加了bias進行修正;第二版u2i借鑒w2v,以uv曝光為權重,全局負采樣,但是由于全局負彩成本太大,做了二次哈希,根據(jù)樣本uv進行了分桶;

  5. 你簡歷上說對FM,DeepFM跟FFM有一定了解,講講。
    答:回答了一下各自的特點和改進點。

  6. 你簡單寫一下FM訓練整個過程的偽代碼吧(懵了,降低時間復雜度的證明會,但是直接手撕GG)
    答:因為以前手撕過SGD跟LR,所以稀稀拉拉寫了點出來,然后寫了下FM化簡的推導,但是FM對w0, w1, Vij的導數(shù)求錯了 。線下痛定思痛,直接numpy手撕了一版簡易的FM。

  7. 算法題。
    數(shù)組第K大的數(shù), 沒看到要求用快排,我用堆排寫了一遍,問了時空復雜度+證明。最后又問到了快排怎么做,臨結束又問了快排怎么做到近線形是件復雜度的,這里全忘了。其實就是在partition的時候引入隨機性,證明的話網(wǎng)上一堆。

反問環(huán)節(jié)略。二面過去一天,第二天晚上問hr,hr說面試官很忙還沒寫面評價(其實就是在橫向),當時就知道自己涼了,果然hr說掛了,問需不需要投其他nlp或者圖像方向,婉拒了。第一次面試直接gg,狠狠的emo了好幾個小時 。

二. 美團優(yōu)選

筆試4.9下午16:00

四道算法題+幾道選擇題(參加過這場的應該都知道,全都是easy題,很快全部ac,甚至感覺自己出現(xiàn)了幻覺hh,反而是后面的選擇概念題比較難)

一面4.13晚上20:00

  1. 自我介紹;

  2. 項目介紹;

  3. 你說模型里面batch內負采樣用到了bias修正,具體怎么做的?

  4. 上線前的準備,怎么看召回指標
    答:首先看auc,雖然召回模型的auc基本沒有參考價值,但是如果auc太低說明根本不行;其次本來應該看topn的hr,但是由于業(yè)務比較緊急,所以當時就直接拉取了頭部的item做了nn,肉眼評測結果;

  5. 負采樣怎么做的?

  6. 跨域i2i怎么做的
    答:以swing為例,在UDTF階段生成item -> item_list的領域對,不同的是,左側的item來源于社區(qū),右側的item_list來源于商品。

  7. swing跟adamic具體細節(jié)
    答:balabala一堆,然后說到了高活用戶和熱門item的打壓

  8. 算法題
    也是easy題,判斷是否是一棵合法的二叉搜索樹(我當時用的棧去做非遞歸,pre指針保存中序遍歷前一個節(jié)點,然后跟當前節(jié)點判斷值大小,面試官說我這個做法有問題,應該用一個int保存遍歷過的節(jié)點的最大值,我其實覺得我做法沒問題,而且還能AC,但是不敢反駁hh,甚至還附和了面試官,哎0offer的孩子就是這么卑微)

二面4.19晚上19:00

不得不說,美團的流程相比字節(jié)速度真的慢很多很多。二面問的基本全都是業(yè)務問題,這里就不展開了(貌似現(xiàn)在基本不問八股了,什么SVM,對偶問題,過擬合,BN,dropout,生成模型判別模型,lr為什么用sigmoid,最大似然,L1和L2(拉普拉斯分布和高斯分布))

美團二面感覺還是挺好的,全程都在聊業(yè)務,本來字節(jié)掛了還對美團挺抱有希望的,但是直到今天還沒消息,公眾號回復跟大家的一樣,面試官正在考慮(其實就是橫向比較)。

算法題:求最短的子數(shù)組長度,子數(shù)組滿足總和 >= target。簡單雙指針。

三. 抖音電商推薦

當時抖音APP推薦涼了之后emo了好幾個小時,后來在高鐵上的時候緩過來想找抖音電商,結果沒想到抖音電商hr主動聯(lián)系上我了,可能就是猿糞吧,又燃起了生活的希望,hh,被撈之后重新充滿斗志。

一面4.18下午18:00

  1. 自我介紹;

  2. 項目介紹;

  3. 挑一個最熟悉的項目;

  4. 模型batch內負采樣怎么做的?

  5. 加bias有什么用?
    答:負采樣的本質是想打壓高曝光item,但是由于高曝光的item本身就頻繁出現(xiàn)在樣本中,隨機采可能會打壓過頭,因此加一個bias tower進行修正(其實就是學一個值取平衡正負樣本)。

  6. 帶權負采樣的邏輯?
    答:如果按照uv曝光進行帶權負采樣,就是先按照uv曝光排序,之后累加,最后生成一個隨機數(shù),看著隨機數(shù)落到哪兩個item的uv累加和(前綴和)區(qū)間,就采樣哪個item。

  7. 我看你做了swing,分析一下swing的時間復雜度?
    答:swing是基于用戶行為共現(xiàn)的,首先取一個時間周期,獲取這個時間周期內的用戶點擊行為歷史(最長50個),得到user->item_list;在UDTF階段,需要根據(jù)用戶的行為歷史得到item->item_neighbors領域集合,假設用戶數(shù)量為U,人均點擊的item個數(shù)位I,UDTF階段時間復雜度就是O(U*I*I);在UDAF階段要根據(jù)領域去計算每個item的最近個topk個item,假設共現(xiàn)當中出現(xiàn)的item總數(shù)是N,時間復雜就是O(N* I * I),最后還需要根據(jù)大根堆排序,假設取topK個,則時間復雜度位O(N * I * I * logK);可能看我算得很仔細面試官就沒有繼續(xù)細問了。

  8. Swing跟Adamic有什么區(qū)別?(略)

  9. 概率題。8個箱子編號1-8,扔進箱子的概率是 4 / 5,扔進每個箱子的概率相同;仍不進箱子的概率是 1 / 5。扔一次之后,現(xiàn)在打開1號箱子發(fā)現(xiàn)沒有球,問球在8號箱子的概率。(條件概率)

  10. 算法題。鏈表排序,要求快排
    答:其實鏈表的快排有2種寫法, 最簡單的是交換值,節(jié)點不變;最難的是直接交換節(jié)點,這里面有無數(shù)的邊界case需要處理,當時衡量了一下,直接把遞歸+歸并, 迭代+歸并排序都寫出來了。還給面試官分析了一下,說前面一種時空都是nlogn,后面一種空間復雜度為0,然后說說抱歉沒看到是快排hh。面試官說沒事,還是讓我說了一下快排的思路,我就把兩種都說了。

二面4.19下午16:00

不得不說字節(jié)的速度是真的很快,大致問題跟之前都差不多,不過這里問了一下基礎。

  1. 自我介紹;

  2. 項目介紹;

  3. 挑一個最熟悉的項目(語速放慢,到這里基本上前三個問題,回答的都一模一樣)

  4. 了解過nlp嗎(不太了解,只知道最最簡單的,最基礎的)

  5. 仍然是一堆業(yè)務相關問題;

  6. 說一下FM,DeepFM,F(xiàn)FM的區(qū)別聯(lián)系,以及每個模型的改進;

  7. 你說你們排序是wide&deep,那你對wide&deep有過一定了解嗎?
    答:回答了一下自己的見解

  8. 你知道wide&deep優(yōu)化的方式嗎?
    答:以前看過,主要是兩邊的優(yōu)化器不同,面試的時候忘了 (wide用的Follow-the-regularization-loss, FTRL, deep用深度學習常見的AdamGrad)

  9. 為什么優(yōu)化器不同?
    答:當時忘了,就亂說一通。到后來想起來然后跟面試官解釋了一下:FTRL主要為了解決L1不能真正得到稀疏解的問題(由于SGD),wide側很需要稀疏解,第一避免過擬合,第二線上部署的時候稀疏那部分直接去掉,能提高超高多的性能;deep部分就是傳統(tǒng)的deeplearning了。

  10. 了解優(yōu)化器嗎?
    答:之前記得很多,包括公式,就簡單說了一下SGD,Adaptive,AdamGrad之類的,其實主要是為了動態(tài)去調整學習率,然后從局部最小值收斂性簡單瞎BB了幾下。最后又說好多都忘了,面試官很溫柔說不記得也沒事。

  11. 概率題。西游記主題盲盒,抽中師徒四人任意一人的概率相同,問要抽中孫悟空的平均次數(shù)。
    答:當時面試官表達得很含糊,我戰(zhàn)戰(zhàn)兢兢回答了4次,他問思路,我說就是伯努利實驗,n重伯努利實驗就是二項分布,二項分布的期望是np,np = 1的時候,n = 4。面試官說,哦你直接套公式啊。。。。。我感覺面試官是想讓我手撕二項分布的期望方差?下去之后自己推導了一下。

  12. 算法題。easy題,背包,給定硬幣面值,組成target需要的最小硬幣數(shù)。

反問環(huán)節(jié)的時候跟面試官探討了一下那道概率題,面試官最后又拓展說抽全4種的平均次數(shù),讓我線下去思考一下。直接的思路就是算n次,抽全的概率,E(x) = sum(np),最后演變成無窮級數(shù)收斂值的問題。后來到處請教查資料,發(fā)現(xiàn)可以構造數(shù)列An,表示 還剩下n種沒有集齊的卡片時候,需要抽的次數(shù)。An = 1 + n / 4 * An-1 + (4 - n) / 4 * An。這個做法驚呆了。。。。


三面4.20上午11:00

說在前面,第一次體驗字節(jié)三面,面完整個人都不好了。前面的問題直接略過看重點。

  1. 你說你做過對比學習(實驗室醫(yī)學圖像項目,面試這么久第一次被問到,當時用的是自監(jiān)督對比),談談你對對比學習的理解。

  2. 現(xiàn)在如果要把自監(jiān)督用到召回里做i2i該怎么做?

  3. 你接觸過圖像,現(xiàn)在要建模商品圖片對于點擊/購買的影響該怎么做?

  4. 用一行代碼寫出對比學習的loss?(當時直接懵了,對比學習最后做對抗loss的時候,涉及到很多計算技巧,一行代碼GG)

  5. 如果寫不出來的話,寫一下ce的loss也行(貌似是最容易回答的)

  6. 你覺得siamese跟simclr有什么異同,你是怎么理解的?

  7. 從數(shù)學推導的角度證明一下,自監(jiān)督能夠提高模型性能?(懵了,難道不都是直接看實驗結果才能知道嗎?當時就只能bb,數(shù)學推導gg)

  8. 現(xiàn)在如果想要增加圖搜功能,拍照搜索商品,該怎么做?

  9. 了解統(tǒng)計學派跟貝葉斯學派嗎?你覺得最大似然更接近哪個?

  10. 概率題,4支球隊,單循環(huán)賽,輸贏平概率相同,分別得分3,0,1.問最后4支隊伍得分總和服從什么分布?
    答:其實相當于做6次伯努利實驗,每次實驗得3分的概率是 2 / 3, 平了2分概率是1 / 3,最后分數(shù)范圍為12 - 18,概率遞增,相當于一個離散分布列。但是當時讓我回答服從什么分布,GG,好像叫得上名字的分布跟這個都沒關系,當時只能支支吾吾的說服從廣義的二項分布,然后面試官讓我寫公式,我寫到一半面試官直接說那面試就到這里。。。

反問:這里不省略,是因為我這輩子都會記得。當時我整個人都是萬臉懵逼的狀態(tài),鬼使神差脫口問了句實習的話有轉正hc嗎?面試官手都已經(jīng)準備合上電腦蓋了,然后他笑了,沒錯他笑了。。

HR面4.26上午11:00

其實三面之后自己都覺得涼透了,甚至還問過hr小姐姐,小姐姐人特別好,說幫我爭取一下。看到爭取一下心里又涼了半截,甚至一度又emo了好幾個小時,美團又遲遲不給回應,整個人都裂開。當時hr給我發(fā)微信的時候突然說技術面過了,約hr面。想象一下一個高考落榜的人突然告訴你系統(tǒng)分數(shù)算錯了。。(其實還是怪自己菜,三面發(fā)散性思維,回答得太差了,但是不知道為什么居然能過?)

自我介紹+職業(yè)規(guī)劃+遇到問題怎么結局+入職時間,實習時常+如果碰到身邊有同事劃水怎么辦= =!.27今天下午已OC。感謝小姐姐!字節(jié)流程是真的速度!

四. 快手主站推薦

當時覺得字節(jié)涼透了,于是開啟了海投模式。讓實驗室?guī)熜置蛢韧屏?。PS:快手的面試官好溫柔,溫文爾雅。這半個月的面試,快手的面試體驗是最好的,其次是美團,說錯了不打斷,但是會善意提醒你。

一面4.25下午17:00

  1. 自我介紹;

  2. 項目;

  3. 寫出對比學習的Loss;

  4. 對比學習本質是想?yún)^(qū)分不用的內容,拉近相同內容,但是相同內容純天然就有一定相似性,怎么解決?

  5. 你覺得在做對比學習的時候最主要需要注意的地方是什么?

  6. Siamisese跟SimCLR有什么不同?

  7. 聊聊項目吧,說說你最熟悉的一項工作。

  8. 負采樣怎么做的?為什么要負采樣?

  9. 模型怎么部署的,特征怎么處理的?

  10. 排序了解嗎?FM知道嗎?為什么能降低時間復雜度?系列FM之間的差別在哪兒?

  11. 我看你寫了XGBoost,講講他對于GBDT的優(yōu)化點。(第一次碰到,終于有人問了hh)

  12. XGBoost葉子節(jié)點的值怎么得到的(這個忘了,瞎說說分裂之后的平均值,還會在分裂的時候正則化,面試官糾正我其實是根據(jù)優(yōu)化目標得來的)

  13. 隨機了一道算法題。二叉樹層序遍歷(啊這)

今天跟我約了明天二面;

五. 總結

我投遞的比較晚,基本上是4.5才開始準備。結果剛投騰訊WXG,直接宣布不招人;剛投阿里,又直接鎖HC。。整體的面試還是業(yè)務的偏多,準備了好多好多基礎,樹,LR,SVM推導(軟硬間隔),KKT,SVM回歸,手撕SGD,手撕DNN,手撕Softmax,手撕LR,XGB損失函數(shù)推導,LightGBM優(yōu)化,Boost&Bagging,GBDT,卷積,BN,激活函數(shù),L1,L2,近段梯度下降,牛頓法,最大似然,幾乎都沒用上(只有快手的面試官問過一些)。 算法題也都oc了(不過都是easy題)

一路走來幾乎每天都過的渾渾噩噩,從最開始被拒絕的失落難受到振作,到嘴里一邊罵一邊leetcode的量子疊加態(tài),最后終于從0到1有了個offer。也祝愿大家春招收獲滿滿(馬上就要結束了),秋招備戰(zhàn)!最后借用小紅書那個跟我關系很鐵的前輩說的話收個尾:年輕的時候我們都夢想大廠,但是最后一定要找到最適合自己的那個角落!沒有找到的牛友也別泄氣,面試7分靠實力,3分靠運氣,最重要就是別否認自己。

一起交流

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多