记阿里腾讯实习面试

    自从被内推了阿里之后,一直在等待阿里的面试。我要面试的岗位是机器学习相关的算法project师,自己也一直在学习机器学习方面的知识和技术。事实上我比較喜欢数学和计算机科学结合的学科,机器学习正是要用到这两个方面,只是有时候心里也想研发产品,心里还是有点矛盾的,可是想想就算了,我也能够应用机器学习到产品研发中。能做好一样就非常不错了。

   326号接到杭州打来的电话,告知我明天下午面试。呵呵,这个倒挺好的。还有提前通知。所以也有时间准备一下。27号就没去实验室了,中午吃完饭就呆在宿舍,把手机放在桌上,默默等待着电话的到来。心里有点小紧张。毕竟是第一次电话面试,不知道会是什么情况。也听到别人有网上视频面试的。还能直接在网上写代码,感觉那样更cool

为了缓解紧张的心情。就听起了歌,看了看书籍。

事实上面试前感觉最好对简历上的内容要相当熟悉。所以还是要多看看简历。想想面试官会问的一些问题。比方你认为最有价值的项目是什么,在这个项目过程中遇到了哪些困难又是怎么解决的。等到了5点钟,才接到面试官打来的电话。

    一面是一个男的面试官,听声音感觉挺年轻的,面试開始就让我先自我介绍,我就blabla说了一两分钟吧。呵呵,这个自我介绍倒没怎么准备。事实上不妨准备好的,并且说话要有条理和逻辑性。然后就问了我简历上的一个项目。事实上那是个比赛来的。就是给出移动用户的通话、短信次数,部分用户已标注为学生或非学生用户,要预測剩下的用户中哪些为学生用户。我就讲了我们用的方法。大概过程是提取特征用已标注数据训练随机森林,然后预測未知用户。期间他问了好多关于这个可能会遇到的问题,问我有没有考虑那些问题。事实上那些问题我曾经做时是遇到的。但那时候没怎么考虑就直接提取特征,那时候对提取特征还没什么经验,也不太会做特征选择,如今看来这些都是非常重要的,假设不用图模型或自己主动提取特征的方法,特征提取还是非常重要的,机器学习里也有句话说特征决定了算法能达到的效果,这是蛮有道理的。在做阿里大数据比赛时也深深体验到了业务特征的重要性。以后自己会在这方面多下功夫。

由于没怎么考虑那些实际问题,所以回答得不是非常好。在这个项目介绍上都花了好长时间,由于用到了随机森林算法,我也知道怎么说了adaboost算法,我就跟他解释了这两个算法的流程。然后他问了这两个算法哪个比較easy过拟合。我曾经还真没考虑这个问题。我就说了随机森林中决策树的深度那些会影响过拟合,adaboost算法每次都去拟合训练数据也可能会过拟合等等。如今看来是adaboost比較easy过拟合,由于adaboost每次都是在整个训练数据中调整权重然后学习分类器。而随机森林不太会过拟合,由于它用到了bagging方法并且分裂节点时会随机选特征。这样使得它的泛化误差相对会比較小。但我看了相关论文说boosting早期实验中出现训练数据误差接近0可是泛化误差还在下降。这说明boosting不会过拟合!

boosting是一种提升方法。实际是採用加法模型和前向分步算法的,有分类树和回归树,如今还是机器学习中性能最好的方法之中的一个。后面问了推荐系统的,我就从协同过滤讲到了low ranksvd等等,然后他问了一个非常实际的问题,假设是高维数据该怎么办?比方用户协同过滤,商品有非常多,计算用户之间的相似度复杂度会非常高,我就说了学出用户特征之后就是低维了就不会有这种问题了。如今认为假设用户可能买了非常少的商品并且两个用户购买一样的商品数会比較少。就是稀疏的话还是easy计算的,也能够建立倒排索引。跟搜索引擎的类似。接着问了会不会用STL,这个倒是会,曾经写过不少,也看过一点Effective STL,可是没看完。。。就跟他说了用过vectordequelistmapset等等。

他问了vector的内存分配方式、map的意义及实现方式。

还问了C++的继承、statickeyword的使用方法等。貌似就这些。后面的也记不太清了。一面就这样结束了,面了40多分钟,他说过几天会有二面。

感觉一面面试表现也还算能够,仅仅是对简历中的项目不够熟悉,假设熟悉点就更好了,对boosting方法还不是非常之理解,还要研读一下论文、研究下开源实现。然后自己实现才行。

      过好几天后就接到了北京阿里打来的电话。是个女的面试官。她说来个简短的面试,我那时刚好走出宿舍楼去实验室。靠近中心花园,于是自然而然朝那里走去。

她问了我一些基本情况,然后问了我本科毕设做的东西。主要是low rank矩阵恢复应用到连接预測的。我说了这些后还说了也能够应用到推荐系统。于是她问了我推荐系统的一些东西。然后问了一个情况就是假设用户买了iphone该怎样能够推荐会买的手机,我就算了商品协同过滤和求出商品特征后计算相似度的,她说还是用相似性啊,囧。如今想想认为能够用LR的方法做。我是在阿里技术嘉年华那里看到的。想想也是。跟广告点击率预測也有类似的地方。只是要用训练数据才行,比方训练数据是用户买了某个商品后看到那些推荐的商品也会再买,收集了训练数据后能够提取特征,比方买的商品的特征、买了被推荐的商品的特征、两者的关联特征、时间等等,用这些特征训练LR,这样用户新买了商品后,就能够推荐最大概率会购买的商品出来。也不知道业界是否这样做的。之后也问了一下hadoop,我仅仅说了mapreduce的大概工作原理,其它的真没研究。然后问了linux下移动一个文件到另外一个地方背后发生了什么事。我说到了inode的,忘了说清楚datablock的。

还问了STL相关的,问了maphashmap的差别。时空复杂度等等。二面就这样结束了,她说后面还有面试。


      这样等了非常久也没来面试。后面又接到通知说24号到华工酒店面试。这期间还參加了腾讯笔试,经历了两轮面试。

我面试的是腾讯的基础研究。

      去到华工酒店,签到后到了面试官所在房间,看到外面有个女生在等。她也是研究生,就跟她交流了一下各自的研究方向。

一面面试官是个男的。一開始也是自我介绍,然后让我说一个项目,我说了阿里二面面试说过的那个项目。之后问了我知道的一些分类方法,我就算了感知机、SVM、朴素贝叶斯、神经网络等等。然后他问我朴素贝叶斯的原理。我说到了垃圾邮件分类,只是他问了怎么去掉没用的词,我说了停用词然后说取频率前多少的词。他说假设要选出100个特征呢。果然工业界都是考虑非常实际的问题。我居然说了用深度学习从词中学出这些特征,后来跟同学讨论了下说能够用卡方检验,好吧。涨姿势了,对统计学方面、特征选择方面都不了解啊!

面试官也说是卡方检验。还问了怎么找出互联网中的新词,这个也不会。他说了左右熵,说实话我仅仅知道交叉熵、相对熵,然后问了我熵的定义。接着也问了STL的。比方连续内存的有哪些,我一開始说了vectordeque,但后面他一反问我就醒悟说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面时会用得上。

 

总之。经历了这些面试,我也看清楚了未来学习和职业发展的一些方向。比方一定要多实践啊,以后做这行就是要不断写代码、算法或模型。要积累扎实的基础,多看看论文开阔视野,也能够參与到一些开源项目中去。当然,要多看看科技发展的历史,多思考一下软件或互联网市场的变化、发展等等。多思考。多实践。多总结。且行且进步。

 

 

posted @ 2016-02-21 18:19  mfrbuaa  阅读(242)  评论(0编辑  收藏  举报