Py学习  »  机器学习算法

机器学习算法面经(腾讯阿里网易)| 掘金技术征文

一个普普通通简简单单平平凡凡的神 • 5 年前 • 215 次点击  

机器学习算法面经(腾讯阿里网易)| 掘金技术征文

做为一个灌水混毕业的博士,投的论文最新审稿意见看到希望,看到有工作同学发了内推的链接,就让帮忙推了几家机器学习算法工程师的实习(腾讯阿里网易)。前后大半个月笔试面试好几场,总结一下面经回馈牛客。

腾讯提前批

女朋友在广州又不想换工作的情况下,微信的机器学习算法工程师是最适合我实习的岗位了,因此最先让腾讯的同学内推了一波,在基本没有准备的情况下,接到了提前批电话一面二面,毫无意外的挂了。

电话一面

  • 聊论文,但多数听我在说,没插话什么问题。最后问我第二篇论文里RNN实现的时候有什么trick。
  • 问了问凸优化了解吗?传统机器学习了解吗?我答机器学习基本知识都学过,凸优化只了解和机器学习优化算法相关的。也没有继续问细节了。
  • 编程题:打印所有子集,我用了迭代,但是写的比较蠢,好在不用调试运行

电话二面

  • 聊论文,最后问了我跟什么算法做了对比,问我研究的实际意义,产业界现在的水平
  • 编程题:打印螺旋矩阵,要我给一个可运行的结果。很简单的题,我一个符号错误调了很久都没发现,这里应该就印象很差了。
  • linux里查看端口被占用的命令,linux不熟,没答上。
  • AUC是什么?我说了是ROC曲线下面积,但是想不起来ROC是啥。我都是做序列数据,没做过二分类问题。
  • LR和SVM的区别。我说了损失函数不同,然后说了SVM通过核技巧可以更好的应对非线性,但是前面好差,这里也没好好组织语言了。

提前批挂的没什么话说,就是没准备,好久没做过算法题的情况下,突然出题做就很不顺手。而且机器学习的基础知识都有点忘了,像AUC这种没用过的,基本一问就懵逼。

之后跟工作的同学聊了一下,来牛客刷了刷面经,制定了简单的复习内容和刷题计划。花了一周时间,复习了一下西瓜书前11章和deep learning book前11章,刷了leetcode上三四十道medium的题吧(链表、字符串、迭代、dfs、堆、树、动态规划等每天刷一类题练练手),并且给自己做完2篇论文都准备了面试介绍版,又让同学推了阿里和网易,并进入腾讯笔试流程。

腾讯线下面试

笔试没什么好说的,机器学习岗考的都是数学,看过样卷在牛客上随便刷了刷题回忆了一下知识,统计部分的都忘了也都不会,最后还是过了。
进入线下面试阶段,腾讯线下两个面试官聊论文会更多更细节。对我来说难度主要是手撕代码,还问到了两个leetcode上hard难度的题,不算难其实,但是我确实编程题相对弱,最后面试官也给了编程能力有待提高的评价。

一面

  • 聊论文,一些关键细节都聊的很深入了,并且提出了一些合理的质疑,都做了回复。
  • 问了一下我对深度学习的了解程度,然后手写BP算法,要我用伪代码写,我就连说带写了一个非常伪的伪代码。
  • LR和boost的区别,这次吸取前面的教训,先是细说了LR是什么,怎么推导来的,然后说Boost是什么,干什么用,以Adaboost和GDBT简单举例,最后说二者联系和区别。
  • 顺势问我,LR/Boost和朴素贝叶斯的区别,就答了生成模型和判别模型的区别。
  • 手撕代码:翻转列表前k个。翻转链表题很简单,很快写完了,注意了头节点处理别出错,应该没问题。
  • 覆盖字符串所有字符的最小子串,只提供思路就行。Leetcode第76题,hard难度里偏简单的吧算是。字符串子串问题基本都是滑动窗口,移动头尾指针复杂度O(n). 不过我当时没想起滑动窗口来,只提出一个O(n^2)的。

二面

  • 聊论文,同样聊了很久很细节,好像比一面还聊的深入。基本我每一处设计都有聊到,也都会问有没有考虑过别的思路,或者换成别的方法会怎样。
  • 手撕代码:找出0-1矩阵里,全1组成的最大矩形面积。这题又是Leetcode第85题,hard难度。矩阵上找路径或者覆盖,直接上DP,我刷过对应的medium难度最大正方形,顺着思路就写了,但是代码写的太丑不简练。
  • 问我有一个地理坐标,怎么从我所有的几千万几百万个poi中快速查询到离它最近的几个。我是想答分治、分层索引之类的,但是面试官实际是在问,怎么设计数据结构能最快,怎么把x,y这样的坐标对存成key,没答上让他满意的答案。
  • 总之后面两问让面试官留下了编程能力有待提高的评语。

HR面

  • 聊我做的什么研究,有什么用,在微信里可以用在什么地方
  • 提到面试官对我的评价,并聊了之前提前批电面挂了的情况,问我怎么看,以及怎么评价刚刚的面试官
  • 问我对微信的了解程度,微信事业群的了解程度,为什么不够了解就投了
  • 为什么选广州(因为女朋友),又问跟女朋友的简单情况,问是不是因为女朋友在广州所以选的微信
  • 问我还投了哪里(阿里和网易游戏),为什么投阿里又不在广州
  • 有什么优势是契合微信的
  • 希望工作环境是什么样子
  • 问实习时间

最终又等了三天,发了实习offer,微信事业群,广州base,算是我理想的实习了。

阿里电面

除了腾讯,还让同学内推了阿里试试,算法工程师-机器学习。到现在电面三轮,还在等后续。

一面

  • 聊论文,跟腾讯提前批电面过程差不多,主要是我在说,没深入太多问题。
  • 我主要针对序列数据建模,问了我Markov和RNN的区别。
  • 编程题:很简单的题目,字符串出现第k多的字符,leetcode上原题,写的挺快,问我复杂度就简单分析了一下。

感觉阿里一面面试官比我还谨慎是为啥,感觉没聊多少就结束了。二面紧接着第二天就来了。

二面

  • 一样听我聊论文,没深入太多细节。
  • 问我是怎么训练论文里的RNN的,不收敛怎么办,答分训练误差测试误差,顺便说了欠拟合过拟合的应对方式,以及我模型是怎么确定层数和hidden size的,以及用了哪些防过拟合手段。
  • 问了一个实际场景,用户输入一个坐标,怎么推送给他合适的POI。问题描述的有点不清楚,我理解的也有点懵。先说根据用户特征、相似和社交关系等做个性化推送。又说如果训练数据中用户信息不是完全标注好的,就是半监督问题,可先对POI聚类或者embedding等。
  • 我提到半监督,又进一步问,在标注POI时候,如果坐标信息都是不精确的,离散的,每个用户标注的语义也是多种多样的,怎么处理。答坐标可以把小范围聚集在一起的当作一个POI,标注的时候,用户打的标签数目有限可以投票、标注的内容较多分词后用层次聚类、主题模型之类的办法,给POI打上类别标签。

二面这个场景题,我对面试官问题理解可能有偏差,他也讲的不够清楚,我都是边猜边答,反正尽可能把我知道的都说一下。二面三面隔了一周,中间在MSRA工作的师兄叫我去他那实习,因此我要么就是能去微信实习在广州陪女朋友,要么就去MSRA实习,阿里基本不考虑了,不过三面来了还是面了一下。

三面

  • 聊论文,这次我聊的比较随意,面试官就更多的问了一些细节,比如我第一篇文章用到张量分解,问我张量分解具体怎么做,如果引入更多用户特征怎么处理?张量分解怎么优化的,收敛慢怎么办?我提到二阶优化,又问我二阶优化在这里有用吗?为什么有用?还在讲第二个文章的时候问到我word2vec有用过吗之类的。
  • 问了我xgboost和随机森林了解吗?我不了解xgboost,我就说了boost的基本原理,adaboost和gdbt的基本原理,又讲了bagging的原理,以及随机森林。
  • 后面好像还问了别的,但是我忘了。。囧

三面后还是说一周内等下一轮。阿里后两面都没有编程,其实对我这种算法题老大难来说,还是挺友好的。但是流程太拖了,投了简历好久才面,一周一面,然后还不知道几面结束。

网易游戏人工智能研发工程师

因为想去广州,所以还投了网易游戏的人工智能工程师,但是内推流程搞错了,导致没推上,还去答了个笔试编程题,三道就AC一道,最后居然也给了面试通知。
HR通知我的时候让我准备电脑,结果面试又没有编程题。13号刚面了一面,两个面试官一起电话面,说等结果,不知道是只有一面还是后面还有。

电话一面

  • 简单介绍了自己的研究方向,然后开始聊论文,也是简单介绍了一下。
  • 问我ML和DL哪个更熟悉,我说DL,然后换了个面试官专门问DL
    • 先问第二篇论文里的RNN怎么设计的,其中用到的多任务学习结构有什么好处,多任务的权重怎么调的
    • 网络效果不好怎么办,要不要增加数据量?还是按欠拟合过拟合答的,欠拟合基本没有,过拟合可能有用
    • 进而问过拟合什么情况没用?答数据仍然不够,或者跟现有训练集一样有偏
    • 进而问给你一个过拟合模型,和额外很大量数据,怎么判断这些数据有没有用?想到了采样,但是一时没想起来具体怎么办,最后面试官说,可以采样了用过拟合的模型去跑跑看误差
    • 继续问还有什么方法解决过拟合,我的论文里怎么解决的过拟合
  • 然后换回另一个面试官,又开始问ML的知识
    • 先介绍了一下我论文用到过什么传统机器学习内容
    • LR和SVM训练目标的区别,老问题了
    • 知道什么参数范数惩罚?我答L1,L2是主要的,我还在别人的论文里见过Frobenius做参数软共享的。进而问我L1和L2的区别。
    • 特征选择的方法,我说我是直接用树模型,树模型本身可以特征选择,还可以L1,降维,别的不了解。
    • 文本二分类的场景,问怎么提取特征,怎么设计评价指标,怎么调节超参数。

网易笔试三道编程,面试反而没有编程。感觉看了好多面经,网易这套问法是最符合面经里问法的。

总的来说,我做了两篇论文,所以面试会有很多时间花在聊论文上,而别的东西问的很简单,并且我编程题经常出状况的情况下,也都给过了。
如果是硕士本科,可能需要更多准备项目或者比赛来聊吧。而我论文是自己全程做全程写的,所以跟面试官讨论起来并不虚,基本没在聊论文的时候被问住过。那硕士本科同学可能要对自己参与的项目和比赛也了解非常仔细深入吧,问的再细也能一条一条回复过去,应该就问题不大了。
面试技巧方面,最重要的就是主动把自己知道的都说出来(当然要有条理有逻辑),不能面试官问什么说什么,尤其问到不太会的问题,更得从不太会的问题中,尽可能展示出聊出自己会的东西(比如问我xgboost我就不太会,于是就从boost的基本思路开始说,并简单说了adaboost和gdbt)。

最后就是面经还是非常有用的,虽然这些面试官问的问题和面试套路可能随心所欲,但是出题范围基本没超出我在牛客看到的面经内容。

大家都加油,拿到大把offer,找到dream job。

掘金技术征文链接👉 juejin.im/post/5aaf2a…



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/FnpGFDCBVs
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/10636
 
215 次点击