LoopJump's Blog

校招记录

2014-01-12

前两天同学聚会,聊到找工作的经历,发现很多细节记不起来了。今天回忆一下,权作备忘。

腾讯实习

实验室不允许实习,不过师兄强烈建议找个实习,而且学校旁边就是腾讯,所以申请了腾讯的实习生。

该笔试题不难,最后一道题是选作。选择一是给一个长度为N的数字数组,要求将第i个元素变为其他N-1个数的乘积,是某本书的上原题(编程之美还是编程珠玑懒得查了)。选择二是分布式相关的系统设计题,记不清楚原题了,但是好像Dynamo的一致性哈希算法适用,简单写了一下。事实上淘宝的Tair的设计方案(分区,桶,中心化的ConfigServer)也应该能很好适用(不确定,题目忘了)。

面试两轮技术面,第一面问了些C++的问题,貌似就是虚函数什么的常规面试题。简历里面写了Hadoop编程经历,所以面试官问了问写的MapReduce程序。因为之前参加比赛获得了直接面试腾讯等资格,面试官问为什么还参加笔试,答想了解一下笔试情况云云。第二面面试官是后来的leader,问了个链表判断有环,问了问毕设内容。最后问了个系统设计题记不清楚了。

后来就是HR面,问问性格,teamwork什么的。

感谢腾讯给的实习机会。感谢实习期间的同事给予的帮助。

知乎

正式工作从知乎开始,投了简历后,知乎HR邮件发来了几道编程题,都是很繁琐的文本处理,诸如解析xml文件,日志记录统计处理什么的。当时简历上写熟悉C++,所以只好用C++写。解析xml找格式错误还好,貌似一个stack就可以了。但是日志处理那个没写好,stl数据结构套了三层后代码已经不可读了,第二天起来再继续写时看了一会决定放弃了,所以日志处理的只写了一部分。email答案回去,后来收到面试通知(汗)。一面面试官是个很年轻的人,问了些操作系统的东西。问了例程,不懂。问了个算法题,简单说了下,代码写的不太好。二面问了个打印所有子集的代码题,说完题目就走了,我写完代码都找不到面试官了!后来不记得问的什么了。顺便吐槽下,当时用的那个vim用起来很不爽,经常不知道怎么搞的就得:q退出去再重新打开源码文件,不知道是不是配了键绑定。而且用惯了大键盘,再用Mac小本(那叫Mac Pro还是什么来着)的键盘,经常出typo。

后来就挂了。虽然我自己不是很满意面试过程,但是计算机基础的东西自我感觉良好啊!

知乎是正式找工作的第一家,挂掉之后感觉开始觉得是不是自己很多知识都有欠缺,只是自己自我感觉良好,当然那几天心情也不好。最后,还是要感谢知乎给的面试机会,让我有机会发现问题。

阿里

接下来后来就是大阿里了。

阿里真是奇招百出,连招聘都不肯走寻常路。阿里早早地就开始笔试面试了,比百度腾讯早了近一个月多。加上阿里还推出了霸气的阿里星计划,所以那段时间,阿里一直是找工作QQ群里的话题焦点。

阿里的笔试出了点问题,试卷没能按时送到考场,结果是人工筛选简历。简历通过的直接面试,没过的参加下一次笔试。后来我看了看网上分享的试题,不少题目难度不小。

我一面面试官的技术背景跟我的简历完全不match,面试经常冷场。问了一个又一个C++的问题,一个又一个OS的问题。后来说一面结束了,等二面,稍稍轻松了下。此时已中午,阿里提供了午饭。吃完坐在等候区,一面面试官找到我说刚才忘了让你写代码了。于是我又补了一个1s面。让写句子翻转。然后又让等。二面面试形式比较随意,但是问题都很深入。问了些Linux环境编程的东西,问了堆(Heap)的东西,问有没有博客等。后来问了个系统设计题,如何设计一个定时器,当然不能用系统提供的定时器接口。我理解是用户层面如何设计。在用户层,可以利用epoll这种带有定时的用户层API(这个事实上也可以归类到广义的定时器接口)。细节包括如何组织定时器(Heap快速取min),已经睡眠时,如何添加一个新的定时器(让epoll监听一个特殊的fd,往这个fd写东西唤醒epoll)。我答完也不知道对不对。读者有好想法请留言,多谢。

后来过了很久,阿里才开始发offer,期间纠结等,先是有同学收到拒信,然后短信通知有录用意向(实验室同学戏称offer is on the way),on the way了很久才通知谈offer。offer部门和薪水都不甚满意,而且当时已经有了其他offer。

总之,面阿里的整个过程磕磕绊绊,我自己也不满意。阿里人很喜欢分享技术知识,大牛也很多,值得我们学习。

网易游戏

阿里后面,投了网易游戏平台开发岗。网易游戏笔试题量大题难。题目好像有10+页,沉甸甸的,分量很足。考三个小时,考完我脖子都快僵了。

笔试分两部分,基础部分得分要过线,后面部分主要是代码题和算法题。基础部分题目已经全忘了,只记得不算简单,填空选择都有。后面卷2的部分有两道系统代码题,一个是Cache系统,一个是伙伴系统。都是需要先读懂已有代码(大概两页代码),然后接着补充若干行代码和若干个函数,cache系统比较简单,哈希表加链表,伙伴系统那个数据结构太乱了,而且还有类型强转。有几道代码题是考察OS的同步,用信号量PV实现多读者多写者的正确同步,跟考研的东西有点像。后面有三道算法题。

第一道只记得转化为森林,要写伪代码。

第二道大意如下:递增数组a[],相邻差最小值为x0,x<x0(x0,x都是正数),另有幸运数字b,求是否存在下标i,使得b+ix=a[i]。此题可以转为b[i]=a[i]-xi,所以b[i]单调,于是binary-search。(我记不清楚题目了,根据记忆中答案倒推的问题)

第三题:有1个奇数和N-1个偶数,共N个数。每次从中取出两个数,如果是一奇一偶,则求和,将求和结果放回,如果是两个奇数或者两个偶数,以概率p将两个数的和放回,1-p原来的两个数放回。问该游戏最后结束时,取数次数M的数学期望。

此题中一个隐藏的结论是:整个游戏过程中,一直是一个奇数,其他数字都是偶数。每次取数后,要么保持数字个数不变,要么减少一个偶数,最后剩一个数字,游戏结束。期望值可根据概率论的知识求。某时刻K个数字时(1个奇和K-1个偶数),一次操作后变为K-1个数的概率可以求出(全概公式)。所以从K个数变到K-1个数的期望操作次数可以求出。然后对K取2,3…N求和(每次个数变化的事件是独立的)。

貌似递推式也可以求。

最神奇的是笔试题中居然有一页英文的数学题,还是微积分和统计结合的题目。若干关键的英文单词不认识,不说了,只是做了第一小问,求定积分的。

网易游戏面试轻松了不少。两道趣题:每根绳子燃烧60分钟,若干条绳子测出15分钟。关键点:绳子可以两头点燃。还有一道是日志文件中有若干条记录(数目未知),从中随机选出一条记录(任何一条记录被选出的概率是一样的),要求只读一遍日志文件。关键点:从头读取,当读到第K条时,确保前面每一条被选出的概率为1/K,第K+1条是否被选中替换当前选中记录的概率是确定的,只需要计算出这个概率就可以了。想法有点像数学归纳法的思想。

总之,网易游戏笔试难度大,范围广。去笔试前一定要休息好。

Ps:网易游戏整个招聘流程让人感觉很舒心,HR十分nice。

百度

百度投了云计算开发岗。笔试没去,后来想到有张直接面试资格卡,就打算用一下。一面平淡无奇,面试官面试完之后标注了基础架构部字样,不知道云计算开发岗跟基础架构部有什么关系。二面让写代码,好像是merge sort。后来问:一个递增的数组,循环移动若干位(位数未知),怎么使用binary-search。又问了道策略题:现有2N个数字,排成一排,甲乙两人轮流从两端的任意一点取走一个数字。最后甲乙各拿N个数,求和后,和较大的胜。问先拿者有无必胜(不考虑平局)策略。

三面面试官很有魅力。问了些毕设相关的东西。基本是一边问一边讲,我感觉像是学生听课,学到很多东西。问了哈希相关(包括Bloom Filter),分布式存储相关(GFS,Dynamo迁移存在的问题)。后来问了道算法题。

在N*N的连连看中,给定两个位置A和B,查询能不能在两次折内连接A和B(称之为一次query)。这个可以类似BFS思考(类似于迷宫找最短通路)。从A开始,A能直接达到的位置标1;从每一个1开始,能够达到的位置标2(已有标记的不改);同样到3。如果B被标记了1或者2或者3,则可以两折内连接AB。否则不能(反证,能到达的话,一定被标记了1,2,3中的某个)。复杂度O(N2)。

后面扩展是如果能够到达则AB消失,现有Q个query。如何优化。好吧,扩展题解法,面试官说有点tricky。最后面试官从头提示到尾,因为后面我已经累的想不动了,整个过程连续三面,就喝了一小杯水,最后嗓子都有点哑了。等我三面结束,实验室先来的三位已经走了。

从百度面试过程看,百度技术氛围真的很浓。

后来面了个外企。

期间创新工场、有道、微软等的笔试都挂了,EMC简历挂了~~~

扫描二维码,分享此文章