春季到来,春招不久也会开始。在本项目中,作者为大家准备了 ML 算法工程师面试指南,它提供了完整的面试知识点、编程题及题解、各科技公司的面试题锦等内容。目前该 GitHub 项目已经有 1 万+的收藏量,想要跳一跳的同学快来试试吧。

  • 项目地址:https://github.com/imhuay/Algorithm_Interview_Notes-Chinese

如下所示为整个项目的结构,其中从机器学习到数学主要提供的是笔记与面试知识点,读者可回顾整体的知识架构。后面从算法到笔试面经主要提供的是问题及解答方案,根据它们可以提升整体的解题水平与编程技巧。

面试知识点

面试题多种多样,但机器学习知识就那么多,那么为了春招或春季跳槽,何不过一遍 ML 核心知识点?在这个 GitHub 项目中,作者前一部分主要介绍了机器学习及各子领域的知识点。其中每一个知识点都只提供最核心的概念,如果读者遇到不熟悉的算法或者遇到知识漏洞,可以进一步阅读相关文献。

项目主要从机器学习、深度学习、自然语言处理和数学等方面提供详细的知识点,因为作者比较关注 NLP,所以并没有提供详细的计算机视觉笔记。

机器学习

首先对于机器学习,项目主要从基础概念、基本实践、基本算法和集成学习专题这四个方面概括 ML 的总体情况。其中基础概念可能是最基本的面试问题,例如「偏差方差怎么权衡?」、「生成模型和判别模型的差别是什么?」、「先验和后验概率都是什么,它们能转换吗?」。

这些知识点一般是入门者都需要了解的,而对于 ML 基本实践,主要会从如何做好传统 ML 开发流程的角度提问。例如「你如何选择超参数,能介绍一些超参数的基本搜索方法吗?」、「混淆矩阵、准确率、精确率、召回率或 F1 值都是什么,如何使用它们度量模型的好坏?」、「你能介绍数据清洗和数据预处理的主要流程吗,举个例子?」。

这些问题都能在前两部分的知识点中找到答案。后一部分的基本算法就非常多了,从最简单的 Logistic 回归到复杂的梯度提升树,这一部分总结了主流的机器学习算法:

  • 信息论

  • 逻辑斯蒂回归

  • 支持向量机

  • 决策树

  • 集成学习

  • 梯度提升决策树 GBDT

  • 随机森林

其中每一种算法都提供了最核心的概念,例如对于决策树中的 CART 算法,笔记主要引用了李航《统计学习方法》中的描述:

最后机器学习还有一个关于集成方法的专题。除了支持向量机,集成方法相关的问题在 ML 中也比较重要,因为像 XGboost 和随机森林等方法在传统 ML 中效果应该是顶尖的,被问到的概率也大得多。

深度学习

深度学习的内容就相对比较多了,目前也有非常多的笔记或资料,但是我们可能会感觉深度学习的问题并没有机器学习难。顶多会让我们手推一个反向传播算法,不会像手推支持向量机那样让我们从表达式推一下卷积网络。如果要为深度学习打基础,其实最好的办法是学习 Ian Goodfellow 的《Deep Learning》,我们只要阅读这本书的前两部分:应用数学与机器学习基础;深度网络:现代实践。第三部分因为涉及大量前沿研究的东西,我们暂时可以不急着学。

该项目主要从以下几个方面介绍深度学习面试知识点:

  • 深度学习基础

  • 深度学习实践

  • CNN 专题

  • RNN 专题

  • 优化算法专题

  • 序列建模专题

  • 《Deep Learning》整理

前面 6 个专题都是介绍的笔记,每一个专题都有非常多的具体内容,其中序列建模专题还引用了机器之心综述的从循环到卷积,探索序列建模的奥秘。如下展示了优化算法专题所包含的内容:

在最后的《Deep Learning》整理中,项目作者给出了五十多道深度学习问题,并根据这些问题介绍《Deep Learning》中的知识点。如下为问题示例,不同的星号表示问题的难度:

自然语言处理与数学

后面的自然语言处理也是最近在重点更新的,目前介绍的方面主要有;

  • 自然语言处理基础

  • NLP 发展趋势

  • 词嵌入专题

  • 句嵌入专题

  • 多模态专题

  • 视觉问答综述

  • 深度理解查询

NLP 很多知识点其实都不算基础内容,这需要根据我们自己学习的领域收集复习内容。不过像 NLP 基础或词嵌入等知识点,项目作者介绍得很详细,它们也是 NLP 面试必备知识。

最后还有一些数学知识点,它们是算法工程师面试所需要具备的基础。例如今日头条算法工程师的实习生面试会问:「在圆环上随机选取 3 个点,这 3 个点组成锐角三角形的概率?」,或者其它算个积分之类的。项目作者主要为面试准备了以下几方面的知识点;

  • 概率论

  • 微积分本质

  • 深度学习核心

其中深度学习核心主要包含非线性激活函数、梯度下降和反向传播。

算法题和笔试题

对于编程面试,基础算法是必不可少的,它们一般体现在笔试题上,例如数据结构、动态规划或排列组合等。很多开发者可能感觉笔试解题会很难,因为题目并不会告诉你需要用什么样的基础算法来解决,全靠我们自己一步步解析题目。这就要求我们对各种基础算法都比较熟悉,项目作者提供了以下基本算法专题:

  • 字符串

  • 数据结构

  • 高级数据结构

  • 动态规划

  • 双指针

  • 区间问题

  • 排列组合

  • 数学问题

  • Shuffle、采样、随机数

  • 大数运算

  • 海量数据处理

这些算法题会介绍具体的问题、解题思路以及对应的解题代码。例如在数据结构中,我们如何判断树 B 是不是树 A 的子树。

如下所示为解题代码,注意基本上各基础算法的题解都是用 C++写的,作者会引用剑指 Offer 题解和 Leetcode 题解等的解决方案。

class Solution {public:    bool HasSubtree(TreeNode* p1, TreeNode* p2) {        if (p1 == nullptr || p2 == nullptr)  // 约定空树不是任意一个树的子结构            return false;

        return isSubTree(p1, p2)    // 判断子结构是否相同            || HasSubtree(p1->left, p2)      // 递归寻找树 A 中与树 B 根节点相同的子节点            || HasSubtree(p1->right, p2);    }

    bool isSubTree(TreeNode* p1, TreeNode* p2) {        if (p2 == nullptr) return true;        // 注意这两个判断的顺序        if (p1 == nullptr) return false;

        if (p1->val == p2->val)            return isSubTree(p1->left, p2->left)    // 递归判断左右子树                && isSubTree(p1->right, p2->right);        else            return false;    }};

此外,该项目还提供了 IO 模板和必备算法模板。作者表示不少笔试不像 LeetCode 那样可以自动完成 I/O,我们需要手动完成数据 I/O,而且如果我们没有 ACM 经验,很可能会在这上面浪费很多时间。因此这里总结的几种常见 IO 模板对于编程面试有很大的帮助,另外的算法模板同样也是。

例如如果我们输入不定数量个 Input,且以某个特殊输入为结束标志,那么用 C 语言实现的模板为:

// 示例 1int a, b;while (scanf("%d %d", &a, &b) != EOF && (a != 0 && b != 0)) {    // ...}

// 或者while (scanf("%d %d", &a, &b) != EOF && (a || b)) {    // ...}

// 示例 2int n;while (scanf("%d", &n) != EOF && n != 0) {    // ...}

用 C++实现的模板为:

// 示例 1int a, b;while (cin >> a >> b) {    if (a == 0 && b == 0)        break;    // ...}

// 示例 2int n;while (cin >> n && n != 0) {    // ...}

面试真题

最后,项目作者还收集了十多家科技企业面试真题,并介绍从一面到三面的内容与经验。

例如以下是头条/字节跳动-深度学习/NLP 方向的三面概览:

具体的面试题也会提供,如下所示为字节跳动 18 年 8 月的笔试题:积分卡牌游戏。

当然给了题目,对应的解决方案也会提供:

# 输入处理n = int(input())x, y = [], []for i in range(n):    _x, _y = list(map(int, input().split()))    x.append(_x)    y.append(_y)

xy = list(zip(x, y))xy = sorted(xy, key=lambda t: t[1])

ret = 0if sum(x) % 2 == 0:  # 如果所有 x 的和为偶数    print(sum(y))    # 直接输出所有 y 的和else:    for i in range(len(xy)):        if xy[i][0] % 2 == 1:  # 去掉 x 中为奇数的那一项            ret = sum([xy[j][1] for j in range(len(xy)) if j != i])            print(ret)            break

————

编辑 ∑ Gemini

来源:机器之心

微信公众号“算法数学之美”,由算法与数学之美团队打造的另一个公众号,欢迎大家扫码关注!

更多精彩:

☞如何向5岁小孩解释什么是支持向量机(SVM)?

☞自然底数e的意义是什么?

☞费马大定理,集惊险与武侠于一体

☞简单的解释,让你秒懂“最优化” 问题

☞一分钟看懂一维空间到十维空间

☞ 本科、硕士和博士到底有什么区别?

☞小波变换通俗解释

☞微积分必背公式

☞影响计算机算法世界的十位大师

☞数据挖掘之七种常用的方法

算法数学之美微信公众号欢迎赐稿

稿件涉及数学、物理、算法、计算机、编程等相关领域,经采用我们将奉上稿酬。

投稿邮箱:math_alg@163.com

春招已近,这份GitHub万星的ML算法面试大全请收下相关推荐

  1. 把握春招,收下这份GitHub万星的ML算法面试大全!

    来源:机器之心 本文约2380字,建议阅读7分钟. 在本项目中,作者为大家准备了 ML 算法工程师面试指南,它提供了完整的面试知识点.编程题及题解.各科技公司的面试题锦等内容. [导 读]春季到来,春 ...

  2. 这份GitHub万星的机器学习算法面试大全请大家注意查收

    https://www.toutiao.com/a6677723633890099715/ 实习季已经开始,秋招也需要进入准备阶段.小编给大家带来一个好的项目中,作者为川大研究生,为大家准备了 ML ...

  3. BAT华为美团头条面试考什么?这份GitHub万星资源,告诉你面试题+答案+出题人分析...

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 2020校招脚步临近,怎样备战即将到来的面试,在众多面试者中脱颖而出惊艳到面试官,化身大厂Offer收割机? GitHub上就有这样一个万星 ...

  4. Github获星99k的Java面试八股文,最全秋招面试攻略

    Github获星99k的Java面试八股文,最全秋招面试攻略 2020年我凭借一份<Java面试核心知识点>成功拿下了阿里.字节.小米等大厂的offer,两年的时间,为了完成我给自己立的f ...

  5. KeyError: [] not found in axis_最IN黄浦 | 万圣狂欢倒计时!露台派对、变装游、沉浸式密室...请收下这份黄浦活动指南~_电竞...

    原标题:最IN黄浦 | 万圣狂欢倒计时!露台派对.变装游.沉浸式密室...请收下这份黄浦活动指南~ Ttick or Treat 一年一度的万圣节就要来了, 黄浦不少商圈都策划了多场精彩活动: BFC ...

  6. 备战2022春招和暑期实习!我建了一个AI算法岗求职群!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 大家好,我是Amusi.2022届校招的秋招正式批 已经接近尾声!还未拿到Offer或者没有找到满意工作的同 ...

  7. GitHub万星资源:强化学习算法实现,教程代码样样全,还有详细学习规划

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 鱼羊 发自 凹非寺  量子位 报道 | 公众号 QbitAI 自从有了强化学习(RL) ...

  8. 牛皮!这份GitHub上标星90.6K的Java面试指南+笔记,带你搞定96%的java面试

    前言 今年受疫情影响,面试难度增大,工作很难找,从延迟的金三银四,裁员的企业.人数众多的金九银十等方方面面都可以看得出来 今天,我们要分享的是,GitHub上标星90.6K的Java面试指南+笔记,这 ...

  9. 用Python快乐学数学,Github万星神器Manim简介

    高考在即,笔者想为孩子以后能够快乐学习数学.学习编程找到一个比较合适的项目,经过一番比较发现github上的万星项目manim(https://github.com/3b1b/manim)就非常好.它 ...

最新文章

  1. python考证书-计算机二级 Python 怎么考?考什么?
  2. colab如何通过<>来直接加入相对应的代码段呢?模块化代码操作,真好
  3. js循环获取table中的值
  4. Day03-运算符和表达式
  5. QT Windows下生成动态链接库
  6. ThinkPHP6内核通用网站后台权限管理系统源码
  7. python3 绝对值_Python的绝对值最大的数字,python
  8. 黑马博客——详细步骤(八)项目功能的实现之另一种分页方式【mongoose-sex-page】
  9. MAC OS dmg文件转换为ISO
  10. 计算机网络技术与实验清华大学,清华大学计算机网络实验指示书.doc
  11. 【场效应管】之【场效应管型号技术参数】
  12. 4条地铁线,乘船到西站!杭州西站枢纽综合交通规划设计方案出炉
  13. Python期末考试题库
  14. VirtualBox AndroidX86 网络设置
  15. Excel数据分析入门-数据图表
  16. linux shell 安装curl,bash – 不能使用curl安装NPM
  17. pip install lap出现问题
  18. php冰蝎一句话,利用动态二进制加密实现新型一句话木马之PHP篇(转)冰蝎
  19. ILSpy反编译工具的介绍
  20. 《毕业论文新手入坑手册》分享

热门文章

  1. oracle近似查找,距离内的Oracle空间搜索
  2. C++学习之路 | PTA乙级—— 1078 字符串压缩与解压 (20 分)(精简)
  3. omv检查硬盘坏道_坏道检测与修复
  4. oracle获取序列并赋值,Oracle中序列的使用
  5. php代码加文件后缀,php中一行代码获取文件后缀名
  6. 搜狗手机浏览器_搜狗推广开户费多少钱?【搜狗开户代理商】
  7. 服务器winsxs文件夹怎么清理工具,winsxs,教您winsxs文件夹清理方法
  8. 那些年踩过的Java异常,简直了!
  9. python的作者为什么要创造python_为什么要学习Python?老男孩Python开发
  10. long mode 分页_x86 系列 CPU 内存寻址模式总结