如何准备算法岗位面试?你需要知道的都在这了
首页 专栏 算法 文章详情
0
头图

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

Chris 发布于 3 月 15 日

写在前面:

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

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

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

一、了解面试

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

电话面试:作为一个初筛阶段,主要考察候选人的数据结构与算法知识,可能会夹杂着一些机器学习相关的知识

视频面试或线下面试,主要会涵盖以下内容

更多的考察数据结构与算法知识,以及机器学习编程,考察编程能力 机器学习的理论问题,考察对机器学习常见算法的理解 机器学习的系统设计,考察部署一个完整的机器学习系统,需要了解的一些知识 HR面试

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

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

二、编程相关

数据结构与算法

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

如果之前数据结构课程学习不好的同学,建议先在LeetCode上认识一下各个数据结构与一些基础的算法,学的还不错的也可以稍微复习一下:[](https://leetcode.com/explore/...https://leetcode.com/explore/learn/ 分类别进行刷题,我个人在学习过程中,花花酱的视频对我有很大的帮助,这里推荐给大家,他有进行题目分类,可以先把各个类别的题目做一下,这里的题量不多:[](https://zxi.mytechroad.com/bl...https://zxi.mytechroad.com/blog/leetcode-problem-categories/ 在面试中经常出现的题目,这个列表的题目,最好做的非常熟练,实践下来确实经常被问到:[](https://leetcode.com/problems...https://leetcode.com/problemset/top-interview-questions/

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

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

机器学习编程

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

这里推荐一个非常好的资源,里面有各种常见机器学习算法的简洁实现:[](https://github.com/rushter/ML...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/...https://www.kaggle.com/learn/feature-engineering

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

这里推荐两本书:《统计学习方法》和《机器学习实用指南》 如果喜欢通过视频学习的话,推荐吴恩达老师的机器学习课程,这个应该很多人都看过的吧:[](https://www.coursera.org/lear...https://www.coursera.org/learn/machine-learning,对应的查看上课讲义:[](http://www.holehouse.org/mlcl...http://www.holehouse.org/mlclass/ 以及更深入的深度学习专项课程:[](https://www.coursera.org/spec...https://www.coursera.org/specializations/deep-learning,也有网友们整理的讲义:[](https://github.com/mbadry1/De...https://github.com/mbadry1/DeepLearning.ai-Summary

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

[](https://github.com/amusi/Deep...https://github.com/amusi/Deep-Learning-Interview-Book [](https://github.com/geektutu/i...https://github.com/geektutu/interview-questions [](https://github.com/andrewekha...https://github.com/andrewekhalel/MLQuestions

四、系统设计

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

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

明确需求,这个是所有后续的基础。包括需要多少数据、硬件条件、模型复杂度和效率的tradeoff,如何评价我们的模型效果等等

网络结构,至少需要包括以下几个部分:

数据获取和处理,可能涉及到标注 特征选择和特征工程 额外的一些考量:数据是否和将来实际场景中的数据有偏差(bias),如果有,该如何解决 整体架构。这一步主要考察对各个模型的理解,需要能够知道每个模型的优缺点,什么场景下适用于哪一个模型

线上服务。部署模型上线需要考虑以下的因素:

A/B 测试的效果 模型是否会带来偏差 需要多久重新训练我们的模型 在哪里执行模型的推导(inference),服务器端还是用户端,如果是用户端可能需要进行模型蒸馏

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

系统设计的模板:[](https://www.mle-interviews.co...https://www.mle-interviews.com/ml-design-template machine-learning-systems-design(GitHub 5.9k star):[](https://huyenchip.com/machine...https://huyenchip.com/machine-learning-systems-design/toc.html *

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

segmentfault 不经常上,欢迎到知乎找我玩:https://www.zhihu.com/people/...

算法 机器学习 人工智能 深度学习 tensorflow
阅读 84 发布于 3 月 15 日
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
avatar
Chris
声望
0 粉丝
关注作者
0 条评论
得票数 最新
提交评论
你知道吗?

注册登录
avatar
Chris
声望
0 粉丝
关注作者
宣传栏
目录

写在前面:

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

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

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

一、了解面试

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

电话面试:作为一个初筛阶段,主要考察候选人的数据结构与算法知识,可能会夹杂着一些机器学习相关的知识

视频面试或线下面试,主要会涵盖以下内容

更多的考察数据结构与算法知识,以及机器学习编程,考察编程能力 机器学习的理论问题,考察对机器学习常见算法的理解 机器学习的系统设计,考察部署一个完整的机器学习系统,需要了解的一些知识 HR面试

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

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

二、编程相关

数据结构与算法

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

如果之前数据结构课程学习不好的同学,建议先在LeetCode上认识一下各个数据结构与一些基础的算法,学的还不错的也可以稍微复习一下:[](https://leetcode.com/explore/...https://leetcode.com/explore/learn/ 分类别进行刷题,我个人在学习过程中,花花酱的视频对我有很大的帮助,这里推荐给大家,他有进行题目分类,可以先把各个类别的题目做一下,这里的题量不多:[](https://zxi.mytechroad.com/bl...https://zxi.mytechroad.com/blog/leetcode-problem-categories/ 在面试中经常出现的题目,这个列表的题目,最好做的非常熟练,实践下来确实经常被问到:[](https://leetcode.com/problems...https://leetcode.com/problemset/top-interview-questions/

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

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

机器学习编程

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

这里推荐一个非常好的资源,里面有各种常见机器学习算法的简洁实现:[](https://github.com/rushter/ML...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/...https://www.kaggle.com/learn/feature-engineering

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

这里推荐两本书:《统计学习方法》和《机器学习实用指南》 如果喜欢通过视频学习的话,推荐吴恩达老师的机器学习课程,这个应该很多人都看过的吧:[](https://www.coursera.org/lear...https://www.coursera.org/learn/machine-learning,对应的查看上课讲义:[](http://www.holehouse.org/mlcl...http://www.holehouse.org/mlclass/ 以及更深入的深度学习专项课程:[](https://www.coursera.org/spec...https://www.coursera.org/specializations/deep-learning,也有网友们整理的讲义:[](https://github.com/mbadry1/De...https://github.com/mbadry1/DeepLearning.ai-Summary

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

[](https://github.com/amusi/Deep...https://github.com/amusi/Deep-Learning-Interview-Book [](https://github.com/geektutu/i...https://github.com/geektutu/interview-questions [](https://github.com/andrewekha...https://github.com/andrewekhalel/MLQuestions

四、系统设计

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

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

明确需求,这个是所有后续的基础。包括需要多少数据、硬件条件、模型复杂度和效率的tradeoff,如何评价我们的模型效果等等

网络结构,至少需要包括以下几个部分:

数据获取和处理,可能涉及到标注 特征选择和特征工程 额外的一些考量:数据是否和将来实际场景中的数据有偏差(bias),如果有,该如何解决 整体架构。这一步主要考察对各个模型的理解,需要能够知道每个模型的优缺点,什么场景下适用于哪一个模型

线上服务。部署模型上线需要考虑以下的因素:

A/B 测试的效果 模型是否会带来偏差 需要多久重新训练我们的模型 在哪里执行模型的推导(inference),服务器端还是用户端,如果是用户端可能需要进行模型蒸馏

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

系统设计的模板:[](https://www.mle-interviews.co...https://www.mle-interviews.com/ml-design-template machine-learning-systems-design(GitHub 5.9k star):[](https://huyenchip.com/machine...https://huyenchip.com/machine-learning-systems-design/toc.html *

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

segmentfault 不经常上,欢迎到知乎找我玩:https://www.zhihu.com/people/...