2016面试经历

分两部分,第一部分(1-15)是完全没有准备,算法结构一塌糊涂,第二部分(16-)是算法数据结构有些许准备。所以1. 去年没找;2. 算法数据结构差(更没刷题),要找算法/机器学习类就比较局限了。

收到深圳移动-数据分析,绿盟-数据挖掘,网易-数据挖掘,小米云平台-自然语言,有一些像十二维度-深度学习,西井科技-机器学习,CVTE-机器学习,子衿晨风-软件开发这样的众多创业公司offer,但是风险较大,不考虑了。其中有几家没有写到(360-算法,第四范式-数据分析,SenseTime-数据研发)。

  • 360问的比较全:概率统计类题目,常见模型的优缺点和改进(四个算法题,应该都是Leetcode上的,还让写K均值代码,最后是C++的)。
  • 第四范式问的多是数据认识上的问题,整个业务流程(二面),一面简单了解项目,写逻辑回归伪代码等等。
  • SenseTime,一面简单项目经历介绍,写类似最大连续子数组和的一个题,说了说CNN,二面是问了Spark等等,一些属性记不大清了,好久不用了。说了遇到OOM的解决方案等等。

先这里总结一下。算法/机器学习工程师(最好有研究生学历)需要做到

  1. 算法结构熟悉(体现写代码能力)。熟悉指的是刷过Leetcode题目至少两遍,书上概念熟悉(看你细心不,比方Java有的要写try-catch,或者一次能写对不,最好整齐,关键地方或函数有注释,我是在草稿纸上写好然后腾上去所以写的慢!);
  2. 项目经历。机器学习/数据挖掘项目(用上Spark/Hadoop以及生态体系内的其它框架如HBase、MongoDB等等),并对其中用到模型非常熟悉(概念特点,流程写出公式,优缺点,改进);
  3. 对机器学习模型熟悉。常见模型(基本的有SVM,LR这些很常问,还有就是随机森林,GBDT也很常问,不少大公司都会问SVM、随机森林(bagging)、GBDT,答对是亮点,普通的有Kmeans/Knn,朴素贝叶斯,线性回归,逻辑回归这些算常识了吧)怎么做、优缺点,改进;
  4. 证明和推倒。模型的证明和推倒,比方SVM,LR等等。

要找好公司的offer,这个能力逐层递进,算法数据结构的代码能力是基础(这也是很多做ACM同学的优势),还有对机器学习模型有了解,项目经历是附加(锦上添花),最后就是更高阶的推倒和证明。

而一般的数据挖掘工程师对学历往往要求不高(Java、Hadoop等等),主要体现在学历上。

 

1. 阿里巴巴

问我是不是今年毕业,我说是,他们说要17年毕业的。。然后就说了几句挂了

2. CVTE

发的是那个长长的简历。38分钟,问了基本情况(专业,喜欢啥,做过啥),项目经历,以前难忘的比赛,为啥等等。

说项目经历,彼此也提问了,他也说他们那边做了啥,现在哪些做的比较好,主要做哪些等。

第一面电话面,是个博士,听声音有点像个大叔。。说他们做简历识别还是筛选,现在做的已经比较成熟了,还做了个啥忘了。

后来发现PDF有专门的解析格式,其实没什么。

二面也是简单问了项目经历,说了CNN,简单流程等等。

cvte研究院刚给我打电话,聊了聊,问我啥时候能去实习,最好毕业前

三面HR。感觉很水。

3. INAPP

视频面的。
自然语言里的生成模型和判别模型的概念还不熟悉,做得得不深就是入门。问我主题模型,我说以前看过但是牵扯东西太多,所以就没写,当时也没看太懂。也就按照自己理解说了下。

后来又问我知道kmeans和knn不,我说知道按照他的要求写了个knn的伪代码,后面又说了我之前做的项目,会spark,让我把刚刚那个knn的改成spark的。都没问题。

最后让我问问题,我就让他评价一下我,还有就是提一下建议。他说写代码没啥问题,就是自然语言和图像这里基础比较弱,他们主要做图像,让我可以考虑其它的岗位,大数据spark的数据挖掘等等。

4. WIND资讯

感觉他们问的就不那么专业,因为希望的,之前我看过它们的招聘要求,写的,这些项目基本我都做过。而且,他们不那么学术和技术,只要结果好像我个人感觉。。。

让我把之前做过的数学建模标题发给他,看有用没对他们,然后二面一下就感觉人变了,就是一下那种特别刁钻的感觉,

5. 某深圳公司

投的是深圳一家公司,软工岗位,面了38分钟,问的问题基本都能答上来有一两个答的不好,说我做的东西挺多的。
最后我问关于对我的评价,就是东西做得多,但是某方面技术没有深入。比方说MySQL(我就会在增删改查建表和库和简单查询,主要是之前没学过都是按自己需要的用,才学)。

6. 百度

先问我知道二分的一些概念,和复杂度。说的不太好(算法完全没准备也没概念更没刷题)。
两个有序数组,不借助新数组,查找中位数。当时说先排序,然后再合并什么的。。当时把问题给记错了。。

百度这个人,他说自己是大四的,感觉思路非常快,说话语速超快,英语口语超级6
他一开始说自己今天是休假,然后也说了我来也不是做机器学习,而且也不好说能留下来,当然说这个也没啥意义了现在╮(╯_╰)╭。

就是感觉这个人好厉害,算法熟记于心,口语也特别6

7. 知乎

机器学习问题都没问题。。。
代码,出了一个查找的问题。。之前没准备。
一个数组中有前后两部分,这两部分是各自有序的,问查找某个数的下标是多少。我边想边说,先说最不好的就是遍历一下,然后说找到两部分的分界点,然后平均情况下会比之前好一点,然后就不知道了。。。
中间说到了排序,堆排序和快排,我把思想说了但是写不出代码。。
然后评价说的是算法和数据结构有待加强。

8. 子衿晨风

评价是算法和数据结构比较弱,但是脑子比较灵。。。四个人面的

我想主要是和我之前做过爬虫项目和他们目前做的比较贴近,其中问了我几个开放题。

一开始笔试的时候,里面一个排序题我看了手机/:–b

9. 地平线机器人

评价是代码写的不好(没理解指的是啥,可能是数据结构吧),
此外他问我C语言怎么样,他们这边都用c,
自然语言做的比较入门。

一开始介绍自己,问我做过什么,我从大三开始说有点跑题,应该说做过的机器学习算法。

问了两个算法题让写代码,两个数组,一个升序数组a,一个降序数组b,让我归并合并成升序数组c。

我没理解它归并数组c意思,当时没反应上来。我说我的想法是两个指针分别从数组a的首,数组b的尾开始遍历比较,小的追加到数组c里面。他让我写代码,边说边写,写完给他看他说其中一个到边界了,我又把边界判断的加上,也是边说边写。

然后让我写一个Dfs,遍历它画的一个二叉树,他也写了遍历结果的顺序,我不会写,我就说了自己思路,写了个代码框架,感觉不对。

10. 微策略

1. 查找单向链表中倒数第K个节点;
2. 查找无序数组第K小的数值;
3. 青蛙跳台阶,一次跳1阶或者2阶,问N阶台阶有多少种跳法;
4. 四瓶不知个数的药丸,有一瓶污染的药丸(污染的药丸重量是正常药丸的2倍),求用一个天平称量一次,找出被污染的药丸(药丸可以互相倒,也知道重量);
5. 求最大连续子数组和。

微策略答的感觉一般吧,那个面试的人不太了解机器学习,说是可能推给懂这方面的人,但其实这么说一般都是完了,过场话。

11. 并行科技

招的是Python web(我当时投的是机器学习岗),我当时想着官网要数据方面的,但我去了后,HR让我做了100个Python英文选择题,和面试官简单聊了一下,他说他们招Python web的,但看我可能更适合机器学习,人不在,差不都呆到了十一点半我就回去了。

12. 豆瓣

一组数据是0 1均匀分布的,最小是0最大是1,随机抽n次,n次中最大值的期望是多少?

我说最大值的期望和 n-1次有关。。什么什么的。。

豆瓣评价是知识面比较广,比较难的,也看我的github说都是短期一两个月这样的,但做的时间周期短感觉做的不深入,问我有没长期或者比较大的项目,我说没。。。

13. 猎豹移动

1. 快排
2. 堆排序
3. 散列表原理
4. Kmeans
5. Pca
3 5没说出来,其他都说出来或者写出来了,评价是简历重点不突出,基础弱

14. 普林科技

公交车上听不太清楚,问的都是机器学习,评价是机器学习理论有待加强,问我的时候公交车上太吵了没细说。他们没有做深度学习的岗位

15. 网易

之前线上笔试,选择和两个程序题,写出一个程序题,就发邮件短信让去杭州,两轮技术问的感觉很不深,和北京难度不一样。
两轮技术让写的代码不难。一面技术让写算法是快排速速写出来了,第二面技术出了个题,两个有序数组求交集,写出来了一般的方法,也说了如何优化等等。

另外。之前看到网易有深度学习岗位也在杭州,发邮件那边说不好转,没有给面试机会,后来又投了网易杭研,电话面试自然语言岗位,做的浅挂了。

16. 优酷土豆

挂在二面了。
第一面主要是回答笔试题,笔试题有概率题,逻辑斯特回归,支持向量机,损失函数,特征选择等等。
支持向量机,特征选择忘了,逻辑斯特回归的代价函数写的有点小问题。

算法题让把一个数组分成两部分,元素值总和差不多。
说思路,说了两个。用两个下标i j分别从头和从尾遍历,各自累加,哪一边大就等另一边累加;第二个思路是找两组数,让中位数接近,没多想。

代码让写两个,图的最大连通分量,和,数组快排改成链表版本的。
第一个没复习,第二个快十二点了,他说写一个数组的版本。就写了个数组版本的快排。

二面概率题,按照不同权重随机返回物品ID,说了两个思路(把权重变为ID出现次数,拼成一个字符串,让随机数产生1-字符串长度的数;第二个思路是把权重归一化为区间,生成0-1之间的小数,让写代码,第一次写的特乱,并提示区间需要累加,第二次写规范了,归一化的函数生成区间时忘了累加)。又考了逻辑斯特回归的损失函数(细节问题),函数求导(求导第一次没写对,第二次写对了)
评价是代码写的粗心,机器学习细节有问题。

17. 美图

一面,目前就一个面试官。
先说了项目,写了逻辑回归的损失函数,但问咋推倒的我不太清楚只是知道跟最大似然有关,还有问到朴素贝叶斯分类时候,把怎么训练和预测的计算说了但画个类似混淆矩阵的东西,问我的时候蒙圈了。

考了两道算法题,一个是连续最大子数组和(代码写的这个没问题),还有一个是长度为M的串,找最短有所有颜色的子串(返回起始下标和长度),代码写滑动窗口的两个下标时候第一个下标更新有点问题。

评价是还可以,对模型进一步怎么来的推到需要再看看。

最后面试官讲了下这边有四个部门(统计,推荐,用户画像,反作弊)问我感兴趣。HR不在,让我先回去了。两个礼拜后打电话问,把我挂了。无力吐槽面试官对连续最大子数组那个题我给出的方案的理解能力。

18. 星环科技

感觉还可以,有消息会继续联系。
spark机器学习(分工程和算法)岗
一开始问了最熟悉的项目,我说了自己的毕设深度学习的,似乎面试官对这方面不了解,没有问我相关的技巧。

然后问到spark方面。rdd的特点,stage的划分(忘了),惰性计算,宽依赖和窄依赖。

算法问我知道几种排序,我说归并,快排,堆排序,桶排序(其他的冒泡等等当时蒙了没说出来),问我时间复杂度和空间复杂度稳定性(桶排序不记得了问了其他三个的),以及稳定性是啥。

Linux问我查看进程的命令(top),该命令能看到其他什么字段(内存占用,CPU占用率等)。线程和进程区别(我就说了进程包含线程,Python下有一种map是多线程的),进一步的我就不知道了。

又问我会不会JVM下的语言(应该是开发spark的Scala和Java),我说不会,他说不要紧。

最后问我逻辑斯特回归和朴素贝叶斯的项目,基本的问题。还有模型的混淆矩阵,评估用的precision和recall的计算。

最后问我对spark这边偏工程感兴趣还是算法。我说都有。

当晚面试官还加了我微信,我感觉没问题,但是后来才知道被拒了,是给HR发邮件问的,HR回复只有一面,我以为过了,然后再次问,HR态度不好说不是给你说了之类的不耐烦的话,问面试官面试官说HR对岗位有工作年限要求,没办法。

19. 华米科技

两面,岗位不匹配,评价是数据结构算法不是很扎实,(写的Python)看不到C/C++的能力。去了先做题。然后一面面试官聊做的题目。二面是又进来一个有点白头发的人,聊了聊他们这里主要处理的数据是传感器数据,可能用不上机器学习,或者会有很大的局限性,而且很多算法需要重写且对C/C++要求比较高。

笔试题和一面

查找一个32位2进制的int值里1的个数,时间复杂度尽可能低。我把数转换为字符串,然后for循环统计1的个数。感觉应该用位运算,但不熟悉。

有序整数数组,查找某个数出现的次数,时间复杂度log2N。用的二分查找法,找到就扔掉另一半,在提示下,找比目标数稍微大一点和小一点的数,跑两次得到大一点的数的(若重复就是第一个)下标和比目标数小一点的数的(若重复出现就是最后一个)下标,然后将两个小标相减得到出现次数。写的下标更新有点小问题。

关于平衡二叉树的题,没写出来,题目记不清了。就用Python写了下定义一个节点的类表示。

条件概率题,公式能写出来但搞不清楚对应在题目里的变量。

spark里spark-submit(提交作业时候的)和spark-shell(命令行式的)的区别。这个没有问题。

spark-submit提交作业时后面带的一些常用参数,master。executor,每个节点分配内存多少等等。个别参数没遇到过,不清楚,基本没问题。

二面
问了我项目经历,以及机器学习的问题,包括模型选择,SVM的推导(拉格朗日橙乘子,KKT,强对偶条件等)后面说的不完全。K均值怎么做的,缺点,改进(中位数,DBSCAN,K进行多次选择,预防局部最优做多次)。

20. 普林科技

一面挂了。问的都是机器学习的问题,面试官评价和建议对我很敷衍(说很好很好==),走的时候给HR说了一声希望快点得到结果(HR刚给我打电话说挂了)。我个人觉得主要体现在公式推导还有很多细节上的问题。

一开始简单介绍项目经历。问我对哪些模型比较熟悉。问了随机森林怎么做,说了用不同的分类器对训练数据和特征进行重采样。分类投票,拟合取均值。

问我怎么算多重共线性,我说不清楚。问我两个变量怎么计算相关性,我说用R相关性系数,或者是用距离公式,明式距离,余弦距离等等。

决策树分叉怎么做的,ID3通过信息增益,C4.5是信息增益比,CART是基尼系数还是基尼指数,问我基尼指数怎么算(写公式),我说不清楚,就说了信息增益的计算公式。

还问了防止过拟合的方法(在目标函数中加入正则化项,增大数据量,减少模型复杂程度,决策树剪枝,神经网络Dropout策略,忘了说用观察训练和交叉验证的loss图像)。问我决策树剪枝怎么做,我不清楚(虽然不清楚,但我想肯定也可以说小于某个信息熵增益的程度阈值进行剪枝,当时没说。。)

缺失特征的样本怎么处理,我说少了可以扔掉,多了可以用均值或者中位数等填补。也可以不考虑该特征的情况下,计算和其它不缺失该特征的样本的相似程度,将各自相似度高的样本的特征分配到缺失样本的特征中去(这个是瞎想的一种方法)。问我还有啥没,我说不知道了。

异常检测怎么做,我说可以用高斯分布,估计计算参数(这个记不大清楚了)。问我如果不符合高斯分布怎么办,我说如果是多分类问题,计算已知类别的类内距离的平均值中位数,极差等等,计算未知样本对应不同类的类间距来判断等等(这个不清楚)。

又问了卷积网络中卷积过程(卷积,池化,激活层),卷积怎么做,卷积核怎么选择(我说不清楚,说了卷积核就是模板算子,不同边缘对不同的卷积核敏感程度不同,可以提取希望得到的边缘特征)。又问了池化怎么做的(最大值和均值),有几种(非重叠,重叠,空金字塔),空金字塔池化不太清楚。

又问了训练深层网络有哪些技巧,我就说了自动编码器(逐层预训练)。又问了神经网络过拟合怎么办,我说可以用Dropout策略还有过程。

问我BP计算过程,让我写公式写不出来。。

还问了神经网络处理序列建模的递归神经网络RNN,问我怎么做,我说了RNN的单个神经元结构,还有针对序列时间有限对RNN的改进LSTM,我简单说了下三种门,LSTM基本的概念和结构,公式写不出来之前看过忘了。大部分公司好像都希望把RNN用在NLP上。都喜欢问这个。

21. 无二之旅

小创业公司旅游业,也是很水,不问算法题。

最后问会不会用递归神经网络做乐谱生成,当我说不是很清楚,人家说你需要有人带,你不适合我们这里==,之前我还说到随机森林等,他说Coursera上面机器学习课没有讲到这些都淘汰了,我觉得就没啥说的了。。。

中间也没有考代码之类的。

22. 汽车之家

三面挂了
第一面主要先简单说了项目经历,之后让我在逻辑回归,GBDT,还有个啥忘了,选一个讲讲,写了损失函数,但问到L1范数和L2范数上的效果的区别上说不出来,还有L1范数的稀疏性和L2对比,讲讲差别之类的讲不出来,又问了深度学习和随机森林的一些问题,问的比较简单。
最后让写代码,一个数组的全部组合系数种情况。写的有点问题,然后说了下思路,面试官说差不多。

二面
问的都是数学问题。一个罐子里面有四种颜色的球,在不全部取出来的情况下,估计四种颜色的球。我说进行采样,采样一次取出M个,取K次,然后计算K次不同颜色的平均个数。让我证明,好像是最大似然啥的,不会证明。
第二个过河问题(不考虑水),鳄鱼在水里的平均速度是4,在陆地上速度是8,河岸宽6。鳄鱼目前在岸边,要到当前鳄鱼对面岸上下游20米远的地方,计算到目标位置的最短时间。答得不好,在提示下,设了x,写出时间的函数,思路不对(我记得也不是这么做。。),对函数求导计算最短时间。最后导函数大于0。
又问了一两道题,答得不是很好。

三面
问的是原理性的东西。问我写一下卷积核的公式,写不出来,让我说有效性的原理,证明之类的,不会。
就聊了一会儿。

23. 新浪

二面应该是挂了
一面就是写代码,K均值。

二面
问了项目经历,让写了逻辑回归的目标函数,梯度下降的三种形式(gd,mini batch gd, sgd)的优缺点。让我计算目标函数关于参数的偏导,我写了对带参数的sigmiod函数关于参数求偏导数的结果,但结果有点奇怪,可能没整理好,但是复合函数的求导过程肯定是对的。
算法他问我熟悉不熟悉图算法,我说不太熟悉,然后出了一个最大连续子数组和,我把代码写了讲了下。然后他说这边校招名额有限,说我算法不熟悉,要再考虑一下。我说快排我一分钟给你写出来,他说不用了,我又说图算法Floyd,二叉树三种遍历可以写出来,戴杰斯特拉不熟悉,然后问二叉树的遍历非递归的能写出来嘛,我说不熟悉,然后又说我们这边用的都是Java,之前你做的都是Python,工业上不用这个,多线程性能也不好。实际写的程序需要考虑很多细节问题,问我有什么问题没,(感觉就是完了),然后我赶紧说spark我在写的过程中也遇到过OOM的问题,并说了自己的解决方法,然后又让他看了自己的博客等等。他说再考虑考虑,估计肯定是挂了。

24. GrowingIO

一面挂了
出了两个问题。
第一个,他们是做类似百度站长,CNZZ网站数据统计的。面试官问我,一个网站的记录每条由: 时间戳,用户ID,网站在服务器里的路径,xpath,用户行为(点击等等)等等字段组成的。让我找出一个行为特征(由一连串的用户行为组成,比方支付)。我说的是,把所有记录由时间戳变为每个用户的,由用户ID和所有单独的行为,逐次选择最多的行为,第一次看哪种行为最多,其他的扔掉,也就是确定第一种行为都是一样的,然后再确定第二种行为,也和刚一样,在第一次筛出的结果里选择次数最多的第二种行为,以此类推,找到一种行为特征。
但是面试官说有可能这个用户第一天看,隔了几天才购买,这个怎么办,我就不知道了(我现在想可以把中间一些次要的行为过滤掉,连续时间段的同样特征合并)。
面试官对我理解数据特征的能力不满意,也表示理解,一直强调自动埋点并分析挖掘行为这方面没人在做。

第二题,每个记录是<用户ID,时间戳,地点,持续时间>,让我对同一用户的连续时间,在同样地点的记录进行合并,并累加持续时间。让我写SQL,spark,伪代码都行。
我的思路是:先过滤出同一用户,然后对时间戳排序,对这样同一用户记录里面的<userid, location>作为key,进行对duration的reduceByKey(add),但是一想不太对。
最后这个reduceByKey有问题,也是这么对面试官说的。当时我写了Python调用spark的代码,但是最后就是这里有点问题。
我就说,也可以对同一用户,时间已排序的记录进行遍历,设置一个tmp_location,初始值为第一条记录的位置信息,从这个用户的第二条记录来开始遍历,如果当前遍历到的位置和tmp_location一样,那就对duration进行累加,否则位置不同的话,将tmp_location用当前记录的位置信息更新。
面试官说效率不高,他可以用hive或者SQL一句写出来,问我那有没可以同时对所有用户这么操作的方法,当时说不知道(不知是不是用spark先对所有用户groupbykey一下)。
感觉答得不好,我也直接说了感觉不好,面试官又和我聊了聊特征上的问题,主要还是做数据清洗,说我之前学校做的都很简单,直接上模型,不需要清洗或者工作很少等等。之类的。

25. 三星

三星在线笔试要过去机试,编程语言只能用Java,c或者c++

机试,一道题,没看懂
服务站点排队那种题(m个站点,n个人,每个人需要时间不同,最后返回等候时间最长的三个人的等候时间),但是和平时不太一样的是他分对儿,没理解分対儿,一起处理的意思。

它给了在一个服务站的时候的例子输入输出,关于分対儿,我按照两个里最短或者其他的想法试着手算了下,和output不一样。

26. 小米云平台

一面问项目经历,二面问算法数据结构,Hadoop,大数据处理的问题,图算法,我博客上的一些spark问题的解决,深度学习tensorflow熟悉程度,三面简单聊了下,其实我感觉自己不行数据结构和算法,但是估计那边比较缺人,觉得我有潜力,是主管听起来像,问我在哪里看的这些学习接受深度学习呀等等知识的途径, 我说微博公众号等等,说了几个人和公众号的名字,简单聊聊。

给我打电话了,说HR之后会给我打电话,我也说了二面当时表现不好,但那个人跟我聊了聊以后想往什么方向发展,又介绍了下小米云平台,我说希望过去看看。

3 thoughts on “2016面试经历

发表评论

电子邮件地址不会被公开。 必填项已用*标注