秋招系列 | 推荐岗史上最强面经来袭(上)
背景
作者是一名今年参加秋招的学弟,本文写在秋招结束后。
背景为985本硕&计算机科班,研究生期间方向主要为推荐算法,投递的方向主要为推荐/广告/机器学习。目前国内已从A收割到Z。本科做工程相关,研究生期间转算法,发表过CCF A类论文一作1篇,有过大厂实习经验、开源项目和机器学习比赛“划水“经历。
在这里也欢迎各位从事推荐及广告算法的小伙伴加入我们,一起交流学习,一起进步。
如下仅为部分面经,墙裂欢迎各互联网大佬来撩。
具体面经分享
百度
百度7月初就开启了AIDU计划(详情见“百度招聘”公众号),报名后可以直接在交流群联系部门负责人进行面试。
面试流程为 三轮技术面 + hr意向面 + 9月底带薪offer面。
我自主投递了商业策略平台部(凤巢),还被垂直搜索组捞了简历,两个部门同时进行面试,最终两个部门都拿到了offer。
AIDU计划是先约面,面完再进系统走流程,这样既可以多个部门同时面,又不用担心没过的话有面试记录,这个方式是对应届生面试比较友好的,点赞?。但值得注意的是最终只能走一个部门的offer流程,如果拿了多个部门的offer意向需要自己取舍。
商业算法组
一面
自我介绍。
- 询问实习,很详细。
- 问2020腾讯广告算法比赛如何做的数据分析,预处理;模型后续如何提升。
- LR的损失函数,sigmoid函数由来,lr求导手推。
- 极大似然和最小二乘的区别。
答:观测值服从正态分布的情况下, 最小二乘法等价于极大似然估计。(可以推导) 例子参考:https://www.cnblogs.com/little-YTMM/p/5700226.html
- 常见的优化器介绍;adam与adagrad的区别。
- AUC计算公式,解释意义。
- 朴素贝叶斯公式,为什么叫朴素,是生成模型还是判别模型。
答:朴素的英文是native,即“天真”,我们应用朴素贝叶斯时做了一个天真的假设:条件独立性假设。
- 生成模型和判别模型的区别。
答:举个例子: 对面一个人走过来,和你说了一句话,你需要识别出她说的到底是汉语、英语还是法语等。可以有两种方法达到这个目的:
- 学习每一种语言,你花了大量精力把汉语、英语和法语等都学会了,我指的学会是你知道什么样的语音对应什么样的语言。然后再有人过来对你说,你就可以知道他说的是什么语音.
- 不去学习每一种语言,你只学习这些语言之间的差别,然后再判断(分类)。意思是指我学会了汉语和英语等语言的发音是有差别的,我学会这种差别就好了。
那么第一种方法就是生成方法,第二种方法是判别方法。
- 生成模型:P(y|x)=P(x,y)/P(x) ,先由数据学习联合概率分布和先验概率分布,然后求出条件概率分布。
- 判别模型:直接学习决策函数 y=f(x)
- 概率题:工厂A和工厂B的产品的次品率分别为1%,2%,现从由A和B的产品分别占60%和40%的一批产品中随机抽取一件,发现是次品,则该产品属于B厂生产的概率。
- 代码题:剑指offer 面试题68 - II. 二叉树的最近公共祖先。
二面
实习介绍。
- 内积,外积,哈达玛积的区别。
- loss回传时,m个隐层单元,n个输出层单元,每个输出层单元的loss是如何回传到m个隐层单元的。
- embedding和one-hot的区别,emb的好处与坏处,做emb是否有信息缺失。
- 问贪心算法和动态规划的思路一般是什么样的。
- 代码题:二维数组最大子数组和。
三面
介绍实习,论文,很详细。
- 开放题:问搜索场景下,会提示相关词,这种相关词的收益效果如何量化,给出一个方案。
- 部门介绍与反问。
垂直搜索组
一面
介绍论文,实习,项目,说了很久。
- 探讨ctr未来可能做的方向。
- 代码题:划分一个整形数组,把负数放在左边,零都放在中间,正数放在右边,要求空间复杂度 O(1)。
快排思想来做,如下:
def solution(nums):
low = 0 # 负数区域,指向负数区域后的第一个位置
curr = 0 # 0区域,指向0区域后的第一个位置,也是当前遍历位置
high = len(nums) - 1 # 正数区域,指向区域前的第一个位置
while curr <= high:
if nums[curr] < 0: # 当前元素添加到负数区域,并前进一格
nums[low], nums[curr] = nums[curr], nums[low] # 有可能和自身交换
curr += 1
low += 1
elif nums[curr] == 0:
curr += 1
else:
nums[curr], nums[high] = nums[high], nums[curr]
low -= 1
return nums
二面
介绍印象最深的一个项目,顺着项目问了很久。
- 特征分析和预处理的方法。
- LR,SVM,GBDT,NN的介绍和区别。
- GBDT和NN的使用场景以及优缺点。
- NN如何解决过拟合。
- Graph Embedding如何联合属性进行训练。
答:参见:https://zhuanlan.zhihu.com/p/70198918 ,使用属性的emb + pooling代替随机初始化的GE
- 搜索中的position bias问题(展现在前面的item点击率会偏高)如何解决?
答:有两种可以尝试的方案:
- 在训练阶段将位置作为一个特征加入到模型中,而在预测阶段置为0或者一个统一的常数
- 通过一个shallow tower(比较轻量的模型)来预测位置偏置信息,输入的特征主要是一些和位置偏置相关的特征。在多任务模型的子任务最后的sigmoid前,将shallow tower的输出结果加入进去。而在预测阶段,不考虑shallow tower的结果。
- Graph Embedding如何联合属性进行训练。
- 如何做query和doc的搜索,简单说一下思路,以及该思路存在的问题。
答:参考DSSM,用 DNN 把 query 和 doc 表达为低维语义向量,并通过 cosine 距离来计算两个语义向量的距离,最终训练出语义相似度模型。
- ctr中的selection bias问题(推荐破坏了用户真实兴趣分布)如何解决?
- 最近在读的论文,三句话介绍其观点。
- 自我评价-优缺点。
三面
自我介绍。
- 介绍自己的项目,遇到的问题。
- 开放题:推荐/搜索中的bias问题如何解决。
- 开放题:在线/离线场景,特征表现的一致性如何评估?
- 自我评估。
总结
百度的面试难度比较友好,主要是对机器学习基础,实习情况以及一些推荐场景的常见开放性问题进行查询。
京东|广告质量部定向组
京东6月22日开启提前批(详情见“京东招聘”公众号),找了相关匹配部门的学长内推,但面试安排的较晚,到7月27日才安排面试。
面试流程为 两轮技术面,最终拿到了offer。
由于hc紧张,发放的是意向offer,即如果明确去的话,会给sp及以上offer;不能确定的话,可以先秋招其他公司,随时沟通进展。
一面
介绍比赛,实习,很详细。
- 代码题:leetcode 1:两数之和;leetcode 169:Boyer-Moore 投票算法;Leetcode 382:蓄水池抽样算法 + 推导。
推导是用数学归纳法: 举例说明:1 - 10 遇到1,概率为1,保留第一个数。遇到2,概率为1/2,这个时候,1和2各1/2的概率被保留 遇到3,3被保留的概率为1/3,(之前剩下的数假设1被保留),2/3的概率 1 被保留,(此时1被保留的总概率为 2/3 * 1/2 = 1/3) 遇到4,4被保留的概率为1/4,(之前剩下的数假设1被保留),3/4的概率 1 被保留,(此时1被保留的总概率为 3/4 * 2/3 * 1/2 = 1/4) ...
二面
介绍论文,实习,很详细。
- 说说ESMM的实践为什么没收益,分析原因。
- 概率题:感冒发烧概率为0.6,不感冒发烧概率为0.1,感冒概率0.2,问发烧感冒的概率。
- 代码题:快排。
- 介绍部门 + 反问。
总结
京东的提前批面试流程比较快,一面code考察较多,整体还是考察基础。
快手|商业化广告算法
快手是8月初投递的提前批,8月20号左右安排面试。
面试流程为 三轮技术面+hr口头offer+加面(加面是为了申更高级别offer),最终拿到了offer意向书。
一面
介绍论文,实习。
- 代码题:字符串abc,输出所有子集。
[a,b,c,ab,ac,bc,abc]
- 开放题:百度搜索的联想词搜索功能如何实现?如果建表/建树的话,如何估算内存?
二面
- 介绍实习,说说实习训练模型具体调参调了哪些参?
- ctr预估偏高会带来的问题。
- 广告场景ctr预估为什么要保距?
- 加了bn和ly以后学习率为什么可以上升?
- hash emb的作用:增加泛化。
- l1和l2的区别,作用。
- 梯度爆炸和梯度消失。
- 代码题:快排。
三面
介绍论文。
- resNet为什么能把网络做深。
从梯度的角度来回答
- CNN中卷积和池化设计的原因/好处。
- 训练集验证集表现好,测试集表现差是什么原因?
- 训练集验证集表现好,测试集表现差是什么原因?
特征穿越/过分拟合验证集
- 线上线下表现不一致原因。
特征穿越/突然新增用户/广告导致的信息分布不一致
- OCPM和CPA的区别。
- MMOE和share bottom的区别。
- 推荐和广告的区别。
- 不使用online learning,如何捕捉用户近期的兴趣变化?
构建近期交互的统计特征,emb依时间衰减的加权特征
- 开放题:din/dien在某些公司的效果为什么不好。
- 开放题:如何利用旧数据迁移学习新的广告位场景。
滴滴|金融风控组
滴滴是6月8日参与投递的牛客网SP专场(详情见“牛客网”公众号)。
牛客网SP专场:牛客网帮忙汇总了大厂的一些SP offer,省去了填网申的麻烦,可以一键投递。
面试流程为 三轮技术面+交叉面,最终拿到了offer意向书。
滴滴是同一天连着三轮面试的,面试通过直接转流程到下一面试官,无需等待,这一点好评。
一面
介绍论文。
- GCN与GraphSAGE的区别,说明其本质思想。
- 介绍lr,手推lr损失和导数。
- 代码题:leetcode198-打家劫舍(该题的类似变形)。
二面
介绍实习,论文。
- FM与GBDT构建组合特征的区别。
- FM与GBDT+LR的差异。
- 开放题:金融风控场景,如何建模用户关系,并利用其来提升放贷收益?
- 概率题:圆上三点,构成锐角三角形的概率
- 代码题:剑指offer14-剪绳子
三面
介绍实习,DeepCTR项目。
- 智商题:【100囚犯问题】1,2,3,...,100共100个人,每个人在1个房间,不能查看其他房间状态,房间什么都没,每个人都有概率随机被抽中,被抽中的人到101房间一趟,101房间有一个灯,一个控制灯的开关,设计一个方案,让这100个人中能有人知道100个人都已经去过101房间。
答:让1号控制关灯,其他人控制开灯 (仅每个人第一次出去的时候开灯),1号关灯99次,则说明此时所有人都去过101。
该方案的数学期望次数:
- 答:分步考虑如下:
- 先考虑1号出去1次这个事件,概率为; 如果记期望次数为E,则有 ,可得期望为100次。
- 再考虑第i个未出去过的囚犯出去1次这个事件,概率为 ; 同理可以求得期望为次。
- 那期望的总天数为:
参考:https://wenku.baidu.com/view/49102f2558fb770bf78a5565.html#
交叉面
- 介绍论文,实习,项目,比赛。
- 代码题:k种硬币(无限个),n个碗,每个碗放1个硬币,最多连续不超过2个碗内的硬币类别相同,有多少种方法。
答:用动态规划,转移方程推导: dp[0]=k dp[1]=k*k dp[2]=(k-1)*k+k*(k-1)*k ... dp[i]=(k-1)*dp[i-2]+(k-1)dp[i-1]
总结
滴滴的一天三连面好评,这样极大的缩短了面试等待时间,而且上一轮面试官面过的可以及时反馈到下一轮,不会重复提问。
最后祝大家面试顺利,一起加油!欢迎大家来交流~
- Python—numpy模块下函数介绍(一)numpy.ones、empty等
- Tomcat用户权限设置
- 优化算法——模拟退火算法
- 绘制动态心形图案::R语言绘制心形图
- 物化视图中的统计信息导致的查询问题分析和修复 (r7笔记第47天)
- R语言之系统聚类(层次)分析之图谱形式完整版
- Java操作数据库Spring(1)
- python基础知识——内置数据结构(集合)
- 关于db link权限分配的苦旅(二)(r7笔记第45天)
- 简单易学的机器学习算法——在线顺序极限学习机OS-ELM
- Java操作数据库Spring(2)
- 解决SSH连接linux中文显示乱码问题
- 设计模式——类图以及类与类之间的关系
- sysdba登录报错insufficient privileges的原因分析(r7笔记第64天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法