万字长文 | 2023届推荐算法岗面经总结!

大家好,我是对白。

转眼间2023届春招实习已接近尾声,由于疫情影响,今年找个大厂实习确实很难,今天就给大家分享一位23届同学找算法岗实习的总结,最终拿下抖音APP、快手主站和美团优选的推荐算法岗offer,希望能帮助到下半年找工作的小伙伴们,以下为原文。

作者:落尽 | 编辑:对白的算法屋https://www.nowcoder.com/discuss/943070

985渣硕,保研本校之后因为没有大规模开发的经验,再加上不太想背八股,所以转算法。研究方向是医学图像,SCI2区一篇水刊医学+计算机结合论文

组内有做推荐算法的于是花了一个月时间转推荐,慢慢对推荐感兴趣。21年底有个非常好的朋友(阿里P8级别的)把我捞去了小红书实习,base北京,接触到了企业级别的推荐算法。推荐算法实习的意义可能就是接触线上+业务,毕竟在学校里面是不能碰到这种场景的,推荐算法需要大数据+场景支撑。

万事开头难,原本迟迟没有下决心的,4月初的时候一天晚上下班,字节hr打电话给我(本科大三的时候曾经投递了字节的简历,后来因为身体原因没有面试),问我有没有意向,刚好hr是抖音app推荐算法团队的,所以下决心开始准备春招实习。可以说投得非常晚,准备得也很晚。于是回到了学校开始准备。因为是第一次开始海投,没经验所以没录音,回忆一下大概,可能漏掉了很多问题跟细节。

一. 抖音APP推荐

一面4.8下午18:00

当时其实自己还在小红薯实习,所以请了一天假。

  • 自我介绍答:语速放慢,背;

  • 挑一个小红薯的项目仔细介绍答:主要在小红薯做了一些向量召回+点召回工作,语速放慢,慢慢讲;

  • 模型的时效性怎么样?答:我是t - 1更新,还会离线把ANN结果写入redis,因为线上qps目前暂时不支持;

  • 聊聊AUC吧。答:随机取两个样本,正样本排在负样本之前的概率;

  • 追问:AUC怎么快速计算答:把样本按照预测值排序,编号从大到小,看正样本的编号,巴拉巴拉~。PS:这里主动输出了一下知识,简单证明了一下 曲线下面积 = AUC的物理定义;

  • 线上线下AUC不一致怎么办?(这里有点懵,而且因为没有做过排序,只能按照自己的阅历尽可能全面去回答。)答:有可能召回侧拿到的样本是之前旧版本排序模型的结果,会导致模型间的gap,采样的时候要变换方式;检测离线训练模型有没有过拟合;检查线上线下特征是否一致(可能存在穿越现象);导致线上线下auc不一致最可能出现的情况就是样本穿越,因为离线训练计算auc是所有样本一起计算的,而线上不可能出现一个用户去点击排序给另一个用户的item的情况,所以过滤掉那些点击为0,或者点击率过高的用户)

  • 你们排序是怎么做的,时效性如何?(可能是看到我对第6个问题的回答,直接转向了排序)答:目前基建还不完善,没有prerank,postrank,rerank阶段,排序侧只有一个排序模型wide&deep,排序模型是实时的,每30分钟线上发射session label,然后把样本+特征dump到云上,模型自动训练。

  • 召回的时候具体怎么做的?答:每天离线训练完之后,模型会产出当天的向量,写到oss上,下游消费向量建立NN索引(HNSW),然后我再刷一遍全量的商品,把nn结果写入redis,线上从用户画像取用户lastn,做trigger selection和时间衰减,最后送到排序模型。

  • 如果现在我上一路DSSM召回,发现AB实验效果不好怎么办?答:首先看样本+特征。召回的样本是不是跟当前线上排序模型关联,特征穿越之类的;其次看当前召回渠道的结果是不是跟线上已有的重复;追问了一下还有呢?当时有点紧张,只能说那就加大流量,5%不行就到10%,再不行就到20%。到这里面试官笑了,感觉这才是他想要的回答,hh。

  • 两道Easy算法题。
    10.1. 一个m * n棋盘,只能往右或者往下走,问从左上到右下路径和的最小值。简单dp(当时直接用二维dp写的,写到一半自己就说了其实可以用滚动数组,然后又让用滚动数组写了一遍)10.2. 斐波那契数列第n个数。当时看到这个想到肯定是有别的想考的,所以就把记忆化,跟直接用数组保存比较了一遍。最后又问我时间复杂度能不能再低?我说通项公式,有追问还有其他方法嘛?当时紧张给忘了,面试刚结束就想起来了 ,其实就是矩阵的n次方,然后就转化成快速幂了,O(logn)。

  • 二面4.12晚上20:00

    一面面完不到半个小时直接约了二面。

  • 自我介绍答:语速放慢,背;

  • 挑一个你做的比较熟悉的召回渠道,详细讲一下(跟一面差不多)答:dssm召回巴拉巴拉。其中着重提到了样本的问题,想让面试官问我。

  • 你刚刚提到了样本,说说你的样本具体是怎么做的答:召回本身最看重的也是样本,又巴拉巴拉一堆,又着重讲到了负采样(因为负采样的逻辑都是我自己做的,所以比较熟)。

  • 说说你负采样具体是怎么做的答:第一版i2i在batch内随机负采样,并加了bias进行修正;第二版u2i借鉴w2v,以uv曝光为权重,全局负采样,但是由于全局负彩成本太大,做了二次哈希,根据样本uv进行了分桶;

  • 你简历上说对FM,DeepFM跟FFM有一定了解,讲讲。
    答:回答了一下各自的特点和改进点。

  • 你简单写一下FM训练整个过程的伪代码吧(懵了,降低时间复杂度的证明会,但是直接手撕GG)
    答:因为以前手撕过SGD跟LR,所以稀稀拉拉写了点出来,然后写了下FM化简的推导,但是FM对w0, w1, Vij的导数求错了 。线下痛定思痛,直接numpy手撕了一版简易的FM。

  • 算法题。数组第K大的数, 没看到要求用快排,我用堆排写了一遍,问了时空复杂度+证明。最后又问到了快排怎么做,临结束又问了快排怎么做到近线形是件复杂度的,这里全忘了。其实就是在partition的时候引入随机性,证明的话网上一堆。

  • 反问环节略。二面过去一天,第二天晚上问hr,hr说面试官很忙还没写面评价(其实就是在横向),当时就知道自己凉了,果然hr说挂了,问需不需要投其他nlp或者图像方向,婉拒了。第一次面试直接gg,狠狠的emo了好几个小时 。

    二. 美团优选

    笔试4.9下午16:00

    四道算法题+几道选择题(参加过这场的应该都知道,全都是easy题,很快全部ac,甚至感觉自己出现了幻觉hh,反而是后面的选择概念题比较难)

    一面4.13晚上20:00

  • 自我介绍;

  • 项目介绍;

  • 你说模型里面batch内负采样用到了bias修正,具体怎么做的?

  • 上线前的准备,怎么看召回指标答:首先看auc,虽然召回模型的auc基本没有参考价值,但是如果auc太低说明根本不行;其次本来应该看topn的hr,但是由于业务比较紧急,所以当时就直接拉取了头部的item做了nn,肉眼评测结果;

  • 负采样怎么做的?

  • 跨域i2i怎么做的
    答:以swing为例,在UDTF阶段生成item -> item_list的领域对,不同的是,左侧的item来源于社区,右侧的item_list来源于商品。

  • swing跟adamic具体细节答:balabala一堆,然后说到了高活用户和热门item的打压

  • 算法题也是easy题,判断是否是一棵合法的二叉搜索树(我当时用的栈去做非递归,pre指针保存中序遍历前一个节点,然后跟当前节点判断值大小,面试官说我这个做法有问题,应该用一个int保存遍历过的节点的最大值,我其实觉得我做法没问题,而且还能AC,但是不敢反驳hh,甚至还附和了面试官,哎0offer的孩子就是这么卑微)

  • 二面4.19晚上19:00

    不得不说,美团的流程相比字节速度真的慢很多很多。二面问的基本全都是业务问题,这里就不展开了(貌似现在基本不问八股了,什么SVM,对偶问题,过拟合,BN,dropout,生成模型判别模型,lr为什么用sigmoid,最大似然,L1和L2(拉普拉斯分布和高斯分布))

    美团二面感觉还是挺好的,全程都在聊业务,本来字节挂了还对美团挺抱有希望的,但是直到今天还没消息,公众号回复跟大家的一样,面试官正在考虑(其实就是横向比较)。

    算法题:求最短的子数组长度,子数组满足总和 >= target。简单双指针。

    三. 抖音电商推荐

    当时抖音APP推荐凉了之后emo了好几个小时,后来在高铁上的时候缓过来想找抖音电商,结果没想到抖音电商hr主动联系上我了,可能就是猿粪吧,又燃起了生活的希望,hh,被捞之后重新充满斗志。

    一面4.18下午18:00

  • 自我介绍;

  • 项目介绍;

  • 挑一个最熟悉的项目;

  • 模型batch内负采样怎么做的?

  • 加bias有什么用?答:负采样的本质是想打压高曝光item,但是由于高曝光的item本身就频繁出现在样本中,随机采可能会打压过头,因此加一个bias tower进行修正(其实就是学一个值取平衡正负样本)。

  • 带权负采样的逻辑?答:如果按照uv曝光进行带权负采样,就是先按照uv曝光排序,之后累加,最后生成一个随机数,看着随机数落到哪两个item的uv累加和(前缀和)区间,就采样哪个item。

  • 我看你做了swing,分析一下swing的时间复杂度?答:swing是基于用户行为共现的,首先取一个时间周期,获取这个时间周期内的用户点击行为历史(最长50个),得到user->item_list;在UDTF阶段,需要根据用户的行为历史得到item->item_neighbors领域集合,假设用户数量为U,人均点击的item个数位I,UDTF阶段时间复杂度就是O(U*I*I);在UDAF阶段要根据领域去计算每个item的最近个topk个item,假设共现当中出现的item总数是N,时间复杂就是O(N* I * I),最后还需要根据大根堆排序,假设取topK个,则时间复杂度位O(N * I * I * logK);可能看我算得很仔细面试官就没有继续细问了。

  • Swing跟Adamic有什么区别?(略)

  • 概率题。8个箱子编号1-8,扔进箱子的概率是 4 / 5,扔进每个箱子的概率相同;仍不进箱子的概率是 1 / 5。扔一次之后,现在打开1号箱子发现没有球,问球在8号箱子的概率。(条件概率)

  • 算法题。链表排序,要求快排答:其实链表的快排有2种写法, 最简单的是交换值,节点不变;最难的是直接交换节点,这里面有无数的边界case需要处理,当时衡量了一下,直接把递归+归并, 迭代+归并排序都写出来了。还给面试官分析了一下,说前面一种时空都是nlogn,后面一种空间复杂度为0,然后说说抱歉没看到是快排hh。面试官说没事,还是让我说了一下快排的思路,我就把两种都说了。

  • 二面4.19下午16:00

    不得不说字节的速度是真的很快,大致问题跟之前都差不多,不过这里问了一下基础。

  • 自我介绍;

  • 项目介绍;

  • 挑一个最熟悉的项目(语速放慢,到这里基本上前三个问题,回答的都一模一样)

  • 了解过nlp吗(不太了解,只知道最最简单的,最基础的)

  • 仍然是一堆业务相关问题;

  • 说一下FM,DeepFM,FFM的区别联系,以及每个模型的改进;

  • 你说你们排序是wide&deep,那你对wide&deep有过一定了解吗?答:回答了一下自己的见解

  • 你知道wide&deep优化的方式吗?答:以前看过,主要是两边的优化器不同,面试的时候忘了 (wide用的Follow-the-regularization-loss, FTRL, deep用深度学习常见的AdamGrad)

  • 为什么优化器不同?答:当时忘了,就乱说一通。到后来想起来然后跟面试官解释了一下:FTRL主要为了解决L1不能真正得到稀疏解的问题(由于SGD),wide侧很需要稀疏解,第一避免过拟合,第二线上部署的时候稀疏那部分直接去掉,能提高超高多的性能;deep部分就是传统的deeplearning了。

  • 了解优化器吗?答:之前记得很多,包括公式,就简单说了一下SGD,Adaptive,AdamGrad之类的,其实主要是为了动态去调整学习率,然后从局部最小值收敛性简单瞎BB了几下。最后又说好多都忘了,面试官很温柔说不记得也没事。

  • 概率题。西游记主题盲盒,抽中师徒四人任意一人的概率相同,问要抽中孙悟空的平均次数。答:当时面试官表达得很含糊,我战战兢兢回答了4次,他问思路,我说就是伯努利实验,n重伯努利实验就是二项分布,二项分布的期望是np,np = 1的时候,n = 4。面试官说,哦你直接套公式啊。。。。。我感觉面试官是想让我手撕二项分布的期望方差?下去之后自己推导了一下。

  • 算法题。easy题,背包,给定硬币面值,组成target需要的最小硬币数。

  • 反问环节的时候跟面试官探讨了一下那道概率题,面试官最后又拓展说抽全4种的平均次数,让我线下去思考一下。直接的思路就是算n次,抽全的概率,E(x) = sum(np),最后演变成无穷级数收敛值的问题。后来到处请教查资料,发现可以构造数列An,表示 还剩下n种没有集齐的卡片时候,需要抽的次数。An = 1 + n / 4 * An-1 + (4 - n) / 4 * An。这个做法惊呆了。。。。


    三面4.20上午11:00

    说在前面,第一次体验字节三面,面完整个人都不好了。前面的问题直接略过看重点。

  • 你说你做过对比学习(实验室医学图像项目,面试这么久第一次被问到,当时用的是自监督对比),谈谈你对对比学习的理解。

  • 现在如果要把自监督用到召回里做i2i该怎么做?

  • 你接触过图像,现在要建模商品图片对于点击/购买的影响该怎么做?

  • 用一行代码写出对比学习的loss?(当时直接懵了,对比学习最后做对抗loss的时候,涉及到很多计算技巧,一行代码GG)

  • 如果写不出来的话,写一下ce的loss也行(貌似是最容易回答的)

  • 你觉得siamese跟simclr有什么异同,你是怎么理解的?

  • 从数学推导的角度证明一下,自监督能够提高模型性能?(懵了,难道不都是直接看实验结果才能知道吗?当时就只能bb,数学推导gg)

  • 现在如果想要增加图搜功能,拍照搜索商品,该怎么做?

  • 了解统计学派跟贝叶斯学派吗?你觉得最大似然更接近哪个?

  • 概率题,4支球队,单循环赛,输赢平概率相同,分别得分3,0,1.问最后4支队伍得分总和服从什么分布?答:其实相当于做6次伯努利实验,每次实验得3分的概率是 2 / 3, 平了2分概率是1 / 3,最后分数范围为12 - 18,概率递增,相当于一个离散分布列。但是当时让我回答服从什么分布,GG,好像叫得上名字的分布跟这个都没关系,当时只能支支吾吾的说服从广义的二项分布,然后面试官让我写公式,我写到一半面试官直接说那面试就到这里。。。

  • 反问:这里不省略,是因为我这辈子都会记得。当时我整个人都是万脸懵逼的状态,鬼使神差脱口问了句实习的话有转正hc吗?面试官手都已经准备合上电脑盖了,然后他笑了,没错他笑了。。

    HR面4.26上午11:00

    其实三面之后自己都觉得凉透了,甚至还问过hr小姐姐,小姐姐人特别好,说帮我争取一下。看到争取一下心里又凉了半截,甚至一度又emo了好几个小时,美团又迟迟不给回应,整个人都裂开。当时hr给我发微信的时候突然说技术面过了,约hr面。想象一下一个高考落榜的人突然告诉你系统分数算错了。。(其实还是怪自己菜,三面发散性思维,回答得太差了,但是不知道为什么居然能过?)

    自我介绍+职业规划+遇到问题怎么结局+入职时间,实习时常+如果碰到身边有同事划水怎么办= =!.27今天下午已OC。感谢小姐姐!字节流程是真的速度!

    四. 快手主站推荐

    当时觉得字节凉透了,于是开启了海投模式。让实验室师兄忙帮内推了。PS:快手的面试官好温柔,温文尔雅。这半个月的面试,快手的面试体验是最好的,其次是美团,说错了不打断,但是会善意提醒你。

    一面4.25下午17:00

  • 自我介绍;

  • 项目;

  • 写出对比学习的Loss;

  • 对比学习本质是想区分不用的内容,拉近相同内容,但是相同内容纯天然就有一定相似性,怎么解决?

  • 你觉得在做对比学习的时候最主要需要注意的地方是什么?

  • Siamisese跟SimCLR有什么不同?

  • 聊聊项目吧,说说你最熟悉的一项工作。

  • 负采样怎么做的?为什么要负采样?

  • 模型怎么部署的,特征怎么处理的?

  • 排序了解吗?FM知道吗?为什么能降低时间复杂度?系列FM之间的差别在哪儿?

  • 我看你写了XGBoost,讲讲他对于GBDT的优化点。(第一次碰到,终于有人问了hh)

  • XGBoost叶子节点的值怎么得到的(这个忘了,瞎说说分裂之后的平均值,还会在分裂的时候正则化,面试官纠正我其实是根据优化目标得来的)

  • 随机了一道算法题。二叉树层序遍历(啊这)

  • 今天跟我约了明天二面;

    五. 总结

    我投递的比较晚,基本上是4.5才开始准备。结果刚投腾讯WXG,直接宣布不招人;刚投阿里,又直接锁HC。。整体的面试还是业务的偏多,准备了好多好多基础,树,LR,SVM推导(软硬间隔),KKT,SVM回归,手撕SGD,手撕DNN,手撕Softmax,手撕LR,XGB损失函数推导,LightGBM优化,Boost&Bagging,GBDT,卷积,BN,激活函数,L1,L2,近段梯度下降,牛顿法,最大似然,几乎都没用上(只有快手的面试官问过一些)。 算法题也都oc了(不过都是easy题)

    一路走来几乎每天都过的浑浑噩噩,从最开始被拒绝的失落难受到振作,到嘴里一边骂一边leetcode的量子叠加态,最后终于从0到1有了个offer。也祝愿大家春招收获满满(马上就要结束了),秋招备战!最后借用小红书那个跟我关系很铁的前辈说的话收个尾:年轻的时候我们都梦想大厂,但是最后一定要找到最适合自己的那个角落!没有找到的牛友也别泄气,面试7分靠实力,3分靠运气,最重要就是别否认自己。

    ©著作权归作者所有,转载或内容合作请联系作者
    • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
      沈念sama阅读 212,542评论 6 493
    • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
      沈念sama阅读 90,596评论 3 385
    • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
      开封第一讲书人阅读 158,021评论 0 348
    • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
      开封第一讲书人阅读 56,682评论 1 284
    • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
      茶点故事阅读 65,792评论 6 386
    • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
      开封第一讲书人阅读 49,985评论 1 291
    • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
      沈念sama阅读 39,107评论 3 410
    • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
      开封第一讲书人阅读 37,845评论 0 268
    • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
      沈念sama阅读 44,299评论 1 303
    • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
      茶点故事阅读 36,612评论 2 327
    • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
      茶点故事阅读 38,747评论 1 341
    • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
      沈念sama阅读 34,441评论 4 333
    • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
      茶点故事阅读 40,072评论 3 317
    • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
      开封第一讲书人阅读 30,828评论 0 21
    • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
      开封第一讲书人阅读 32,069评论 1 267
    • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
      沈念sama阅读 46,545评论 2 362
    • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
      茶点故事阅读 43,658评论 2 350

    推荐阅读更多精彩内容