收集一下推荐算法岗的面试题和网上同仁面试的情况,欢迎大家评论区补充,一起学习!!
后面会一直更新,丰富内容,祝愿大家面试顺利!!!
2024.03
2021春季推荐算法实习生面经
2021春季推荐算法实习生面经_依图科技 面经-CSDN博客
依图科技面经(算法实习,偏cv)
一面(1h):
自我介绍
介绍一下自己的项目
手撕代码:斜着蛇形打印矩阵 ( 转移条件和越界没搞清楚,卡了一会 )
概率题:50个人中有人生日相同的概率?只有两个人且只有一组这样的两个人生日相同的概率?【根据生日概率,如果有50个人,那么至少有两个人生日相同的概率是非常高的。实际上,这个概率非常接近100%。这是因为50个人中的每个人都有365天中的一个生日,所以一共有365^50种可能的生日组合。换句话说,有很多不同的组合方式来安排这50个人的生日。但是,如果我们开始比较他们的生日,很快就会发现至少有两个人生日相同的情况。这就是所谓的“生日悖论”。而如果只有两个人,且只有一组这样的两个人生日相同,那么概率就会降低很多。在365天中,第一个人可以选择任意一天作为生日,而第二个人只有1/365的概率与第一个人的生日相同。所以,这种情况下的概率是1/365,约为0.27%。】
二面(50min):
手撕代码:接雨水。经典题,字节校招笔试第三题原题,不多说了。
平常看的一些学习网站?我说了csdn,stackoverflow【之前都不知道还有这个网站,可以了解一下,哈哈哈。知乎、github、菜鸟叫教程、b站】
大学生活中最遗憾的事情?后面就有点偏唠家常了,说一面其他的都问过了
学习遇到困难了怎么解决的?自己为什么要做项目?
探探面经(推荐算法实习)
一面(1h10min):
自我介绍
问项目,召回与排序的架构【在这种架构中,召回阶段主要负责从庞大的数据集合中快速筛选出与用户查询或需求相关的候选项。这一阶段通常采用高效的索引和检索算法,以尽可能快速地返回一批可能相关的数据。一旦召回阶段完成,排序阶段就会对召回的候选项进行进一步排序和排名。排序阶段通常会考虑多个因素,如相关性、用户偏好、历史行为等,以确定最终的展示顺序或推荐排名。召回:选择需要的;排序:对召回的结果排序 】
介绍一下deepwalk,图是怎么构建的?【DeepWalk是一种基于图的无监督学习算法,用于学习节点表示。它可以将图的节点映射为低维向量,以便在机器学习任务中进行进一步的分析和应用。在DeepWalk中,图是通过节点之间的关系构建的。通常,图可以由节点和边组成,其中节点代表实体,边代表实体之间的连接或关系。例如,在社交网络中,节点可以表示用户,边可以表示用户之间的关注或好友关系。】
deepwalk和node2vec区别?【首先,它们都使用随机游走来生成节点序列。随机游走是从一个节点开始,根据一定策略选择下一个节点,并重复进行直到达到预设的步数。这个过程生成的节点序列被用于学习节点表示。然而,DeepWalk和Node2Vec在节点序列生成方面有一些不同之处。DeepWalk采用的是无偏的随机游走,它在每一步都随机选择下一个节点。而Node2Vec则引入了两个参数p和q来调整游走策略。参数p控制游走过程中的“回头概率”,即是否倾向于在同一局部区域内进行探索;参数q控制游走过程中的“跳出概率”,即是否倾向于跳出当前邻居节点,探索其他区域。这种灵活性使得Node2Vec能够在不同的游走策略下生成不同类型的节点序列。其次,DeepWalk和Node2Vec在学习节点表示方面使用了不同的模型。DeepWalk使用Skip-gram模型来学习节点嵌入向量,而Node2Vec则使用了结合了负采样的Skip-gram模型。Node2Vec的目标是通过预测周围节点的条件概率来训练节点嵌入向量。最后,DeepWalk和Node2Vec在网络结构的建模方面也有一些差异。DeepWalk将图视为无向图,仅考虑节点之间的连接关系。Node2Vec则允许对有向图进行建模,同时考虑节点的入边和出边(有向图),从而更好地捕捉图的结构特征。】
word2vec了解吗?输入是什么?采用了哪些优化?【Word2Vec是一种用于学习单词嵌入向量的算法,它通过将单词映射到连续向量空间中来捕捉单词之间的语义关系。Word2Vec的输入是一个大规模的文本语料库,可以是一本书、一篇文章、甚至是整个互联网。算法会从这个语料库中提取出一系列的句子作为训练样本。Word2Vec采用了两种不同的模型来训练单词嵌入向量,即连续词袋模型(Continuous Bag-of-Words,简称CBOW)和Skip-gram模型。CBOW模型的输入是一个目标单词的上下文单词,目标是通过上下文单词来预测目标单词。这样的设计使得CBOW模型在训练过程中能够学习到上下文单词的语义信息,从而得到目标单词的嵌入向量。Skip-gram模型则相反,它的输入是一个目标单词,目标是通过目标单词来预测它的上下文单词。Skip-gram模型的设计使得它能够更好地捕捉到目标单词的语义信息,并生成更准确的单词嵌入向量。为了优化Word2Vec算法的训练速度和效果,它采用了一些优化技巧。其中最重要的技巧之一是负采样(Negative Sampling),它通过随机选择一些负样本来加速训练过程。负样本是指在训练时选择一些非目标单词作为负例,从而训练模型更好地区分目标单词和其他单词。另一个重要的优化技巧是层次化Softmax,它通过使用二叉树结构来减少计算Softmax函数的复杂度,从而提高训练效率。】
itemCF的原理,实现过程
item_feature如何召回,召回和其他方法有重复的商品时怎么处理?
用户没有购买商品怎么处理?(冷启动问题)
排序阶段wide&deep是怎么架构的?(这里最终节点是sigmoid输出,我给说成softmax了,然后又问了一下softmax的公式和应用)
Python的GIL锁,装饰器?
tuple和list的区别,list的底层实现
python中函数传递参数是值传递还是引用传递(很坑,两个都不是,见深入理解python中函数传递参数是值传递还是引用传递)
map和reduce函数介绍一下
数据库sql用过吗?spark大数据了解吗?(无。。。)
手撕代码:一个数组里面有一个数出现次数大于数组长度的一半,最快找到这个数。
leetcode剑指offer原题,摩尔投票法或者利用快排思想
二面(40min):
问项目,介绍一下架构
手撕代码:合并两个排序数组
HR面(15min):
问项目,介绍一下做项目的初衷
有没有学过cs课程,怎么样学习的
华为面经(算法实习)
面试前先让你填一个性格测试,据说刷掉一半的人。根据我做过的经验来看,选择你热爱思考,热爱成功,热爱合作,热爱加班,热爱奋斗就可以过。然后签署一个协议。
一面(50min)
自我介绍
介绍一下项目,召回和排序的架构,感觉和其他公司问的大同小异
itemcf和usercf的具体应用场景和区别
如何embedding的?对图片和文本如何提取特征了解吗?
多路召回有重复的item怎么处理?
item和user冷启动怎么处理?
wide&deep的架构
然后开始问第二个项目,项目用的xgb和rf,结果一个没问
VC维数了解吗?(这是啥…)
adaboost了解吗?介绍一下
tf的静态图和pytorch的动态图的区别?
pytorch底层GPU调度原理了解吗?为什么速度这么快。(这又是啥…)
还有其他的项目吗?我说了之前一个pyqt做的水下激光识别的小项目
然后问了python多线程和c++多线程的区别
python的GIL,申请和释放
了解lenet,resnet,lstm,bert,attention这些吗?
回答:了解cnn和rnn,自己ml比较扎实,目前在研究深度,读深度的paper
手撕代码:我们来个简单的吧,手写一下快排
总结:面的都是比较基础和底层的点
二面(15min)
是综面,很快,简单问了问专业,学习方法,学习规划之类的。我们那组的人加上我一共5位,都过了。
字节面经(算法实习生data,推荐方向)
问项目,deepwalk和node2vec怎么构建图?
你还了解哪些其他的召回方法?
如何提取文本和图片特征?
如何batch normalization?优点,解决了什么问题?
为什么会出现梯度消失和梯度爆炸?
lightgbm相对与xgboost改进?
xgboost与gbdt区别?xgboost可以并行吗?
还问了其他的,忘了
手撕代码:自己写链表数据结构和测试用例,反转位置m到n的链表
网易面经(推荐算法实习, 一面挂):
一面(50min):
自我介绍
聊推荐系统项目,问了很多边角知识。deepwalk图怎么构建的?
精排时如果前几的分数都是同一类的商品怎么处理?
机器学习算法了解哪些?我说了回归分类聚类都了解,然后问了聚类。
我有1000万条向量,如何选取聚类簇的数目?
介绍一下密度聚类?(没答好…)
了解深度学习吗?CNN的max-pooling怎么反向传播,avg-pooling呢?
了解强化学习吗?
一面(1h40min):
聊了半个小时项目
损失函数有哪些?区别?作用?
激活函数有哪些?区别?作用?
梯度下降算法,更新公式?缺点与局限?
神经网络所有参数可以都初始化为0吗?0.1呢?见此处
朴素贝叶斯公式?
交叉熵公式?
池化层作用?
Attention机制介绍一下?
手撕代码:手写sqrt函数(正整数)
2023字节跳动抖音推荐算法实习面试
字节跳动抖音推荐算法实习生一面凉经_字节社招推荐算法面试-CSDN博客
1、2分钟自我介绍。
2、本人大四期间在某小公司实习的项目,项目是简单的机器学习项目。
问数据怎么获取?东方财富网上爬取公开的财务数据,接口都是公开的,简单的get和post请求。
数据标签怎么获得?答:根据公司是否ST,将公司划分成两个类别,二分类问题。
用到哪些模型?答:逻辑回归,随机森林,支持向量机。
模型评价指标?答:准确率,预测正确/样本数。
你还了解哪些评价指标?答:AUC,f1-score,召回率。
AUC定义?答:根据真阳性和假阳性之间的变化关系画出ROC曲线,ROC曲线下面积即为AUC,AUC取值范围为0-1,数值越大模型性能越好。
3、场景题,比较开放,这里就不再细说了。
4、看你打过ACM,来做道算法题。
题目是个简单并查集板子题,但是3年没写过了,准备仓促也没复习到,在面试官几次引导下磕磕绊绊写了大概。
然后问我find函数和union时间复杂度?答:O(1)和O(n)。
然后说我代码没写路径压缩,又说不纠结这个了,你下去再看看吧。
2023推荐算法岗面试总结
抖音APP推荐
在小红薯实习过
-
自我介绍
答:语速放慢,背; -
挑一个小红薯的项目仔细介绍
答:主要在小红薯做了一些向量召回+点召回工作,语速放慢,慢慢讲; -
模型的时效性怎么样?
答:我是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)。
一面面完不到半个小时直接约了二面。
-
自我介绍
答:语速放慢,背; -
挑一个你做的比较熟悉的召回渠道,详细讲一下(跟一面差不多)
答:dssm召回巴拉巴拉。其中着重提到了样本的问题,想让面试官问我。 -
你刚刚提到了样本,说说你的样本具体是怎么做的
答:召回本身最看重的也是样本,又巴拉巴拉一堆,又着重讲到了负采样(因为负采样的逻辑都是我自己做的,所以比较熟)。 -
说说你负采样具体是怎么做的
答:第一版i2i在batch内随机负采样,并加了bias进行修正;第二版u2i借鉴w2v,以uv曝光为权重,全局负采样,但是由于全局负彩成本太大,做了二次哈希,根据样本uv进行了分桶; -
你简历上说对FM,DeepFM跟FFM有一定了解,讲讲。
答:回答了一下各自的特点和改进点。 -
你简单写一下FM训练整个过程的伪代码吧(懵了,降低时间复杂度的证明会,但是直接手撕GG)
答:因为以前手撕过SGD跟LR,所以稀稀拉拉写了点出来,然后写了下FM化简的推导,但是FM对w0, w1, Vij的导数求错了 。线下痛定思痛,直接numpy手撕了一版简易的FM。 -
算法题。
数组第K大的数, 没看到要求用快排,我用堆排写了一遍,问了时空复杂度+证明。最后又问到了快排怎么做,临结束又问了快排怎么做到近线形是件复杂度的,这里全忘了。其实就是在partition的时候引入随机性,证明的话网上一堆。
美团优选
四道算法题+几道选择题(参加过这场的应该都知道,全都是easy题,很快全部ac,甚至感觉自己出现了幻觉hh,反而是后面的选择概念题比较难)
-
自我介绍;
-
项目介绍;
-
你说模型里面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的孩子就是这么卑微)
不得不说,美团的流程相比字节速度真的慢很多很多。二面问的基本全都是业务问题,这里就不展开了(貌似现在基本不问八股了,什么SVM,对偶问题,过拟合,BN,dropout,生成模型判别模型,lr为什么用sigmoid,最大似然,L1和L2(拉普拉斯分布和高斯分布))
美团二面感觉还是挺好的,全程都在聊业务,本来字节挂了还对美团挺抱有希望的,但是直到今天还没消息,公众号回复跟大家的一样,面试官正在考虑(其实就是横向比较)。
算法题:求最短的子数组长度,子数组满足总和 >= target。简单双指针。
抖音电商推荐
-
自我介绍;
-
项目介绍;
-
挑一个最熟悉的项目;
-
模型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。面试官说没事,还是让我说了一下快排的思路,我就把两种都说了。
不得不说字节的速度是真的很快,大致问题跟之前都差不多,不过这里问了一下基础。
-
自我介绍;
-
项目介绍;
-
挑一个最熟悉的项目(语速放慢,到这里基本上前三个问题,回答的都一模一样)
-
了解过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。这个做法惊呆了。。。。
说在前面,第一次体验字节三面,面完整个人都不好了。前面的问题直接略过看重点。
-
你说你做过对比学习(实验室医学图像项目,面试这么久第一次被问到,当时用的是自监督对比),谈谈你对对比学习的理解。
-
现在如果要把自监督用到召回里做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,好像叫得上名字的分布跟这个都没关系,当时只能支支吾吾的说服从广义的二项分布,然后面试官让我写公式,我写到一半面试官直接说那面试就到这里。。。
快手主站推荐
-
自我介绍;
-
项目;
-
写出对比学习的Loss;
-
对比学习本质是想区分不用的内容,拉近相同内容,但是相同内容纯天然就有一定相似性,怎么解决?
-
你觉得在做对比学习的时候最主要需要注意的地方是什么?
-
Siamisese跟SimCLR有什么不同?
-
聊聊项目吧,说说你最熟悉的一项工作。
-
负采样怎么做的?为什么要负采样?
-
模型怎么部署的,特征怎么处理的?
-
排序了解吗?FM知道吗?为什么能降低时间复杂度?系列FM之间的差别在哪儿?
-
我看你写了XGBoost,讲讲他对于GBDT的优化点。(第一次碰到,终于有人问了hh)
-
XGBoost叶子节点的值怎么得到的(这个忘了,瞎说说分裂之后的平均值,还会在分裂的时候正则化,面试官纠正我其实是根据优化目标得来的)
-
随机了一道算法题。二叉树层序遍历(啊这)
五. 总结
最后借用小红书那个跟我关系很铁的前辈说的话收个尾:年轻的时候我们都梦想大厂,但是最后一定要找到最适合自己的那个角落!没有找到的牛友也别泄气,面试7分靠实力,3分靠运气,最重要就是别否认自己