面试的职位包括:Data Scientist,Data Engineer,Software Engineer in Machine Learning,Data Analyst等。当然其中有不少也包括最常见得Leetcode Style的算法题,除了这一类题目以外,还有不少其他类型的题目,主要分为这么几类:
1. 问Skill Set 以及对于常见工具的掌握
Skill Set就是指你掌握了哪些知识,一般问起来都是比较粗略地问,主要目的就是考察和团队的习惯以及工具的掌握是否Match。我被问到过各种各要的碎碎的问题,比如计算机网络中HTTP、TCP、UDP协议,数据库的设计原则、实现方法,操作系统的一些基本知识,Unix的常见指令,Hadoop和Hadoop Streaming如何使用、如何Debug,平时使用什么IDE什么OS……总之各个琐碎的角落都被问到过。
2. 问简历,就简历上的技术细节发问,主要是项目有关的技术细节,以及相关的技术延伸。
比如我的项目中就提到了NLP相关的东西,就被问了一些和NLP相关工具的使用,比如Stanford NLP等。再又问了一些延伸的问题,比如,如何自动生成一个有意义的句子,如何把一段文字Split成一个个句子,怎么选feature怎么做model等等。这类问题主要还是需要对于自己的项目技术细节足够了解,且对于延伸的问题有所掌握。
3. Machine Learning、Statistic的相关问题
Machine Learning相关的问题就太多了,我稍微列举一些我遇到过的问题:
· 一些分布参数的最大似然估计之类的东西是什么,如何推导
· LR SVM的本质区别是什么
· 哪些 Regularization,都各有什么性质
· 对于 Naive Bayes的理解,NB有哪些局限性
· Random Forest 为什么很好用
· 如何做 Model Selection
· 给一组数据,问 Decision Tree,LR,NB,SVM等算法学出来都是什么样子的,是否学不出来,怎么处理,有哪些Kernel,在图上画线怎么画
还有被问到了一些比较难的问题,比如:
· 对于Graphical Model的理解,写出LDA的公式,给出Topic Model 生成过程等的
· PageRank的原理和公式推导
总之,前面那些问题本质上都不是那么难,但是不少问题都需要对于ML各种知识的融会贯通,所以大家在学习的时候还是需要深入学习,不要浮于表面。
4. 给一个现实问题,如何解决
这一类问题就比较宽泛了,主要是在回答的时候记住考察的目的很多时候并不是技术本身,而是你对于这一类问题没有思考的框架。比如如何收集数据,收集那些数据,如何定feature,如何定measurement,如何定milestone等等。要分层次一步一步地讨论。