自从被内推了阿里以后,一直在等待阿里的面试。我要面试的岗位是机器学习相关的算法project师,本身也一直在学习机器学习方面的知识和技术。事实上我比較喜欢数学和计算机科学结合的学科,机器学习正是要用到这两个方面,只是有时候内心也想研发产品,内心仍是有点矛盾的,但是想一想就算了,我也可以应用机器学习到产品研发中。能作好同样就很是不错了。node
3月26号接到杭州打来的电话,告知我明天下午面试。呵呵,这个倒挺好的。还有提早通知。因此也有时间准备一下。27号就没去实验室了,中午吃完饭就呆在宿舍,把手机放在桌上,默默等待着电话的到来。内心有点小紧张。毕竟是第一次电话面试,不知道会是什么状况。也听到别人有网上视频面试的。还能直接在网上写代码,感受那样更cool。linux
为了缓解紧张的心情。就听起了歌,看了看书籍。面试
事实上面试前感受最好对简历上的内容要至关熟悉。因此仍是要多看看简历。想一想面试官会问的一些问题。比方你认为最有价值的项目是什么,在这个项目过程当中遇到了哪些困难又是怎么解决的。等到了5点钟,才接到面试官打来的电话。算法
一面是一个男的面试官,听声音感受挺年轻的,面试開始就让我先自我介绍,我就blabla说了一两分钟吧。呵呵,这个自我介绍倒没怎么准备。事实上不妨准备好的,而且说话要有条理和逻辑性。而后就问了我简历上的一个项目。事实上那是个比赛来的。就是给出移动用户的通话、短信次数,部分用户已标注为学生或非学生用户,要预測剩下的用户中哪些为学生用户。我就讲了咱们用的方法。大概过程是提取特征用已标注数据训练随机森林,而后预測未知用户。期间他问了好多关于这个可能会遇到的问题,问我有没有考虑那些问题。事实上那些问题我曾经作时是遇到的。但那时候没怎么考虑就直接提取特征,那时候对提取特征还没什么经验,也不太会作特征选择,现在看来这些都是很是重要的,假设不用图模型或本身主动提取特征的方法,特征提取仍是很是重要的,机器学习里也有句话说特征决定了算法能达到的效果,这是蛮有道理的。在作阿里大数据比赛时也深深体验到了业务特征的重要性。之后本身会在这方面多下功夫。编程
因为没怎么考虑那些实际问题,因此回答得不是很是好。在这个项目介绍上都花了好长时间,因为用到了随机森林算法,我也知道怎么说了adaboost算法,我就跟他解释了这两个算法的流程。而后他问了这两个算法哪一个比較easy过拟合。我曾经还真没考虑这个问题。我就说了随机森林中决策树的深度那些会影响过拟合,adaboost算法每次都去拟合训练数据也可能会过拟合等等。现在看来是adaboost比較easy过拟合,因为adaboost每次都是在整个训练数据中调整权重而后学习分类器。而随机森林不太会过拟合,因为它用到了bagging方法而且分裂节点时会随机选特征。这样使得它的泛化偏差相对会比較小。但我看了相关论文说boosting早期实验中出现训练数据偏差接近0但是泛化偏差还在降低。这说明boosting不会过拟合!数组
boosting是一种提高方法。实际是採用加法模型和前向分步算法的,有分类树和回归树,现在仍是机器学习中性能最好的方法之中的一个。后面问了推荐系统的,我就从协同过滤讲到了low rank和svd等等,而后他问了一个很是实际的问题,假设是高维数据该怎么办?比方用户协同过滤,商品有很是多,计算用户之间的类似度复杂度会很是高,我就说了学出用户特征以后就是低维了就不会有这种问题了。现在认为假设用户可能买了很是少的商品而且两个用户购买同样的商品数会比較少。就是稀疏的话仍是easy计算的,也可以创建倒排索引。跟搜索引擎的相似。接着问了会不会用STL,这个却是会,曾经写过很多,也看过一点Effective STL,但是没看完。。。就跟他说了用过vector、deque、list、map、set等等。网络
他问了vector的内存分配方式、map的意义及实现方式。数据结构
还问了C++的继承、statickeyword的使用方法等。貌似就这些。后面的也记不太清了。一面就这样结束了,面了40多分钟,他说过几天会有二面。iphone
感受一面面试表现也还算可以,仅仅是对简历中的项目不够熟悉,假设熟悉点就更好了,对boosting方法还不是很是之理解,还要研读一下论文、研究下开源实现。而后本身实现才行。机器学习
过好几天后就接到了北京阿里打来的电话。是个女的面试官。她说来个简短的面试,我那时恰好走出宿舍楼去实验室。靠近中心花园,因而天然而然朝那里走去。
她问了我一些基本状况,而后问了我本科毕设作的东西。主要是low rank矩阵恢复应用到链接预測的。我说了这些后还说了也可以应用到推荐系统。因而她问了我推荐系统的一些东西。而后问了一个状况就是假设用户买了iphone该怎样可以推荐会买的手机,我就算了商品协同过滤和求出商品特征后计算类似度的,她说仍是用类似性啊,囧。现在想一想认为可以用LR的方法作。我是在阿里技术嘉年华那里看到的。想一想也是。跟广告点击率预測也有相似的地方。只是要用训练数据才行,比方训练数据是用户买了某个商品后看到那些推荐的商品也会再买,收集了训练数据后可以提取特征,比方买的商品的特征、买了被推荐的商品的特征、二者的关联特征、时间等等,用这些特征训练LR,这样用户新买了商品后,就可以推荐最大几率会购买的商品出来。也不知道业界是否这样作的。以后也问了一下hadoop,我仅仅说了mapreduce的大概工做原理,其它的真没研究。而后问了linux下移动一个文件到另一个地方背后发生了什么事。我说到了inode的,忘了说清楚datablock的。
还问了STL相关的,问了map和hashmap的差异。时空复杂度等等。二面就这样结束了,她说后面还有面试。
这样等了很是久也没来面试。后面又接到通知说24号到华工酒店面试。这期间还參加了腾讯笔试,经历了两轮面试。
我面试的是腾讯的基础研究。
去到华工酒店,签到后到了面试官所在房间,看到外面有个女生在等。她也是研究生,就跟她交流了一下各自的研究方向。
一面面试官是个男的。一開始也是自我介绍,而后让我说一个项目,我说了阿里二面面试说过的那个项目。以后问了我知道的一些分类方法,我就算了感知机、SVM、朴素贝叶斯、神经网络等等。而后他问我朴素贝叶斯的原理。我说到了垃圾邮件分类,只是他问了怎么去掉没用的词,我说了停用词而后说取频率前多少的词。他说假设要选出100个特征呢。果真工业界都是考虑很是实际的问题。我竟然说了用深度学习从词中学出这些特征,后来跟同窗讨论了下说可以用卡方检验,好吧。涨姿式了,对统计学方面、特征选择方面都不了解啊!
面试官也说是卡方检验。还问了怎么找出互联网中的新词,这个也不会。他说了左右熵,说实话我仅仅知道交叉熵、相对熵,而后问了我熵的定义。接着也问了STL的。比方连续内存的有哪些,我一開始说了vector和deque,但后面他一反问我就醒悟说deque不是了,这个可以看看STL 源代码剖析。后面让我写了道题。把一个整数数组的奇数放在偶数前面,这个比較easy。我花了几分钟就写出来了,用的是快排中用到的找正确位置的方法。这样一面就结束了。感受跟这个面试官谈挺轻松的,有说有笑。
一面面完晚上就接到了二面的通知。二面是上午9点半面试,惋惜我竟然迟到了,走到了半路才发现忘了拿简历,仅仅好回去拿,去到已经迟到10多分钟了,而且那时候面试官又打了电话过来问我。
真不应这样啊。应该早点去的,之后必定要注意了。不管作不论什么事都要早点作好准备。!
!
二面也是个男的面试官,应该是必定级别的吧。
仍是自我介绍,而后问了那个比赛,问为何选择随机森林而不用knn啊,这个还真很差回答,对这些算法用得很少,经验很少。事实上,用knn也是可以,仅仅是用了不一样的算法而已,特征还可以用原来的特征。而后问了怎么本身主动选择特征,我理解错了,觉得本身主动从原始数据中得出特征,这不是深度学习作的事吗?事实上特征选择的话也有很是多方法。像前向搜索、后项搜索和一些计算特征得分的方法,比方特征对分类的互信息呀。这我也是后来才知道的。后面问了string的,而后让作一道题,题目是改进一个处理string的函数的,我提到了const引用、异常、snprintf等等。
说完继续作一道题,写个简单的树的深搜。
就这样,二面结束了。感受是主要特征选择和为何用RF那个回答得很差,给个感受是仅仅会用一些算法,不知道假设去比較不一样算法的适用场景,不会作一些特征的处理等等。
接下来就是阿里24号终面了。签到后在会议室等待。阿里还真不同,在桌子上放了一些零食,可是没什么心情吃。跟周围几个同窗了解了一下状况,有面系统project、用户体验、算法和研发的。等了大概20分钟就告知去面试了。
终面尽管不怎么紧张。但是思惟很是堵塞啊。我也不知道怎么回事。是个男的面试官,一開始让我自我介绍,而后问我作的最有价值的项目,我就说了kaggle上星系识别的比赛。只是有些问题的细节也没记住,说得不够清晰。
因此面试前仍是要确保熟悉简历上的内容啊。
跟他解释了CNN模型,预计他也不熟悉这一块的或者时间问题打断了我,说作一道题目。
题目是在一个平面中。给出很是多同样大小的正方形,而后给出很是多点。要求查询每个点落在多少正方形内。这种算法题以前没怎么碰过啊。想了一下就说了最简单的全部扫描的方法,而后继续想更优的方法,我说了一下kd树,依据每一维来切分红左右子树,而后继续切分下去,但是思惟很是堵塞啊。有点记不清kd树的详细构建流程,他还让我写kd树的代码。被虐了。仅仅写了点和正方形结构体的定义。而后就卡住了,在想kd树该怎么来作,这个时候真的很是纠结啊,都不知道该怎么作了,后面他看我写不下去,就让我看看是否还有其余方法作。我说了一下二叉搜索树的。但是该怎么用上二维又该怎么去统计仍是不肯定。以后讨论了二叉搜索树的构建过程。现在想一想,假设时间多一点或许会想出来的。但是本身的代码实现能力仍是比較弱啊,这需要之后不断增强啊,仍是要多实践。后面让写strcat的实现,我又搞笑了,写了分配了新的内存拷贝两个字符串的。。。面到最后问他对我有什么改进的意见。他说了阿里实习生的要求最主要是基础要扎实。最后问了面试结果。被告知回去等通知。
实习面试就这样结束了。
如下总结一下。但愿之后有所改进,也但愿对你们有所帮助。
1. 平时涉猎应该尽可能广一点,但是更重要的仍是有所精通,特别是对于所应聘岗位所需要的,比方我面试的是机器学习相关的,就要对当中的一些算法很是熟练。而且需要实践过。积累项目经验。项目仍是很是重要的。面试都要讲到项目,固然假设有论文就更好了。
2. 基础很是重要。像C /C++、数据结构、算法之类的,固然不一样岗位要求不同,总之编程能力要够强。像面试时准确无误写出字符串处理、链表、树之类的程序。
3. 面试前要好好熟悉简历上的内容,面试官问到时才干侃侃而谈。
4. 面试时要有自信,心态要好,要真诚。
5. 平时也要关注技术发展,关注所面试公司的市场、文化等状况。这样或许hr面时会用得上。
总之。经历了这些面试,我也看清楚了将来学习和职业发展的一些方向。比方必定要多实践啊,之后作这行就是要不断写代码、算法或模型。要积累扎实的基础,多看看论文开阔视野,也可以參与到一些开源项目中去。固然,要多看看科技发展的历史,多思考一下软件或互联网市场的变化、发展等等。多思考。多实践。多总结。且行且进步。