准备好春招了么?上科大小哥的面试题与复习资料祝你寒假无忧

选自Github 转载于机器之心

去年上海科技大学 AI 实验室开源了一份深度学习面试题集锦,它从数学基础、经典机器学习算法、深度学习算法以及编程语言等方面提供了众多面试题。此外,这一个项目是作者在准备 2018 年春招实习过程中的总结,内容以计算机书籍的学习笔记为主,在整理重点知识的同时会尽量保证知识的系统性。读者们快来试试能闯过多少道春招面试题吧!

项目地址:https://github.com/ShanghaiTechAIClub/DLInterview

因为上科大的项目并没有提供配套的答案,所以这些问题只能检测自身知识掌握度。不过后文给出了另一个春招/秋招的复习资源项目,它包含计算机科学的大量精要知识与教程,这份复习资源目前已有超过 45K 的收藏量。

数学基础相关

1. 概率与数理统计

一个袋子里有 100 个黑球和 100 个白球,每次随机拿出两个球丢掉,如果丢掉的是不同颜色的球,则从其他地方补充一个黑球到袋子里,如果颜色相同,则补充一个白球到袋子里。问:最后一个球是黑球和白球的概率分别为多大?

2. 智商题

A 容器中有 4L 沙子,B 容器中有 4L 米,假设米和沙子密度一样。有一个 C 容器是 300ml, 第一步,用 C 从 A 中舀 300ml 到 B 中,混合均匀,第二步,用 C 从 B 冲舀 300ml 到 A 中混合均匀。再重复第一步和第二步,问这四步之后,A 中的米和 B 中的沙子谁多?

3. 答题挑战赛

在AI 答题挑战赛中我们对线性代数、概率论和最优化方法等数学基础提了一些有意思的题目:

1. 数学中哪一个子领域以随机事件为研究对象?

A. 概率论;B. 微积分;C. 数学分析;D. 线性代数

2. 概率论中的贝叶斯法则与下面哪个元素无关?

A. 事件概率;B. 自由概率;C. 条件概率;D. 联合概率

3. 在概率论中,中心极限定理与下列哪一项有关?

A. 均匀分布;B. 假设检验;C. 贝叶斯法则;D. 依概收敛

4. 在概率论中,大数定律与下列哪一项无关?

A. 数学方差;B. 条件概率;C. 独立性;D. 数学期望

5. 下面哪一个分布不属于连续型分布?

A. 指数分布;B. 均匀分布;C. 泊松分布;D. 正态分布

以上题目答案:ABDBC

6. 下面哪一项不是线性代数涉及的主题?

A. 行列式;B. 矩阵微分;C. 代数几何;D. 线性方程组求解

7. 一阶张量是什么?

A. 向量;B. 标量;C. 元组;D. 矩阵

8. 列向量左乘行向量得出什么?

A. 矩阵;B. 标量;C. 向量;D. 矢量

9. 矩阵的秩(rank)是指什么?

A. 最大线性相关向量组数;B. 对角线元素之和;C. 最大线性无关向量组数;D. 对角元素之差

10. 下面哪一项与雅可比(Jacobian)矩阵无关?

A. 线性代数;B. 微积分;C.Carl Gustav Jacob Jacobi;D. 概率论

以上题目答案:CAACD

11. 下列与梯度下降无关的是?

A. 最速下降法;B. 坐标下降法;C. 一阶导数;D. 随机梯度下降法

12. 下列会使用 Hessian 矩阵的最优化方法是?

A. 拟牛顿法;B. 共轭梯度法;C. 梯度下降法;D. 牛顿法

13. 一般机器学习中所说的牛顿法是什么?

A. 概率论方法;B. 最优化方法;C. 微积分方法;D. 物理学方法

14. 在最优化方法中,共轭梯度法有什么特点?

A. 比梯度下降收敛快;B. 采用二阶梯度;C. 沿梯度向下降;D. 比牛顿法收敛快

以上题目答案:BDBA

机器学习基础相关

1. 概率与统计相关

  • 最大似然估计和距离度量之间的关系是什么?

  • 如何理解最小二乘与最大似然估计?

2. 线性代数相关

A 和 B 是两个矩阵,求 tr(A'B),A'指 A 的转置。(写出来后,我没有检查 AB 是否 size 相同,他说应该考虑这种边界条件,并说你考虑了 AB 是否空矩阵这是比较好的一点)。

3. 经典 ML 模型

3.1 SVM 模型

  • 讲一讲 SVM,知道多少说多少?为什么要用对偶问题求解?(今日头条)

  • 简单讲一下 BP 是如何计算的?

  • SVM 加核函数用过吗?讲一讲其中的差别?(今日头条)

  • 训练样本多,维度大就可以用核函数;如果样本少,用核函数比较容易过拟合

  • SVM 在训练的时候有没有遇到 hard example?(今日头条)

  • SVM 对 hard example 的应用很重要,先用一部分训练集训练一个模型,然后用剩下的一部分训练集的一部分做测试,把出错的再送入重新训练,重复二三次,效果会比较好

  • 怎样选择 SVM 核函数?多项式核和 RBF 核的关系?

  • 说一说 LR 和 SVM 的损失函数。

3.2 PCA

  • 讲一下 PCA,为什么是方差最大?

  • 如何推导 PCA,具体针对推导问很多为什么。

3.3 XGBoost

  • 了解提升方法吗?你能解释一下最基础的 AdaBoost 算法,以及提升树算法吗?

  • XGBoost 了解吗?你能解释一下 XGBoost 的核心思想及主要做法吗?

3.4 其它

  • 讲一下生成模型和判别模型有什么区别

  • 你觉得滴滴打车的拼车价是怎么计算出来的,详细描述。(路径规划,订单预测之类的)

  • 你觉得滴滴打车的溢价,1.1 倍,1.2 倍,这些数值是怎么计算出来的?(订单预测,当前司机数量),目的是什么?

  • 推导 BP,神经网络的求导及反向传播过程是怎么样的?(可以用均方损失函数)

4. 答题挑战赛

在机器之心 AI 答题挑战赛中我们对经典机器学习方法提了一些有意思的题目:

1. 如果没有非线性激活函数,10 层的神经网络和多少层的神经网络等效?

A.1 层;B. 以上都对;C.10 层;D.5 层

2. 对神经网络执行权重衰减或删除是什么操作?

A. 归一化;B. 正则化;C. 简化;D. 量化

3. 要获得损失函数表面的曲率信息,需要求解损失函数的什么结构?

A. 混淆矩阵;B.Jacobian 矩阵;C.Hessian 矩阵;D. 邻接矩阵

4. 不属于降维方法的是?

A.PCA;B. 自编码器;C.t-SNE;D. 支持向量机

5. 把参数分布吸引到球形域是什么正则化方法?

A.L2;B.L1;C.L0;D.L∞

以上题目答案:BBCDA

深度学习基础相关

1. CNN

  • CNN 为什么可以在 CV/NLP/Speech 等领域都可以使用?

  • 什么样的数据适合 Deep learning?

  • 1×1 卷积的作用是什么?

  • 给你几个输入张量与卷积核,你能手动算一下卷积得出的特征图吗?

  • 一维卷积是怎样做的,你能画一下它大概图示吗?

  • 从 AlexNet、VGG-Net 到 ResNet 介绍一下主流的卷积神经网络架构。

  • 从 Inception-V1 到 Inception-ResNet,介绍一下 Inception 家族的发展以及不同之处。

  • 你能介绍一下目标检测,及该任务主要使用的模型及方法吗?

2. 过拟合 (Overfitting)

  • 何为共线性,跟过拟合有啥关联?如何解决共线性这种问题?

  • 多变量线性回归中,变量之间由于存在高度相关关系而使回归估计不准确。

  • 如何解决 Overfitting 问题,主要有哪些方法?

3. 损失函数

  • 交叉熵和相对熵(KL 散度)之间的关系是什么?KL 散度有哪些特性?

  • 你了解 SVM 常用的合页损失函数吗?它能不能用在深度模型上?

  • 你能解释一下 L1 和 L2 正则化的原理吗?这两种正则化有什么不同?

  • 为什么神经网络的损失函数是非凸的,最优化非凸函数会遇到什么问题?

4. RNN

  • RNN 有什么缺陷以及 LSTM 是如何怎么解决的?

  • GRU 以及 Minimal GRU 都是什么样的,它们的运行机制以及精简的门控都是哪些?

  • 你能用函数抽象表达出循环神经网络吗?它与卷积神经网络的抽象表达有什么不同?

 

5. GAN

  • 介绍一下 GAN,讲一讲生成器和判别器以及他们的关系。

  • 原版生成对抗网络那个目标函数(极小极大博弈)能理解吗?能不能解释一下这个目标函数。

  • WGAN 相比于 GAN 主要改进在哪里,你能解释一下 Wasserstein 距离?

6. 其它

  • 深度学习是万能的吗?什么地方不适用,如果给你一个任务,你如何选择用深度学习还是传统的如 SVM?

  • 深度学习的待学习的参数量和训练样本数量之间的关系是什么样的?

  • 什么是梯度消失和爆炸,解释一下它们形成的原因。

  • 为什么梯度相反的方向是函数下降最快的方向?

算法与数据结构

1. 二叉树

  • 二叉搜索树如何删除某个节点,先说思路后写代码 (今日头条)。

  • 二叉树之字形层次遍历,(正反正反)。

2. 链表

  • 一个链表,如何依次输出第一个,倒数第一个,第二个,倒数第二个(今日头条)。

  • 原址:变换为奇数在前 偶数在后,相对顺序不变。

  • 链表求和。

3. 查找

  • 给一个 float 数,如何求算术平方根.(今日头条)

4. 哈希

  • 要实现一个哈希表应该怎么做(根据要哈希的内容选择合适的哈希函数和冲突解决方案)。

5. 排序

一个 0-1 矩阵,每一排都是 0 在前 1 在后,问哪一排的 1 最多?(二分法)问有没有更简单的方法(每一排记录当前的最左边的 1 的位置,下一排的时候直接忽略右边的)问时间复杂度,猜测是 O(m+n)。

6. 搜索

  • 描述迪杰斯特拉算法。

  • 描述 dfs 和 bfs, 分别怎么实现?(栈和队列)。

7. 动态规划

  • 动态规划是什么, 动态规划和带记忆的递归有什么区别?(自顶而下和自底而上)

  • 0-1 背包问题的动态规划递归式怎么写?

  • 三角数堆,只能往左下或者右下走,从堆顶到堆底和最小是多少。(dp)

8. 其它

  • 若干个长度不同的数组,求最小区间,让每个数组都有数字在这个区间内?

  • 三种砖块,分别是 11,12,13,拼成 1N,有多少种拼法?时间复杂度多少?(今日头条)

  • 斐波那契数列。

  • 描述 KMP 算法。

  • 写代码:两个有序数组的合并。

编程语言相关问题

1. Python

  • 一个 python 的 dict,按照 key-value 存储,如何按照 value 排序。

  • static 的类有什么用。

  • 如何实现一个只能实例化一次的类。

  • 模板类是什么?

  • 纯虚函数和虚函数的区别是什么?

2. C++

  • 一个 dict,如果是 C++怎么做?一个 map,怎么按照 value 排序?

看了这么多题目,哪些会做哪些不会也就有一个明晰的了解。那么如何为年后的春招做准备呢?2018 年中山大学郑永川构建了一个准备秋招/春招的学习笔记:CS-Notes。该项目包含了计算机科学的大量精要知识与教程,目前该项目已经有超过 45K 的收藏量。

CS-Notes 项目从基础排序算法到编程理念展示了计算机科学的应知应会,该项目对机器学习开发者及入门读者也非常有用,例如 Linux 系统、面向对象的编程、Git 工具和代码可读性等。这些笔记都是作者根据对各类书籍的理解,并记录重要知识点而完成。

项目地址:https://github.com/CyC2018/CS-Notes

该项目的主体内容可分为 9 部分,其中算法介绍了基础的栈和队列、并查集、排序和查找等,操作系统介绍了现代计算机系统与 Linux 系统。其它如介绍了设计模式和基本思想的面向对象编程、世界上最先进的分布式版本控制系统 Git、以及 Java 和编程实践等都有涉及。

如下是该项目各类别的基本目录与内容,因为机器学习可能会常用到面向对象的编程方法,因此我们在后面简要介绍了这一章节中面向对象的基本思想。

算法 

  • 剑指 Offer 题解(目录根据原书第二版进行编排)

  • Leetcode 题解(做了一个大致分类,并对每种分类题型的解题思路做了总结)

  • 算法(排序、并查集、栈和队列、红黑树、散列表)

操作系统 

  • 计算机操作系统(进程管理、内存管理、设备管理、链接)

  • Linux(基本实现原理以及基本操作)

网络 

  • 计算机网络(物理层、链路层、网络层、运输层、应用层)

  • HTTP(方法、状态码、Cookie、缓存、连接管理、HTTPs、HTTP 2.0)

  • Socket(I/O 模型、I/O 多路复用)

面向对象 

  • 设计模式(实现了 Gof 的 23 种设计模式)

  • 面向对象思想(三大原则(继承、封装、多态)、类图、设计原则)

数据库 

  • 数据库系统原理(事务、锁、隔离级别、MVCC、间隙锁、范式)

  • SQL(SQL 基本语法)

  • Leetcode-Database 题解(Leetcode 上数据库题目的解题记录)

  • MySQL(存储引擎、索引、查询优化、切分、复制)

  • Redis(五种数据类型、字典和跳跃表数据结构、使用场景、和 Memcache 的比较、淘汰策略、持久化、文件事件的 Reactor 模式、复制)

Java 

  • Java 基础(不会涉及很多基本语法介绍,主要是一些实现原理以及关键特性)

  • Java 容器(包含容器源码的分析)

  • Java 虚拟机(运行时数据区域、垃圾收集、类加载)

  • Java 并发(线程使用方式、两种互斥同步方法、线程协作、JUC、线程安全、内存模型、锁优化)

  • Java I/O(NIO 的原理以及实例)

系统设计

  • 系统设计基础(性能、伸缩性、扩展性、可用性、安全性)

  • 分布式(分布式锁、分布式事务、CAP、BASE、Paxos、Raft)

  • 集群(负载均衡、Session 管理)

  • 攻击技术(XSS、CSRF、SQL 注入、DDoS)

  • 缓存(缓存特征、缓存位置、缓存问题、数据分布、一致性哈希、LRU、CDN)

  • 消息队列(消息处理模型、使用场景、可靠性)

  • 分布式问题分析(分布式事务、分布式锁、分布式 Session、负载均衡)

工具 

  • Git(一些 Git 的使用和概念)

  • Docker(Docker 基本原理)

  • 构建工具(构建工具的基本概念、主流构建工具介绍)

  • 正则表达式(参考 正则表达式必知必会)

编码实践 

  • 代码可读性(参考 编写可读代码的艺术)

  • 代码风格规范(Google 开源项目的代码风格规范)

  • 代码风格规范(Google 开源项目的代码风格规范)

你可能感兴趣的:(准备好春招了么?上科大小哥的面试题与复习资料祝你寒假无忧)