算法工程师面试笔记

@AUTHOR:Jiawei Li
@DATE : 09/29/2019
本文全文约8600字,阅读估计需要25分钟

前言

最近趁着秋招的热度投了一波简历,本着开源的精神,整理了一下各个厂的面试问题,欢迎大家评论交流~

目录(按照时间排序)

  • 前言
  • 云恩科技
  • 星云智汇(4fun)
  • 无觅
  • 联想(深圳机器智能中心)
  • 博智林(碧桂园旗下)
  • 追一科技
  • 字节跳动
  • 阿里(LAZADA)
  • 腾讯
  • * 写在后边的话

云恩科技

面试次数:1(现场面)

面试主要内容:计算机视觉,OCR,人体识别

面试时间:约90min

具体内容:

  • 项目介绍
  • 简要描述OD(Object Detection,物体识别)方向的通用框架
  • OD方向的general和非general在实现时有哪些可选择的框架?为什么选择这些框架?框架的优缺点?
  • 有没有做过OCR?对于非规则的OCR怎么做?解释下Text-RCNN原理?
  • 如何做船员是否穿救生服的判别方案的落地?
  • 了解双目摄像头吗?讲述一下工作原理?
  • 模型现场部署需要注意哪些?
  • 对于目前在做的人工智能蓝海产业(渡口非法船舶/船舶牌照识别)有什么看法?

总体感受:面试问题比较宏观,大多数都是从框架设计/应用具体落地层面来问的,对于新人不太友好。可能是英文公司规模比较小,而且做的方向还比较蓝海,所以希望招一个比较全栈的技术人员负责算法落地,也情有可原。面试官一共两位,分别是业务经理和CTO(公司一共七人左右),态度非常友善。不过还是要吐槽一下办公地点,是在西丽的大学生创业小镇,我从南山过去要换乘地铁,路程还是挺长的…(不过现在据说换地方了,感兴趣的同学可以过去看看)。


星云智汇(4fun)

面试次数:2

一面(电话面)

面试主要内容:机器学习基础,强化学习,推荐系统,深度学习相关(主要是RNN)

面试时间:约90min

具体内容:

  • 自我介绍/项目介绍
  • 强化学习的基本框架(我在项目里提到了强化学习)?强化学习与有监督学习/无监督学习的关系?
  • 强化学习model可以做online吗?为什么?
  • AC网络结构的思想是什么?
  • XGB和GBDT的实现区别是什么?原理区别是什么?
  • 推荐系统的三大组成要素?召回和精排在实现上有何区别?
  • LSTM的原理?和RNN的区别?有了解过GRU吗?它们三者的区别?

二面(现场面)

面试主要内容:推荐系统工程化,A/B Test

面试时间:约120min

具体内容:

  • 请设计一个你认为能够处理百万日活的推荐系统框架?(包括算法和工程落地方案)
  • 之前做的推荐系统可以达到实时吗?你认为怎样的推荐系统能够达到实时?(日活百万)
  • 模型在部署时如何做A/B Test?A/B Test筛选线上模型的标准有哪些?
  • 给出一个标准三层结构(召回,粗排,过滤),每个结构上有10个待上线算法,日活百万,如何解决每个算法上训练时数据量不足的问题?(提示:用流量正交)
  • XGB, GBDT, LGBM的关系?如何应用在工程上?
  • 对于在线端,近线端和离线端的理解?

总体感受:这是一家做短视频应用的公司(对标抖音和快手,不过面向国家是印度),总部在珠海。深圳的算法组刚成立不久。办公室是租的Beeplus,整体感觉非常不错,有点像在咖啡厅里办公。不过最得我心的还是他们有专门的午休太空舱,可以完美解决午休问题。两面的面试官都是同一位,态度很好,而且一看就是经验丰富的大佬,问我的问题都很实际,不是浮于表面地问问原理就完事那种。而且他最后还说刚毕业的年轻人都是这样的,问啥原理都懂,但是就是动手落地能力差,希望之后我入职之后可以多跟他交流,这样更加有助于我的成长,把我感动的一塌糊涂,真的非常少见这样的能在还没入职的时候就答应给你铺好成长道路的面试官了。面试整体的节奏偏快,而且都是实际工程问题,对于像我这种工程能力不足的候选人非常有益。


无觅

面试次数:2

一面(电话面)

面试主要内容:推荐系统实现与评测,机器学习基础,深度学习,强化学习

面试时间:约120min

具体内容:

  • 自我介绍/项目介绍
  • 请推导一下LR,并说一下L1和L2的区别,如何在模型里协调L1和L2(哪种情况下用哪个方法?有什么好处?)
  • 用过SVM吗?说说SVM原理?有哪些核函数?
  • 强化学习的基本框架(我在项目里提到了强化学习)?
  • boosting,bagging和stacking的区别?优缺点?应用场景?
  • XGB实现原理?每一棵tree的wieght和gain有什么区别?防止过拟合的方法?
  • 简述梯度下降?Adam和SGD的使用场景?
  • 网络参数初始化怎么设置?简述Xavier的实现方案?
  • loss下不来可能是什么原因?梯度下降能够通过什么方案提速?
  • 怎么确定一个推荐系统的可落地性?怎么评价推荐系统效果的好坏?

二面(现场面)

面试主要内容:机器学习原理推导,神经网络原理推导,算法题

面试时间:约120min

具体内容

  • 自我介绍/项目介绍
  • CNN的反向传播是如何做的?为何在反向传播时kernel要转置?
  • 给你一个具体的dataset,请在纸上描述GBDT训练过程,并用公式表示
  • LSTM三个门的作用?画出LSTM的基本结构?有什么更好的改进方案?
  • 如何切分train/validation/test dataset的规模?依据是什么?
  • FM和FFM的原理?应用?推导?
  • 算法题(具体忘记是啥了,只记得是一个递归相关的题,难度大概是leetcode medium左右,他规定十分钟写完,我用了
    五分钟,但是后来改进优化用了十分钟…还需要讲述算法的时空复杂度)

总体感受:我面试的部门是做英语教学APP的(对标扇贝),不是他们的主线业务,但是面试的标准却丝毫没有减。两次面试的面试官是同一位,所以二面相当于是一面的加深版本。面试官挺nice的,会认真听完你的叙述不会打断你,但是总体感觉和面试官的交互还是比较少(也有可能是我比较能说…)。办公地点公共空间很大,很舒服,就是总部大楼不太好打车哈哈哈。总体感觉还算OK,但是因为第三面是算法负责人面,需要用电脑,但是我当时前后几天都没法用电脑,后来就不了了之了…


联想(深圳机器智能中心)

面试次数:4

一面(电话)

这次面试有点小插曲,因为约定使用skype进行面试,但是不知道是啥原因一直没打通,后来找了同学加了组内同学的微信,直接联系了面试官。但是因为信号不好等等不可抗因素…本来约定的半小时的面试延长到了45min,然后面试官跟我说希望可以约一个下个周的面试,因为他后边还有候选人的面试,不想耽误别人的时间。于是这次面试就草草收场了,主要内容还是做了个自我介绍和项目简介(虽然我也不知道面试官姐姐听清楚了没…)

二面(电话)

面试主要内容:机器学习基础,强化学习,时序分析

面试时间:大约60min

具体内容:

  • 树模型主要有哪些?XGB和GBDT的区别?
  • 如何构建从raw data到模型input/output的过程?(主要考察数据提取/清洗/预处理的过程)
  • 如何做数据EDA?有哪些工具?
  • 简述以下DIN的原理?DIN中的Attention是如何具体实现的?DICE函数有哪些优缺点?你觉得应该如何改进?
  • 你所做的RL和RS相结合的部分对比起现有的架构有哪些优势?
  • 简述以下arima的建模过程?为什么用arima?优缺点分析?
  • 你所说的模型线pipeline并行融合是在模型上做融合还是在结果上做voting?为什么这么做?有多少提升?
  • 项目职责分工是怎么样的?模型部署上线时碰到了哪些坑?你是怎么解决的?

三面(现场)

面试主要内容:机器学习基础,神经网络基础,后端开发, 算法题

面试时间:大约60min

具体内容:

  • 项目介绍
  • 你用于训练模型的数据划分依据是什么?(train/test dataset的比例),如何在不重复training的情况下确定最优值?
  • 模型的hyperparameters如何探索?如何做离线评测?
  • 数据的scale有哪几种方法?分别用于哪些场景?
  • 平台使用什么语言开发?会用Django或者flask吗?两者的对比说说看?
  • 所以说Django的内置组件有哪些?分别承担哪些职责?
  • 如何上线?用过nginx或者Apache吗?踩过那些坑?怎么解决?
  • csrf机制是啥?
  • 用过ORM逆向吗,django里怎么实现的?
  • 算法题(一共三个题目,第一个比较简单忘记了,好像是斐波那契数列的变体,第二个题是在不增加额外空间足够多的情况下旋转方阵,第三个题是用递归做大数乘法)

四面(现场)

面试主要内容:机器学习基础,神经网络基础,算法题

面试时间:约60min

具体内容:

  • 项目介绍
  • 项目过程中遇到哪些坑?如何解决?项目如何分工?你担当的职责有哪些?
  • 传统LR/树模型/神经网络模型这三个模型分别是如何解决过拟合的?
  • 你是如何调参数的?如何知道需不需要引入额外参数?
  • 你认为业务重要还是技术重要?为什么?
  • 算法题(给你N个苹果,分别编号为1,2,…,N。并且给你一些tuple的集合,比如(1,3),(2,4)等,tuple(a,b)的含义是你在拿a之前必须先拿b,请判断在给定的tuple的集合下能否拿玩全部的苹果,并给出拿的顺序。挺有意思的图论算法题。)

总体感受:联想本来是我把握比较大的一家,毕竟面试完了面试官小姐姐都让我回家等hr通知了…没想到最后还是等到了一个好人卡。不过之前听同学说里边的hc确实挺紧张的,加上我这次面试的时间真的是不太好,所以也只能怪自己没考虑周全。base在深圳的研发中心(TCL楼旁边),大厅很宽敞很舒服,三面和四面现场面都是两位面试官,人都非常nice,以至于有时候聊着聊着就跑题了哈哈。面试的氛围很轻松愉快,问题的侧重点也很清晰。我个人是特别喜欢和面试官进行交互的,因为这样不仅能够让面试官更了解你的闪光点,而且从面试官给你的回答或者评价也可以更好地发现自己的不足。总体来说,虽然很遗憾没有拿到offer,但是却是一次非常愉快的体验。(话说我还在想能不能把车费给我报一下,毕竟来回两趟车费挺贵的…)


博智林(碧桂园旗下)

面试次数:1(电话面)

面试时长:大约60min

面试主要内容:路径规划,神经网络基础

具体内容:

  • 自我介绍/项目介绍
  • OD框架描述一下?每一步演进有哪些改进?如果给你一个场景你怎么选择?
  • 路径规划的基本方法?如何把路径规划做到线上?
  • 训练模型时训练数据不足怎么破?什么是迁移学习?迁移学习在控制场景下是怎么工作的?
  • 做过项目的分工?你怎么看待你在该项目里的贡献?
  • 了解NLP吗?不怎么了解没事,说说情感分析怎么做的?(我总觉得这个问题贼尴尬…)

总体感受:哈哈哈你没有看错,就是搞房地产的那一家碧桂园,我投的部门是他们的全资子公司,叫博智林机器人,主要还是做机器控制智能相关的业务。面试时间安排在晚上九点,是技术总监和hr同时对我进行的面试。问的问题感觉不是非常难,但是有种挺尴尬的感觉(不知道为啥)。有一点不太好的地方是面试官向我提出问题之后,我做了回答,她好像不太满意,所以我她所以这个问题您怎么看,但是她没有回答就直接转到下一话题了。交互感不是非常强(也许面试官在心里来了个大佬三连哈哈哈)。


追一科技

面试次数:3

一面(电话)

面试时长:大约70min

面试主要内容:机器学习基础,神经网络基础,强化学习,spark,算法题

具体内容:

  • 自我介绍/项目介绍
  • XGB和GBDT区别?XGB中如何做减枝?每棵树叶子结点的gain和weight有啥区别?
  • softmax是啥?怎么实现的?softmax在LR中是怎么应用的?
  • 列举你熟悉的分类器和回归器,并进行优缺点分析
  • DQN原理?Sarsa原理?off-policy和on-policy有啥区别?
  • 简述生成DQN训练数据的OU随机过程?还有什么其他的随机过程?优缺点分析?
  • Xavier和He神经网络初始化方法分别是什么原理?
  • 如何解决工程中的数据倾斜问题?
  • 算法题(如何实现二分排序,并给出时空复杂度分析…我强烈怀疑是为了凑够时间出的这个题)

二面(电话)

面试时长:大约60min

面试主要内容:机器学习基础,量化相关,神经网络基础, 推荐系统架构, 强化学习

具体内容:

  • 说说你的RL和RS结合的创新点?为什么这么做?提升多少?
  • 做过量化吗?有哪些方法?能落地吗?能的话怎么评测效果?如何解决反馈期过长的问题?
  • CNN经典架构有哪些?为什么每一层的kernel的size是逐步减小而个数是逐渐增大的?pooling如何选择使用?
  • 推荐系统的召回策略有哪些?用过L2R吗?L2R有哪几类?代表方法是什么?

三面(电话)

面试时长:大约75min

面试主要内容:机器学习基础,神经网络基础,算法题

具体内容:

  • 自我介绍/项目介绍
  • 你做的神经网络模型需要保持结果的有序性,但是这是无法在网络结构设计上实现的,怎么解决这个问题?
  • 在RL过程中,你的Q网络和target网络是如何交互协作的?
  • 模型上线时有用到分布式的参数服务器一类的服务容器吗?还是仅支持单机?对这方面有了解吗?
  • 树模型如何处理回归问题?除了加法模型还有什么别的实现手段吗?
  • 算法题(给定一个字符串str和一系列tuple字符归属集合,判定该字符串属于哪个集合,Leetcode medium难度)

总体感受:追一是国内NLP的独角兽,很年轻很有活力的一家公司,听说从二楼到一楼是滑梯下来的(但是我过去面试的时候好像给拆了还没换新的,遗憾)。整体办公环境很优雅简洁,就像他们的管理方式一样(追求扁平化,CEO办公室就在办公区旁边,随时可以进去找CEO聊人生那种)。面试的节奏很明快但是又不是非常紧凑,非常适合应届生或许工作经验不是非常多的候选者,非常非常棒的面试体验!


字节跳动

面试次数:1(视频面)

面试时长:大约60min

面试主要内容:机器学习基础,算法题, 数学题

具体内容:

  • 自我介绍/项目介绍
  • XGB如何实现,与GBDT区别
  • softmax在数值计算上可能会出现的上溢和下溢的问题
  • 减少过拟合的方法
  • 数学题(给定一枚不均匀硬币,抛出正面的概率为P,求抛2K+1至多有K次出现正面的概率)
  • 算法题(给定一组数字,求数字大序数减去小序数的最大值。如给定N个数)

总体感受:这是我这段时间来经历的最憋屈的一场面试。首先,面试官在面试过程中我感觉一直在…冷笑?可能是我对之前做的项目的解释他不太满意,之后在询问技术细节的时候我感觉他的态度一直是带着一些轻蔑的…抛去这些不谈,在"减少过拟合的方法"这个问题时,我回答“可以考虑用L1权重衰减方法”,结果面试官反问“我说的是减少过拟合?你有没有听清”,我愣了一下,也说“我说的也是减少过拟合…”,结果他就不说话了,就用那种很轻蔑的眼神看着我…我也不知道该说啥(当时我还以为我说错了),然后我问他“您觉得L1不能解决这个问题吗”,他好像很轻地哼了一声,然后就跳到下一个问题了…我事后翻了一些资料,也跟同学交流过,还是不知道自己错在哪了…总之,这场面试60分钟大概有二十分钟是沉默的,非常尴尬。或许是我真的太菜了吧哈哈哈哈。(对这个问题有见解的大佬欢迎在评论区跟我交流下,能得指教不胜感激~)


阿里(LAZADA)

面试次数:3

一面(电话):

面试时长:大约70min

面试主要内容:机器学习基础,推荐系统,深度学习,强化学习

具体内容:

  • 自我介绍/项目介绍
  • 推导一下LR,然后描述一下极大似然在推导过程中起到的作用
  • sigmoid函数的推导
  • 分类器模型中常用的loss有哪些?简要描述一下log loss和hinge loss的思想区别
  • 推荐系统三大组成要素?知道哪些常见的排序模型?简要描述一下point-wise,pair-wise和list-wise三类L2R模型在输入空间和输出空间上的异同?
  • 描述一下之前做过的强化学习与推荐系统结合的框架?有哪些创新点?如何评价其与所服务业务的契合度?
  • 特征工程怎么做?好与不好的评价标准有哪些?

二面(电话)

面试时间:大约60min

面试主要内容:机器学习基础,推荐系统,大数据套件基础

具体内容:

  • 自我介绍/项目介绍
  • 强化学习模型能不能部署到在线端或者近线端?如果在离线端该如何进行数据流的实时传送?
  • 以hdfs为基础数据存储平台怎么连接在线端?数据流如何输入?用户点击反馈如何对模型进行fine tune?
  • flink,storm和spark的原理?你认为spark在训练模型的瓶颈在哪里?
  • 会用kafka吗,简要描述一下kafka中topic的概念
  • 数据倾斜怎么搞?

三面(电话)

面试时间:大约60min

面试主要内容:机器学习基础,推荐系统,深度学习,运筹优化

具体内容:

  • 自我介绍/项目介绍
  • 说一下W&D模型?实现时需要注意哪些问题?
  • list-wise的L2R模型有哪些?说一下Lambda MART?它跟Lambda Rank最大的区别在哪?
  • 说一下NDCG?知道是怎么推出来的吗?
  • 如何去除Position Bias的问题?
  • 冷启动怎么解决?
  • 你用来训练LSTM的数据有多少?计算一下时空复杂度?你认为LSTM Unit的个数和数据量存在关系吗?为什么?
  • 凸优化了解吗?在不确定一个多目标优化问题是否有解的情况下能否直接上SGD?

总体感受:阿里毕竟是互联网一线大厂,在对待面试者时既展示了大厂的丰富底蕴,又保留了谦谦有礼的态度。整体面试感觉非常舒服,并且面完之后有一种知道了原来自己不知道的感觉,这是比直接告诉答案更加让我豁然开朗的赶脚。面试官的态度都非常谦虚,完全没有架子,而且面试结束之后面试官还会对你今后还待加强的方向进行建议,真的是感觉赚到了。结果面完之后我对阿里的崇拜之情又增加了几分哈哈哈。


腾讯

面试次数:3

一面(电话):

面试时间:大约60min

面试主要内容:机器学习基础,深度学习基础,强化学习,推荐系统

具体内容:

  • 自我介绍/项目介绍
  • 说一下你做过的强化学习结合推荐系统的框架?为什么用AC网络?AC是如何结合DQN进行Q值估计的?Critic网络的梯度如何与DQN的梯度进行交互?什么是soft update?
  • 说一下产生初始训练数据的OU过程是怎么样的?replay buffer的大小如何确定?会做sliding吗?
  • LSTM怎么工作的?与普通的RNN的区别在哪?layer的层数如何确定?Unit的个数如何确定?
  • 数据EDA是怎么做的?举一个你在做项目的过程中做过的EDA对于结果有帮助的例子看看?
  • CNN的超参数是怎么定的?你有哪些调参经验?
  • 说一下FM和FFM?了解过DeepFM吗?了解的话说一下原理?
  • 你做过的推荐系统的流量分配策略是什么?如何处理流量非正交的问题?
  • 如何解决Position bias?
  • 如何评价推荐系统性能好坏?

二面(现场):

面试时间:大约100min

面试主要内容:机器学习基础,深度学习基础,强化学习,推荐系统,大数据套件,算法题

具体内容:

  • 自我介绍/项目介绍
  • 画一下你的强化学习模型的框图?对比一下市面上其他的模型,你们的模型有哪些优劣?
  • 你的AC网络涉及了多网络梯度传递,你是如何确定这样做是否合理?有没有做容灾措施?是如何做的?
  • 你在设计的前期为什么能够确定用DIN作为backbone?为什么attention机制适合你的业务场景?
  • 说一下attention的实现和实现方式
  • 会在分布式上用XGB吗?有没有读过XGB源码?说一下XGB4J是怎么用的?
  • 你认为在实时推荐系统三大模块中,最快达到性能瓶颈的是哪一个模块?为什么?怎么解决?
  • 会用Streaming吗?有没有用过flink?spark在submit时的必选和可选参数有哪些?
  • 算法题(N个人围成一个圆圈,而且每个人都有编号(0,1,…,N-1)从0号报数,数到K时,报K的人出列,剩下的人接着依次报数直到所有人出列,求出列号码顺序),leetcode easy难度
  • 算法题(abcd * 4 = dcba,求abcd),leetcode easy难度

三面(电话)

面试时间:约40min

面试主要内容:推荐系统架构

具体内容:

  • 自我介绍/项目介绍
  • 你在之前的项目中分别充当了什么角色?解决了哪些问题?
  • 如果现在让你设计一个日活百万的推荐系统架构,请从在线端和离线端两个角度描述你的设计方案
  • 你会如何设计A/B Test系统?如何保证流量正交?
  • 知道流量分桶吗?如何保证流量分桶唯一?

总体感受:我面的是深圳的鹅厂,主要是做信息流这一块的。感觉面试官很专业(能用缩写绝不说全称哈哈哈),不过这样也提高了面试效率(毕竟懂的一听都懂,不懂的就完全不懂了)。整体面下来也不会觉得很累,而且收获满满。而且不仅是面试官,hr人也特别好,我在面试过程中由于自己的不够谨慎而给他们造成了很多麻烦,他们也付出了很多额外的心力来帮助我,这点是让我很感动的~笔芯鹅厂哈哈哈。

* 写在后边的话

这一阶段的面试告一段落了,感觉自己经过这一年的工作,成长是有的,但是还不尽人意,总感觉自己离理想的状态还是有挺大的差距的。从跟面试官的交流过程中,就很明显地感觉到自己的不足。希望自己可以在下一个阶段的过程中继续努力,与大家共勉。另外如果大家需要参考的答案的话我有空会陆续整理上来的,欢迎评论留言~

最后祝大家国庆快乐!

你可能感兴趣的:(面试总结,面试,社招,机器学习,算法)