点击小眼睛开启蜘蛛网特效

个人关于CV算法秋招的感想(内有面经)

良心贴,秋招CV算法上岸之路

感觉自己的秋招快结束了,虽然下个礼拜还有几个面试,但也没有面试的激情了,如果签了大概率会拒面。
应该会从已经收到意向的几个中挑。现在来看,自己心中大概有个选择了。
因此在这里将自己的一些面经和一些心得发给大家,希望能帮助到大家~

不好意思博客很久没有更新了,因为最近在忙秋招的事情,也有些焦头烂额,攒了一堆文章没有更新。这些天打算整理一下之前的面经,发在博客中,希望能帮助大家。

《个人关于CV算法秋招的感想(内有面经)》

至于拿了哪些offer,因为我现在还没有做决定,仍然有一些面试在流程中,所以也不说了。

想法

早就想吐槽一下了,大家都说今年算法很难,尤其是深度学习CV算法,更是难上加难,关于这个言论呢,我想说,是真的。对于这个难,我有两个亲身体会:

  • 一是算法报的人非常的多,hc也相对少,怎么感觉出来的呢?第一点,你去现场面试,其他的岗位(比如客户端!!!),排一会队就论上你了。但假如你是深度学习算法,那么不好意思,先排个两个小时队伍再来面试吧;第二点,hc也相对较少,因为一般大小公司的算法团队可能也就几十人,校招期间可能也就会招10来人左右,大厂可能30左右,加上大家一拥而上,很容易就招满了。例如你在宣讲会听有现场笔试的企业,其他岗位都有,就你的CV深度学习算法岗招满了。
  • 第二就是真正想要符合深度学习算法工程师这个职位,要求还是不低的,必须要有比较好的算法和工程的功底,也就是基本的机器学习你要会、相关的领域你要精通、C++和python你也要精通,最好有几篇顶会、或者几个比较好的深度学习项目,这样才算是比较合格的算法工程师。

说回自己哈,我本身是没有任何顶会的,只有两篇水文。个人其实不是很喜欢写论文,倒是对工程落地比较感兴趣,有几个关于深度学习CV的项目,都需要落地部署。虽然对算法也有研究,但是个人感觉算法和工程应该是4:6开。比较喜欢阅读源码(caffe、Pytorch、tvm、ncnn等),也参与过其中的一些贡献,个人优势就是工程能力较强。有较强的落地开发经验。对于找工作来说,如果你的论文实力不是很强,有扎实的工程能力和基础也是可以的。

总结一下:

  • 所以各位找工作一定要确定自己的特点,这在找工作过程中十分重要
  • 当然面试也是有一定的运气成分的,说实话,运气还真的很重要很重要,所以说,多投几家,总会碰上好的面试管的,遇到好的面试官一定要把握住。
  • 后悔的选择就是,几乎所有公司都投了算法岗,应该分一半投开发的,多试试不同的岗位,机会也会更多一些。

要看的东西

算法要看的东西其实并没有开发多,几乎所有面试都没有问过我数据库和计算机网络的知识(这两个如果是开发的话,必看)。但是会问一些操作系统和并行计算或者分布式的一些知识,所以这两个部分还是建议看一下的。

除了最基本的知识点,剩下的就是我们自己简历上的东西。对于算法来说,需要会的语言是C++和Python,当然只会Python也是可以的,但建议两个都会,另外算法需要理解很多机器学习的基础知识以及公式推导,还有自己的项目相关一定要深入理解,项目相关的细节都要弄懂。

另外有并行编程经验(cuda)也是不错的,不过大部分的算法岗不会问这个,除了一些底层相关的算法岗会问,还有要看一下深度学习框架的源码,要知道其底层执行原理是什么样子的。个人感觉问的最多的依然是caffe、也会问pytorch和TensorFlow源码相关的东西。

当然还要会一些传统的方法,如果你是CV的话,肯定要熟练使用OPENCV和相关的传统的图像处理方法,例如边缘检测,图像分割方面的传统的一些图像处理的方法。

最后当然是刷题,个人的水平是leetcode-200道左右,剑指offer刷了好几遍。这个水平应付面试中的算法刚好可以对付的来,但是如果是算法类的笔试,有些大厂的笔试题及其困难,需要1000道左右的题量或者ACM获牌选手才可以轻松应付。所以说刷题是越早越多越好。

面经

以下是自己的面经,大概是按时间顺序来的,希望对大家有帮助。

VIVO

vivo很早提前批投的,笔试很简单,然后去现场面试,一面技术一面HR。
vivo问的比较水,这里就不列了,简单问了问项目,然后做了一道字符串全排列的题,然后就过了。
感觉vivo的深度学习算法工程师只是拿别人的方案来直接用,偏工程。

寒武纪(深度学习平台方案)

寒武纪是提前批投的,当时自己比较想搞底层,看了下岗位介绍没有投算法,投的平台方案这个岗位。

一面

C++多线程简介
C++中的智能指针
并行和并发的操作
Openmp用过没有 使用场景
同步异步
同步锁
gihtub上pr的流程
怎么进行团队合作
某个项目中的模型是怎么设计的

二面

讲讲项目
模型怎么设计的
怎么部署的
Char占几个字节

HR面

你个人想从事什么样的工作
目前有几个offer
我看你有很多比赛,挑几个说说
你本科到研究生是保研过来的么(答不是..)

总体感觉不难,面试时间略短,C++问的多。

科大讯飞(CV算法工程师)

一面

自我介绍
挑自己觉得比较重要的项目讲一下
讲讲你在项目中的重要贡献点,难点,实现了什么
C++虚函数,多态
C++智能指针
设计模式
nms过程
卷积操作的具体过程
卷积操作还有没有优化的空间
你是如何量化int8的
讲讲动态规划的思想

二面

讲讲动态规划的思想(科大讯飞比较喜欢问这个)
编译的原理和过程
你是怎么贡献开源项目的,贡献了什么
量化操作的具体过程,写的什么代码
设计模式

HR面试没啥就不写了。

作业帮(视觉算法工程师)

作业帮因为有同学在那里实习,说不错,于是我让他帮我内推了。

一面(一个小时)

首先两道算法题(比较简单,不过每个都要分析复杂度,达到最优解)
1、实现类似split的操作,去掉字符串中的逗号(自己有两个边界条件没有考虑到,面试官一步一步提示写出)
2、求数组中k个最大的数(一开始使用最大堆,但是复杂度有点高,最后进行改进)
聊聊项目
项目中网络的模型为什么这样设计
为什么要这样改进
如何剪枝
数据增强描述一下,有什么要注意的地方
怎么判断过拟合,如何解决
BN层怎么具体实现的(问的很具体,举例子说明)
github贡献开源代码都贡献了些什么

二面(40分钟)

一道算法题 大数相乘(没什么可以说的,就是用数组表示每个数,还有进位注意下)
yolov3中的anchor怎么生成的
卷积操作的计算量(举个例子具体计算一下)
为什么要用mobilenetv2,为什么其速度快
Inception什么样的结构,为什么可以提升性能
fasterrcnn与ssd的区别(one-stage与two-stage的区别)
谈谈项目
说一下项目中的模型如何部署的,用的什么框架,部署了哪些平台

HR面(30分钟)

你的专业不是纯计算机,为什么想要搞互联网这个行业
没有考虑国企或者研究所吗
对奋斗有什么看法
现在投了哪些公司,有几个offer了
为什么想来作业帮
你实习公司的主要业务是什么,介绍一下这家公司
你觉得实习学到了什么东西
用过作业帮的产品吗
对在线教育的看法
其中有一部分是HR在说作业帮现在的发展情况

作业帮的面试中规中矩,不是很难也不容易,每一面都有刷题过程,需要一定的刷题量。

商汤(一二面连着一共两个半小时,算法工程师)

虽然当时还没有复习的很好,还是试着投了一下提前批,然后第三天收到了面试通知。

一面

介绍项目
介绍下mobilenetv1和v2,为什么会快
可分离卷积,和普通卷积相比,快在哪儿,举个具体维度算一下
BN层具体介绍一下,给个例子NCHW下对哪个维度进行了运算,预测和推断有什么不一样
如何利用BN层对卷积层进行剪枝,效果如何
数据增广用了哪些
Centernet具体是如何工作的,损失函数
正负样本你是怎么处理的
介绍下focal loss
你模型怎么量化的,量化的具体过程介绍下
在嵌入式端使用了哪些推断库
你在实际测试中有没有遇见问题

算法题:给定n个方块、每个方块的长度不同、重量不同,然后又规则大的方块放小的下头,每个方块上头承受的重量不能超过自身重量的7倍
问最大可以搭多高,动态规划(建立dp动态转移方程)

二面

你的手势识别项目的数据量有多少
你对这个项目的贡献是什么
vector中push_back n个数(n是100w级别) 复杂度多少
如何设计一个可以快速获得某个范围内数据和(比如一个数组,求索引l到r的数据和),方法可以用前缀和等
caffe中的mutable_cpu和gpu中的数据怎么切换的
你实习期间做了些什么,你实习的公司是做什么的
空洞卷积做什么什么工作
感受野怎么计算,举个例子,有个公式
给你2分钟介绍下自己的优势(这个有挂的趋势)

算法题:求01矩阵中1的连通数
标准的迷宫,一开始用dfs做,面试官说会栈溢出,后来用广搜做。

猿辅导(深度学习算法)

猿辅导风评很好,所以也投了一波。

一面

自己介绍1分钟
然后就是三道编程题(做出两道,最后一道没做出来)
第一道:根据n生成完全二叉树
例如 n=4 生成
1
2 3
4
的二叉树
这个生成和层次遍历类似,按照那个思路生成即可,不难

第二道:能够到达所有房间
从第一个房间开始,每个房间会有不同房间的钥匙,请问是否能够访问所有的房间
例如:
[[1],[2],[3],[0]] 返回true
[[3],[0],[1],[]] 返回false
创建一个visited数组代表是否访问过 用dfs挨个遍历即可 不难

第三道题:
给2*n个数据(称为第一列和第二列)
每n个数据从左到右依次变大,第二列的n个数据比第一列对应的n个数据大,而且每个数据都不一样
例如(n=6):
1 2 3 4 5 6
7 8 9 10 11 12
求满足这样条件的所有情况
这道题应该用卡特兰数做。。我没做出来

然后通知一面过了,等待二面,谁知一等就是1个半月。

二面三面

二面三面合在一起了,一共两个小时
主要问的是项目,另外问了下TVM和NCNN的区别
然后是两道题
第一道是动态规划
第二题是实现二叉堆的最先优先队列

云从科技(计算机视觉)

云从科技只知道是AI小龙中最后一个,投了试一试。

一面(50分钟,本来是视频面,面试官那边网络不好,改成电话面了)

简单自我介绍
介绍下maskrcnn的结构
最后怎么实现将maskrcnn部署的,哪些平台
mobilenetv1和mobilenetv2为什么快
shufflenet用过没有
了解vgg、resnet等一些其他的网络么
如何进行剪枝和量化的
听说你在移动端有过部署,如果部署的
C++和python熟悉么,都用过哪些库
在部署期间不同模型运行速度不一样主要原因在哪儿
实习做过什么东西
数据增强代码自己写的吗还是用的什么库,有什么注意点
最后的项目交付为什么没有用YOLO和Centernet,有什么原因么
解释下自己如何改进的SSD
有什么需要问我的么(问了下面试官那边的工作内容,感觉云从各种方向都有,很全)

二面(70分钟)

把自己的项目和实习都说了一遍
大部分都在围绕项目进行描述
讲如何改进为什么这样设计(这个问的比较多)
关于项目每个人都不一样所以不多写了
除了int8,有没有了解过低比特量化
最后一道简单的编程题 给坐标计算iou

HR面

你的专业和计算机没有什么大的关系
为什么要搞算法 ;
你的意向城市是什么 ;
上海这边算法的多一些 杭州主要是硬件 ;
为什么不想去北京;
你对云从科技了解吗简单说一说;
你所做的项目中挑一个你觉得贡献最多的讲一下;
你平时的减压方式是什么;
你承受压力的能力可以么;
你平时的业余爱好是什么;
最后我问了一下云从的工作时间(弹性工作,早10晚7?有午餐补助和下午茶还有一些零食)

大疆(机器学习算法工程师,感觉一面也没问了个什么)

一面(35分钟)
大疆的面试感觉比较简单
全程都在说自己实习和项目
模型做了什么改进
在开源代码(TVM)贡献了什么,具体怎么写的
分析两个不同框架(ncnn和TVm)的优缺点

嗯..大疆呢,一面问的100%答上来了,和一面所说的业务也挺匹配,完了当了20天的备胎,还是挂了。

网易互娱 人工智能研究员

自己比较喜欢AI和游戏相结合的岗位,所以投了一波。

一面

首先是自我介绍
然后把项目和实习经历都说了一遍(感觉面试官对我的项目不感兴趣 只是听完就行了)
python中list tuple dict 怎么实现的 原理
list和tuple怎么互相转换;红黑树的复杂度是多少
python的内存管理机制是什么;
c++中的vector与list的区别
c++的多态怎么实现的;
ncnn中set_cpu_power()这个函数做什么的
ncnn中读取模型的方式有哪几种
new和malloc的区别
C++中sort实现的原理和底层是什么,如果要自定义排序规则,怎么定义排序函数,有什么需要注意的,如果排序中两个元素相同怎么处理
最后写一道代码,判断a和b中二进制中不一样的位数
有什么要问我的
构造函数和析构函数能不能为虚函数

网易互娱的话,可能岗位不是很匹配,面试官对我项目完全不感兴趣,主要是问了一堆基础,回答对了90%。
然后当了20天备胎,收到感谢信。

阿里

阿里投的比较谨慎,投的比较晚,其实现在想想应该早点投的,投的晚了流程都不确定能不能走完。

一面 晚上八点突然电话

简单自我介绍
我看你的专业跟你简历上写的项目关系不大
你主要是在做什么
推导一下反向传播BP的过程
然后举个例子具体推一下怎么更新权重的
如果更新的数是矩阵反向传播(Jacobian)是怎么来的
你的模型都部署了哪些平台 用了哪些优方法
你在树莓派上用过哪些推断库 你有比较过吗
他们的优势是什么
做了哪些贡献
说明一下你是怎么量化的
具体步骤讲解一下
除了量化还做了什么优化工作
具体介绍下
说一下你的核心优势以及不可替代性
你有什么要问我的吗 后续会有工程师和你联系

二面 一个多小时

面试官好像不是怎么懂神经网络
你的训练图像怎么采集的,需要注意什么,一般是什么格式的图像
你要实现一个任务,你怎么把它部署到机器人端,说一下流程
假设有一个图片 128×130 格式是int * 类型的 就是指针指向连续的空间地址,问具体如何操作将其变成128*128的图像(in-place和非in-place),比较详细的操作描述一下
虚函数表具体是怎么实现的,和多态有什么关系
挑一个你熟悉的设计模式,说一下你是实际中的应用,为什么这样用,有什么优势描述越详细越好
那么根据你说的这个场景,要实现另一个功能怎么实现(描述比较费时,总之就是和基类、重载、非重载有关)
一般在代码运行过程中你是如何定位问题的,(答通过编写log类定位,debug,观察一般的输出错误信息)
假如你跑的代码,偶尔会发生一次bug,log函数不管用,你该怎么找这个错误
如果你运行的代码过程中遇到了内存泄漏,你也知道,但是你要如何判断是什么使这个内存泄露了,debug看不出来(顺便说一下内存泄漏的概念)
要你编写一个多线程处理图像的代码,你怎么写,要注意什么(用C11中的库,thread mutex 锁)
假如你有10台机器分布式处理一项任务,其中有数据流通,其中有一台服务器的数据流动出现问题,如何判断
你用过什么debug软件 LLDB GDB
挑一个你比较满意的专利说一下,创新点在哪儿,你的贡献

阿里问工程偏多问的很细,网上查不到答案那种,还可以,就是每次面试隔半个月…

华为 人工智能工程师

一面 45分钟
主要问项目,问项目的细节
最后让C++写了一个roc的评价代码

二面 一个小时
还是问项目,说下为什么这么做,给他说思路
让写一道顺时针打印矩阵

三面(业务主管面) 一个小时
偏向技术的HR面试
比如你项目最困难的点,你克服了什么
对连续半年赶一个项目有什么看法(可能需要经常加班)
为什么阅读开源代码,学到了什么
balabala一堆

海康威视 高性能计算

海康威视之前投的算法工程师,然后测评挂了,然后又投了一个AI加速,没想到收到了面试通知。

一面(回答的稀烂)

说一下你的项目
Cuda会写吗,用什么去提升速度,为什么shared_memory可以提升速度
TVM增加一个算子你是怎么实现的,问的非常具体
描述一下compute schedule
算子融合介绍一下
介绍下TVM

二面

因为自己没有什么压力(知道自己和这个岗位不是很匹配,本着学习的心态去的),主要是和面试官聊一下自己的东西
用过什么设计模式,描述使用的场景
单例模式的缺点是什么
既然单例模式中的
根据更像业务面

然后..应该是挂了。

Bigo AI视觉算法工程师

Bigo看到这个岗位和自己非常匹配,马上投了,笔试比较简单。

一面 40分钟

自我介绍一下
介绍下项目
模型如何剪枝的
量化策略是什么,步骤
讲一下算子融合和图优化,举个例子
动态图和静态图
比较一下Ncnn和TVM的优缺点
你以前用过django?讲一下wsgi
Python多线程怎么调用
线程锁,要注意什么
C++结构体(一个int一个char一个int 占多少字节 就是字节对齐)
怎么判断大小端,写代码判断
动态库和静态库的区别
Linux下动态链接库的默认地址在哪儿,怎么设置自定义地址
Cmake如果链接动态库和静态库怎么写
Linux下一个文件没有后缀 有两个应用程序去调用 怎么设标记让正确的应用程序调用 #
Linux下怎么创建一个.sh文件去移动一个文件夹中的所有.jpg文件到另一个文件夹
守护进程怎么创建,两个fork
用户态和内核态
git rebase和merge的区别

和一面聊得很开心,99%的问题回答出来了,一面也说我通过了,不过可能因为一些选择面试地点的原因,迟迟轮不上现场面的安排,现在来看,可能轮到我的时候hc都没了。

二面 1个小时

二面太晚了,没有面试的激情了。
主要是问项目,问自己项目中backbone和检测的主要框架中是如何改进的
如果遇到漏检情况是什么原因导致的,如何处理
卷积操作如何提速,举例一下所有的方法
聊了下自己写的论文的思路
聊了下实习的项目
面试官挺好,然后无意吐槽今年他们公司报算法的人数是去年的4、5倍。

奥比中光

奥比中光这个公司无意中报了,然后面了两面+HR面,主要也是聊自己的项目。
最后因为地点原因不打算去。

驭势科技

这个公司面了一面,聊了下算法加速的过程,量化、剪枝、TVM、NCNN等。
聊得挺好,不过有点太晚了。

陌陌

陌陌对于我来说,是一个有缘无分的公司。
实习的时候技术面通过了,然后HR面因为说错话被挂。
所以秋招特别想要再试试,虽然简历在锁定期(实习投过),不过还是找人帮忙递了下简历。然后等了好久,陌陌在西安现场有面试,通知我去面试。去了做了三道题(写出来了),然后把我叫出来,跟我说了一堆好话,大意就是你很优秀,但是岗位不匹配,不好意思让我走了。
已经无力吐槽。

浦发银行

这个没什么好说的,10分钟面试,40分钟笔试,额,虽然过了,但是因为地点原因不去了。

百度

还有最近几天面的百度,不过不是算法岗,是偏底层的,虽然和面试官聊得挺high,但感觉岗位不是很匹配,所以希望也不大。百度的面试官都很有素养,会让你白纸写你算法中某一个过程,越详细越好。

总结

总的来说,如果不是对算法特别热爱,或者说仅仅是因为算法工资高想要跟风的同学,我是不建议转算法的。算法岗今年真的是爆炸(虽然去年已经爆炸了),其实算法和开发对于硕士生来说是差不多的,大部分是做算法开发的工作,除了某些博士算法研究员是真正研究算法的。

但是算法依然有自己的一份魅力,对于我来说,我更喜欢研究和工程相结合的方式,看看论文,写写代码,还是比较舒服的,另外从今天开始恢复博客的正常更新,攒了一大堆的文章没有整理,是时候开始恢复正常了~

如果有对算法岗找工作相关的问题可以直接留言,欢迎交流。

  点赞
本篇文章采用 署名-非商业性使用-禁止演绎 4.0 国际 进行许可
转载请务必注明来源: https://oldpan.me/archives/cv-findjob-interview

   关注Oldpan博客微信公众号,你最需要的及时推送给你。


  1. F
    FourierTransform说道:

    博主硕士期间项目是在组里跟着老板干的,还是自己接的

    1. O
      Oldpan说道:

      大部分是导师的,如果导师没有的话自己在github上找一些参与下也是可以的

  2. F
    FourierTransform说道:

    我裂开了,这面试问题没几个会啊,等我硕士毕业可咋整啊

  3. r
    revenge_24说道:

    真的精力旺盛呀,能面试那么多家。去年我也就面了几家小的积累面经,后面直接去大公司面就结束了。

  4. n
    nidexiao说道:

    师兄最后去了哪家公司呢

    1. O
      Oldpan说道:

      还没定哦

  5. A
    AI柠檬博主说道:

    所以师兄最后是去算法了还是开发了 :lol:
    我们后面几届是不是基本上以后算法岗就凉了 :lol: 不如去开发岗?

    1. O
      Oldpan说道:

      算法呀,算法还是自己喜欢的,以后几届只能说越来越难,不过以你这样的情况还是不怕的~