校招计算机视觉算法岗,谈论面试的时候我们到底在谈论什么?
0 导读
这是我之前写在公众号里的一篇文章,在此分享到牛客上,一来是希望能和牛客上的朋友们一起交流学习CV算法以及相应的知识,也欢迎大家关注我的公众号WeThinkIn。
1 写在前面
姜文先生在全球维度都是我非常喜欢的一个导演,他的“民国三部曲”我百看不厌,我和朋友经常会在大庭广众之下互飙台词以示致敬。嚯,巧了,我这篇文章刚好也是「2022年,校招计算机视觉算法岗」系列的第三篇,我亦想将其作为这个系列的结尾章。如果接下来还能再拓展这个系列的更多维度,我将以番外等其他企画的形式呈现。
接下来,讲讲本文的核心。
首先,本文所有的思考都是以我自己实习/秋招过程将近60次的面试经历和研究生阶段掌握的相关信息为基础。
再者,本文主要聚焦业务与工程方向CV算法岗的面试逻辑。
so,enjoy:
2 干货篇
一定要多参加面试!不要错过任何一次面试机会!通过不断的面试来习惯面试节奏以及增加面试适应性!比如我到后期在宏博一楼吃鸡腿套餐的时候边吃边面试,在寝室睡午觉时立马起身面试,在五道口边看人潮边面试,在去实验室的路上边走边面试,轻盈的柳絮随风飘过。
总的来说,就是要在不同状态下都能较快进入面试状态,并满嘴跑火车,这样面对不同的面试压力也能更从容。
2.1 面试主要考查逻辑
当我们参加一个面试时,面试官将如何考察我们的能力呢?
以有完整算法场景上下游链路,也具备用算法创造出现金流通路的公司为例,面试官主要以下面这些维度对面试者进行一个完整的考察:
- 深度学习基础
- 机器学习基础
- 简历感兴趣内容
- 数据结构与算法(手撕代码)
- 编程语言基础(Python/C/C++)
- 场景设计&&前沿论文跟进能力
- 计算机基础
- 数学基础
首先,简历对整个面试流程的把控至关重要。如果你的简历内容丰富,能突出你的优势与基本面,整体方向与面试岗位相match,那么面试官大概率会将深度学习基础 + 机器学习基础 + 数学基础集成到一起进行考察。以简历中感兴趣的内容为核心,逐步深入,横向拓展发散。对面试者来说,面试风险得到了极大的控制,就算会问一些其他问题,多半也是与这些内容相关联;对面试官来说,面试者的项目可能会对面试官提供一些思考(比如我有一次参加某公司面试,对方直接问我这个算法你是怎么优化的,他们用的时候效果不好)
再者,数据结构与算法(手撕代码)部分基本上是无法避免的,加之现在CV算法岗越来越卷的趋势,给出的算法题也越来越向medium和hard方向发展,而且往往算法题起到一个筛选作用,即如果面试者没做出相应的题目,大概率这轮面试会不通过。
接着,场景设计&&前沿论文跟进能力是算法岗面试里很重要的两个考察部分。场景设计题一般都是面试官结合部门的业务场景,给出的一类开放性问题,主要考察我们的思维和逻辑能力,我们根据自己的思考与认识,表达出能自圆其说的答案就好。如果回答面试官很满意(从你的回答中他找到了解决实际业务问题的灵感),整体上会加分很多。注意:千万不要不回答,就算没想好,扯也要扯上几句。而前沿论文跟进能力的考察主要是问平时如何高效看论文?一篇论文看多久?你研究领域相关的新论文看了吗?讲讲?这个方向的新论文你有看吗?讲讲?平时一些有价值的新论文大家还是需要看看的。
其次,在编程语言/计算机基础/数学基础中,对编程语言的考察一般会问一些核心的知识点,大家平时能有较好的理解并不断复习即可。而计算机基础与数学基础的考察一般都占很少的比重(在我经历的面试中基本不会考察,最多问问Linux的一些常用命令)
最后,一般会有一个反问阶段。通常大家以为这是一个走形式的流程,其实不然。我们可以通过以下三个问题来了解面试官部门的主要业务情况,面试官对我们的看法,以及我们自己对工业界业务场景的延伸:贵公司/部门主要的业务方向有哪些?通过面试您对我的评价如何,有哪些地方需要再努力,您有什么好的方法思路提供吗?您认为未来计算机视觉在工业界还有有哪些应用与突破?
这里要引申出一个特殊的情况,如果面试官一直在让你手撕代码,问大量不可控的深度学习/机器学习/计算机基础/数学基础的知识,那么说明你的简历内容对这次面试价值不大,无法引导面试官与你在一个维度上,那么面试不通过的可能性就会大大增加。(排除一些厂就爱让人手撕代码的情况)
总体上来说,由于算法岗面试门槛越来越高,基本上手撕代码中有一两道没写出来,大概率挂;简历中内容不熟悉,面试官根据简历跟进的多个问题都没回答上来,大概率挂;深度学习/机器学习基础知识有多道题目答不上来,大概率挂。
2.2 面试厮杀技巧
首先,最好的面试技巧就是不断地面试,把每次面试都当作一次训练,久而久之就能从容,就能应对。
再者,手撕代码阶段,就算一开始没有思路,也要和面试官多多探讨,询问相关信息,如果有思路,可以边写边说给面试官听,这样既能让自己不太紧张,也让面试官能收到你的思路,从而增加印象分。
其次,面试是一场博弈。从一开始的自我介绍,到简历感兴趣内容的询问,到后面不可控问题的回答,再到最后的场景题等阶段,都要有意向自己熟悉的研究方向和学习领域引导,让自己的能力有更好的发挥空间。
最后,面试遇到不会的问题,一定不能直接说不会,要边思考边说,能说多少说多少,结合自己的想法,往自己熟悉的方向上迁移,让面试进行下去,不至于被打断。
2.3 线下Tips
- 模拟面试。一方面,把面试的自我介绍部分时常模拟一下,说得通顺熟练;另一方面,和小伙伴们进行全流程的互问互答,让自己更加熟悉面试的节奏。
- 打怪升级。在最开始,先投递一波小公司,刷刷面试经验,再刚大厂,事可成也。
- 调整心态。不要因为一家面试不顺利,就心态崩了,因为接下来还会有许许多多这样的情况
- 持续复盘。每次面试结束后都要进行总结,哪些知识点是经常考到的,怎么描述简历内容面试官的回复是积极的,整个面试过程中哪些点是需要改进的等等。
- 简历熟悉。简历上的内容一定要搞懂!简历上的内容一定要搞懂!简历上的内容一定要搞懂!并能通过简历告诉面试官你擅长的方向在哪里。
- 看面经。面试前看看相应的面经,参考一下,让自己心里有个数。
2.4 高频面试知识点
下面所列的知识点仅供参考,抛砖引玉,大家可自行拓展更多的知识点维度。
【深度学习基础】:
- 经典卷积神经网络(AlexNet,Inception系列网络,VGG系列网络,ResNet系列网络等)
- 轻量级神经网络(ShuffleNet,mobilenet等)
- 卷积基础知识(卷积运算,计算卷积参数量,1*1卷积核,感受野,反卷积,空洞卷积,卷积时间复杂度等)
- 反向传播算法(BP算法),学习率,Batch-size等
- BN系列相关问题(BN的基本原理,手写BN的公式,BN放在什么位置,BN在训练和测试阶段有什么不同,BN为什么可以防止过拟合,BN与其他正则化方法的异同等)
- 不同的优化器(Adam,Momentum,SGD,公式推导,不同算法优劣,平时怎么用)
- 常用的损失函数(MSE,较差熵等)
- 常用的激活函数(ReLU,Mish,sigmoid,tanh,softmax等)
- 梯度消失与梯度爆炸
- 过拟合与欠拟合
- 目标检测YOLO系列网络,手写NMS,手写IOU,小目标问题等
- 评价指标(mAP,Recall,Precision,Accuracy,F1,ROC/AUC等)
- 图像分割任务逻辑以及其实用模型(U-Net,FCN,Mask R-CNN等)
- dropout
- 数据增强方法
- 类别不均衡问题
- 网络权重初始化
- 归一化
- 上采样的方式
- 降低模型复杂度的方法
- 你所研究领域的前沿模型和实用模型
【机器学习基础】:正则化(L1,L2),bagging和boosting,模型融合,相似度衡量尺度(欧式距离,余弦相似度距离等),偏差与方差,鞍点,凸优化,SVM,LR,K-means,PCA等。
【数据结构与算法】:leetcode高频题以及前300题。数据结构侧,数组,字符串,链表,二叉树考得很多,还有栈和队列,哈希表,堆也要熟练掌握。算法侧,各种排序算法要熟练,动态规划,深搜回溯,分治,二分,贪心算法等算法也要熟悉。
【Python基础】:numpy广播机制,迭代器,生成器,装饰器,各种切片操作,常用数据结构,多线程与多进程,GIL,浅拷贝与深拷贝,*args与**kwargs,lamba,类与继承等。
【C/C++基础】:指针和引用的区别,static变量,结构体,宏,const,STL库,虚函数,多态与继承,智能指针,c++11新特性,函数重载,浅拷贝深拷贝,构造/析构函数,内存分配,函数指针等。
【数学/概率题】:我碰到的比较少,但是牛客上很多面经里都会有,大家可以去看看。(我看到的有抛硬币,排列组合,摇骰子,扑克牌,概率题等)
【计算机基础】:Linux一些常用的命令(find,grep,查看CPU使用情况等命令),进程和线程,网络七层模型等。
3 最后
本文写到这里,也就要写完了。回想起2020年,突如其来的疫情,无法回学校的焦虑,时间紧张的科研,千军万马厮杀的暑期实习与秋招。这期间有收获,有遗憾,有喜悦,有伤心,还有很多宝贵的记忆。我也相信这就是前行的意义。
最后,希望大家在今后的暑期实习与秋招中都能收获满意的offer!
Rocky在本栏目中专注于分享AI行业的校招/社招/实习面试经验,分享AI行业中的业务,竞赛以及研究维度的思考感悟。 关注本专栏,不仅能助你具备和CTO一样的技术深度与产品格局,也能让你跟随着Rocky的脚步,一同成长。