2020年深度学习算法工程师面经(微软、阿里、商汤、滴滴、华为、海康、平安、陌陌等offer)

极市平台

共 2367字,需浏览 5分钟

 ·

2020-07-28 15:23

加入极市专业CV交流群,与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度 等名校名企视觉开发者互动交流!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~

来源|一言难尽@知乎,https://zhuanlan.zhihu.com/p/148246487
2020届应届渣硕,基于实习和秋招的面试,拿到了微软、阿里、商汤、滴滴、华为、海康、平安、陌陌等offer,下面总结一些经验,希望对大家有所帮助,有问题之处也可以随时指出。如果侵犯公司隐私,烦请告知,此文仅做分享之用。
最开始是以公司为单位进行总结,实习经验可以参考这里:https://github.com/espectre/Algorithms_Engineer_Interview
我发现各公司面试问题存在较多重复,于是按照题目类型分门别类,而不是按照公司机械划分。简单分为深度学习、机器学习基础、图像处理基础、数学基础、算法基础、程序设计语言、模型部署、HR面试以及与我本人简历相关的目标检测、属性识别、Kaggle及天池的比赛、创新想法等几个部分介绍。可能开始会有重叠或者分类不恰当,后面会逐渐更新完善。其中第一篇先介绍到HR面试,第二篇介绍个人相关的项目和比赛部分。

一、深度学习

1.模型类

1.1 resnet和densenet及其不同

相同层数,densenet和resnet哪个好,为什么?
那么ResNet解决了什么问题呢?
训练深层的神经网络,会遇到梯度消失和梯度爆炸(vanishing/exploding gradients)的问题,影响了网络的收敛,但是这很大程度已经被标准初始化(normalized initialization)和BN(Batch Normalization)所处理。
当深层网络能够开始收敛,会引起网络退化(degradation problem)问题,即随着网络深度增加,准确率会饱和,甚至下降。这种退化不是由过拟合引起的,因为在适当的深度模型中增加更多的层反而会导致更高的训练误差。
ResNet就通过引入深度残差连接来解决网络退化的问题,从而解决深度CNN模型难训练的问题。

1.2 resnet两种结构具体怎么实现,bottleneck的作用,为什么可以降低计算量,resnet参数量和模型大小

1.3 Inception系列的演化

1.4 知道哪些移动端/轻量化模型

mobilenet,shufflenet,pelee等

1.5 GAN

2.卷积类

2.1 卷积神经网络结构特点

局部连接,权值共享

2.2 知道哪些卷积

以及卷积过程计算

2.3 深度可分离卷积

原理,为什么降低计算量,口述计算,减少了多少

2.4 deformable conv怎么做

具体怎么学的,对偏移有没有什么限制

2.5 1x1卷积作用

(1)变换channel
(2)通道融合

3.深度学习基础

3.1 BN的原理、作用和实现细节,

其中均值和标准差的计算,以及训练和测试时分别怎么用
如果数据不是高斯分布,bn后怎么恢复

3.2 激活函数

有哪些,为什么使用激活函数
sigmoid
tanh
relu
leaky relu

3.3 损失函数/分类的loss函数

0-1
mse
bce/交叉熵
l1/l2
smooth l1(为什么用这个)
hinge(svm)

3.4 过拟合/欠拟合,预防方法

正则化具体怎么做,为什么有效

3.5 梯度消失/梯度爆炸

现象、原因和解决方法

3.6 网络退化

现象、原因和解决方法

3.7 各种优化器

介绍各种优化器
adam的特点和公式

3.8 调参技巧

关于神经网络的调参顺序?

3.9 神经网络组件

卷积/池化/全连接层/BN/IN/GN等组件

3.10 深度神经网络和深度学习区别

机器学习是很多种方法和模型的总称。
神经网络是一种机器学习模型,可以说是目前最火的一种。
深度神经网络就是层数比较多的神经网络。
深度学习就是使用了深度神经网络的机器学习。

3.11 深度学习为什么比机器学习好

3.12 train,val,test相关

3.13 如果训练集不平衡,测试集平衡,直接训练和过采样欠采样处理,哪个更好

3.14 softmax原理

softmax得出的结果是排序的么,为什么分类用交叉熵

3.15 F1score是_α_=1,那么_α_什么时候取其他值

3.16 梯度物理意义,小球下滚,如果坡很陡,会怎么样,梯度的大小和方向

3.17 pooling层的作用

3.18 监督学习和非监督学习举例

3.19 假设空间与归纳偏好

周志华机器学习绪论1.3

3.20 感受野相关

3x3conv,2x2pool,3x3conv后感受野计算

3.21 如果模型不收敛,怎么调节

3.22 l1/l2正则,怎么选择

weight_decay作用,和l1/l2比较

3.23 解释梯度下降

3.24 链式法则

二、机器学习基础

可能因为简历上可问的东西比较多,面试时间有限,机器学习相关问的不是很多,推荐看一下李航那本统计学习方法。

1.logistic回归

2.svm

3.选择传统机器学习还是深度学习的标准是什么

4.随机森林

bagging和随机森林的区别

5.决策树

三、图像处理基础

1.数字图像处理,各种滤波

2.进行过哪些数据预处理

空图,坏图,单通道图,多通道图等一些情况会怎么处理

3. 图形学知道哪些

四、数学基础

其实主要就是概率与统计相关

1.概率:圆上任意三个点组成的三角形,包含圆心的概率

2.概率:x,y,z都是(0,1)均匀分布,x+y+z<1的概率

3.抛硬币直到连续若干次正面的概率

4.先验概率,后验概率,怎么转换

5.坐标0开始,依次走1,2,3,。。。,n步,可以左或者右,问有没有到不了的位置

加问,到指定位置m,至少需要多少步 (1)没有到不了的,因为左x右x+1,每次走一步,可以到达所有位置 (2)先求最接近m的连续和,然后从里面选两个数作差

6.n个门,1个后门是车,其余n-1个后门是羊,你先选一个,如果面试官告诉你其余n-1个中某个是羊,你会重新选择么

你先选一个,概率1/n 面试官告诉你某个不是,你在剩余中选的概率为两部分 (1)你选的那个是,则概率0 (2)你选的不是,(n-1)/n * 1/(n-2),即你第一次选的不是的情况下剩余n-2中选的是的概率 所以,n=3为2/3,重新选更优

7.三个盒子,一个盒子两个红球,一个盒子一红一蓝,第三个盒子两个蓝球。一人随机选了一个盒子,并摸出一个红球,请问这个盒子里另外一个也是红球的概率是多少

2/3
2/3概率选了第一个盒子

五、算法基础

该部分主要是手撕代码,也是面试的重要组成部分
可能因为我本科非计算机,题目大都相对简单,不过一次0 bug完成还是需要练习。

1.x的n次方(x任意,n自然数)

2.链表排序(然后不能动指针)

3.螺旋打印二维数组

4.删除字符

给定一个字符串和一个数字,删除指定数字个数的字符,并保证删除
给定字符串和数字 abcdabcd 4
删除一个a bcdabcd删除第二个a bcdbcd删除一个b cdbcd删除第二个b cdcd
改:大数组删掉指定个数,怎么最方便。

5.螺旋三角形

5
12 123 13 114 14 15 105 6 7 8 9

6.二叉树深度及最长路径

7.排序

知道哪些排序算法,快排时间复杂度,时间复杂度推导,O(n)的排序方法
时间复杂度O(n)的排序算法
快排,归并,堆排序

8.二叉树路径和为给定值

9.一个数组,其他数出现两次,另一个出现一次,找出

改进:另外两个数出现一次

10.链表中倒数第k个结点

11.判断链表对称/链表回文

12.链表反转

13.逆序对

14.算法:爬楼梯

剑指offer(8)

15.算法:连续子数组的最大和

剑指offer(30)

16.算法:最长不重复子串

leetcode(3)/剑指offer第二版(48)

典型题.求一个数组中只包含0,1使得其中0,1个数相等的最大子数组

17.算法:给定一个数组A,求max(Ai - Aj)。其中 i < j 。

18.算法:扎气球

leetcode 452 https://blog.csdn.net/yysave/article/details/84403875

19 n个文件(海量文件),查找和排序,二分查找时间复杂度

归并排序,二分查找

20 一个数组里面是股票值,求什么时候购买和卖出,收益最大。

一个数记录最大差,一个记录最小元素,遍历一次即可

21. 最长连续公共子串

dp 注意不是非连续

22.实现卷积计算

23.实现IoU和NMS

23.link

A是一个排序好的数组,升序排列;B是一个排序好的数组,升序排序;给定c,找到a,b,满足 a属于A b属于B a+b=c

24.一维数组最大和

25.二维数组求最大和矩阵

26.二维数组有多少个子数组

包含一行的,第一行为例,一个的n个,两个的n-1个,。。。,n个的一个,一共n+(n-1)+。。。+1,n行就是n*。而包含两行,三行就依次是(n-1)*, (n-2) *, 所以就是n+(n-1)+。。。+1的平方

27.二维矩阵左上角到右下角最大和

leetcode 64

28.1-n数字里少一个,找出来

少两个呢

29.写VGG、resnet

30.输入D和I组成的字符串,输出数字数组,D表示Decrease,I代表Incre。

0, 1, 2, ... n-1...
case1:IIII0, 1, 2, 3, 4
case2:DD2, 1, 0
case3:DIDI4, 2, 3, 0, 1
case4:DIDDI534201
case5:多解DDI32012103
方法:strI01233210I
(1)如果新增是I,则添加一size的数在最后
D I append(res.size())
(2)如果新增是D,则前面都加一,然后最后添加0
D D +1,append(0)

31.Leetcode 670 Maximum Swap

32.判断两线段是否相交

33.回文子串 Leetcode 647. Palindromic Substrings

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:
输入: "abc"输出: 3解释: 三个回文子串: "a", "b", "c".
示例 2:
输入: "aaa"输出: 6说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".

34.对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。

给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。
power(2,n-1)-1

35. 寻找两个元素异或的最大值。

36.工作方案

37.Valid Permutations for DI Sequence

Leetcode 903

38.atoi

Leetcode 8

39.根据顶点坐标,判断两个四边形/三角形是否相交

40.球队至少需要多少分可以出线,最多有多少分未出线

m支队伍两两比赛,赢了得3分,平局各得一分,输了不得分,求n个晋级名额中的最少得分。

41.leetcode股票

42.给定一个不等概率生成器,随机生成 0 和1 的概率分别为 p 和1-p, p 不等于0.5,要求设计如下等概率生成器:
(1) 随机生成0 和1 的概率为0.5
可以构建一个二维表 00,01 10,11 对应的概率 p*p,(1-p)*p (1-p)*p,(1-p)*(1-p) 我们可以发现,01和10出现的概率相等,都是(1-p)*p 所以如果连续两次出现01,认为出现0;如果出现10,认为出现1,出现其他重新掷即可实现等概率0.5
(2)随机生成0,1 和2 的概率为1/3
连续掷三次出现001,010,100三种等概率,都是1/3
(3) 随机生成0,1,2,…n-1 的概率为1/n
连续掷n次 出现0000...001对应0, 出现0000...010对应1, ... ... ... 出现1000...000对应n
43.给定n个数的数组,找到所有长度大于等于k的连续子数组中平均值最大的那个。返回那个最大的平均值。
44.在一个 m*n 整数矩阵中找到指定值 target, 这个整数矩阵有如下性质:
(1) 每行从左到右数值递增
(2)每列从上到下数值递增
45.给定一个无向图,这个图是在一棵树的基础上加上一条边构成的。问哪条边可以删掉使图重新变成一棵树?如果有多个答案那么输出输入的边中最后出现的那条
46.输入四个点的坐标,求证四个点是不是一个矩形
先计算中点坐标,然后计算其到四个顶点的距离是否相等
double distance(double x1,double y1,double x2,double y2){ return (y2-y1)*(y2-y1)+(x2-x1)*(x2-x1);}
bool isRec(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4){ double x_center=(x1+x2+x3+x4)/4; double y_center=(y1+y2+y3+y4)/4; double d1=distance(x1,y1,x_center,y_center); double d2=distance(x2,y2,x_center,y_center); double d3=distance(x3,y3,x_center,y_center); double d4=distance(x4,y4,x_center,y_center); return d1==d2&&d2==d3&&d3==d4;}

六、程序设计语言

1. Python

1.1 深拷贝和浅拷贝

1.2 list和tuple区别

1.3 is和==异同

1.4 list参数传递

如果list在函数里改变,原来的list是否改变

2. C++

2.1 指针与引用的区别

(1)指针是一个变量,存储的是一个地址,指向 内存的一个存储单元,它的内容是内存中的地址
(2)引用跟原来的变量实质上是同一个东西,只 不过是原变量的一个别名而已。

2.2 继承与多态

2.3 数组和链表

2.4 内存泄漏和溢出

七、模型部署

1.tensorrt内部机制

tensorrt怎么量化,float32怎么变int8,怎么变回来

2.分布式,多卡使用

(1)数据并行

每个机器都有一个相同的完整的模型,然后分别处理不同的数据,最后server汇总结果;

(2)模型并行

把一个模型进行拆分,每个机器上是模型的一部分,然后每一部分模型在不同的机器处理,处理结果移交给下一个机器的部分继续处理。

(3)现在以数据并行为常用方式,模型并行主要难点在模型拆分上,二者通信量都很大。

(4)分布式的模型更新方式主要是两种 中心化(parameter server)和去中心化(ring all-reduce etc.)

中心化参见TF和MXNet 去中心化参见NCCL的处理方式

3.剪枝怎么做,剪多少,效果变化多少

4.量化怎么做,效果变化多少

八、HR面试

1.个人规划

2.希望做研究还是工程

3.有没有和人发生争执的经历

4.实习遇到的困难

5.给你项目让你主导怎么规划


推荐阅读


添加极市小助手微信(ID : cv-mart),备注:研究方向-姓名-学校/公司-城市(如:目标检测-小极-北大-深圳),即可申请加入极市技术交流群,更有每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、行业技术交流一起来让思想之光照的更远吧~

△长按添加极市小助手

△长按关注极市平台,获取最新CV干货

觉得有用麻烦给个在看啦~  
浏览 44
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报