这是我之前写在公众号里的一篇文章,在此分享到牛客上,一来是希望能和牛客上的朋友们一起交流学习CV算法以及相应的知识,也欢迎大家关注我的公众号WeThinkIn。
姜文先生在全球维度都是我非常喜欢的一个导演,他的“民国三部曲”我百看不厌,我和朋友经常会在大庭广众之下互飙台词以示致敬。嚯,巧了,我这篇文章刚好也是「2022年,校招计算机视觉算法岗」系列的第三篇,我亦想将其作为这个系列的结尾章。如果接下来还能再拓展这个系列的更多维度,我将以番外等其他企画的形式呈现。
接下来,讲讲本文的核心。
首先,本文所有的思考都是以我自己实习/秋招过程将近60次的面试经历和研究生阶段掌握的相关信息为基础。
再者,本文主要聚焦业务与工程方向CV算法岗的面试逻辑。
so,enjoy:
一定要多参加面试!不要错过任何一次面试机会!通过不断的面试来习惯面试节奏以及增加面试适应性!比如我到后期在宏博一楼吃鸡腿套餐的时候边吃边面试,在寝室睡午觉时立马起身面试,在五道口边看人潮边面试,在去实验室的路上边走边面试,轻盈的柳絮随风飘过。
总的来说,就是要在不同状态下都能较快进入面试状态,并满嘴跑火车,这样面对不同的面试压力也能更从容。
当我们参加一个面试时,面试官将如何考察我们的能力呢?
以有完整算法场景上下游链路,也具备用算法创造出现金流通路的公司为例,面试官主要以下面这些维度对面试者进行一个完整的考察:
首先,简历对整个面试流程的把控至关重要。如果你的简历内容丰富,能突出你的优势与基本面,整体方向与面试岗位相match,那么面试官大概率会将深度学习基础 + 机器学习基础 + 数学基础集成到一起进行考察。以简历中感兴趣的内容为核心,逐步深入,横向拓展发散。对面试者来说,面试风险得到了极大的控制,就算会问一些其他问题,多半也是与这些内容相关联;对面试官来说,面试者的项目可能会对面试官提供一些思考(比如我有一次参加某公司面试,对方直接问我这个算法你是怎么优化的,他们用的时候效果不好)
再者,数据结构与算法(手撕代码)部分基本上是无法避免的,加之现在CV算法岗越来越卷的趋势,给出的算法题也越来越向medium和hard方向发展,而且往往算法题起到一个筛选作用,即如果面试者没做出相应的题目,大概率这轮面试会不通过。
接着,场景设计&&前沿论文跟进能力是算法岗面试里很重要的两个考察部分。场景设计题一般都是面试官结合部门的业务场景,给出的一类开放性问题,主要考察我们的思维和逻辑能力,我们根据自己的思考与认识,表达出能自圆其说的答案就好。如果回答面试官很满意(从你的回答中他找到了解决实际业务问题的灵感),整体上会加分很多。注意:千万不要不回答,就算没想好,扯也要扯上几句。而前沿论文跟进能力的考察主要是问平时如何高效看论文?一篇论文看多久?你研究领域相关的新论文看了吗?讲讲?这个方向的新论文你有看吗?讲讲?平时一些有价值的新论文大家还是需要看看的。
其次,在编程语言/计算机基础/数学基础中,对编程语言的考察一般会问一些核心的知识点,大家平时能有较好的理解并不断复习即可。而计算机基础与数学基础的考察一般都占很少的比重(在我经历的面试中基本不会考察,最多问问Linux的一些常用命令)
最后,一般会有一个反问阶段。通常大家以为这是一个走形式的流程,其实不然。我们可以通过以下三个问题来了解面试官部门的主要业务情况,面试官对我们的看法,以及我们自己对工业界业务场景的延伸:贵公司/部门主要的业务方向有哪些?通过面试您对我的评价如何,有哪些地方需要再努力,您有什么好的方法思路提供吗?您认为未来计算机视觉在工业界还有有哪些应用与突破?
这里要引申出一个特殊的情况,如果面试官一直在让你手撕代码,问大量不可控的深度学习/机器学习/计算机基础/数学基础的知识,那么说明你的简历内容对这次面试价值不大,无法引导面试官与你在一个维度上,那么面试不通过的可能性就会大大增加。(排除一些厂就爱让人手撕代码的情况)
总体上来说,由于算法岗面试门槛越来越高,基本上手撕代码中有一两道没写出来,大概率挂;简历中内容不熟悉,面试官根据简历跟进的多个问题都没回答上来,大概率挂;深度学习/机器学习基础知识有多道题目答不上来,大概率挂。
首先,最好的面试技巧就是不断地面试,把每次面试都当作一次训练,久而久之就能从容,就能应对。
再者,手撕代码阶段,就算一开始没有思路,也要和面试官多多探讨,询问相关信息,如果有思路,可以边写边说给面试官听,这样既能让自己不太紧张,也让面试官能收到你的思路,从而增加印象分。
其次,面试是一场博弈。从一开始的自我介绍,到简历感兴趣内容的询问,到后面不可控问题的回答,再到最后的场景题等阶段,都要有意向自己熟悉的研究方向和学习领域引导,让自己的能力有更好的发挥空间。
最后,面试遇到不会的问题,一定不能直接说不会,要边思考边说,能说多少说多少,结合自己的想法,往自己熟悉的方向上迁移,让面试进行下去,不至于被打断。
下面所列的知识点仅供参考,抛砖引玉,大家可自行拓展更多的知识点维度。
【深度学习基础】:
【机器学习基础】:正则化(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使用情况等命令),进程和线程,网络七层模型等。
本文写到这里,也就要写完了。回想起2020年,突如其来的疫情,无法回学校的焦虑,时间紧张的科研,千军万马厮杀的暑期实习与秋招。这期间有收获,有遗憾,有喜悦,有伤心,还有很多宝贵的记忆。我也相信这就是前行的意义。
最后,希望大家在今后的暑期实习与秋招中都能收获满意的offer!