许愿字节树蛙算法二面通过, 凉经奉上
lz有3个屡试不爽的技能:
1. 考试后拜孔子,一定挂科;
2. 早上查实时公交,一定刚过站;
3. 除电话面试外,一定凉凉(此条无了)。
---
一. 增长算法实习生,可转正
约了8.30早上10:30视频面试,牛客面试间手撕代码那种。
初面前准备:
内推投递后1h就打电话约面试,第一次电话还没接到,忐忑。
看jd描述感觉类似获客量增长or下降的归因分析以及建模,还有辅助平台开发工作,非常感兴趣。要求是最好熟悉python和C++; 有扎实的数据结构和算法功底; 熟悉机器学习、深度学习、因果推断、强化学习中至少一项.
1) 利用周末刷题找找手感;2) 准备简历DL和RL项目;3) 复习ML和因果推断相关方法的大致思路,公式推导怕是来不及;4) 之前做过的微小的开发工作也准备准备。
08.31 果然挂了, 确实考的好基础...基础不牢, 地动山摇.
面试内容如下:
- solo自我介绍+简历项目.
- dev集的作用.
- 正解: :用于估计训练中或训练后模型的泛化误差, 更新超参数; 也可用于模型选择. 还可以通过设置early_stop防止模型过拟合.
- 防止过拟合的方法, 除了L2正则和dev集外还有哪些做法?
- 正解: 数据层面-扩大数据集, 添加噪声, early_stop; 树模型-限制模型深度, 叶节点数量, 或者进行剪枝, 也可以使用bagging思想; 深度模型-dropout, 多任务学习 (隐层参数硬or软共享). 我选了dropout, 但是当时脑抽说成了dropout是防止模型梯度爆炸的.
- 为什么会出现梯度爆炸或者梯度弥散? 为什么单向RNN会出现梯度爆炸等问题?
- 正解: 参考梯度弥散和梯度爆炸 - 深夜十二点三十三 - 博客园 (cnblogs.com)
- 靠近输出层的hidden layer 梯度大,参数更新快,所以很快就会收敛;而靠近输入层的hidden layer 梯度小,参数更新慢,几乎就和初始状态一样,随机分布。这种现象就是梯度弥散(vanishing gradient problem)。而在另一种情况中,前面layer的梯度通过训练变大,而后面layer的梯度指数级增大,这种现象又叫做梯度爆炸(exploding gradient problem)。总的来说,就是在这个深度网络中,梯度相当不稳定(unstable)。
- 出现梯度问题的原因大致有: 权重初始化不当 (可通过使用Xavier/MSRA初始化方法或使用预训练模型)、激活函数选择不当 (使用ReLU而不是sigmoid)、梯度流动方式 (梯度剪切阈值, 改普通RNN为LSTM)、数据集不准确or噪声过大等.
- BN层可以通过对x=Wu+b做规范化, 将activation规范为均值和方差一致使得原本会减小的activation的scale变大, 从而防止梯度弥散.
- 简历中有NLP项目: NLP的数据处理流程 (input->padding->embedding->output), padding有几种方法 (3种, 前pad/后pad/前后截取)
- 如果有很短的句子, 选择前padding方法意味着padding很多0, 在经过深层网络后有效信息会被padding产生的无效权重冲淡, 如何解决?
- 正解: 只能通过选择padding长短在信息和效率之间做tradeoff, 如果语料短句多, 选择较小的padding length.
- 算法题1: 层序遍历二叉树. 都写出来了, 但是不知道为什么return一直为空.
- 算法题2: 手写k-means, 时间不够没有写.
二. 数据挖掘算法实习生
09.01晚20点面试,09.02早上收到二面邀约。
面试官非常耐心,也会给解释和点评。但是因为有很多问题没有答好,觉得凉了。
面试前准备: 无, 老老实实写了一天导师的项目.
09.01晚一面内容:
- 短暂的自我介绍.
- 简历中提到的DSSM算法, 口述一下大致流程: 说了这是Bert文本分类的一个子项目, 所以又简短讲了Bert流程, 讲到padding停了.
- DSSM正负样本如何划分: 没考虑. 面试官解释说: 强相关和弱相关, 然后用不同分类圆回来了. 交流了推荐场景的query-text.
- DSSM等模型如何训练? 公司低代码场景申请GPU训练.
- SQL题: 两表取交集, 先left join on key is null.
- 有用过Hive SQL吗? 没, 只用过SQL.
- LightGBM? 只常用GBDT和XGBoost, 调包侠, 没用过LightGBM.
- 模型过拟合产生的原因: 数据数量过少, 数据质量低, 有outlier.
- 克服模型过拟合的方法: 增加过拟合, 增加噪声, dropout, early_stop, 正则化等.
- 常见的激活函数以及优缺点: 深度学习中常用的激活函数详解 - 知乎 (zhihu.com)
- 正解: 在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性。如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中
- 线性, exponential自然数指数, sigmoid, tanh, softsign, ReLU/LeakyReLU. 不知道用什么就用线性, ReLU目前优于其他.
- 半监督和无监督学习? 没做过项目. 小样本学习? 没做过项目.
- 算法题: 整数颠倒, 不能转换input类型. 稍稍慌了一下, 但是后续写出来了循环.
- 算法题: 和最大的子数组, 一维dp, 写出初始/转移方程/return就结束了.
- 点评: 代码熟练度不够, 以后有面试要加强. (觉得自己凉透了.)
09.08晚二面内容:
视频面试过不了的魔咒终于被打破. 二面留了1周准备时间, 偏向于业务面.
- 自我介绍, 实习到岗时间, 为什么想搞数据挖掘而不是数分;
- 期望收获什么 (我说想写ML, 和倒数第二个问题呼应了);
- 那你介绍一个自己的ML项目 (我说之前搞得都是DL, 没怎么搞过ML), 换成DL也行;
- 搞过分类吗? (搞过, 刚那个DL项目就是)
- 如何选择模型? (准确召回, F1, ROC, AUC等等) 如何衡量多分类效果 (平均准确度, 还有个汉明/杰卡德啥, 答得不好, 反问面试官, 面试官说也可以用加权平均F1score......)
- 假设给你结构化数据, 特征多+有缺失, 讲讲你的处理流程? (分单一特征和多个特征, 单一特征归一化去除缺失值等, 多个特征降维, DeepFM之类)
- 在降维之前, 如何选择特征? ( 答: 读文献参考友商) 面试官震惊中透露着尴尬, 问: 有没有工程化的方法? (corr, 特征聚类等)
- 假设你有所有数据, 假设部分用户填写为真, 如何预测抖音用户性别? (这是个大题, 包括特征设计, 模型选择, 模型评价三步)
- 为什么不选择树模型? (异常值多, 树模型泛化能力差; 特征维度高, 且未必能降维, 可能造成树模型过深)
- 算法题, 之字形输出二叉树. (用flag+list反转被说占用空间太大了)
- 能不能接受工程工作? (能啊, ci/cd是基本功) 面试官: 不, 写SQL之类的.
- 反问: 部门业务, 语言种类.
目前为止处在待通知状态, 轻度焦虑中, 感觉一天更比一天凉.
emmm继续待通知3天了, 凉了凉了.
09.28晚收到9.29下午HR面通知......
泡了20天池子后接到电话继续面试,之前准备的都忘光了,太难了
字节爸爸看看我啊 !!!!
面试真的是简历逐条过,有些问题确实很...独到。
09.29面试后3h收到HR电话沟通offer发放和入职事宜。n战字节,终有一得。
感谢各位大神的面经!继续加油!