记阿里腾讯实习面试

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

   326号接到杭州打来的电话,告知我明天下午面试,呵呵,这个倒挺好的,还有提前通知,所以也有时间准备一下。27号就没去实验室了,中午吃完饭就呆在宿舍,把手机放在桌上,默默等待着电话的到来。心里有点小紧张,毕竟是第一次电话面试,不知道会是什么情况,也听到别人有网上视频面试的,还能直接在网上写代码,感觉那样更cool。为了缓解紧张的心情,就听起了歌,看了看书籍。其实面试前感觉最好对简历上的内容要相当熟悉,所以还是要多看看简历,想想面试官会问的一些问题,比如你觉得最有价值的项目是什么,在这个项目过程中遇到了哪些困难又是怎么解决的。等到了5点钟,才接到面试官打来的电话。

    一面是一个男的面试官,听声音感觉挺年轻的,面试开始就让我先自我介绍,我就blabla说了一两分钟吧,呵呵,这个自我介绍倒没怎么准备,其实最好还是准备好的,而且说话要有条理和逻辑性。然后就问了我简历上的一个项目,其实那是个比赛来的,就是给出移动用户的通话、短信次数,部分用户已标注为学生或非学生用户,要预测剩下的用户中哪些为学生用户。我就讲了我们用的方法,大概过程是提取特征用已标注数据训练随机森林,然后预测未知用户。期间他问了好多关于这个可能会遇到的问题,问我有没有考虑那些问题,其实那些问题我以前做时是遇到的,但那时候没怎么考虑就直接提取特征,那时候对提取特征还没什么经验,也不太会做特征选择,现在看来这些都是很重要的,如果不用图模型或自动提取特征的方法,特征提取还是非常重要的,机器学习里也有句话说特征决定了算法能达到的效果,这是蛮有道理的,在做阿里大数据比赛时也深深体验到了业务特征的重要性,以后自己会在这方面多下功夫。由于没怎么考虑那些实际问题,所以回答得不是很好。在这个项目介绍上都花了好长时间,因为用到了随机森林算法,我也知道怎么说了adaboost算法,我就跟他解释了这两个算法的流程。然后他问了这两个算法哪个比较容易过拟合,我以前还真没考虑这个问题,我就说了随机森林中决策树的深度那些会影响过拟合,adaboost算法每次都去拟合训练数据也可能会过拟合等等。现在看来是adaboost比较容易过拟合,因为adaboost每次都是在整个训练数据中调整权重然后学习分类器,而随机森林不太会过拟合,因为它用到了bagging方法并且分裂节点时会随机选特征,这样使得它的泛化误差相对会比较小,但我看了相关论文说boosting早期实验中出现训练数据误差接近0但是泛化误差还在下降,这说明boosting不会过拟合!boosting是一种提升方法,实际是采用加法模型和前向分步算法的,有分类树和回归树,现在还是机器学习中性能最好的方法之一。后面问了推荐系统的,我就从协同过滤讲到了low ranksvd等等,然后他问了一个很实际的问题,如果是高维数据该怎么办?比如用户协同过滤,商品有非常多,计算用户之间的相似度复杂度会很高,我就说了学出用户特征之后就是低维了就不会有这样的问题了,现在觉得如果用户可能买了很少的商品而且两个用户购买一样的商品数会比较少,就是稀疏的话还是容易计算的,也可以建立倒排索引,跟搜索引擎的类似。接着问了会不会用STL,这个倒是会,以前写过不少,也看过一点Effective STL,但是没看完。。。就跟他说了用过vectordequelistmapset等等。他问了vector的内存分配方式、map的意义及实现方式。还问了C++的继承、static关键字的用法等。貌似就这些,后面的也记不太清了。一面就这样结束了,面了40多分钟,他说过几天会有二面。感觉一面面试表现也还算可以,只是对简历中的项目不够熟悉,如果熟悉点就更好了,对boosting方法还不是非常之理解,还要研读一下论文、研究下开源实现,然后自己实现才行。

      过好几天后就接到了北京阿里打来的电话,是个女的面试官,她说来个简短的面试,我那时刚好走出宿舍楼去实验室,靠近中心花园,于是自然而然朝那里走去。她问了我一些基本情况,然后问了我本科毕设做的东西,主要是low rank矩阵恢复应用到连接预测的,我说了这些后还说了也可以应用到推荐系统,于是她问了我推荐系统的一些东西,然后问了一个情况就是如果用户买了iphone该如何可以推荐会买的手机,我就算了商品协同过滤和求出商品特征后计算相似度的,她说还是用相似性啊,囧。现在想想觉得可以用LR的方法做,我是在阿里技术嘉年华那里看到的,想想也是,跟广告点击率预测也有类似的地方,不过要用训练数据才行,比如训练数据是用户买了某个商品后看到那些推荐的商品也会再买,收集了训练数据后可以提取特征,比如买的商品的特征、买了被推荐的商品的特征、两者的关联特征、时间等等,用这些特征训练LR,这样用户新买了商品后,就可以推荐最大概率会购买的商品出来,也不知道业界是否这样做的。之后也问了一下hadoop,我只说了mapreduce的大概工作原理,其他的真没研究。然后问了linux下移动一个文件到另外一个地方背后发生了什么事,我说到了inode的,忘了说清楚datablock的。还问了STL相关的,问了maphashmap的区别,时空复杂度等等。二面就这样结束了,她说后面还有面试。


      这样等了很久也没来面试,后面又接到通知说24号到华工酒店面试。这期间还参加了腾讯笔试,经历了两轮面试。我面试的是腾讯的基础研究。

      去到华工酒店,签到后到了面试官所在房间,看到外面有个女生在等,她也是研究生,就跟她交流了一下各自的研究方向。一面面试官是个男的,一开始也是自我介绍,然后让我说一个项目,我说了阿里二面面试说过的那个项目,之后问了我知道的一些分类方法,我就算了感知机、SVM、朴素贝叶斯、神经网络等等,然后他问我朴素贝叶斯的原理,我说到了垃圾邮件分类,不过他问了怎么去掉无用的词,我说了停用词然后说取频率前多少的词,他说如果要选出100个特征呢。果然工业界都是考虑很实际的问题,我竟然说了用深度学习从词中学出这些特征,后来跟同学讨论了下说可以用卡方检验,好吧,涨姿势了,对统计学方面、特征选择方面都不了解啊!面试官也说是卡方检验。还问了怎么找出互联网中的新词,这个也不会,他说了左右熵,说实话我只知道交叉熵、相对熵,然后问了我熵的定义。接着也问了STL的,比如连续内存的有哪些,我一开始说了vectordeque,但后面他一反问我就醒悟说deque不是了,这个可以看看STL 源码剖析。后面让我写了道题,把一个整数数组的奇数放在偶数前面,这个比较容易,我花了几分钟就写出来了,用的是快排中用到的找正确位置的方法。这样一面就结束了,感觉跟这个面试官谈挺轻松的,有说有笑。

        一面面完晚上就接到了二面的通知,二面是上午9点半面试,可惜我竟然迟到了,走到了半路才发现忘了拿简历,只好回去拿,去到已经迟到10多分钟了,而且那时候面试官又打了电话过来问我。真不该这样啊,应该早点去的,以后一定要注意了,不管做任何事都要早点做好准备!!!二面也是个男的面试官,应该是一定级别的吧。还是自我介绍,然后问了那个比赛,问为什么选择随机森林而不用knn啊,这个还真不好回答,对这些算法用得不多,经验不多。其实,用knn也是可以,只是用了不同的算法而已,特征还可以用原来的特征。然后问了怎么自动选择特征,我理解错了,以为自动从原始数据中得出特征,这不是深度学习做的事吗?其实特征选择的话也有很多方法,像前向搜索、后项搜索和一些计算特征得分的方法,比如特征对分类的互信息呀,这我也是后来才知道的。后面问了string的,然后让做一道题,题目是改进一个处理string的函数的,我提到了const引用、异常、snprintf等等。说完继续做一道题,写个简单的树的深搜。就这样,二面结束了,感觉是主要特征选择和为什么用RF那个回答得不好,给个感觉是只会用一些算法,不知道如果去比较不同算法的适用场景,不会做一些特征的处理等等。

       接下来就是阿里24号终面了,签到后在会议室等待,阿里还真不一样,在桌子上放了一些零食,可是没什么心情吃。跟周围几个同学了解了一下情况,有面系统工程、用户体验、算法和研发的。等了大概20分钟就告知去面试了。

       终面虽然不怎么紧张,但是思维很阻塞啊,我也不知道怎么回事。是个男的面试官,一开始让我自我介绍,然后问我做的最有价值的项目,我就说了kaggle上星系识别的比赛,不过有些问题的细节也没记住,说得不够清晰。所以面试前还是要确保熟悉简历上的内容啊。跟他解释了CNN模型,估计他也不熟悉这一块的或者时间问题打断了我,说做一道题目。题目是在一个平面中,给出很多一样大小的正方形,然后给出很多点,要求查询每个点落在多少正方形内。这样的算法题之前没怎么碰过啊,想了一下就说了最简单的全部扫描的方法,然后继续想更优的方法,我说了一下kd树,根据每一维来切分成左右子树,然后继续切分下去,可是思维很阻塞啊,有点记不清kd树的具体构建流程,他还让我写kd树的代码,被虐了,只写了点和正方形结构体的定义,然后就卡住了,在想kd树该怎么来做,这个时候真的很纠结啊,都不知道该怎么做了,后面他看我写不下去,就让我看看是否还有其它方法做,我说了一下二叉搜索树的,但是该怎么用上二维又该怎么去统计还是不确定,之后讨论了二叉搜索树的构建过程。现在想想,如果时间多一点也许会想出来的,但是自己的代码实现能力还是比较弱啊,这需要以后不断加强啊,还是要多实践。后面让写strcat的实现,我又搞笑了,写了分配了新的内存拷贝两个字符串的。。。面到最后问他对我有什么改进的意见,他说了阿里实习生的要求最主要是基础要扎实。最后问了面试结果,被告知回去等通知。

实习面试就这样结束了。下面总结一下,希望以后有所改进,也希望对大家有所帮助。

1. 平时涉猎应该尽量广一点,但是更重要的还是有所精通,特别是对于所应聘岗位所需要的,比如我面试的是机器学习相关的,就要对其中的一些算法很熟练,而且需要实践过,积累项目经验,项目还是很重要的,面试都要讲到项目,当然如果有论文就更好了。

2. 基础很重要,像C /C++、数据结构、算法之类的,当然不同岗位要求不一样,总之编程能力要够强,像面试时准确无误写出字符串处理、链表、树之类的程序。

3. 面试前要好好熟悉简历上的内容,面试官问到时才能侃侃而谈。

4. 面试时要有自信,心态要好,要真诚。

5. 平时也要关注技术发展,关注所面试公司的市场、文化等情况,这样也许hr面时会用得上。

 

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

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值