阿里算法真题
早在2015我在阿里妈妈实习的时候,就觉得行业内对于算法工程师的招聘要求甚至工作内容都没有统一的标准。可以认为,其实包括各大公司在内,这个职位的具体工作内容和所需应聘者的能力要求并不一致。不同的面试官风格不同,标准也不同。
让我给你举几个例子。第一个例子是,我面试实习的时候,因为是本科,对机器学习领域真的知之甚少,可以说几乎为零。但我还是通过了,通过的原因很简单。因为acm的获奖背景,面试过程中主要是一些算法问题,都答得很好。但是在交叉面试的时候,另一个部门的一个主任问我有没有这方面的经验。我明确表示没有,但是我愿意学。
然后他告诉我,算法工程师的工作主要和机器学习有关,所以机器学习是基础。当时我以为我凉了,没想到我面试通过了。
再比如当时的一个小伙伴,在最后的就业面试中被要求用R语言写一个树模型。我不记得确切的型号了。我只知道当时不知道,所以不记得名字了。但是了解市场的人都知道,现在行业应该已经基本不用R语言了。无论是面试官当时对R语言的熟悉程度,还是他的团队当时使用的R语言,都可以说明当时阿里对算法工程师没有统一的标准。事实上,这是真的。当时有很多现象把算法工程师和一个数据挖掘工程师的头衔混为一谈。
现在招算法的帖子不确定会问什么,但据我所知,机器学习的模型原理和之前的一些经验肯定是跑不掉的。这两块没啥技巧。仅凭acm奖项和算法能力都很难通过面试估计,更何况是阿里妈妈这样的核心部门。
从这两个例子可以看出,5年前这个行业还是很迷茫的,但是现在越来越清楚这个岗位是做什么的,工程师需要什么样的能力。而且我觉得以后应该会越来越清楚。现在可能还是有个别部门或者上层架构师对算法不太了解。比如工程背景的带算法团队的tech leader并不少见,但以后应该会越来越少。
没有985,没有名校硕士,没有论文面试大公司算法岗位的说法有一定的道理。但是,不能只看现象,随意总结。仔细分析背后的原因是对算法工程师的要求越来越明确。但是,虽然要求很明确,但还是有问题。问题是这些能力不太方便在面试中体现,校招和社会招聘都有这样的问题。
社会招聘的问题会好一些。从之前的经验可以看出,校招的问题是比较严重的。我们怎么知道你的数据处理能力?你对模型的细节了解多少?怎么判断你来了以后能不能拿得住这个东西?
正是因为这个问题,很多面试官或者hr不得不提出硬性要求。招一些基础好,背景优秀的聪明学生总是对的。即使他们不对,他们现在也可以学习。
招聘逻辑
接下来我就和大家聊聊各个公司的招聘逻辑,我也发现了一些规律。
这里的规律是,工厂越小越务实,工厂越大越虚。这其实很好理解,因为小厂的资金和预算都是有限的,各个岗位的负责人都要小心谨慎,绝不可能多招。一旦招了,肯定有具体用途,比如某件事人手不足,或者某个问题没有解决,需要招人。这种情况下,小厂的要求很明确,就是技术栈匹配越多越好。也就是说,你和他们用的越搭配越好。匹配越多,入门和学习成本越低,直接做最好。
大厂不是,而且工厂越大越不好。原因也很简单。大厂招聘的目的除了满足人力需求,还有其他意义,就是人才储备。例如,清华姚班每年毕业30人。如果30个人都去腾讯,对腾讯的发展有多大帮助?如果你是老马,你能接受这样的事情吗?肯定不会,因为优秀人才的数量是有限的。虽然竞争的人很多,但是头部用户总是那么多。别的公司拿走的多了,留给你公司的少了。作为大公司,肯定会争取,包括招实习生。其实本质目的是招才储备。
从某种程度上来说,一个大公司把一个优秀的学生培养成一个优秀的工程师,比在市场上招聘一个同样优秀的工程师花费更少。算法岗位的顶尖人才至少有80%掌握在大公司手里,剩下的20%由广大二三线小公司争夺。一个大公司在市场上招聘一个优秀的工程师是非常困难的,远比大家想象的要困难。这样的人往往不缺offer,加上大公司里等级制度和待遇的限制,要抢那些财大气粗的二线公司真的不容易。
所以面试小公司的核心逻辑是匹配。你有他们需要的技能,你也知道他们需要的技能。没关系。你想出一大堆花里胡哨的东西其实也没用。一些小公司的面试官甚至不知道acm是什么。你告诉他你是亚洲银牌有用吗?
大公司的招聘要求比较琐碎,一般来说更注重基础。这里的基础不仅是基础知识,更是基础能力。比如数据结构和算法的能力,比如思维的灵活性,就是给你一道算法题,看你能不能灵活的解出来。再比如机器学习的基础,模型的一些基本原理等等。
除了基础,还有一个很重要的就是你的软实力,比如你的表达能力,你的情商,你遇到困难时的反应。比如遇到难题时是否有清晰的思考过程,简单尝试后放弃还是愿意继续努力?还有就是你的性格,比如你是听话还是独立。如果你个性很强,老板可能会发现你很难管理。用专业术语来说,管理成本有点高,也会让面试官打退堂鼓。
还有一个经常说的就是潜力,这是一个很空洞的概念,完全是面试官的主观感受,很难有实际支撑。据我了解,大概有几个方面。一个是智商。聪明人学东西快,潜力大。这是毫无疑问的。即使很多东西你都不懂,如果你能让面试官觉得你学的很快,这些都不是问题,那么这就不是减分。
还有就是年龄,比如经过一番波折浪费了几年时间,比其他应聘者大很多(两岁多),可能会让面试官觉得你的潜力大打折扣。比如你过去的一些经历,比如你在某个领域的执着,从无到有的快速成长,也会让面试官觉得你很有潜力。
这样,实践能力是加分项而不是主项,也有道理。因为对于大公司来说,整个技术架构往往是独立搭建的,和外面不一样。也就是说,除非你之前置身其中,否则你几乎找不到完全理解它的技术栈。另外,学校招生原来的实战经验少,更倾向于学得快,而不是招一个马上就能上手的人。
核心能力
由于很久没接触校招了,面试怎么准备就不好说了。我只能说如果要招的话我会喜欢什么样的学生。也可以理解为我对一个合格优秀的算法工程师应该具备的东西的理解。
模型理解
算法工程师处理的是模型,所以理解模型很有必要。其实不言而喻,每个模特都精通,没必要,面试问的模特也不一定会用。但是更多关注的是这个人在学习的时候的习惯。他会涉猎一下,还是会深究一下,能学到什么?
在实际工作中,我们可能会面临各种各样的情况,比如增加了新功能却没有效果,比如升级了模型变差了等等。这些情况都有可能。当我们遇到这些情况时,需要根据已知的信息进行推理,猜测原因,以便采取相应的措施。所以这就要求我们对现在的模型有更深入的了解,否则不可能完善推导。
所以面试的时候问哪个模特不重要。重要的是你能不能表明你做了深入的研究和了解。
数据分析
算法工程师一直在和数据打交道,所以分析数据、清理数据、制作数据的能力也是必不可少的。说到简单的数据分析,其实涉及很多。简单来说,至少有两个关键点。
第一个重点是处理数据的能力,比如SQL,hive,spark,MapReduce等等。没有,或者至少有一点。因为每个公司的技术栈都不一样,我们一般不会抱着应聘者一定只是和我们一样的期望来招人,但是应聘者肯定不可能什么都不懂。由于学生很少接触这种做法的内容,很多人对此一无所知。如果知道一二,其实是加分项。
第二个关键点是对数据的理解。我们举个简单的例子。例如,当前样本在训练模型后无效。我们需要分析其原因。你如何开始?这个问题在日常生活中经常遇到,也很考验算法工程师分析数据的能力和经验。数据是水,模型是船。要想把船航行到很远的地方,仅仅知道船的结构是不够的,还要知道水文和天文现象。只有这样,才能从数据中捕捉到窍门,才能对某些现象有更深刻的看法和理解。
工程能力
虽然是算法工程师,但不代表工程能力不重要,相反,工程能力也很重要。当然,这往往不会成为招聘的硬性指标,比如调查你以前做过什么项目。但是它会反映在您的代码测试中。你的代码风格,你的编码能力都是你面试的考察点之一。
不仅面试如此,实际工作中也是如此。在小范围内,可以开发一些工具和脚本,方便自己或团队中其他人的日常工作。在大范围内,你也可以成为团队中的开发负责人,负责其团队中最多的工程工作。例如,复制一篇论文,或者从零开始重新发明一个模型。这其实是一种差异化竞争的手段。如果你能合理的负担起别人负担不起的工作,那自然会成为你的业绩。
时代在变,行业在发展,今天的校招题已经和当年不一样了。但无论如何,这个职位和面试官对人才的核心诉求几乎没有改变。我们会建立自己的简历,从核心开始准备面试,相信能有所收获。