首页 > 面试复盘 | 字节跳动算法工程师全三面面经
头像
Draymond_666
编辑于 2021-09-03 23:41
+ 关注

面试复盘 | 字节跳动算法工程师全三面面经 内部员工回复

写在前面

在字节跳动校招提前批最后一周投递了简历,从简历投递到意向书发放,整个流程下来不到十天的时间。面试总共包括三轮技术面,一二面结束后当天电话告知通过并预约下一轮面试时间,三面结束 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) 回帖
加载中...
话题 回帖