2019秋招CV算法面经
转载请注明作者梦里茶
先背景介绍一下,我是广东某985本硕,本科有鹅厂开发方向的实习经验,读研发了一篇CVPR,然后在腾讯ailab实习,由于腾讯ailab今年是要博士才能转正(毕竟转正就是T3),所以我这个小硕7月开始面试了,先后面了头条(一面),阿里云(图像算法工程师,已HR面),大疆(机器学习算法工程师,已终面),商汤(计算机视觉研究员,刚内推),后面腾讯推了AI平台部(刚一面),先把最近的面试总结一下。
其实我不太确定面试内容算不算公司的机密,毕竟这里边大部分问题都是根据具体面试者(我)的情况提的,如果有相关公司的大佬觉得不妥可以私聊我删掉对应的内容。
头条(提前批,只一面,没下文)
之前貌似班里的同学把我的联系方式给了头条的HR,然后大概七月初头条就约了很多同学去深圳,北京,上海参观,讲真头条饭堂确实好吃,但我手机里一个头条系的APP都木有。。然后就说后面会约面试,约了7月9日视频面,用牛客网的平台,面试官很直接,一上来就做题,总共五道题,感觉像是小型笔试了,其实都还基础,也基本都答出来了。
- 编码实现计算图的inference (用Java基本完整写出来了)
- 默写交叉熵和softmax,还有它的BP(求导觉得要算很久就没算,其他答出来了)
- 卷积输出计算,卷积核参数数量(基本算出来了)
- RCNN系列模型的区别(背出来了)
- 给两个有序数组,求第3大的数(基本思路写出来了,没调试)
然后就说后面等HR安排,然而HR好像就不理我了,至今没下文,估计是当时太懒没求导的锅,推公式还是挺重要的。
阿里云(已HR面)
七月初看见有同学在朋友圈发了offershow这个公众号的阿里内推推送,就加了它家的群,还是很实在的,没啥套路,直接给内推邮箱,因为暑假实习面阿里云中断了没面完,有点执念,所以就又投了一遍。7月15日发了邮件,7月17日零点收到了内推成功的邮件,完善了资料后,7月17日下午就收到了一面电话。
阿里云一面//7.17 35min
一面大概是这边的骨干员工,是杭州的电话,貌似面试官拿到我的简历也很高兴,没等我自我介绍就开始跟我聊GitHub上的2400多个star的几个项目都是干啥的,然后简单介绍了一下他们部门,问了一下有没有兴趣,确定有意向之后才开始自我介绍,我的自我介绍一般很短,大致上会讲一下基本信息,本科实习经历,硕士的paper和项目,正在腾讯ailab实习,GitHub上有2.4K个star,想去该公司工作。然后开始看简历问小问题
- 熟悉的编程语言?Python和Java,说一下Python的多线程和多进程,Python伪多线程,那什么时候应该用它?(有空闲等待的情况)讲一下Java线程池(举了Android多线程的例子)
- Python tuple和list的区别(只读和读写,什么时候用只读的容器?)
- tensorflow while_loop和python for循环的区别,什么情况下for更优?
- 简历上提到了object detection的一个项目,问SSD和YOLO的区别(我的博客有)
- 简历上提到了Hbase,说了一下项目里HBase的row key设计
讲到这里已经半个小时了,面试官就说他这边没什么问题了,接下来应该会是他的老大面,我问了一下工作地点,他们团队在北京和杭州,广深就木有,因为我一开始是选的广州作为意向城市的,但杭州也可以接受。
阿里云二面//7.23 36min
二面是面试官用自己手机打过来的,自我介绍之后就开始让我讲读研期间花精力最多的项目,我就直接开始讲论文了,可以看我前面的论文的分析。说实话要把这样一篇很长的论文在电话里讲清楚还是挺难的,很多时候都只能让对方知道大概的原理,讲太细很容易把面试官搞混,一般我是讲一个创新点问一下面试官有没有问题,这边避免对方跟不上节奏,往往这个时候面试官会复述一下下,我就在复述的过程中把一些东西理得更清楚一点,讲完论文已经20分钟了,然后就稍微提了一下实习做的东西,然后(36分钟了)面试官就说他这边也没什么问题了,后面应该还有一面,然后是HR面。
阿里云三面//7.26 46min
三面还是阿里巴巴的电话,那天刚参加完公司的生日会,回座位上,接到了电话,依旧是讲论文,然后讲了实验室一个养殖场动物计数的项目,讲项目的时候务必把项目背景讲清楚,让对方知道为什么要做这个事情,并且要把工作中的难点和创新点表现出来。并且还讲了一波ssd模型。那天附近比较吵,而且手机麦克风质量不是很好,估计没有给面试官很亮眼的感觉,但是面试官态度好像还是比较满意。补了两个基础问题,常见的loss有哪些,反向传播机制是什么样的。第二天下午接到了HR的电话,约了8月3日技术终面,还有终面后的HR面。
阿里云技术终面/交叉面 //8.3 58min
唯一在早上的面试电话,并且感觉这个面试官面试水平极高,会自己设计问题,也会引导面试者,感觉这也是自己发挥的最充分的一次面试(感觉身体被掏空.jpg)让我对阿里都心生向往了。
- 一上来就问我在腾讯实习,这样的话对腾讯和阿里会怎么选择,我非常老实地说了这边只能博士转正,会帮推其他部门,不过腾讯其他部门里边合适的图像算法岗比较少,所以想去阿里;
- 然后问想不想读博,为啥想工作呢,做算法或研究的话如果是博士也很适合的。我说也有考虑过,但是读博怕找不到合适的导师,看到本科班工作的小伙伴们发展得都不错,就觉得还是工作了吧;
- 对工程和研究的选择,这也是我觉得每个研究生都该想的问题,我觉得研究是探索可能性,工程是实践可能性,二者都很重要,我自己还是比较喜欢能有产品落地,又有创新性的东西;
- 讲到创新性, 让我举个例子说一下有什么新的点子,我就讲了一个前几天在回家路上想过的自动调色的色盲眼镜的想法,面试官觉得也是比较新颖,但也问我能用到哪些产品中去,我讲了腾讯觅影这个医疗图像团队,不过他还不太满意,问我对阿里或腾讯现有的一些产品有没有什么想做的改进,之前做腾讯实习校招的笔试题,答过一道对微信的定位功能的改进,就拿过来答了。答完他好像就满意了。
- 然后又开始惯例讲论文,这位面试官可能不是做图像算法的,讲了一通之后他不是很懂,讲解时空模型的时候花了特别多的时间,所以后面讲Learning to Rank也讲的比较少,在这个过程中面试官也顺藤摸瓜考察了一些别的东西,比如对迁移学习的理解,为什么能work,在我们这篇论文中迁移体现在哪里,迁移学习最重要的东西是什么(原场景和目标场景的差异与相似点),如果做一个人脸模型,直接迁移到目标场景上,是否能够不给更多标注就进行迁移学习?(我举了之前实验室分享的一篇马脸识别的论文,虽然有个细节没记得很清楚,但也基本算完成任务了。唉,老哥们,看过的每篇论文都是你面试时的子弹呀)
- 然后看了一下项目,问了一下对图像哈希的理解,我就开始讲之前看过的一篇CVPR的图像哈希论文(子弹+2),讲了通常图像哈希的做法,模型生成01特征,相似性监督约束,现在又会结合文本来约束。面试官继续问哈希查询的时候怎么查的,我说用于异或算相似度排序,追问异或的loss跟特征本身的余弦loss不同,做出来的特征能一样吗,我说哈希特征会做一个取符号的操作,这样来保证特征的离散,不过异或和余弦确实还是不同的,也有一些论文会对这种异或相似性做约束。
- 讲到这就差不多了,问我有啥问题,我让大佬分享了一下在阿里的工作体验,大佬也非常真诚地跟我讲他工作五年了,觉得阿里在价值观,资源,团队氛围上都是很好的(此处省略100字),我也对大佬跟我讲这番话非常感激。
阿里云HR面//8.8 35min
HR面是晚上7点多打过来的,听声音大概是个慈祥的阿姨。问的主要是这些
- 自己在这个岗位上的优势(论文啦,实习啦,项目啦)
- 觉得论文和算法对这份工作的作用是什么(在这个问题上来回讨论讲得挺多的)
- 对研究型的工作和业务型的工作怎么看,更喜欢哪种
- 有没有其他的offer
- 腾讯阿里大疆会怎么选
- 我问了一下工作地点,觉得在外边可能照顾不到父母,HR问我除了父母之外还有没有什么别的顾虑,还顺便问了一下父母是做什么的,HR说她也是潮汕的,现在交通很方便,从杭州到广州动车大概只要七个小时,不要有太多顾虑,而且到杭州这种不一样的城市来看看对一个人的成长也挺好的。
- 问了一下后面的流程,HR说大概这一两周会结束内推的全部面试,然后就进入offer的流程,到时候会分两趟,先发录用函,然后等大概一个月差不多校招正式流程结束后谈薪资。这边的面试流程就到这里结束了。
阿里云offer//9.6
短信和邮件通知,一个月内确认。之后再谈薪,工资这篇帖子不会谈,因为涉及高压线,有兴趣的可以去offershow看往年的offer。
大疆(已终面)
大疆大概是正式校招开始得最早的公司了。先投了简历,发现要做性格测试,性格测试还是如实写,没必要假,不然进去了也不适应,貌似去年性格测试刷了很多人。过了几天收到笔试通知(跟师兄要了个内推码然而好像用处不大,还是要笔试),那就硬着头皮做吧,笔试有两批,我是7月8日周日晚上7点半的笔试,一个小时,题量还行,有选择问答计算编程,做完时间差不多结束。貌似改卷工作量挺大的,大概7月20日左右就看到笔试状态变成通过了,到了7月26日才收到一面邀约,约了7月30日下午一面。
大疆一面//7.30 36min
大疆貌似面试都是有两个部门的面试官同时面,因为是电话面试,一开始可能只听到一个面试官的声音,其实有另一个面试官一直在暗中观察。先自我介绍了一波,然后开始讲论文,还有稍微介绍了一下鹅厂实习的东西,两个岗位的面试官一个是感知算法岗的,一个是机器学习岗的,机器学习岗的面试官问的比较深,还问到了这个模型能不能收敛的问题,还好我们论文里考虑到了这一点,也解释了一波,然后他俩就没啥问题了,我问了一下机器学习算法工程师这个岗位一般是做啥的,他们说目前是图像的算法比较多,感觉不错。当天晚上就查到了一面通过的状态。并且HR在十点半给我发了二面的邀约(HR也这么拼的吗),是视频面,用的赛码网。
大疆二面1//7.31 22min
先自我介绍了一波,然后讲论文,因为是视频面大概能看出面试官能不能get到,所以可以适当控制节奏,讲完论文他就没啥问题了,我就问了一下后面大概还有几面,他说可能还有一到两面吧。
八点的面试,HR大概九点多追了一个电话过来,说本来有两个面试官的,有一个有事情没来,所以要加一面,刚刚面我的是感知算法岗的,没来的是机器学习岗的,我想那肯定要面啊,约了第二天中午面,然而第二天中午也被鸽了,面试官有个会要开没来,跟HR联系后说之后再约时间,到了8月2日傍晚,发了短信给我约晚上或者明天面试官会打电话过来面试(跟阿里终面时间很近,所以感觉这段时间吃饭都没啥胃口了)。
大疆二面2 //8.2 45min
这一面的面试官真的厉害,感觉没法带到自己的节奏里,自我介绍后先讲鹅厂的实习,讲了Facebook一个数据蒸馏的方法,面试官觉得这个方法数学上应该是不work的,我也不是很能说服他,然后还是先讲论文,这个部分还是跟之前差不多,貌似很多面试官喜欢问你在这个项目中遇到的困难是什么,又是怎么解决的。然后将养殖场动物计数的项目,没让我讲最有创新性的运动规律建模,而是让我讲树莓派上的NCS模型部署,讲真这个部分工作量不大,占了整个工作的四分之一吧,所以也没有给对方很亮眼的感觉。我自己觉得只能算发挥的一般了。面试官问我有啥问题,我一时也没想起来问啥(其实之前也问的挺多的了),就匆匆结束了。
过了大概一个星期,官网上的状态变成了二面通过!8月9日收到了大疆的终面邀约,要去现场面试了。
大疆终面 //8.21
约了21日下午四点半现场终面,提前了半个小时到,签到后到一个会议室等了会儿,跟一起面试的同学聊了一会儿天,然后HR就带我去面试了,面试官应该是懂技术的管理人。惯例自我介绍一下,然后开始常规套路,
- 问:你觉得自己相比他人有哪些优势
- 答(缩减了一下,大致思路是这样):之前了解到机器学习算法工程师这个岗位主要是做计算机视觉相关的算法,而我在实验室期间有许多相关的积累,并且本科的时候也在腾讯实习过,对于落地的产品有比较多的经验。
- 问:你觉得自己所学在大疆的产品中的可以有哪些应用,
- 答:无人机有一个应用场景是跟拍某个人,就需要一些计算机视觉相关的技术,并且之前了解过复旦有一个实验室做过对无人机拍摄的行人在其他视频中进行检索,就跟实验室期间做的行人重识别很相关。
- 问:对你觉得计算机视觉领域的公司做的比较好的两个进行评价
- 答:因为比较熟悉行人重识别,所以挑这方面做得比较好的公司来讲,讲了海康和商汤的一些应用,还有优劣。
- 问:最看重公司的什么
- 答:技术氛围,个人成长
- 问:有没有了解过大疆的一些产品
- 答:只是看别人玩过(没钱玩不起呀
- 问:举一个例子讲一下你遇到过最难的问题,具体遇到什么困难,怎么解决的
- 答:讲了QQ邮箱期间处理过的一个陈年Bug,具体可以看我以前的博客
然后就换我提问了,问团队工作的模式(主要是产品导向的),问机器学习算法工程师的工作任务(主要是无人机相关的,面试官还介绍了一下一种长期预研任务的模式),问福利(应届生分配宿舍,绩效好的会送车,还有无息贷款,送无人机是小意思了,零食健身房之类的生活福利也有),问了一下后续的安排,说是大概两周后悔出结果。
最后面试官又补充了一个问题:拿了哪些offer,正在面哪些,能不能提前来实习,就如实回答就好。
腾讯AI平台部 //8.16 70min
直接约到楼上会议室面试,先问了一下实习期间做的东西,大致介绍了模型,还有实习期间做的数据蒸馏和多尺度融合。然后可能是为了考察学习的时候有没有充分理解问题,让我讲了一下reid的发展,我就把之前看过的reid论文都讲了一下,面试官说挺全面的,然后开始讲CVPR的论文,因为有纸笔所以讲的比较清晰。差不多面了45分钟了,面试官说还有时间,我们把代码也考察了吧,就做了一个算IOU的题,给两个检测框,求IOU。这题不难,就是条件判断比较繁琐,用min max处理会简单一点:
#RT:RightTop
#LB:LeftBottom
def IOU(rectangle A, rectangleB):
W = min(A.RT.x, B.RT.x) - max(A.LB.x, B.LB.x)
H = min(A.RT.y, B.RT.y) - max(A.LB.y, B.LB.y)
if W <= 0 or H <= 0:
return 0;
SA = (A.RT.x - A.LB.x) * (A.RT.y - A.LB.y)
SB = (B.RT.x - B.LB.x) * (B.RT.y - B.LB.y)
cross = W * H
return cross/(SA + SB - cross)