作者黄鸿波
7月份到了,很多公司都陆陆续续的开启了秋招的进程,也有不少2021年毕业的同学也都在积极的准备着,并且也有很多同学都已经进入到了提前批的面试阶段。今天我就结合我自身的招聘经历来聊聊秋招算法岗该怎么准备。
什么是秋招
首先我们来聊一聊什么是秋招。在我看来,秋招和春招一样,是一个人从学生阶段迈向社会的第一步,这和实习经历还是有很大的区别的。在实习期间,我们一般对于实习生来讲是没有绩效考评的,并且所安排的任务相对比较轻,并且没有特别强的时间限制,其主要目的是在于培养实习生,能够让实习生学到更多的知识,当然,所对应的工作报酬也是相对比较低的;但是对于秋招来讲就完全不同了,因为一旦秋招面试成功,就意味着你即将正式成为这个企业中的一员,公司不仅仅要按照国家法律规定来给你缴纳五险一金,每个月的薪酬也会是之前实习期间的许多倍,另外,公司也会对秋招的同学进行绩效考核,因此,秋招和实习的本质就是不一样的。
除了秋招和实习生的区别之外,我们在来说说应届生与老员工的区别。一般来讲,秋招和春招(统称为校招)进来的学生我们称之为应届生,而应届生和其他社招进来的正式员工,从企业的角度来讲还是有一定的区别的。对于应届生来讲,大多数企业的态度还是以培养为主,只不过这个培养和实习生的培养有一定的区别,对于应届生的培养,我们会通过各种各样的办法来挖掘其潜质,通过分配不同的小任务,来确定其基础能力,然后再讲任务难度一步步的增强,从而找到其最大的能力,最后就可以知道应该如何通过各种方式帮助这位同学进步,从而能够快速胜任企业中各种各样的任务。
另外,从企业的角度来讲,对于应届生,我们会更加注重其基础能力。一个人基础能力如何决定了这个人未来会走的多长远,这也是为什么很多企业在面试中一定要去考察其基础能力的原因,对于算法岗来讲这一点尤其重要。
我们先来看看今年的秋招各个企业的招聘要求:
上面的两个图是今年校招的两家公司所给出的JD,我们可以看到,实际上这两份JD中有相对比较共性的地方,就是都对基础的知识有着比较高的要求,另外就是都需要有一定的项目经验,也就是说,不能只停留在理论层面,而是要实际做过相关的内容才可以。那么对应届生来讲,到底应该如何准备呢?
基础算法要掌握
通过上面的招聘JD我们可以知道,基础对于任何岗位来讲都是非常重要的,所以,掌握基础的算法也是秋招准备的必须内容。
对于大部分学生来讲,大家都会去LeetCode刷题,首先我要说的是,这是对的,在国内的招聘环境中,大部分的公司对于基础的算法题都会使用LeetCode的题库,有些公司是直接使用原题作为秋招的考题,有些公司会在此基础上做一些改进,但是,准备秋招的过程中虽然是要刷题,但是这个刷题并不是盲目的一道道的去做,而是要分析出题人所出题目的意图,以及所覆盖的知识点。
我们在LeetCode的算法题右侧,会发现有一个如图所示的标签分类。
实际上,这个标签分类已经很好地给我们总结了对于算法题中比较常见的考点以及其热门程度,一般来说,我们会认为题目数越多的,就是在面试中越常考的。我们在刷这些题的时候,要着重去研究每一道题到底是要考察的什么内容,通过大量的刷题,就可以总结出自己的薄弱点,从而继续攻克它。
我们就拿LeetCode的第一道题来举例。
这道题从常规来看,就是求列表里面的两个数字如何相加能够得到目标数字,返回下标。但是实际上,我们在做的时候就要去分析,到底我们应该用什么算法来做,这道题到底考察的是什么。如果真的搞不明白具体要考察的点的时候,可以点击下面的相关标签,可以看到,这道题实际上要考察的是对数组和hash表的理解,那么我们在考虑这类题的时候,就要去考虑怎么使用hash表的相关知识点来解决问题。
上面只是其中的一个例子,针对于每一道题,实际上都有其所对应的标签,所以掌握好每一道题背后所对应的知识点远比把每一道题的答案背下来要有用的多。
所以说,刷题对于秋招来说固然重要,但是一定要知道怎么样的刷题才是有用的,光靠死记硬背,只能是碰运气,治标不治本。
带着目标做项目
带着目标做项目项目是大部分同学是通病。目前大部分参加秋招的同学都是研究生,而在研究生阶段很多人都是以发paper和做学术为主,很少有人会注重如何去做真实的企业应用的项目,或者说,大家在研究生阶段所做的基本上都处于算法研究阶段,而没有把前后都融汇贯通,所做的很多工作也都是围绕在模型的优化以及性能的优化,但是在企业中,我们更重要的是要能够落地,因此,在研究生阶段就要怀着让自己所学的内容可以落地的思想来做研究,只有这样才能够在秋招中拿到更好的成绩。
那么,怎么才可以培养自己落地的思想呢?实际上,总结起来只有一句话,那就是“带着目标做项目”。实际上,很多人都会认为这些应该是在企业中做的,我现在是学生,不应该考虑。实际上,这个观点是错的,因为我们最终的目标就是去企业中工作,所以,这个能力一定要提前培养。
我拿推荐系统来举例子。大家很多人在研究生阶段做推荐系统都会把重点放在模型,所以,模型的理论大家都很熟悉,但是到了工作中,大家就会发现,我怎么感觉自己什么都不会。在推荐系统中,有一个非常经典的算法就是协同过滤,在协同过滤中有一个算法叫做基于item的协同过滤。对于初学者而言,可能会照着论文进行复现,或者找GitHub上面的代码跑一边,最后发现,无论是效果还是效率都还ok,于是,大家就开始处理前面的数据输入部分和后面的输出,认为企业中就是这样的。
但事实上,大家有没有想过,在企业中用到的数据集是不是也是像demo一样这么小呢?在企业中会不会出现有些数据拿不到的情况?如果拿不到应该怎么办?当我们模型做完之后,怎么给后面来用呢?
这是企业里所关心的问题,我最早在做推荐系统的时候就曾被这个问题坑过。把一本推荐系统书上的基于item的协同过滤跑完,然后就准备上线了,后来发现,线上的数据太大了,导致我们的内存根本不够用,没等数据加载完内存就爆掉了。后来,又不得不仔仔细细的研究代码中可以优化的点,以及对前后数据进行处理,最后成功部署上线。
我之所以举这个例子就是想告诉大家,我们在学习一门技术的时候,不要想当然。认为论文中是这样的,在企业中就一定是这样,实际上,每一个算法在落地的时候都有许许多多的小坑。所以,在刚刚进入研究生阶段就应该带着目标去做事,去想这个东西如果拿到实际应用中会怎么样,只有这样,才能够走得稳。
回到秋招这个话题,那么对于现在准备秋招的同学,最重要的就是积累自己的项目经验。这个项目不在于有多大,但是一定要做的全,给人感觉是一整套工程化的体系,只有这样,才能够在秋招中拿到更好的成绩。
知识学会融汇贯通
给秋招同学最后一点建议就是知识要学会融会贯通。很多人学知识总是喜欢着重于眼前,认为自己是学这个领域的,只需要看这个领域的内容就好了,实际上,对于企业来讲,秋招不仅仅要看你在这个领域的积累,还要看你对这周边的了解。
仍然拿推荐系统来说,推荐系统实际上是包含了很多的知识点,从大的方向来讲,就有算法、数据和工程化,这些都是一名合格的推荐系统工程师所应该掌握的。很多人都说,我只会推荐系统不行吗?那我来给大家举一个例子:
假如现在你的领导跟你说:“小王,你推荐模型搞好了,提供个接口吧,让前端调用一下,看看效果”。这句话实际上在一个企业里是经常出现的,那么这个时候,就要求我们不仅仅懂得推荐系统,还需要对整个周边的工程化有一定的了解,对接口、部署、服务器都要有所掌握,只有这样,才能够胜任企业中的工作。
因此,对于秋招的同学来讲,不要把准备工作只放在自己的一亩三分地中,对于周边的工程化有一定的了解,在简历里可能是一个加分项。但是不建议单独拿出来写,而是要贯穿在简历中。
最后,预祝大家都取得好的成绩。
END