字节是效率最高的公司,学长帮内推简历之后没多久就收到通知约一面的时间,一面面完没几分钟,hr 就发消息说一面通过了,约二面的时间。这个体验比别的公司好很多,别的公司暑期,投完简历等笔试等一周,笔试完约面试再等一周,面完好久也不给结果就拖着。。。

一面

2022.03.31 晚 19:00

一、自我介绍

二、项目

  1. 介绍实习做的工作
  2. 训练的数据是从什么时候开始的?训练方式是从头重训?
  3. 你这个相当于是对模型做了优化,带来了 AUC 的提升,然后去填补了之前打不平降的 AUC,而不是不做改动去打平基线?
  4. 所以说为什么打不平这个实际上不好解释是吧?
  • 是的,不过通过特征选择的工作,尤其是交叉项的筛选,参数量下降了一半多,然后 AUC 还有提升,说明原来的基线模型 AUC 高可能是存在过拟合
  1. MTL 你做的改动保留了 share 部分,那这部分不是还会存在参数干扰吗?
  • 私有部分提取特性,share 部分提取共性,做 MTL 肯定还是会利用模型之间的关联性
  1. Gradient Norm 了解吗?
  • 不了解。。。。。。
  1. MTL 各个任务的性能差异实际可能是数据量导致的
  • 反问了下是不是例如 CTR 辅助 CVR 训练,面试官让说一下具体怎么做,说了下 ESMM or DBMTL,看过论文但没实际用过,不太记得了
  1. 介绍比赛
  2. 数据增强怎么做的?
  3. 训练集数据量、测试集数据量?
  4. 用的什么模型?
  • ResNet 34
  1. 为什么用伪标签机制?
  2. 知识蒸馏的作用多大?
  3. soft loss 的权重设的多大?T 设的多大?
  4. 用了几个模型的输出投票,哪几个?
  5. F1 score 的定义/公式?为什么公式是这个形式
  • 调和平均,P、R 是矛盾的指标,F1 score 是综合的指标
  1. 精确率、召回率的定义
  2. F1 什么时候比较大?没理解,面试官说这个问题不好问,过了
  3. F1 是二分类的,你这个三分类的 F1 是怎么做的?
  • 分别计算三个类别的 F1 score,优先看 beta 类的 F1,再看beta-x 类的 F1,再看 alpha 类的 F1
  1. label smoothing 标签平滑了解吗?
  1. 原本的标签 0,0,1,标签平滑也会把一部分预测概率分配到别的类别上,那和带温度 T 的 softmax 的效果你觉得有什么区别呢?
  • 反问了下 label smoothing 怎么将概率分配到其它类别上?面试官说平均分配,我回答平均分配无法学到类间的相似性,而带温度 T 的 softmax,各个类别的概率输出是不同的,就能学习到类间的相似性。比如实际是 A 类,但是和 B 类有一定相似性,那么 B 类的预测概率应该比除 A 类外其他类别的预测概率高
  • 以手写数字为例,4 和 9 的手写数字可能比较像,那么预测为 4 的概率是最高的,但是预测为 9 的概率也应该比其它类别高,这就包含了类间的相似性
  1. 温度 T 的作
  • 温度越大,分布约平滑,信息量越大。最极端的情况,T=1 就是普通的 softmax,正确的预测类别的预测概率为 0.99,剩余很小的概率分配到其他类别上,那么就很难学习到类间的相似性
  1. 使用知识蒸馏对 loss 梯度的影响
  • 使用知识蒸馏加了 soft loss,loss 本身变了,对 loss 梯度的影响不清楚
  1. 使用带温度 T 的 softmax,输出更平滑,那么把正确类别的预测值也变小了?
  2. 使用 soft loss / 带温度 T 的 softmax,这个任务变难了还是变简单了?
  • 变难了,因为还要学习相似性。原来是用的标签 0 0 1,那么就只要学习将正确类别的预测概率提升,别的类别的输出不用管。而使用带温度 T 的 softmax,还要学习类间的相似性,比如 B 类预测概率大,这种也要学习到
  1. sigmoid 和 softmax 做二分类的区别
  • 做二分类两个的公式能化到一样的形式。如果在实际网络中,用 sigmoid 只会输出一个值,即正类的概率,1 - 这个概率就是负类的概率;而 softmax 输出是两个值,分别代表两个类别的概率
  1. ReLU 的优缺点,解决了什么问题
  • 解决了梯度消失的问题;缺点:神经元死亡问题
  1. 怎么解决 ReLU 的神经元死亡问题?
  • Leaky ReLU

三、算法题一道

  1. [中等] 3. 无重复字符的最长子串 ,先说思路、时间/空间复杂度,再写代码
  • CodeTop 中显示这题是字节频率最高的题目。。。
  • 滑动窗口 + 哈希表存字符下标
  • 解释为什么判断是否在哈希表中时还加了 window[ch] < left 这个判断语句?

四、反问环节:

  1. 你们那边主要做些什么工作?
  • tiktok 电商,海外的电商,推荐算法
  1. 转正机制/要求/时间节点
  • 一般实习 2~3 个月有转正机会,最好是 3 个月
  • 面试官问了实习时间(六月初),能干多久(如果能转正可以一直)

二面

2022.04.02 下午 15:00,面了一个半小时,感觉面试官很凶,压力贼大,心累。不知道字节二面是不是压力面

一、自我介绍

二、实习经历(字节的经历面字节真的很虚,你做的啥玩意面试官一问一清二楚。而且很多对方都不 care,只问了十分钟左右,你准备的东西他都不 care 不问,问的好多都答不上来。。。)

  1. MTL 优化的工作,类似 PLE?
  2. 模型用到的特征?
  3. 都是类别型特征?
  4. 有没有统计类的特征?比如用户点击了多少次之类的特征?
  5. MTL 优化这个工作 AUC 涨的挺多呀?
  6. 有关注 UAUC 的指标吗?
  7. AUC 的具体值是多少呀?
  8. CTR 模型的 AUC 能达到那么高吗?
  9. AUC 怎么计算的?
  • 概率上就是正序对占所有正负样本对的比例?
  1. AUC 几何定义?
  • ROC 曲线下的面积
  1. ROC 曲线怎么画的?
  2. 介绍一下 CTR 重训打平的这个工作
  3. 为什么重训打不平?
  • 首先原本就存在这个问题并且没有解释,从我后来做的参数缩减工作来看,缩减参数后 AUC 反而提升了,所以原来可能存在过拟合
  1. 流式更新还是天级更新?
  2. 那流式更新的 AUC 和正常的 AUC 的计算有什么区别?
  • 不清楚
  1. 公司 deepinsight 是怎么算 AUC 的?
  • 不清楚
  1. sort 服务用的是公司里哪一套?
  • 不清楚三连

三、比赛经历

  1. 介绍一些这个比赛,以及你是怎么做的?
  2. 知识蒸馏为什么会有用呢?
  • 教师模型 soft label,能学习到类间的相似性
  1. 打断质疑,教师模型也用的同样的数据集,那没有额外的信息啊?
  • 相较于原本 0 0 1 的 label,能学习到类间的相似性(没说完又被打断质疑了,心累)
  • 数据量少小模型参数量就够了,大模型可能过拟合
  1. 有没有试过排除xxx的影响?不记得具体问题了
  2. 你做的这些哪些的效果比较好?
  • F1 score 每一步都能提升一个点左右

四、其它知识点/八股(字节还保留着以前的面评,难顶)

  1. CTR 的损失函数的数学公式
  • 二分类的交叉熵
  1. 最大似然怎么推交叉熵?
  2. 线性回归在拟合一个什么东西?
  • 没懂
  1. 广义线性模型了解吗?
  • 不了解
  1. 就是逻辑回归 sigmoid 之前的线性回归 z=wx+b,拟合的是什么?数学形式?
  • 字节电商推荐算法暑期实习面经 - 图1,因此字节电商推荐算法暑期实习面经 - 图2
  • 一开始没写成分式的形式,面试官又没给代码框,就让口述,我说 字节电商推荐算法暑期实习面经 - 图3,面试官反复问了好几遍,说不对,我就怀疑自己算错了,又推了一遍写成上面的形式,说了,面试官又质问你为什么写成 -log 的形式???我推出来就这样啊,自己现场在纸上推,再口述结果给你,我咋知道你要啥最终形式???本来 sigmoid 就有个 -z 啊
  1. 你了解 GBDT/XGBoost 是吧?你了解 Transformer 是吧?
  • 不了解 + 不了解。。。都是以前的面评的锅,之前日常实习面试简历写的了解这些,好长时间没看过了,都不记得了。。。
  1. 序列特征的处理知道吗?
  • 不会三连 + 1,基线模型里有用到 DIN,但没有改动这部分,不太记得 DIN 的具体形式了(sum pooling -> 加权和)
  1. 在学校里,自己对推荐这块感兴趣吗?以后想继续从事相关的工作吗,还是无所谓呢?

五、算法题:前两道题让讲思路,最后一道写代码

  1. [中等] 470. 用 Rand7() 实现 Rand10()(link)
  • 说调用两次 rand7() - 1,分别代表行号 row 和列号 col,对应一个 77= 49 格的二维矩阵,每一格代表数字 `num = row 7 + col,如果这个数值小于 40,那么直接除 10 取余 + 1,就得到 [0, 9],如果大于 40,则重复上述过程,再调用两次rand7()`。。。。。。
  • 面试官问:为什么大于 40 又要重新调用 rand7() 呢?
  • 面试官问:加入调用 rand7() 要钱呢,怎么减少调用 rand7() 的次数?
  • 回答:第一轮如果 >= 40,则这 9 个数代表行号,再调用一次 rand7() 代表列号,得到 63 个数,如果小于 60 则模 10 取余;否则再将剩余的 3 个数当作行号,再调用一次 rand7() 代表列号,得到 21 个数,如果小于 20 则模 10 取余,否则。。。。。。
  • 面试官问:为什么能得到 63 个数
  • 面试官问:一共用了几次 rand7() 呢?
  • 回答:字节电商推荐算法暑期实习面经 - 图4
  1. [简单] 1. 两数之和
  • 用哈希表存储遍历过的整数的值和下标。遍历的时候查找 target - 当前数值,如果哈希表中存在则直接返回
  • 面试官多次问:哈希表存的是?
  • 答:key 是整数值,value 是下标
  1. [困难] 772. 基本计算器 III(leetcode hard 题,还是会员题,唉。。。)
  • 面试官给的题目是实现包含 +, - , *, /, (, ) ,空格,数字的计算器
  • 给了题目之后面试官就黑屏闭麦了,留我在这写。。。
  • 写出来了,自己跑了个样例没问题,喊了下面试官回来看
  • 面试官给的题目没写是整数除法,我就用了 double(leetcode 原题是说了整数除法的),埋坑了
  • 面试官给了个样例 (3*4+87*7)*((33+44*55)),没给结果,我跑出来是 1.52331e+06,面试官说你这个答案差不多,但是精度不对,答案是 1523313,精度不对那答案就是错的,你再想想怎么改
  • 回去看代码想了好一会没想出来 double 精度有问题怎么改,跟面试官说我大概改不出来了,面试官就质问:那你是打算放弃了吗?。。。。。。
  • 沉默了一会,面试官说那简化成 int 吧,整数除法,不考虑小数,我就把代码中的 double 都改成了 int,这个样例过了(面试官说简化成 int,我就天真的真的改成 int,没改成 long long,又埋坑了)
  • 然后,面试官又给了个样例,(3*4+87*7)*(33+44*55)*(99-43-222-212*33),也没给结果。运行了下,面试官说结果不对,就反问面试官正确答案是多少,结果面试官不说,就让我再改改代码。。。
  • 于是把 int 改成 long long,运行之后,卑微地问面试官正确答案是多少,终于对了。。。

六、反问环节

  1. 面试官问有什么想问的吗,我感觉我早已心如死灰,说没啥想问的了,表现也不好。面试官说真没啥想问的吗,就勉强问了个你们都做些啥工作。。。

三面

2022.04.11 下午 14:00。当时二面完想着肯定挂了,没想到过了。三面问的压力就没那么大了,面试体验好很多

一、自我介绍

二、项目/实习经历

  1. 挑一段自己觉得有挑战的实习或比赛经历介绍一下
  • 讲了实习做的第一个工作,重训打平
  1. 为什么重训打不平呢?
    1. 入职前就存在这个问题,且没有很好的解释
    2. 我做了这个工作后,缩减参数量,AUC 提升,A/B 打平,说明原来的基线可能存在过拟合
  2. 训练的时候看的是什么的 AUC?离线和线上的 AUC 可能存在 GAP,离线训练的 AUC 可能高估,线上 AUC 可能会降低?线上和离线的 AUC 差别大吗?
  • 当时 AB 时主要关注 AB 指标了,没重点关注 AUC,面试官说需要关注这个
  1. 缩减了哪些部分的参数?
  2. 你们当时这个精排模型有多少人在做?
  • 这个 CTR 模型就是我在做
  1. 模型结构是怎样的?
  2. 介绍一下你这里用的 NAS 的原理
  3. 怎么评估哪个结构效果更好?
  • 就是每个子结构乘上一个概率,概率的大小就代表重要性
  1. Attention FM 介绍一下
  2. 写一下 FM 的 loss function,有 n 条样本 {字节电商推荐算法暑期实习面经 - 图5}
  • 就是二分类的交叉熵损失 字节电商推荐算法暑期实习面经 - 图6
  1. 为什么交叉熵损失函数的形式是这样的呢?
  • 逻辑回归,最大似然推导
  1. 上面的损失函数里 字节电商推荐算法暑期实习面经 - 图7等于什么?也就是原始 FM 的公式?
  • 字节电商推荐算法暑期实习面经 - 图8
  1. 你上面写的是一个线性模型,那值域?
  • 应该加一个 sigmoid,字节电商推荐算法暑期实习面经 - 图9
  1. 简化一下,逻辑回归字节电商推荐算法暑期实习面经 - 图10,怎么计算参数 w 和 b?
    1. 交叉熵损失 字节电商推荐算法暑期实习面经 - 图11
    2. 梯度下降法更新参数 字节电商推荐算法暑期实习面经 - 图12
    3. 求梯度字节电商推荐算法暑期实习面经 - 图13,即求字节电商推荐算法暑期实习面经 - 图14
      1. 字节电商推荐算法暑期实习面经 - 图15
      2. 字节电商推荐算法暑期实习面经 - 图16
      3. 字节电商推荐算法暑期实习面经 - 图17
    4. 偏置 b 的更新同理,就是最后 字节电商推荐算法暑期实习面经 - 图18
  2. 你如果继续做之前的实习工作,还能做什么优化呢?
  3. 你的工作推荐的物料是什么?
  • 关于装修攻略之类的图文、视频
  1. 商家和个人的文章都有吗?那会不会存在很多商家的文章,让用户觉得是广告呢?
  • 当时确实存在这个问题
  1. 场景题:抖音的用户,但对于电商是新用户,应该怎么给他推荐带货的短视频 or 带货直播 or 带货商品?
  • 新用户冷启动问题
  • 本来就是抖音用户,应该有很多特征,可以用相似性做推荐?
    • 面试官反问:但是加入我和你刷抖音的喜好类似,但是我最近买了一把椅子,我把这个推荐给你你会感兴趣吗?
  • 可以先给用户推荐一些比较热门的,来探索用户兴趣
    • 面试官反问:但是热门的可能是一些母婴类相关的,因为可能家庭主妇刷抖音刷的比较多,那么把这类视频推荐给你你会感兴趣吗?
  • 也可以根据性别、年龄之类的特征,不同用户群体的喜好可能有差别,在抖音上关注的、喜欢的视频都不太一样,比如前面说的家庭主妇他们刷抖音可能也更喜欢刷母婴相关的,可以推荐同一类群体的热门商品给新用户
  • 可以利用商品和用户感兴趣的抖音视频,做一个相似度计算之类的,类似 DIN 这种。或者可以根据和这个用户喜好相似的其他用户的历史购买记录,来和这个商品计算相似度
  • 首先(初期)可以推荐多样性的商品(比如各个类别的热门商品)给用户,来探索用户的喜好,以便后续可以进行更好的推荐
    • 面试官反问:那这个排序模型可以怎么优化呢,相较于通用的排序模型?
  • 新用户冷启动这一块我不是很了解

三、算法题

  1. [中等] 33. 搜索旋转排序数组

四、反问环节

  1. 再介绍一下你们具体做的工作?
  • tiktok 带货短视频的推荐、带货直播的推荐、以及类似淘宝首页的这种聚合的双栏的推荐(包含商品、短视频、直播)
  1. 转正的要求以及转正率?

HR 面

2022.04.12 14:30

  1. 自我介绍
  2. 实习什么时间可以到岗?
  3. 可以实习多久呢?
  4. base 地点选择在哪里?你倾向于去哪里?
  5. 介绍一下你印象比较深刻的一个实习 or 比赛经历
  6. 你实习时或者做项目时,当你遇到困难的时候,你的第一想法是自己解决还是找队员一起商量?
  7. 团队合作时,你更倾向于去做领导的角色吗?
  • 更倾向于平等的相互沟通交流
  1. 如果你在团队工作中发现有的队员在划水,你会怎么解决?
  2. 你之前实习或者团队项目,在团队的融入上有没有遇到一些困难,比如意见上的分歧之类的?
  3. 如果来这边实习的话,你会有什么预期呢?比如说你想收获到什么,学习到什么?
  4. 你未来对自己的职业规划?(地点、岗位等都可以谈一谈)
  5. 你刚才提到之前在字节的实习体验很好,可以展开来谈一下具体哪些方面觉得体验比较好呢?
  • 相处融洽,不强调上下级关系,面试流程推荐高效
  1. 你手上其它公司的 offer 或者面试进展?
  2. 你自己有更倾向于哪家公司吗?原因呢?
  3. 你其它公司面的也是推荐方向吗?
  4. 反问环节
    1. base:北京、上海、杭州都可以,暑期选择北京是 ok 的,后续实习转正也可以转到上海、杭州。北京的办公地点在海淀中关村
    2. 面试结果多久有通知呢?hr 面面完会有 offer 审批等流程,顺利的话 3 天左右会有反馈

End

2022.04.13 收到 offer 了~
字节效率真的高,是我投的最晚的大厂,但最早结束流程的,流程推进很快,如果不是隔了一个清明假期以及三面改约,应该还能更快。