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

Posted Chris

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何准备算法岗位面试?你需要知道的都在这了相关的知识,希望对你有一定的参考价值。

写在前面:

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

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

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


一、了解面试

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

  1. 电话面试:作为一个初筛阶段,主要考察候选人的数据结构与算法知识,可能会夹杂着一些机器学习相关的知识
  2. 视频面试或线下面试,主要会涵盖以下内容

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

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

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

二、编程相关

数据结构与算法

首先是数据结构与算法的准备,这里主要就是利用好 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

四、系统设计

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

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

  1. 明确需求,这个是所有后续的基础。包括需要多少数据、硬件条件、模型复杂度和效率的tradeoff,如何评价我们的模型效果等等
  2. 网络结构,至少需要包括以下几个部分:

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

    1. A/B 测试的效果
    2. 模型是否会带来偏差
    3. 需要多久重新训练我们的模型
    4. 在哪里执行模型的推导(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/...

以上是关于如何准备算法岗位面试?你需要知道的都在这了的主要内容,如果未能解决你的问题,请参考以下文章

Chia 官方池协议正式上线! 你需要知道的都在这了!

Chia 官方池协议正式上线! 你需要知道的都在这了!

关于RecyclerView你知道的不知道的都在这了(下)

MySQL 高频面试题,都在这了

程序员面试的刷题网站都在这了,想要的赶紧拿走!

Activity跳转Flag你想知道的都在这了