如何准备算法岗位面试?你需要知道的都在这了
Posted Chris
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何准备算法岗位面试?你需要知道的都在这了相关的知识,希望对你有一定的参考价值。
写在前面:
众所周知,算法岗位现在可谓是神仙打架,竞争压力非常大,但这篇文章的目的并不是为了劝退,而是将要准备算法面试的知识梳理一下,让你有一个清晰的脉络,从而从容应对算法面试,找到心仪的工作。
先介绍一下我的情况,本科来自一所双非的普通院校,非计算机专业,研究生考研到南京大学计算机系,在秋招中拿到了三家大厂的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/...
以上是关于如何准备算法岗位面试?你需要知道的都在这了的主要内容,如果未能解决你的问题,请参考以下文章