2020年秋招攻略

2020年秋招在7月到9月之间已经进行到了最为白热化的阶段。我从2019年8月29日开始第一次刷Leetcode准备秋招为止,已经过了整整一年的时间。从一脸懵逼到现在的熟悉,很有感触。这里进行记录,如果能够帮助之后秋招的学弟学妹,就感到非常欣慰了。由于我的专业是计算机视觉(神经网络那一套东西),从2018年开始招聘形势逐年恶化,很多岗位饱和,因此竞争压力很大,没有CVPR等顶会论文很难找到像样的算法工程师职位,所以只好转开发。如果有很多论文的大佬,后边就不用看了,算法考察点和开发区别比较大。

秋招流程

暑期实习

在正式秋招开始之前,也就是2020年的3月到5月之间,一部分公司会开启暑期实习。通过去公司进行1-3个月的暑期实习,最终会有大概率(50%以上)发放offer。这个暑期实习不同于其他时间的实习,是公司专门为有意向来公司工作的同学提供的快捷通道,一般也要经过2-3次的面试才可以进入。

提前批

所谓提前批,是秋招的一部分。提前批一般在秋招之前,从6月下旬开始公司会陆续开启提前批的投递和面试,一般7月中旬就结束了。提前批比较好的一点是绝大多数没有笔试,只有面试,可以减少复习的量。但是时间相对也更早,没有足够的复习时间。提前批的难度不统一,有的是大佬专享,招的是大佬;有的和正式批几乎一样,甚至更简单一点,因公司而异。

春招与秋招

假设我是2021年毕业的毕业生,总共可以参加的校园招聘一共有两场,分别是秋招和次年春招,也就是2020年7月到9月之间的招聘和2021年1月到3月的招聘。其中HC(head count,就是招聘名额)最多的,是2020年秋招,基本上绝大多数的人毕业之后都在这个时间段期间找到了工作,次年就可以去上班当社畜了。所谓春招,更像是秋招的补录,因此如果能在秋招找到工作,无疑是更加主动和稳妥的。但是即便没有找到,也不要慌,春招还有一些 机会,一定要把握住。

秋招准备

简历准备

首先,如果没有实习经历的同学非常推荐去参加暑期实习,如果实习最终拿到了offer,那么血赚;如果没有拿到offer,也有一段大厂的实习经历,这非常重要。

这里就要说到简历的准备,一般来说简历要干净整洁,并且必要的信息一定要全面,包括自己的联系方式,邮箱(北航的同学不建议留学校邮箱,因为安全问题可能offer邮件会被屏蔽),还有获得过的学校内的奖项。因为校招很多时候看重的不是你项目经历,学校的那些项目,大家也心知肚明是什么情况,如果能够入企业法眼,那真的是万里挑一的好项目了。校招更看重的是你的基础是否牢靠,能力是否足够、值得继续进一步的培养。因此,不用担心自己简历上项目不够优秀,只要在学校中有所建树,学习足够扎实,是没有太大问题的,包括面试过程中,也不会一直问项目相关的问题,往往项目只是一个提问的出发点。当然,如果有实习经历的同学,一定要写上去,而且对于做过的事情要写的详细一点,并且烂熟于心,当面试官无论从哪个方向提问,都要能回答上才行。

笔试准备

此部分ACMer可以略过,不需要看。

秋招在你投递简历之后,分为笔试和面试两部分。一般来说如果学校水平不是很差,都会给你笔试的机会,简历是可以通过的。相比于面试,笔试一般是1-2小时的编程题,2-3道。有些公司会加上单向选择题,主要考察基础知识。其中笔试主要有区分度的部分是编程,这里编程的难度高于面试中的难度,甚至有一部分会达到竞赛难度。但是不用怕,因为打过竞赛的毕竟是少数,所以只要3题中能AC一道题,就可以稳稳的拿到面试通知。亲测有效。

如果想进行学习和练习,推荐Acwing的算法提高课,以及各大OJ,一般笔试的难度是其中简单和中等的难度。

面试算法题准备

此部分ACMer依然可以跳过,你已经是大佬了,受我一拜。

众所周知,国内互联网企业招聘喜欢在面试过程中让应聘者做一些算法题,来考察其思维能力与习惯,以及写代码的能力。从最开始只要求应聘者写简单的快速排序与二分,到现在面试中也可能出动态规划的问题,面试的难度在客观上是增加了的。因此我们也需要应对的学习并且准备一下面试时常考的算法题。我大学时数据结构与算法学的并不是非常牢固(和打比赛的ACMer相比更是差远了),因此我认为最重要的任务就是这一部分。经过一段时间的刷题,我总结出当前比较好的刷题方式和顺序:

  1. Leetcode刷200道easy和medium难度的算法题,不要碰hard难度的题,打击信心且无意义,主要是找手感,并且熟悉一些所用语言的语法,我主要是用C++,因此之后也用C++举例。如果基础较好,可以跳过此部分。
  2. 推荐去www.acwing.com报名学习算法基础课(价格200块,有时候会有优惠),将双指针、二分、快排、前缀和等较为简单的部分进行系统的学习,对动态规划和贪心问题有初步的理解,熟练编写DFS和BFS。一般来说每道题刷2遍+总结可以达到这种状态。如果不想花太多钱,也可以买《算法竞赛入门经典》来看,作者刘汝佳。
  3. 继续刷Leetcode,主要关注medium以及以上的题目,可以尝试挑战hard题目来锻炼自己思维的简洁性。对于已经做过一遍的题目,这时要仔细思考,精简代码,并且进一步理解其含义,不仅仅是AC,要尝试用多种方法求解。
  4. 面试开始前两周左右可以开始刷《剑指offer》,其实之前也可以在Leetcode上刷,但因为面试中很大概率(60%以上)会出剑指offer上的原题,因此可以在面试之前刷,突击效果会好一些。

另外很推荐Acwing全家桶系列,从语法基础课、算法基础课、算法提高课到算法进阶课,如果能将这些耐心学完,基本上可以和ACMer做朋友了。我本人是学了算法基础课和算法提高课,感觉受益良多。

计算机通识知识准备

除了算法题之外,我们还需要准备计算机通识知识。所谓计算机通识知识,可以认为是大学中的基础课。一般来说,大学中的《计算机网络》、《数据库》、《操作系统》这几门课中的知识,都会在面试中出现。因为我面试的岗位有C++开发工程师,所以也会出现一些关于C++语言相关的问题,当然如果是Java开发等,都会有响应的问题。

如果大学时期这些基础课你都认认真真的学习了,那么现在复习起来,更加轻松。如果没有学习,需要多预留出一部分时间,这样才更为妥当。复习的方式因人而异,但是我并不推荐拿起课本一页一页的看,一个是时间来不及,另外很少有人能够坚持下来。我推荐的学习顺序如下:

  1. 上牛客网寻找面经,针对面经中的问题,一个一个的过,如果当前问题你无法清晰简洁的回答上来,那么就将其记录下来。如果能够清晰简洁的回答,但是多次出现,也需要进行记录。
  2. 对于所有记录下来的问题,分门别类的进行复习和总结。将其相关的知识和概念,总结成知识体系。

以上需要多次反复复习,并且一定要注意细节问题,有些时候面试官会在细节方面深究,多问几个为什么。

时间分配

对于准备的时间分配,我大部分放在了算法的学习上,其余的放在了通识知识的准备。这个因人而异,但是总体来说,要针对自己的短板进行准备。12个月中,除了2月份过年懒了,其余时间基本上保证每天1-2道Leetcode题目的频率,每天1h左右的计算机通识知识的学习,弄懂1-2个知识点。这样最终完成了Acwing上245道题目和Leetcode上650道题目的学习,算法已经满足面试要求。对于毕业年级的同学,也要考虑毕业设计的时间花费,毕竟毕设做不完是不能毕业的,拿到什么offer都是扯淡了。

面试技巧

我个人体会到的面试技巧无他,唯有真诚。说白了就是,会就是会,不会就是不会,不要不懂装懂,但是在被问道能力范围之外的情况时,可以思考一下,即如果是自己的话,会如何处理当前情况。面试技巧方面,可以多看看牛客上的面经,会有很大的启发。另外,一定要保持一个乐观和自信的心态,无论你做的东西有多low,将其讲清楚也是也是一项比较重要的能力。不用紧张,事实上有些面试官不一定有你了解他问的这些问题,你只需要将你会的东西有逻辑的讲出来就很好了。

面试大多数公司会有三次技术面试,还有一部分会有HR面。技术面会首先从项目经历入手,然后开始问一些计算机通识知识,最后再做一道或者两道算法题。总共面试时间在1小时左右。面试的难度不一定一样,一般一面会简单一些,之后的二面和三面会更难一点,原因是一面都是你面试的部门的同事(有的挺水的),二面是部门leader,三面是更高一层次的工程师。但是这并不意味这算法题更难,可能只是问题更加无法准备,是比较独特的一些需要主动思考的问题。

结语

写了这么多,不知道是否对你有帮助?说到底我也是一个蒟蒻(我挺喜欢这个词,弱且是菜),无论在什么情况下都是一个学习的过程,当一次面试有问题没有答上来的时候,可以记住这个问题,然后多学习一下,因为这就是你现在的短板。每当你补齐一块短板的时候,你离你预想的offer就又进了一步。还有就是心态一定要好,很多时候事情不是一蹴而就的,如果一两次的挫折让你灰心丧气,我认为是不可取的。我在面试的过程中,也挂过了好几家,都是算法题也没做出来,问题也没回答上,甚至有同学在三面被人挂掉两次。但继续往前走吧,人生也是如此,坚持学习,虚心请教,努力思考,那么最终的结果就不必要问了,正是“但问耕耘,莫问收获,庄敬日强,功不唐捐”。

最后 ,希望你能在秋招中获得一个满意的offer!


庄敬日强,功不唐捐。