算法工程师必须要知道的面试技能雷达图
本文作者王喆,硅谷高级机器学习工程师。
转载自知乎专栏:
https://zhuanlan.zhihu.com/p/52169807
这里是 王喆的机器学习笔记 的第五篇文章,今天我们不聊paper,换一个轻松一点的话题,聊一聊如何准备算法工程师的面试。
今年是我作为算法工程师工作的第七个年头,期间拿到过hulu,阿里巴巴,腾讯,美团以及一些startup的算法工程师offer,也作为面试官面试过清北、海外、北邮以及一些二本学校等不同背景的百余位candidates,作为面试者和面试官的经验还比较丰富。所以希望自己的经验能对你有所帮助,也非常欢迎其他面试官能够多留言探讨自己的面试经验。
那我们直入主题,到底什么技能才是一名合格的算法工程师应该具备的技能呢?面试官又会如何验证你的这些技能呢?
虽然每个一个岗位都有JD,但抛开具体的岗位要求,从稍高的角度角度看待这个问题,一名算法工程师的技术素质基本可以拆解成下面四个方面:知识、工具、逻辑、业务。当然广义来讲,这四项素质也适用于所有IT工程师。
我非常喜欢用雷达图来表示一个人的能力范围,可能小时候看圣斗士看多了,当时研究官方出的黄金圣斗士能力雷达图研究了半天,现在也没好到哪去,只不过变成了喜欢研究候选人的能力雷达图了。下面画出了大数据行业几个相关职位的能力雷达图,大家可以初步体会一下。

不同岗位的技能雷达图
简单来说,任何工程师都应该满足四项技能的最小要求,比如我曾经面试过一位计算广告算法工程师candidate,这位同学发过一些计算广告相关的paper和专利,从research的角度是不错的人选,但当我想稍微验证一下他coding的能力时,他明确告诉我说他不愿意写代码。这就是不满足“工具”这项技能的最小要求,自然是不能通过面试的。
在最小要求的基础上,算法工程师的能力要求是相对全面的。其实所谓算法工程师,就是因为你不仅应该是一位合格的“工程师”,还应该再次基础上有算法的改进和实现的能力。除此之外,大数据工程师更注重大数据工具和平台的改进,研究员则在知识和逻辑层面相对突出。有些临时抱佛脚的同学喜欢恶补知识,不注重理解业务和模型本身的内在逻辑,是我经常见到的面试“悲剧”情况。
当然,只用四个词描述四个方面的能力还是过于形而上了,这里我们用一些具体的内容来描述一下算法工程师的四个技能点:
知识:主要是指你对machine learning相关知识和理论的储备
工具:将你的machine learning知识应用于实际业务的工具
逻辑:你的举一反三的能力,你解决问题的条理性,你发散思维的能力,你的聪明程度
业务:深入理解所在行业的商业模式,从业务中发现motivation并进而改进模型算法的能力
也许还不够具体,那我们再从一个实际例子中体会一下,比如我去面试“计算广告算法工程师”的职位,上面四项对应着哪些具体的能力呢?
知识:主流CTR模型以及预算控制,流量预估,bidding策略等模型算法的原理和技术细节
工具:coding能力,spark、flink、tensorflow、ps-lite等模型训练、serving相关工具
逻辑:算法题,模型之间的演化关系
业务:展示广告和搜索广告在构建模型时的区别联系,如何根据公司的business model制定模型的objective
当然,上面只是让大家体会一下什么是这四项素质,真实的计算广告算法工程师面试中,你不一定要都掌握,也不一定局限于这些内容。如果你遇到一位资深的面试官,他不会预设一个框架往面试者身上套,而会从面试者简历出发检验面试者能不能达到这四项素质的标准。
那么问题又来了,面试官会如何在"限定的时间内"检验你这四项素质能不能达到"技术合格"的标准呢?
既然是限定的时间,面试官就不可能拿出一本西瓜书,从头问到尾,也不可能拿出一本葫芦书,从100道面试题中抽出50道给你来个马拉松问答。面试官要做的是在1个小时的时间内确认你能力的"深度"和"广度"。 所以在这里面试官就像一个采样算法,要从你脑子里采几个点,把你的能力雷达图描绘出来。
重点再重复一边,面试官会从“深度”和“广度”两个维度构建你的能力雷达图。
对于"深度"方面,有经验的面试官会从你已经做过的项目中挑出你最擅长的部分做层次式的递进。比如我在之前的回答(如何准备机器学习工程师的面试 ?)中举过的例子,
一位面试同学介绍自己实习时候用过XGBoost预测股票涨跌,那面试官可能会由浅入深依次考察下列问题:
GBDT的原理(知识)
决策树节点分裂时是如何选择特征的?(知识)
写出Gini Index和Information Gain的公式并举例说明(知识)
分类树和回归树的区别是什么?(知识)
与Random Forest作比较,并以此介绍什么是模型的Bias和Variance(知识)
XGBoost的参数调优有哪些经验(工具)
XGBoost的正则化是如何实现的(工具)
XGBoost的并行化部分是如何实现的(工具)
为什么预测股票涨跌一般都会出现严重的过拟合现象(业务)
如果选用一种其他的模型替代XGBoost或者改进XGBoost你会怎么做,为什么?(业务+逻辑+知识)
这是一条由简历出发,由“知识”为切入点,不仅考察了“知识”的深度,而且还考察了“工具”、“业务”、“逻辑”深度的面试路径。
当然,如果你介绍的项目是实现了一种类似阿里DIN的CTR预估模型。那么问题路径可能是这样的:
softmax函数的定义是什么?(知识)
神经网络为什么会产生梯度消失现象?(知识)
常见的激活函数有哪些?都有什么特点?(知识)
挑一种激活函数推导梯度下降的过程。(知识+逻辑)
Attention机制什么?(知识)
阿里是如何将attention机制引入推荐模型的?(知识+业务)
DIN是基于什么业务逻辑引入attention机制的?(业务)
DIN中将用户和商品进行了embedding,请讲清楚两项你知道的embedding方法。(知识)
你如何serving类似DIN这样的深度学习模型(工具+业务)
这条路径侧重于考查“知识”深度的路径。为了弥补其他方向考察的不足,面试官肯定还会问一个从工具或者业务出发的问题来确定你其他方面的深度。
因为面试官选择的是你最熟悉的领域深入下去,我们可以假设,如果一位面试者在最擅长的项目中都答不上一些细节性的问题,那几乎可以肯定你在任何其他领域的钻研都不够深入,你的技能雷达图的面积肯定是一个很小的面积。也有像我之前所提到的一些临时抱佛脚的面试者,也许知识方面达到了要求,但经不起面试官对“工具”和“逻辑”的考察,这也毫无疑问会“悲剧”。
如果面试者的能力深度达到了最低的要求,下一步面试官会确定你能力的广度,对于任何算法工程师,我都会随机check以下几个知识点:
NN,RNN,个别聚类算法,模型评估等知识的理解程度
spark的调优经验,model serving的主要方法,parameter server的原理
GAN,LSTM,online learning的基本理解
embedding方法,attention机制,multi task,reinforcement learning,online learning的基本理解
对于广度的检查是比较随意的,个别答不上来无伤大雅,但如果超过一半以上的知识点都miss了,可能有点说不过去。因为我要知道你是一个关注前沿,喜欢学习的人,试想除了你自己做过的项目,其他知识了了,那我可以肯定你不是一个对技术有热情的人。很多面试官很看重“热情”这个属性,因为正是对技术的热情支撑你今后的学习,有些问题你可能不知道,你也要尽量用自己的理解去推导,去讨论。
好了,关于算法工程师面试中的能力雷达图讲完了,如果你嫌我太啰嗦,没关系,甩给你一张思维框图,你发给任何没看过这篇文章的人,也都会对我说的内容一目了然。

俗话说,面试是一门玄学,这句话有没有道理?面试到底“玄”在哪里?为什么“强”如作者(脸皮太厚了。。)参加了10余场大中小公司面试,也有两场没拿到offer,原因是什么,是因为玄学吗?
北京的这个冬天有点“冷”,在文章结束之前给身在寒冬的同学几点建议:
寒冬就应该广积粮,缓称王,猛攻自己的技能弱点,让自己更有实力迎接春天;
中高端职位永远不缺,真正合格的算法工程师永远是稀有物种,努力做金字塔中上部的那块砖;
好的offer永远是为平时注重积累的人准备的,突击准备也许会增加你的知识广度,但增加各方面技能的深度需要你无时无刻的积累和钻研,遇到问题多问为什么,多注重问题的细节。
好了,这里是王喆的机器学习笔记的第五篇文章,水平有限,特别是关于面试的内容仁者见仁,欢迎有建议的同学批评、吐槽、指正,也欢迎觉得内容有帮助的同学点赞鼓励。
(本文为 AI科技大本营转载文章,转载请微信联系原作者。)
征稿推荐阅读
用“AI”给吴秀波测面相,发现……
任正非:人工智能就是计算机和统计学
程序员一毕业就年薪 110 万竟然是靠……
程序员锁死服务器失踪,公司解散 600 万项目彻底黄了!
关于云原生,这是最详细的技术知识
一年省下1000亿? 原来零售玩的是闷声发大财
不难!月薪 50K大牛,悉心整理程序员必备技能!
用Python全自动下载漂亮小姐姐的抖音视频!
用Python做一款俄罗斯方块游戏
相关文章:

Qt中文手册 之 QHeaderView
一、 头文件:#include<QHeaderView> 继承自:QAbstractItemView 二、属性 1、cascadingSectionResizes : bool 如果下一区域已经达到最小,是否继续改变下下一个区域的大小。 前提条件是:设置setResizeMode()为interactive 默认是false 相关函数: bool cascadingS…

Linux硬盘性能测试工具 - FIO
1.安装:方法一:直接用指令yum -y install fio方法二:如果方法一不可行则,在官网http://freshmeat.net/projects/fio/下载fio的安装包。安装方法很简单。解压缩后,进入目录输入./configure make make install。2.执行…

linux下vmware tools工具共享
(1.)现在windows 创建一个文件件linux,添加一个test.txt文件(2).虚拟机—设置(red hat linux挂载起来,或运行,有的时候都处于禁用状态,如果这样就有关闭red hat linux,然后再进行设置)--选项 –文件夹共享—…

在全面部署 IPV6 前,你需要了解都在这儿
IPv6 的发展形势 近日,中办国办印发《推进互联网协议第六版(IPv6)规模部署行动计划》(以下简称《计划》),加快推进基于 IPv6 的下一代互联网规模部署,计划指出到 2018 年末国内 IPv6 活跃用户数…

Qt中文手册 之 QApplication
QApplication管理GUI程序的控制流和主要设置。 QApplication包含由窗口系统和其他来源处理过和发送过的主事件循环。它也处理应用程序的初始化和收尾工作,并提供对话管理。QApplication可以对系统和应用的大部分设置项进行设置。 对于用Qt写的任何一个GUI应用,不管这个应用…

微信真要做操作系统了?
整理 | 仲培艺转载自CSDN(ID:CSDNnews)微信爸爸又带着小程序搞事了,一夕之间,小程序界面“变天”,类操作系统来了。「微信二楼」:欢迎来到小程序的世界下拉即见又一个手机桌面?!1 月…

netsh命令修改ip
当前笔记本的可移动性增强,我们需要在多个环境下接入网络开始工作,在没有路由器自动分配的情况下,就需要每次手动设置IP地址和网关等信息,相当烦琐,通过实践利用netsh命令用快捷方式实现了IP地址的快速切换。A. 基本用…

谷歌Waymo自建车厂,L4级无人车量产指日可待
编译整理 | 一一出品 | AI科技大本营(ID:rgznai100)现在,Waymo 宣称世界上第一家 100% 致力于大规模生产 L4 自动驾驶汽车的工厂,即将诞生。美国当地时间 1 月 22 日,Google 旗下无人驾驶公司 Waymo 宣布&a…

Qt中文手册 之 QTableWidget
简介: QTableWidget是基于QTableView的一个默认的视图模型;它用于显示一个标准的表格。表格中每一个项通过QTableWidgetItem来实现。 头文件:#include <QTableWidget> 继承自:QTableView 成员函数: 1、QTableWidget::QTableWidget(QWidget * parent = 0) 默认构…

vue-cli 使用小技巧
1.关闭烦人的eslint 语法检测,在 config 文件夹下 设置: // Use Eslint Loader? // If true, your code will be linted during bundling and // linting errors and warnings will be shown in the console. useEslint: false, //设置为false 2.引入sc…

架构师成长之路-个人学习经验分享(公司研发峰会演讲ppt)
前天在公司分享了一些学习经验,园子中感兴趣可以看看。建议大家使用pptPlex来看这个片子。 首先从我在成长中不同阶段的工作和体会来谈不同阶段的学习内容谈起,为了做好这些必修课,我会对知识+实践+思考+心态ÿ…

Qt 事件处理和事件过滤器的返回值总结
事件处理: 1、返回 true:告诉Qt已经处理的这个事件 2、返回 false:Qt会把这个事件传递给它的父窗口部件来处理 3、返回 基类的event(QEvent*):Qt把这个事件交个它的基类来处理(注意与返回 fa…

C++转Python这三年,我都经历了什么?
作者 | asya f,计算机视觉专家,编程语言铁粉。译者 | 安翔,责编 | 沭七转载自 CSDN(ID:CSDNnews)很多人都说用 Python 编程十分简单,即便是 6 岁的小孩也可轻松学会。我自己最开始使用 Python 编…

炎热夏天到底如何让自己更凉快? - 生活至上,美容至尚!
酷暑难耐,晚上睡觉都不能睡好,早上一起来就大汗淋漓,天气越来越热 火辣辣的太阳,让人食欲一落千丈。 如何让食物和调料成为闷热天气解暑良方呢? 根据中医对中药性能的四气五味理论,凡是寒性或凉性的中药,都…

华为又一重拳!全球首款5G基站核心芯片“天罡”发布!
作者 | 孙浩峰来源 | CSDN云计算(ID:CSDNcloud)1 月 24 日,华为在北京举办 5G 发布会暨 2019 世界移动大会预沟通会,发布了全球首款 5G 基站核心芯片——华为天罡,致力打造极简 5G,助推全球 5G 大规模快速部…

Qt中文手册 之 QTreeWidget
头文件:#include<QTreeWidget> 继承自:QTreeView 属性: 1、columnCount : int 树中有多少列,默认是1; intcolumnCount() constvoidsetColumnCount(int columns) 2、topLevelItemCount : constint 树中有多少顶层项,默认是0; 成员函数 1、QTreeWidget::QTreeW…

12. 17 哈理工网络赛
An Easy Geometry Problem Description Lily is interested in hyperspace recently, and she is trying to solve an easy problem now. Given an n-dimensional hyperspace, assuming each dimension is a1, a2, a3, ..., an. And for each i (1 ≤ i ≤ n), j (i < j ≤ …

微信确认出Bug,目前已全部恢复
1 月 24 日,微信官方发布声明称,今天上午,微信部分功能出现故障,微信用户登录、消息会话、公众号、小程序、外部链接、文件发送等功能均受到不同程度的影响,波及小部分用户。今日 10:30 左右,有网友表示&am…

《xUnit Test Patterns》学习笔记3 - Philosophy of Test Automation
这一章主要讲自动化测试的原则。前面的章节介绍了很多测试的思想,而思想的东西难免有点虚,这一章就是告诉你,遇到了具体的什么问题时,应该怎么办。作者咨询了很多的开发人员和测试人员,同时也和Martin Fowler就自动化测…

js new 运算符到底做了什么?
MDN上是这么介绍new运算符的:new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一。 这里,我们探究的是new运算符实际上做了什么? var a new A(); 复制代码当这段代码运行的时候,内部实际上执行的是&am…

Qt中文手册 之 QTableWidgetItem
头文件 #include<QTableWidgetItem> 成员函数 1、QTableWidgetItem::QTableWidgetItem(int type = Type) 使用指定item类型type构造。 item的type QTableWidgetItem::Type0默认的类型:窗口部件QTableWidgetItem::UserType1000The minimum value for custom types. Val…

你知道“啥是佩奇”,却不一定了解佩奇排名算法
作者 | 程序员小吴 从初学者的角度学习算法,以动画的形式呈现解题的思路。来源 | 五分钟学算法佩奇排名介绍佩奇排名是根据页面之间的链接结构计算页面的值的一种算法。下面我们通过动画来理解进行计算的具体流程。假设一个正方形表示一个 WEB 页面,一个…

用友发布U8 All-in-One引爆中小企业全面信息化
1月16日,北京经历了2010年第一场大雪和创50年的低温记录后,温度似有回升的感觉。什刹海一座别致建筑二楼的"用友中小企业全面信息化策略暨U8 All-in-One发布会"现场洋溢着融融暖意。用友在这里隆重发布了面向中小企业全面信息化的解决方案--U8…

Qt中文手册 之 QTreeWidgetItem
头文件:#include <QTreeWidgetItem> 成员函数 1、QTreeWidgetItem::QTreeWidgetItem(int type = Type) 使用类型type构造项,默认类型窗口类型 2、QTreeWidgetItem::QTreeWidgetItem(const QStringList & strings, int type = Type) 使用字符串列表strings作为项…

6位技术大咖11月倾心巨献,大数据+安全主题的技术分享合集【阿里云MVP 干货集锦】...
为什么80%的码农都做不了架构师?>>> 摘要: 大家好,阿里云 MVP 11月大数据安全主题分享新鲜出炉,快来一睹为快吧!哪些MVP的分享最吸引你,你最想支持哪个MVP? 我们将开启为期一周的最…

linux下jsp环境的搭建
转自http://gehailong.blog.51cto.com/765312/264162作gehailong一 、安装JDK#chmod x jdk-6u13-linux-i586-rpm.bin//给文件加入执行权限#./jdk-6u13-linux-i586-rpm.bin//生成安装文件,运行完此命令后会生成一个jdk-6u13-linux-i586.rpm#rpm -ivh jdk-6u13-linux-i586.rpm//安…

ABP理论学习之通知系统
本篇目录 介绍订阅通知发布通知用户通知管理者实时通知通知存储通知定义介绍 通知(Notification)用于告知用户系统中的特定事件。ABP提供了基于实时通知基础设施的发布订阅模型(pub/sub)。 发送模型 给用户发送通知有两种方式&am…

linux驱动:TI+DM8127+GPIO(一)之应用——报警输入输出
一、【GPIO应用】 报警输出1 ALRM_OUT1A、ALRM_OUT1B <-- ALM_OUT1 <-- CVOUT1_YC4 <-- W22 <--VOUT[1]_G_Y_YC[4]/EMAC[1]_MRXD[7]/VIN[1]A_D[9]/PATA_D[1]/GP3[8] /sys/class/gpio/gpio104/value 其中104 32*38 GPIOn_x的编号为32*nx,例如此处用…

Facebook增强版LASER开源:零样本迁移学习,支持93种语言
来源| Facebook AI 研究院译者 | Linstancy责编 | 琥珀出品 | AI 科技大本营(ID:rgznai100)【导语】为了加速自然语言处理 (NLP) 在更多语言上实现零样本迁移学习 (zero-shot transfer learning),Facebook 研究者扩展并增强了 LASER (Languag…

Python文本预处理:步骤、使用工具及示例
作者 | Data Monster译者 | Linstancy编辑 | 一一出品 | AI科技大本营(ID:rgznai100)本文将讨论文本预处理的基本步骤,旨在将文本信息从人类语言转换为机器可读格式以便用于后续处理。此外,本文还将进一步讨论文本预处理过程所需要…