如何准备算法岗位面试?你需要知道的都在这了

文章同步发表在我的公众号:算法小哥克里斯。

写在前面:

众所周知,算法岗位现在可谓是神仙打架,竞争压力非常大,但这篇文章的目的并不是为了劝退,而是将要准备算法面试的知识梳理一下,让你有一个清晰的脉络,从而从容应对算法面试,找到心仪的工作。

先介绍一下我的情况,本科来自一所双非的普通院校,非计算机专业,研究生考研到南京大学计算机系,在秋招中拿到了三家大厂的offer,最后选择了字节跳动的算法岗位。感觉对于我一个非科班出身,既没有论文,也没打过ACM的人来说,算是一个非常好的归宿了。这里需要提一下,一个好的实习非常重要。实习并不需要在一个特别好的公司,但是一定要做一些有技术性的工作,而不是单纯的干苦力活。

这篇文章主要会介绍一些算法岗位面试中需要了解的知识。


一、了解面试

想要应对面试,第一步是先了解面试,现在的面试流程基本都包括:

  1. 电话面试:作为一个初筛阶段,主要考察候选人的数据结构与算法知识,可能会夹杂着一些机器学习相关的知识
  2. 视频面试或线下面试,主要会涵盖以下内容
    1. 更多的考察数据结构与算法知识,以及机器学习编程,考察编程能力
    2. 机器学习的理论问题,考察对机器学习常见算法的理解
    3. 机器学习的系统设计,考察部署一个完整的机器学习系统,需要了解的一些知识
    4. HR面试

根据面试内容,我们可以将面试涵盖的问题分为以下三个部分,然后逐个击破:

  1. 编程相关,数据结构与算法,机器学习编程
  2. 机器学习理论
  3. 机器学习系统设计

二、编程相关

数据结构与算法

首先是数据结构与算法的准备,这里主要就是利用好 LeetCode

一个小的建议:在刷题过程中,可以制作一个电子表格,记录一些比较困难的问题,以及对应的解决算法。便于之后复习,同时也能够了解到自己哪块比较薄弱,针对性练习。

英语基础比较好的同学,推荐一本比较基础的算法书(100页左右),如果有时间的话可以看看,没有时间的话还是要多做一些实际的题目,这本书有Java、Python和C++版本的:https://elementsofprogramminginterviews.com/sample/

机器学习编程

虽然在面试过程中可能不太好考察机器学习的编程能力,但是因为大家实际使用中可能都是调库,所以有时候虽然是一个非常简单的算法,但是真要构思实现起来也比较困难。之前见牛客网有人面试被出了手写KNN算法,虽然是一个非常基础的机器学习算法,但是可能没有多少人能够在面试环境中手写出来吧。

这里推荐一个非常好的资源,里面有各种常见机器学习算法的简洁实现:https://github.com/rushter/MLAlgorithms

三、机器学习理论相关

想要寻找算法工程师岗位,下面这些技术是必须知道的,算是基础中的基础:

  • 线性回归
  • 逻辑回归
  • KNN
  • 基于树的算法相关:决策树、随机森林、bagging和boosting、KL散度、熵等
  • SVM
  • 基础的聚类算法(K-Means)和EM算法
  • PCA降维算法相关:奇异值分解和特征值
  • Naive Bayes
  • 最大似然估计

下面是一些深度学习相关的技术,在这些话题中,至少需要知道经典的神经网络结构;然后其余话题,需要根据自己之前所做的项目和简历上的内容进行准备:

  • 经典神经网络结构相关:前馈网络、RNN、LSTM、CNN、Attention等
  • 生成对抗网络
  • 自然语言处理
  • 计算机视觉
  • 推荐算法
  • 信息提取
  • 强化学习

在上述话题中,有一些非常共通的技术,这些也是面试过程中经常考察的,需要重点了解:

  • 激活函数
  • 常见优化器,如SGD,Adam和RMSProp
  • 损失函数,如log-loss,hinge loss,,Huber loss,L1和L2 loss
  • 评价指标:Precision和Recall,IOU,F1值,RMSE
  • 特征选择
  • 特征工程,关于这个可以看看Kaggle上的教程:https://www.kaggle.com/learn/feature-engineering

上述技术相关的一些学习资源:

当这些知识都学习的差不多以后,可以通过以下测验看自己是否掌握良好:

四、系统设计

系统设计虽然不是面试时候一定会问到的,但是,这些知识将来工作的时候一定会用到,所以可以早做准备,而且有时候确实也会被问到。

那么如何设计完整一个机器学习系统呢?包括以下的步骤:

  1. 明确需求,这个是所有后续的基础。包括需要多少数据、硬件条件、模型复杂度和效率的tradeoff,如何评价我们的模型效果等等
  2. 网络结构,至少需要包括以下几个部分:
    1. 数据获取和处理,可能涉及到标注
    2. 特征选择和特征工程
    3. 额外的一些考量:数据是否和将来实际场景中的数据有偏差(bias),如果有,该如何解决
  3. 整体架构。这一步主要考察对各个模型的理解,需要能够知道每个模型的优缺点,什么场景下适用于哪一个模型
  4. 线上服务。部署模型上线需要考虑以下的因素:
    1. A/B 测试的效果
    2. 模型是否会带来偏差
    3. 需要多久重新训练我们的模型
    4. 在哪里执行模型的推导(inference),服务器端还是用户端,如果是用户端可能需要进行模型蒸馏

关于系统设计可以参考的一些资料:


写在后面:关于算法工程师面试需要准备的知识就介绍到这里了,如果还有什么问题,欢迎评论或者私信和我交流。祝大家都能够找到心仪的工作,最后,如果觉得这篇文章对你有帮助,欢迎点赞收藏支持我,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值