腾讯/字节/华为/旷视 2022届实习面经—计算机视觉方向

作为2022届3月毕业的学生,现在开始找实习,主要目的是为之后的秋招积累一些面试经验和工作经验,如果能通过实习转正也算是为秋招找到了一个基础选项。

本文主要记录了本人在实习面试过程中的经历和心得体会 ,以进行一个自我的总结梳理,同时可能对目前在面试或者即将求职的同学有些帮助~

个人情况

先介绍一下本人情况:

985本硕,研究方向是全景视频拼接、图像曝光度校正,发表相关论文共3篇,目前已经收到腾讯、字节跳动、旷视的offer,华为也已经面试完在等结果。

在进行岗位投递时,我发现实习生岗位大都划分比较宽泛,比如我投递的计算机视觉方向的岗位,并不会细分到很具体的研究领域,更多情况是公司会根据简历来进行筛选,从而安排适合你的部门(或者是招人需求比较大的部门)进行面试。

由于研究领域涵盖比较广,加上简历上我各种项目经历都罗列了出来,导致我的简历并没有针对性,收到的面试邀请也是五花八门。这里我建议如果有明确的目标岗位意向的同学可以对简历进行针对性优化,仅仅罗列相关的项目经历即可,这样可以避免简历被自己不感兴趣的部门捞起来,造成双方的资源浪费。

字节跳动—计算机视觉研发

简历投递

简历直接发给HR,第二天直接收到面试通知,很快很高效

一面(约50分钟)

1. 面试官先对介绍了部门,以及本次面试的流程(自我介绍,代码能力重点考察思路和复杂度分析,项目经历),提醒控制自我介绍时间。

2. 自我介绍(大概一分半钟):基本情况+研究方向项目经历+个人特质优势。

3. 算法题:合并k个升序链表 直接leetcode hard难度了。面试官提示不急着写代码,看看有什么思路,并且分析复杂度。

我首先提出用最小堆把所有节点存下来,一个个取出。面试官问时间复杂度,并提示没有使用到每个链表升序信息。

我再提出使用归并的思路,两两合并链表。也是要求分析复杂度,然后让我实现一下。涉及链表指针的题目实现起来很容易出错,平时要多练习。我先实现了两个链表合并的函数,然后再实现主函数。期间面试官有很认真在看我写代码,提示了我很多次代码存在的问题,比如内存忘记释放,链表末尾的节点忘记处理等等。

磕磕绊绊写完代码,可能是考虑到时间问题,没有让运行评测了。面试官点评“需要的提示还是有点多,可能是有点紧张了”,人还是蛮好的。

4. 聊项目:之前实习时候的OCR主要是做什么任务,评价指标是什么;目前主要做的环视拼接主要做了什么工作,有什么指标。

这部分感觉面试官不是很懂这几个领域,没问太深,这个时候就要注重描述清楚问题的背景,以及自己的工作,最好再有量化评价。

5. 聊工作期待:我比较喜欢做应用,解决实际的问题,不太想要单纯刷指标。

6. 反问环节:围绕着工作场景、工作内容提问。

总结:前面的算法题考察部分其实表现应该比较一般,但是后面聊工作期待和反问环节和面试官聊得比较契合,就给过了。所以关于自己的工作期待其实应该也有所准备,可以结合这个部门的具体情况进行阐述。

二面(约45分钟)

1. 聊项目:二面在一面结束十几分钟之后就开始了,面试官直接开始问项目。

主要问的环视项目,先解释基本步骤,阐述在项目中的工作。他主要关心了相机标定的部分,应该是他比较懂,聊得很深,包括位姿初始化、联合优化的具体细节。期间我提到g2o这个优化库,他没有听过,要求我详细解释一下,甚至当场去查这个库。他对联合优化这个部分要求解释原理,是否有实验数据支撑它的有效性,为什么这么做是有效的。

2. 算法题:最长递增子序列问题

面试官在这道题基础上稍微改了改,要求输出最长子序列的内容而不是长度。我实现了基于动态规划的方法,他修改测试用例后发现结果不对,然后我找到问题改了改代码就通过了。

总结:对于自己的工作,尤其是准备重点介绍的工作,每一个细节都要很熟悉,要能解释清楚做了什么,为什么这么做,效果怎么样。

三面(约30分钟)

1. 自我介绍

2. 聊项目

问了主要的两个研究方向,论文中的主要创新在哪里,要求解释原理的那种,具体算法实现过程,现有其他方法是怎么做的,有什么评价指标。

3. 面试官问除了视觉有没有做过其它项目。

回答只是学过机器学习等相关课程,实验室主要还是做视觉方面的。

4. 岗位意向沟通

这个步骤主要是确认岗位意向,面试官说他这边的业务跟我的研究没啥关系,不知道我能不能接受,我结合前两轮面试跟面试官了解到的工作内容和他谈了一下我的理解,就比较顺利。

总结:字节的实习生面试流程非常完整,和正式员工的流程是一样的,转正率也很高。面试过程中,介绍项目的过程就是体现个人能力的过程,经过前多次面试的练习,感觉介绍项目时思路会更清晰了,也知道对于非专业人士来说什么是重要的内容。如果项目介绍得好,能和面试官聊起来,是可以不用做算法题或者回答太多基础问题的,从而让面试更加顺利。

旷视—算法实习生

简历投递

官网投递,过了一个星期左右才收到面试通知

一面 & 二面 (都是大概40分钟)

流程几乎一样,自我介绍完了就聊项目,聊得很仔细,可以看出旷视的这种科研底蕴(也可能是岗位的原因),没有做算法题,聊项目就能聊半个小时。反问环节他们热情地介绍了他们的业务。

第一个面试官是做OCR的,对于我的关于OCR的实习过程问得很仔细,完成了什么工作,用了什么模型,模型的原理和细节,具体做了什么改进,为什么这样改,使用这个模型的效果怎么样。因为我提了一句感受野的问题,要求现场计算vgg16的感受野。还问到是否了解CTC,我解释了一下CTC用于解决什么问题,大致是基于动态规划思路,具体推导过去太久记不清了。

第二个面试官问的其他项目,和第一个面试官的风格也很像。

在反问环节我提到旷视不是算法公司而是一个产品公司,于是面试官可能感觉我对于他们公司还是有点了解,蛮热情地跟我介绍了一些项目,聊得比较愉快。

总结:面试算法岗的话,对算法原理细节,甚至涉及到的相关的知识点都要尽可能了解。对公司或者部门提前有一些了解的话,对面试可能也有帮助。

腾讯—客户端开发

简历投递

官网内推投递简历,投递的是算法岗,但是可能计算机视觉方向实在是太卷了(强行安慰自己),第一志愿没有捞我简历,反而是一个视觉相关的开发岗捞了我。我自己觉得开发岗也是一种锻炼,我并没有太多开发的经验,如果能力符合要求的话还是愿意尝试的。

笔试(两小时5道题)

腾讯的笔试还是有一定难度,好在一共有三次机会,第一次没经验,按顺序做的题,其实最简单的是最后一题。第二次立志刷分,先看完五道题然后依次选择最有把握的题目进行实现,比第一次好很多。

两次考试的题目看下来,每次基本上都会有一道数学题,然后考验基础知识(搜索、回溯)的实现的题,还有考验对具体问题进行分析的题目,有的问题想不明白还是挺难的。

笔试成绩应该是作为参考的,如果没有acm基础的话,建议就多刷基础算法题,因为这在面试中也是会考察到的。

一面(45分钟)

1. 自我介绍 & 简单聊聊项目

2. 算法题:实现图像处理中值滤波

岗位工作内容主要和图像处理相关,所以考察的也是以图像处理的形式。这个问题其实是一个找中值的问题。

最开始实现的是 找第K大的数 的思路,用快排的思路写的。面试官要求分析复杂度,然后提示这个方法可以找任意数值大小的中值,但是图像像素值仅分布在0-255,有没有改进空间

于是想到桶排序,进行实现之后也是要求分析复杂度

3. 岗位意愿:是否愿意做开发等等

二面(45分钟)

1. 面试官对部门进行比较全面的一个介绍,很拉好感

2. 简单自我介绍

3. 面试官让我挑一个项目介绍,选了工作量最大的环视拼接项目,介绍过程中讲每个步骤他会问为什么这么做,用了什么算法;在完成这些工作时是由导师指导还是自己探索的

4. 再挑一个项目进行介绍,选了曝光度校正,聊评价指标的时候聊到IQA,面试官似乎了解这个领域于是就顺着聊下去了(面试过程中要做好随时聊偏的准备,也可以展示一下自己涉猎广泛)

5. 算法题:两个字符串最长公共子串

二维动态规划问题,实现完面试官问能不能优化,我回答空间上可以优化,只需要存当前行的状态;然后问如果字符串长短有差异怎么利用,我回答用短的字符串长度作为列数,进一步降低空间复杂度

6. 反问环节

对实习能力有哪些要求:自学能力+基础知识扎实

HR面(10分钟)

确认基本信息,未来就业计划地点以及职业规划

是否有其他面试,问岗位信息以及我的倾向

详细问为什么选择这个岗位

核心竞争力是什么

总结:腾讯的面试流程整体体验下来感觉比较规范,面试流程状态在官网也有及时的更新。就是捞简历环节比较随机,大厂的部门很多,面对不感兴趣的部门可以选择及时结束本次面试,从而给下一次面试的发起留有更多时间。

华为—自动驾驶传感器相关

简历投递

由于实验室和华为这个部门有过合作,直接联系HR进行岗位简历投递,但是从投递到发起笔试面试等了有一两个星期。

笔试(两小时3道题)

相比腾讯的笔试,感觉更基础一点,会考察对数据结构的运用,还有字符串的输入处理(对c++选手可以说是很不友好了),也有算法的考察。

一面(30分钟)

1. 自我介绍

2. 项目提问,对曝光度校正项目感兴趣,问原理,面试官觉得很神奇,然后我也很热情地给他介绍。后面他问这个算法在极端情况下的性能,比如进光量本身就非常小的情况之类的。还问了环视项目的主要创新在哪里。

3. 算法题:找出字符串的最长回文子串

起初提出动态规划的思路,面试官说你是不是想复杂了,算了能解决问题就行你写吧。然后我写着写着发现顺序遍历就行,然后就改成顺序遍历了,测了两个测试用例给面试官看再解释一下代码逻辑就可以了。

二面(20分钟)

1. 面试官说已经稍微看了下我的简历,希望能进行一个5分钟的自我介绍,介绍一下基本情况、做过的项目之类的。

2. 介绍一下实习期间的工作。

3. 环视项目提问

环视拼接现在是比较普遍、成熟的算法,我的主要创新体现在哪里。我就解释了目前普遍的拼接做法,不足和可以提升的地方,我的做法的创新点。

4. 日常工作学习和人合作的过程中遇到的困难,以及技术上遇到的困难,是怎么解决的。

我举例说明了在一些团队竞赛中遇到的困难,然后通过主动积极沟通、积极请教的方式去解决。

5. 反问环节

实习生哪些能力比较看重(回答:和团队磨合合作的能力。

转正流程(转正是需要重新面试的,如果实习期间表现好会有帮助。

总结:华为的实习生面试流程比较短,可能也是因为并不直接转正吧。对于碰到困难怎么解决这个问题,也可以事先准备一些具体事例,以供面试的时候分享。

写在最后

总结一下面试准备过程中的关键步骤:

1. 算法题准备

leetcode101、剑指offer等书籍,结合leetcode、牛客网等网站多练习,常考察的链表、排序、搜索等算法要能熟练写出来。

2. 简历投递(可以根据目标岗位进行项目经历调整)以及面试准备

一边投简历一边准备面试,可以先投非目标公司作为面试练习,实践出真知。准备面试的过程中,我会把简历上每个项目都按照STAR法则(背景-任务-行动-结果)的结构都写下来,防止遗忘或者面试的时候紧张想不起来,面试前加以复习,保证面试的时候阐述项目思路清晰。

3.每次面试都要写面试总结

我会将面试中没回答好的问题都记录下来,重新斟酌答案,以防止下次再被问到。事实证明,面试过程中遇到重复问题概率还挺大的,如果每次都进行整理的话,后面的面试通常就大致都能回答上来了。

最后祝大家都能收获理想的offer~


腾讯/字节/华为/旷视 2022届实习面经—计算机视觉方向_3d