• 回答数

    4

  • 浏览数

    195

木匠森林
首页 > 工程师考试 > 算法工程师面试培训

4个回答 默认排序
  • 默认排序
  • 按时间排序

木木停留

已采纳

集灵台二首·其一(张祜)

算法工程师面试培训

195 评论(13)

梧桐无羽

说到算法岗位,现在网上的第一反应可能就是内卷,算法岗位也号称是内卷最严重的岗位。针对这个问题,其实之前我也有写过相关的文章。这个岗位竞争激烈不假,但我个人觉得称作内卷有些过了。就我个人的感觉,这几年的一个大趋势是从迷茫走向清晰。

早在2015年我在阿里妈妈实习的时候,那个时候我觉得其实对于算法工程师这个岗位的招聘要求甚至包括工作内容其实业内是没有一个统一的标准的。可以认为包括各大公司其实对这个岗位具体的工作内容以及需要的候选人的能力要求都不太一致,不同的面试官有不同的风格,也有不同的标准。

我举几个例子,第一个例子是我当初实习面试的时候,因为是本科生,的确对机器学习这个领域了解非常非常少,可以说是几乎没有。但是我依然通过了,通过的原因也很简单,因为有acm的获奖背景,面试的过程当中主要也都是一些算法题,都还算是答得不错。但是在交叉面试的时候,一位另一个部门的总监就问我有没有这块的经验?我很明确地说了,没有,但是我愿意学。

接着他告诉我,算法工程师的工作内容主要和机器学习相关,因此机器学习是基本的。当时我就觉得我凉了,然而很意外地是还是通过了面试。

另外一个例子是当时的一个小伙伴,他在最后转正面试的时候被要求用R语言写了一个树模型。具体是什么模型我不记得了,我只知道当时我还不会,所以没记住名字。但是了解行情的都知道,现在工业界应该已经基本上没有使用R语言的了。不论是当时的面试官对R语言比较熟悉,还是当时他的团队里用的都是R语言,都可以说明其实整个阿里内部当时对于算法工程师是没有统一标准的。实际上也的确如此,当时还有很多算法工程师和数据挖掘工程师的title混为一谈的现象。

我不太清楚现在校招算法岗位会问一些什么,但是就我的了解,机器学习的模型原理以及之前的一些使用经验肯定是跑不了的。这两块的技能没有,只靠acm的奖项以及算法能力想要通过面试估计很难,更不要说是阿里妈妈这样的核心部门了。

从这两个例子可以看出来,5年之前业内还是比较迷茫的,但是现在越来越清楚了,这个岗位究竟是做什么的,需要工程师有什么样的能力。并且我觉得以后应该会越来越清晰,现在可能还是会有一些个别的部门或者是上层的架构师对算法这块不是非常了解。比如工程出身的tech leader带算法团队这样的例子还不少见,但以后应该会越来越少。

所谓没有985,没有名校硕士,没有paper去面试大公司的算法岗位就是炮灰就是送的说法,有一定的道理。但是我们不能只看现象胡乱总结,仔细分析背后的原因其实是对算法工程师的要求越来越明确。但是要求虽然清晰,也还有问题,问题就是这些能力不是非常方便在面试当中体现,对于校招社招都有这样的问题。

社招这个问题会好些,看之前的经历就看得出来,校招这个问题相对比较严重,我们怎么知道你数据处理能力怎么样?你对模型的细节了解多少?怎么样判断你来了之后能不能hold住这一块事情?

正因为有了这样的问题,所以很多面试官或者是hr才不得不抬高硬性要求。招一些基础好、背景出色人聪明的学生进来总没错,即使不对口,也可以现学。

招聘逻辑

接下来和大家聊聊各种公司的招聘逻辑,这里面我也发现了一些规律。

这里面的规律就是越是小厂越务实,越是大厂越虚。这其实也很好理解,因为小厂的资金和预算都有限,所有岗位的人头都要精打细算,能不多招绝不多招。一旦招了一定是有具体的用处的,比如某一块事情人手不够,或者是某个问题没有人解决,必须要招人。在这种情况下,小厂的要求非常明确,就是技术栈越匹配越好。也就是你会的东西和他们用的东西越匹配越好,越匹配你上手和学习的成本越低,来了直接能干活的最好。

大厂则不然,越大的厂越不然。原因也简单,大厂招聘的目的除了满足人力需求之外,还有其他的意义就是人才储备。比如清华姚班一年毕业30人,这30人如果都去了腾讯,会给腾讯的发展起到多大的帮助?如果你是老马你能接受这样的事情吗?肯定不行,因为优秀的人才的数量是有限的,虽然竞争的人多,但是头部用户一直就那么多。其他公司多招走了一些,留给你们公司的就少一些。身为大公司肯定是会努力争取的,包括招聘实习生什么的,其实本质上的目的都是招聘人才进行储备。

某种程度上来说,大公司把一个优秀的学生培养成优秀工程师花费的代价要小于去市场上招聘一个同样优秀的工程师的代价。算法岗位当中至少有80%以上的顶级人才都在大公司手里攥着,广大二线、三线的小公司争抢剩下的20%。大公司想要在市场上招聘一个优秀的工程师是非常难的,远远比大家想的要难。这样的人手里往往不缺offer,加上大公司里层级以及待遇的限制,想要抢得过那些财大气粗的二线公司真的不容易。

所以面试小公司的核心逻辑就是对口,他们需要的能力你有,他们需要的技术你会,就行了,你搞出很多花里胡哨的东西来其实没什么用。有些小公司的面试官连acm是什么都不知道,你和他说你是亚洲区的银牌有用么?

大公司的招聘要求就比较琐碎了,一般来说比较看重基础。这里的基础并不仅仅是基础知识,准确地说是基础能力。比如数据结构和算法的能力,比如思维的灵活度,也就是给你出个算法题,看你能不能灵活地做出来。再比如机器学习的基础,模型的一些基础原理等等。

除了基础之外另外一个很重要的是你的软实力,比如你的表达能力,你的情商,遇到困难的时候的反应。比如遇到难题你有没有一个清晰的思考过程,简单尝试了一下就放弃了还是愿意不停地努力。还有你的性格,比如你是服从性的还是比较有主见的,如果你很有个性,老板可能会觉得你比较难管,用术语来说就是管理成本有点高,这也会让面试官打退堂鼓。

还有一点常说的是潜力,潜力这是一个很虚的概念,完全是面试官的主观感受,很难有实际的支撑。根据我的理解大概是这么几个方面,一个是智商,聪明的人学东西快,潜力高,这个是毋庸置疑的。即使你很多东西不会,如果你能让面试官觉得你能很快学会,这些不是问题,那么这就不是一个减分项。

还有年龄,比如中间经过了一些曲折浪费了几年比其他应聘者年长很多(两岁以上),可能会让面试官觉得你潜力折损。再比如你过去的一些经历,比如你在某个领域坚韧不拔从0做起,成长迅速,也会让面试官觉得你潜力不错。

这样说起来实践的能力反而是加分项而不是主要的了,这也有一定的道理。因为对于大公司而言,整个技术架构往往都是自己独立建的,和外面的都不一样。也就是说除非之前在里面待过的,否则几乎找不到技术栈完全懂的。再加上校招生原本实战经验就要少一些,相比于招一个立即能上手的,更加倾向于能够快速学会的。

核心能力

由于我已经很久没有接触校招了,所以也很难说校招面试应该怎么样准备,只能说说如果是我来招聘,我会喜欢什么样的学生。也可以理解成我理解的一个合格优秀的算法工程师应该有的能力。

模型理解

算法工程师和模型打交道,那么理解模型是必须的。其实不用说每一个模型都精通,这没有必要,面试的时候问的模型也不一定用得到。但更多地是看重这个人在学习的时候的习惯,他是浅尝辄止呢,还是会刨根究底,究竟能够学到怎样的地步。

在实际的工作当中我们可能会面临各种各样的情况,比如说新加了特征但是没有效果,比如升级了模型效果反而变差了等等,这些情况都是有可能发生的。当我们遇到这些情况之后,需要我们根据已知的信息来推理和猜测导致的原因从而针对性的采取相应的手段。因此这就需要我们对当前的模型有比较深入地了解,否则推导原因做出改进也就无从谈起。

所以面试的时候问起哪个模型都不重要,重要的是你能不能体现出你有过深入的研究和理解。

数据分析

算法工程师一直和数据打交道,那么分析数据、清洗数据、做数据的能力也必不可少。说起来简单的数据分析,这当中其实牵扯很多,简单来说至少有两个关键点。

第一个关键点是处理数据的能力,比如SQL、hive、spark、MapReduce这些常用的数据处理的工具会不会,会多少?是一个都不会呢,还是至少会一点。由于各个公司的技术栈不同,一般不会抱着候选人必须刚好会和我们一样的期待去招人,但是候选人如果一无所知肯定也是不行的。由于学生时代其实很少接触这种实践的内容,很多人对这些都一无所知,如果你会一两个,其实就是加分项。

第二个关键点是对数据的理解力,举个简单的例子,比如说现在的样本训练了模型之后效果不好,我们要分析它的原因,你该怎么下手?这个问题日常当中经常遇到,也非常考验算法工程师对数据的分析能力以及他的经验。数据是水,模型是船,我们要把船驶向远方,只懂船只构造是不行的,还需要对水文、天象也有了解。这样才能从数据当中捕捉到trick,对一些现象有更深入的看法和理解。

工程能力

虽然是算法工程师,但是并不代表工程能力不重要,相反工程能力也很重要。当然这往往不会成为招聘的硬性指标, 比如考察你之前做过什么工程项目之类的。但是会在你的代码测试环节有所体现,你的代码风格,你的编码能力都是你面试的考察点之一。

并不只是在面试当中如此,在实际工作当中,工程能力也很关键。往小了说可以开发一些工具、脚本方便自己或者是团队当中其他人的日常工作,往大了说,你也可以成为团队当中的开发担当,负责其团队当中最工程的工作。比如说复现一篇paper,或者是从头撸一个模型。这其实也是一种差异化竞争的手段,你合理地负担起别人负担不了的工作,那么自然就会成为你的业绩。

时代在变化,行业在发展,如今的校招会问些什么早已经和当年不同了。但不管怎么说,这个岗位以及面试官对于人才的核心诉求几乎是没有变过的,我们从核心出发去构建简历、准备面试,相信一定可以有所收获。

257 评论(8)

A田欣团队

那你得有各种专业的证书,然后再去面试的话,会成功率大

289 评论(14)

粉红猪大大

算法是比较复杂又基础的学科,每个学编程的人都会学习大量的算法。而根据统计,以下这18个问题是面试中最容易遇到的,本文给出了一些基本答案,供算法方向工程师或对此感兴趣的程序员参考。1)请简单解释算法是什么?算法是一个定义良好的计算过程,它将一些值作为输入并产生相应的输出值。简单来说,它是将输入转换为输出的一系列计算步骤。2)解释什么是快速排序算法?快速排序算法能够快速排序列表或查询。它基于分割交换排序的原则,这种类型的算法占用空间较小,它将待排序列表分为三个主要部分:·小于Pivot的元素·枢轴元素Pivot(选定的比较值)·大于Pivot的元素3)解释算法的时间复杂度?算法的时间复杂度表示程序运行完成所需的总时间,它通常用大O表示法来表示。4)请问用于时间复杂度的符号类型是什么?用于时间复杂度的符号类型包括:·Big Oh:它表示小于或等于目标多项式·Big Omega:它表示大于或等于目标多项式·Big Theta:它表示与目标多项式相等·Little Oh:它表示小于目标多项式·Little Omega:它表示大于目标多项式5)解释二分法检索如何工作?在二分法检索中,我们先确定数组的中间位置,然后将要查找的值与数组中间位置的值进行比较,若小于数组中间值,则要查找的值应位于该中间值之前,依此类推,不断缩小查找范围,直至得到最终结果。6)解释是否可以使用二分法检索链表?由于随机访问在链表中是不可接受的,所以不可能到达O(1)时间的中间元素。因此,对于链表来说,二分法检索是不可以的(对顺序链表或排序后的链表是可以用的)。7)解释什么是堆排序?堆排序可以看成是选择排序的改进,它可以定义为基于比较的排序算法。它将其输入划分为未排序和排序的区域,通过不断消除最小元素并将其移动到排序区域来收缩未排序区域。8)说明什么是Skip list?Skip list数据结构化的方法,它允许算法在符号表或字典中搜索、删除和插入元素。在Skip list中,每个元素由一个节点表示。搜索函数返回与key相关的值的内容。插入操作将指定的键与新值相关联,删除操作可删除指定的键。9)解释插入排序算法的空间复杂度是多少?插入排序是一种就地排序算法,这意味着它不需要额外的或仅需要少量的存储空间。对于插入排序,它只需要将单个列表元素存储在初始数据的外侧,从而使空间复杂度为O(1)。10)解释什么是“哈希算法”,它们用于什么?“哈希算法”是一个哈希函数,它使用任意长度的字符串,并将其减少为唯一的固定长度字符串。它用于密码有效性、消息和数据完整性以及许多其他加密系统。11)解释如何查找链表是否有循环?要知道链表是否有循环,我们将采用两个指针的方法。如果保留两个指针,并且在处理两个节点之后增加一个指针,并且在处理每个节点之后,遇到指针指向同一个节点的情况,这只有在链表有循环时才会发生。12)解释加密算法的工作原理?加密是将明文转换为称为“密文”的密码格式的过程。要转换文本,算法使用一系列被称为“键”的位来进行计算。密钥越大,创建密文的潜在模式数越多。大多数加密算法使用长度约为64到128位的固定输入块,而有些则使用流方法。13)列出一些常用的加密算法?一些常用的加密算法是:·3-way·Blowfish·CAST·CMEA·GOST·DES 和Triple DES·IDEA·LOKI等等14)解释一个算法的最佳情况和最坏情况之间有什么区别?·最佳情况:算法的最佳情况解释为算法执行最佳的数据排列。例如,我们进行二分法检索,如果目标值位于正在搜索的数据中心,则这就是最佳情况,最佳情况时间复杂度为0。·最差情况:给定算法的最差输入参考。例如快速排序,如果选择关键值的子列表的最大或最小元素,则会导致最差情况出现,这将导致时间复杂度快速退化到O(n2)。15)解释什么是基数排序算法?基数排序又称“桶子法”,是通过比较数字将其分配到不同的“桶里”来排序元素的。它是线性排序算法之一。16)解释什么是递归算法?递归算法是一个解决复杂问题的方法,将问题分解成较小的子问题,直到分解的足够小,可以轻松解决问题为止。通常,它涉及一个调用自身的函数。17)提到递归算法的三个定律是什么?所有递归算法必须遵循三个规律:·递归算法必须有一个基点·递归算法必须有一个趋向基点的状态变化过程·递归算法必须自我调用18)解释什么是冒泡排序算法?冒泡排序算法也称为下沉排序。在这种类型的排序中,要排序的列表的相邻元素之间互相比较。如果它们按顺序排列错误,将交换值并以正确的顺序排列,直到最终结果“浮”出水面。满意记得采纳哈

278 评论(9)

相关问答