写在前面
在字节跳动校招提前批最后一周投递了简历,从简历投递到意向书发放,整个流程下来不到十天的时间。面试总共包括三轮技术面,一二面结束后当天电话告知通过并预约下一轮面试时间,三面结束 24 小时内 HR 小姐姐告知面试全通过并发放意向书。面试过程中,面试官们都很和蔼,在回答问题时也会适当地给出引导,几轮面试体验都非常良好,气氛比较轻松活跃。
第一轮面试
代码题
- 岛屿数量
- 实现 K-means 算法
- 用 Python 实现的,但没有 numpy 库无法运行代码,只能和面试官讲解所写代码
知识点
- 神经网络常用的优化算法
- 介绍了 SGD、Momentum、AdaGrad、RMSProp 和 Adam
- L1 正则化和 L2 正则化的区别
- Batch Norm 的原理和作用,与 Layer Norm,Group Norm 的区别
- Dropout 的原理和作用,训练和预测的时候怎么处理
- 神经网络常用的激活函数
- 简单介绍了 sigmoid、tanh 和 relu
- 神经网络权重初始化为零带来的影响,当激活函数为 sigmoid 时有何改变
- 回答得不是很好,在面试官的引导下回答了一部分
第二轮面试
项目
- 简单介绍项目,之后面试官根据项目内容进行提问
知识点
- K-means 算法的原理,是否了解其他聚类算法
- 介绍了 K-means 算法和 DBSCAN 算法
- 对其他机器学习算法的了解程度,介绍一下决策树
- 从划分指标入手,简单介绍了 ID3、C4.5 和 CART 三种决策树
- 从单棵决策树延伸到多棵决策树集成,提到了 GBDT
- GBDT 和随机森林的区别
- 对 CV 和 NLP 中常用模型的了解程度
- 只用过基础的 CNN 模型
代码题
- 树的直径
- 一开始写了个比较暴力的方法,后面又想到一种更快的方法,和面试官讲解了思路
实际题
- 给定一个较大的数据集,数据集中存储了许多数据样本以及每个样本的重复次数,现在需要从数据集中有放回地抽取若干个样本,问如何做到无偏抽样,并分析所提方法的时空复杂度
- 在面试官的引导下不断优化所提的方法,最终达到了较为理想的时空复杂度
第三轮面试
项目
- 简单介绍项目,之后面试官根据项目内容进行提问
知识点
- 对 CV 和 NLP 中常用模型的了解程度,用过哪些模型
- 平时使用较为基础的 CNN 模型,包括卷积层、池化层、Batch Norm 等
- 线性回归和 LR 的区别
- LR 中为什么使用 sigmoid 函数,以及 sigmoid 函数的导函数
- 在 LR 中将权重初始化为 0 的影响,相同操作在神经网络中的影响
- 一面问过的问题又问了一次,幸好一面结束后查阅了相关资料
- 神经网络中权重初始化为 0 到 1 的均匀分布的影响,以及权重初始化的好方法
- 提到了目前常用的高斯分布和截断高斯分布
- 机器学习中常用的评价指标
- 介绍了准确率、召回率、精确率、真正例率、假正例率、ROC 曲线和 AUC
- 从概率意义的角度解释 AUC
- 给定一个训练好的二分类器、若干条数据与对应的标签,如何计算 AUC,并分析时间复杂度
- 给定一个卷积函数的输入图尺寸、输出图尺寸和卷积核的大小,求卷积操作的步长和填充
代码题
- 实现一个卷积函数
- 由于输入图有三个维度(通道、长和宽),卷积核有四个维度,实际写出来的代码有很多个 for 循环嵌套,需要理清思路
- 分析了所写代码的可优化空间,包括卷积结果的可复用性
总结
- 算法题比较重要,平时尽量多刷题,写完一道题可以看看题解,想想自己的算法还有哪些点可以进一步优化,或者有没有更好的算法
- 基础知识点可参考算法面试宝典和讨论区的面经,看看里面的题目,答案建议从书中或网上查询
- 对自己的项目要有较为深入的理解,并尽可能以清晰、易于理解的方式介绍自己的项目
- 提前准备好面试开始时的自我介绍以及面试结束之前的反问环节
全部评论
(12) 回帖