作者:豌豆先生
来源:牛客网
一路跌跌撞撞终于收获offer,百度运维研发(数据挖掘),京东算法工程师,小米因为某些原因放弃offer,华为的offer还在路上.
本人本科某一流211文科学校,硕士末流985工科学校,非机器学习科班出生,实验室研究项目也跟机器学习无直接关系.一次偶然的机会被好友带到机器学习这个坑里来,从此走上了算法工程师这条不归路.作为climbers战队面经三部曲的第三曲,我也记下找实习找工作笔试面试以来的总结吧,更加倾向于未找工作的师弟师妹,其他详细的算法基础知识与面经请移步:
第一曲:
第二曲
1.项目经历很重要
主要的项目经历呢就是参加数据挖掘竞赛,国内的像天池/datacastle/CCF等,国外的kaggle(比较学术,我没参加过),由于实验室没有数据挖掘相关的项目,那么参加比赛是一个很好的途径,事实上这些经历在我的面试中起到了很大的帮助.
由于春招表现不好学艺不精,以至于暑期实习只能去小公司实习.我是在一家创业公司做推荐算法实习生,学到蛮多东西.虽然在简历上看起来不是那么耀眼但至少面试时跟面试官有的聊.
说这么多就是一点-----项目很重要.
2.一定要准备
做算法工程师,后台同学要会的东西你一定也要会,同时还要懂机器学习方面的东西.这些包括但不限于编程语言,数据结构,操作系统,计算机网络,机器学习算法,神经网络深度学习,大数据框架比较常见.以下列举的内容是我在笔试面试中遇到比较多的,可能不全面或者有些许错误,我只起抛砖的作用,引玉的工作读者自己来吧.
编程语言:java或者C++至少熟练掌握一个,虽然平时做数据挖掘可能用python但强烈不建议用python做笔试编程题.笔试选择题会有相关的基础知识考察(java垃圾回收,C++内存指针之类的)
数据结构 :八大排序(能在五分钟内手写,快排,归并,堆比较常见),数组,字符串(最大子串之类的),二叉树(二叉树遍历,递归非递归5分钟内手写),图(不太常见,深度优先广度优先得懂).....要刷题,不然笔试很难过.有很多刷题网站可以去,leetcode,lintcode,newcoder等.
操作系统 :进程线程,进程间通信,同步异步阻塞非阻塞,段页,虚拟内存,堆栈,系统调度算法
计算机网络 :五层协议及对应层的协议,TCP/UDP区别,IP地址子网掩码网络号那些会计算,TCp的拥塞控制,TCP的三次握手四次释放,http/https的区别等.
机器学习算法 :KNN,决策树(ID3与C4.5区别,剪枝),NB(推导),LR(推导,梯度下降,牛顿法,拟牛顿法),SVM(推导,核函数,与LR的区别),EnsembleLearning(RF,GBDT,XGBoost原理,区别,实现),聚类(kmeans的原理,缺点,改进),CF(itemCF,userCF),文本处理(tfidf,word2vector).其他VC维,EM算法,KL距离,特征选择等等在笔试出现频次比较高.这里列举的只是我在简历中提到的以及面试中遇到的.
深度学习 :这块儿我不懂,但得了解一下
大数据框架 :hadoop,spark,分布式计算,关系型数据库,非关系型数据库,sql代码常见的至少得会写
(说实话以上任何一块儿内容足够精通的话找到的工作肯定比我好)
3.面经
微信 (处女面,内推,一面挂):
先给一小时写代码,大概有四个题目.然后面试官回来做面试,看一下代码问一些问题,epoll之类的.(我想说的是,我不会C++,耶不懂后台,可能想让我去做后台吧)
腾讯 :
一面:自我介绍,讲项目以及简历和项目中提到的技术点算法等,kmeans的原理优缺点(比较基础,根据简历准备就行)
二面:自我介绍,问项目,上文提到的机器学习算法问个遍,看什么书平时怎么学习
蚂蚁金服 :
一面:自我介绍,问项目,线程进程区别,Java垃圾回收机制等
二面:自我介绍,问项目,基本算法
三面:HR面,聊人生谈职业规划,公司文化等
四面:先问选择面java还是算法,选java,又问java基础还是java框架,选java基础,然后问了个:android里的layout继承自哪个类(汗),java异常类的父类
美团点评(很正规,第一二面连续面,三四面第二天连续面):
一面:自我介绍,问项目算法,GBDT的代码实现等.手写代码:寻找第k大的数,能力题:蓄水池抽样算法
二面:自我介绍完,面试官的第一句话是:我们先做个题吧(紧张),已知某二叉树的先序遍历序列判断它是否是合法的二叉查找树.然后问项目,GBDT,XGBOOST,RF的区别与实现,LR推导,SVM推导.由于前面代码写的有bug,补加一道:二叉树的先序遍历非递归实现5分钟写完,能力题:一根棍子折三段能组成三角形的概率
三面:压力面,引导性的问点击率的改进:拉普拉斯平滑,给商家的信息判断所属商圈,取topK算法,代码实现(堆,partition两种实现),取top(mn,(m+k)n)算法比如:top(100,150)(至今不会,我当时答的先取150再取100-150)...面试官有个特点就是只要你回答问题他马上就是为什么怎么做,一直问下去
360搜索 :
一面:自我介绍,问项目针对项目提问,手写代码:带有权重的二叉树结点间的最大距离,topK算法实现
百度(提前批,电话面):
一面:自我介绍,问项目算法,三次握手,慢开始错重传,机器学习用在什么地方
二面:自我介绍,项目介绍,职业规划,兴趣爱好
三面:对前两次面试给自己打分,职业规划,会什么技术,用过什么技术....(由于我擅长的是机器学习,而面试官是运维研发,可能他懂的我不会,我懂的他们不会吧,但又需要做机器学习的,所以没有问特别深入的基数问题)
最终是拿到百度运维研发工程师offer,把岗位从北京调整到深圳
小米 :
一面:问项目机器学习方面的基础知识,我没答上来的还用笔给我推导
二面:问一下项目,视频推荐怎么做,优缺点,atoi函数手写代码实现
三面:第一个现场面的女HR,人超好
京东(笔试比较差,简历应该是被捞上来的):
一面:问项目,算法,java的反射机制(好久没看java了)
二面:问项目及项目中的技术,面试官介绍部门,问意愿.
三面:比较正规的HR面吧,鼻子为什么两个孔,讲一个三分钟的故事,有情节完整,怎么看待京东(经过他的提示我才搞懂他的意思,百度的技术,腾讯的产品,阿里的运营,京东是什么),怎么看待程序员中的鄙视链以及外界对程序员的调侃等
最终是拿到了京东深圳的算法工程师offer
华为 :
一面:项目介绍与基本概念解释,面试官对感兴趣的项目提问,其中问到一个项目他问开源了,我说上传代码到github,然后就把电脑挪过来让我登陆github,一行一行的看代码,同时提了一两个问题.可是他说他不懂java
二面:问家庭情况,对华为的了解,怎么看待华为的狼性文化(我当然说我愿意加班)
YY(挂的很疑惑):
一面:YY总部环境真的很不错,自我介绍问项目,看笔试题成绩,问mapreduce的四个步骤哪个花费时间最长,多个机器日志怎么统计(想考察kafka,hadoop HDFS,Streaming等),统计大文件出现频率最高的ID,shell命令统计文本中每句话出现的ID次数(awk,uniq,sort,wc)
(讲道理,我答的不错,等了五天没消息)