职位类型:客户端软件开发
面试地点:北京
招聘公司:百度
之前一直都很关注百度,也一直非常期待在百度工作,刚好最近百度来我们学校进行宣传,抱着试试的心里去了宣讲会,没想到最后真的能拿到百度的offer,真的是让我觉得非常的幸运!
宣讲会:
百度的宣讲会来得非常早,也是我参加的第一个宣讲会,所以记忆非常深刻。大活门外的广告打得非常炫,一个很帅的人,不知是不是李彦宏,头上画了两只牛角,大意是个牛人,期望大家加入百度,在牛人的关注下成长。我显然低估了百度在学生中的影响力,提前半小时到宣讲会现场,发现挤爆了,没办法,只好站在走廊里边,后来保安建议同学们都坐地上,于是大家也不管地上脏不脏,不管是GG还是MM都坐下了。由此可见找工作还是很辛苦的,确实,在这以后的日子中大家为了心目中的企业一直在奔波,无论是精神还是体力上都处于一种极限状态。
宣讲会之前半个小时一直在放李彦宏参加那啥咏乐会的节目,百度的老总就是长得帅啊,据说是中国的知名企业的老总中最帅的一个了。果然是才艺皆全,听他的创业经历,看他跳舞,讲述百度名称的来历并吟诗,真是享受啊。百度的宣传片做得也很有气势,百度大厦的漂亮也给我留下了深刻印象。宣讲会正式开始后的内容和其他公司差不多,都是百度公司的介绍,企业文化,内部工作环境,员工发展等等。其中还有一个刚刚入职的华工MM参与了这次宣讲,很PP很活泼的一MM。总之百度的宣讲会持续时间比较长,人数也非常的多,百度给我的感觉非常好,非常遥不可及。
笔试:
原先百度网投的时候,我用网易的邮箱注册,老是收不到激活信息,后来换了个QQ邮箱,注册居然成功了。众所周知,在找工作中用QQ邮箱可能会让企业觉得此人太幼稚,印象不好,所以我非常担心,想重新注册一个账号,但是一个身份证只能注册一个账号,所以只能作罢,非常担心我的简历被刷掉了。后来发现这个担心没有必要,因为百度基本也是海笔的政策,而且笔试通知和笔试过程是交给智联招聘的人来做的,整个过程人比较多,也比较混乱,百度和QQ一样,也支持霸王笔,这点同样要赞。百度招聘系统上的状态和实际状态不一定完全吻合,比如我的简历状态一直处于“处理中”状态,而有的人有“笔试”、“面试通过”或“面试未通过”状态。笔试时间安排在十月十多号,和宣讲时间差不多相隔一个月,这个是百度的策略,先在全国各地宣讲,接下来全国各地笔试和面试,最后全国汇总,通知结果。笔试是晚上进行的,和支付宝一样,也是全部挨着坐,但是试卷一样,百度不担心你抄别人的试卷,因为你抄不了,2个小时,6道大题,试卷头特地说明解决问题是一门权衡的艺术,如果有可能,尽情发挥,在做试卷前,通篇阅读题目,选择最拿手的题目就行了。百度的六道题目大致如下:
1.关于深度优先、广度优先遍历算法及非递归实现的特点
这道题我索性将深度优先和广度优先便利算法都写出来,然后简单说明了一下其非递归实现的特点,就是需要一个堆栈或队列,辅助空间较大等。
2. 一道程序改错题,可能存在错误,也可能存在安全隐患。
这道题一般对C/C 熟悉的同学都会做,就是一些关于指针的指针传递,也有一些数组越界的问题,不难。
3. 一台计算机有1KB内存和1MHZ的处理器,能在该机上运行且确定性终止的所有程序中,最长的运行时间是多少,要求写出推理过程,可作出任意假设。
我假设该机是但用户单任务操作系统,实地址模式,运行的程序就是在不断不重复地更改内存状态,程序结束的终止状态为内存的某一确切状态,定义为终止态。于是推理过程如下:
1KB的内存共有状态:2^(1024*8) 种
1MHZ的处理器每一秒钟可以更改内存状态的次数为: 10^6 次
因此,如果一个应用程序,从某个状态出发,遍历了所有的中间状态,最终到大终止态后结束,经历的这段时间即为程序运行的最长时间。为:
(2^(1024*8)-1)/10^6 秒
4. 关于编译依赖的问题,大意是一个项目中存在诸多组件,某些组件的编译需要以另外一些组件的编译为前提,问怎样找出一个合理顺序,使得所有组件能够顺利编译。
该题其实是拓补排序问题,详见清华大学出版的严蔚敏编著的《数据结构》一书。我以一个确切的例子,绘出了一些图形和数据结构,然后以文字形式表述了算法。
5. 编程题。要求在一个字符串中找出最长的数字串,如“fafdahruqa12343fa43faf56454354fas”,你需要找出“56454354”即可。
该题很简单,可以直接写出可以运行的代码。
6. 关于URL的系统设计问题,一个URL分为站点和路径两部分,除此之外还需要维护一些定长的属性和不定长的属性,定长属性如URL被发现的时间,不定长属性如URL的描述文字。要求设计一个系统,可以存储和维护100亿条URL及其属性,支持添加,更新和删除URL,能判定一个站点是否在系统中,如果在,需要给出信息,一个站点可能有多个路径,如果给出一个站点,支持给出站点下所有的路径。
该题我采用的哈希散列的方法,以站点为关键字进行散列,设计了一个数据结构表达一个站点、定长属性、非定长属性,设计一个路径链表存储所有的路径。然后对各个要求的功能算法进行了一下简单的说明。
百度笔试的题目较多,体量较大,不要求全部做完,一般说来能写出思路来,并且思路正确就OK了,关键是要想好怎样表达。笔试完毕后,我感觉比较好,觉得应该是可以进入第一次面试的。
技术一面:
在笔试后的第二天,我收到了百度的面试通知,因为我算法方面不是很在行,不过在Windows编程上还行,于是我报的方向是客户端软件开发。面试地点安排在洛迦山国际酒店,百度的面试都是一对一地面试,百度的技术面试据说非常难,会问一些很难的问题,也会叫当场写代码。当时得到面试通知是又喜又担忧,估计自己是凶多吉少。我被安排在四点半面试,而晚上六点是迅雷的二次笔试,当时都想放弃算了,有点觉得自己就是炮灰。后来权衡半天,还是打算去试试,见识一下也好啊。我提前了一个小时来到珞珈山酒店,在二楼,绝大多数房间都是开着的,面试官和面试者一对一,有的房间在谈话,大概说的是项目,或者面试官问,面试者答;有的房间面试官在干其他事,面试者趴在桌子上,应该是在写程序。也有几个面试者等在各自的房间外,费劲地听着里边的谈话内容,我利用先到的时间,迅速和其中几个在我之前的面试者聊了聊,大概了解了面试的内容和形式,过了一会儿,那些先到的面试者都进入各自的房间面试去了,走廊就只剩下了我一个人,这是脑袋里边什么东西都想不了,索性我就不想了,反正我觉得自己就是来玩的,于是我一个人就在二楼所有的面试房间外晃来晃去,看里边面试的情况。四点半的时候终于轮到我了。
面试我的是一个非常好的技术面试官,据介绍是百度客户端业务部的主管,刚开始做了个自我介绍,然后就开始问一些项目的问题,围绕项目问了很多很细的问题,包括Windows内核的一些东西,如多线程,进程通信,WM_COPYDATA原理,内存映射文件等。我都一一予以作答,看上去他比较满意。后来最终还是逃不过写程序,他出了一道程序题让我写,题目比较简单,我立即下笔,三分钟后我写出来了并且注上了完整的注释,自认为写得很规则。面试官看了一下,没有找出任何错误,饶有兴趣地问了一个关于编程习惯的问题,他问我为什么喜欢把判断一个字符指针是否终结的语句写成if(0x00==*pStr),而不是if(0==*pStr),我说0看上去太单薄了,和数字0差不多,’\0’写起来太麻烦,0x00写起来感觉好,和字符在内存的存储也符合。技术上边的面试大致就是这些,远没有腾讯那么难,面试官也么有过于难为我,估计是因为我是机械专业的学生,非计算机科班专业的缘故。
估计过了一个多小时,谈完技术,面试官说,你今天是最后一个,我们不妨多聊一会儿,你有什么问题吗。我就问了,百度客户端产品发展的一些情况,应届毕业生进入百度工作欠缺的一些东西。后来我又简单地介绍了一下自己的情况,他后来问了一个问题,他说,百度的薪水相对其他企业来说是比较高的薪水了,根据你的具体情况,你对薪水有什么要求吗,我问他,百度的薪酬体系是麽样的呢,他说,有几级工资,刚进去是,被分配到一个等级上,以后每年有机会进行重新评定,我想了想说,如果单就薪水而言,那我给我自己定的目标是最高的两个等级上,我期望凭自己的能力能够拿到这个薪水,我相信我能办到,另一方面,就我自身的情况,我及我的家庭现在都缺钱,但是我是农村小孩,我很容易知足,可能某些人开着小车,住着别墅还嫌不满足,可是对于我及我的家庭而言,我们只要有一粒米吃,我们就会高兴半天,总之,我们的基本需求很小,但是他并不妨碍我追求高的薪水。回答中我成功地避开了面试官的问题,面试官听到我的回答还连声说好,^_^。我大概面了1个小时40分钟,才面完。整个过程相当完美,所有技术问题都完美地回答了,所有聊天都很愉快。走的时候,面试官非常的好,送了我一件百度hi的衣服,另外还送了我一堆娃娃,说是送给我女朋友,握手道别的时候,他说,希望能在百度大厦见到我。至此我的百度一面顺利度过。由于多面了40分钟,所以我也错过了迅雷的二笔,迅雷求职止于此。
产品二面:
技术一面的过程非常完美,所以我觉得自己肯定可以进入二面,回来和求职群里的同学讨论时才知道,很多同学,比如运维部的,一次性的就面了两面,所以心里不免犯嘀咕,怎么回事。到了第二天,又有运维部的同学接到第三次面试通知,陆陆续续去面了,而我仍然处于等待状态。到了第三天晚上,我实在受不了了,就打了个电话到珞珈山酒店,转到面试的房间,那面试官一听我的声音就认出了我,他告诉我说各个部门不同,客户端的同学可能在武汉只有一面,也有可能有两面,但是到目前为止,第一面还没有面完,叫我耐心等待通知。此时我才意识到,原来百度还是叫了很多人去面试的,因为百度的每次面试都是一个小时,所以时间拖得很长也在情理中。第三天的时候,我终于接到HRMM的电话,说让我去参加第二次面试。在第一面的时候我有向面试官打听二面的内容,他告诉我是考察系统知识,比如让我设计百度hi,应该从哪些方面来考虑,所以我这几天也从网上了解了一下百度的客户端产品,并且主要从技术方面去猜想他是怎么实现的,其实在二面中,才知道只有一丁点用。二面其实面的不是技术,而是对产品的领悟。
我被安排在上午十点钟面试,面试地点为A房间,九点十分的是后到达珞珈山酒店,碰到一个武大的女生和男生,一问才知道,刚好他们是一面面的A房间,二面的面试房间刚好是我一面的房间。于是我们相互交流了一下,我才知道二面的内容几乎全部都是产品方面的问题,没有技术问题。A房间的门关着,十点的时候,我按了一下门铃,没有人应,我猜想可能是里边还有人在面试,所以我继续等待,等到十点十分的时候,那武大男生提醒我说还是直接敲门算了,因为耽搁的时间是我自己的面试时间,幸好有他的提醒,我直接敲门,开门后面试官问我,你迟到了?我说不是的,我九点十分就到了,在门外等着,十点钟按门铃没有反应,我以为您在面试其他人,所以又等了十分钟。坐下之后,面试正式开始。
刚开始就问我用过哪些网络产品,我当时脑袋发卡,只说出几种,QQ,飞信,网络游戏,后来在他的引导之下,才又说出迅雷,BT,Foxmail等来,这一点表现不是很好。后来他又问我对百度的客户端产品是否了解,我就说了百度hi,他接着问我对百度hi有什么看法,我就坦然地说了,我只是在研一的时候用过一次,后来就从来没有用过了,我说百度的产品只有搜索大家都在用,其他的东西大家都不知道,我今天还和一个同学在谈论百度,我那同学说百度怎么就只有一个网页也这么牛,由此可见,百度的其他产品做得确实还很不够,据我所知,你们期望以百度hi作为一个平台,来整合你们的产品,就像QQ客户端整合了多数QQ的业务一样,但是我个人觉得这样效果非常不好,因为百度hi的定位是即时通讯,而QQ在中国即时通讯领域在现在看来有不可逾越的霸主地位,当百度hi出来的时候,我就会考虑一下,我用百度hi有什么好处吗,没有,因为其他人都不用,我和谁联系呢。其实换个角度来说,百度不应该以即时通讯客户端作为切入点,而应该以自己的特色,搜索作为切入点,据我所知,百度的搜索仅仅以IE形式呈现,虽然用户可以自己设定一些搜索喜好,但是那是基于cookie的,但是我本人不喜欢用cookie,我认为那侵犯了我的隐私,所以我根本不能设定我的搜索喜好,我认为这是一个遗憾。
百度是否可以开发一个搜索客户端,为每个用户提供注册,保存用户的搜索设定,同时在此基础上整合其他的产品,如百度hi,搜霸,百度硬盘等,这样以一个全新的搜索客户端概念推出的产品,相信要比以即时通讯概念推出的产品要受欢迎得多。他接着问我,对哪些网络产品觉得不满意,有需要改进的地方,我说网页迅雷界面反应速度太慢,有时候还出现网页打不开的bug,腾讯QQ不但不自己开发登录器,反而将QQ的入口参数取消了导致当前流行的QQ登录器无法工作,我又向他阐述了自己有需求,在一个机器上登录多个QQ,自己也曾经开发过两个版本的QQ登录器,这些登录器在2008版以前还能正常运行,但是2009版QQ取消入口参数后,我的登录器也无法工作了,腾讯的这种做法让我觉得很不方便。他接着问,你觉得腾讯基于什么考虑会禁止用户在一个机子上登录多个QQ呢。我说可能是服务器负载不够?他说不可能。我说那可能是为了防止QQ账号被非法利用,比如有的用户可能在一个机器上的登录多个QQ来发送广告信息。他接着问,你认为如何阻止用户的这种行为。
我其实对这个没有经验,只好随便说说,从发消息的频次,内容重复度,提示,举报等角度来解决这个问题,后来他又叫我说的详细一点,设计一个方案来解决这个问题。我就稀里哗啦说了一大通。
第二面的过程中,我明显感觉到这个面试官比第一面面试官要厉害得多,因为我多次尝试将他引向我熟悉的技术领域,但是他似乎没有理睬我,仍然按照自己的问题在问,问的全是产品方面的问题。有时候会根据我的回答,进一步从里边抓出一两个点接着问下去。面了大概四十分钟,面试官说差不多了,问我有什么问题。我就问了他为什么叫我们做技术的叫来面产品啊,他说是因为在公司工作的时候,由于做技术的和做产品的再交流方面存在一些困难,感觉很吃力,因此才设计了这个面试环节,主要是看看做技术的的面试者对产品的领悟能力,也算作是比较重要的考察之一。
二面面试的时间刚好五十分钟,加上被我浪费的十分钟,一个小时。真是非常感谢武大那个同学,要不是他提醒,说不定面的时间会更短,所以,也提醒以后的同学,如果你的面试时间到了,你不能确定面试官是否在面试其他人的时候,你可以敲门试试,不然耽搁的时间是自己的损失。
电话终面:
百度十七号上午二面完毕,下午就接着面华为去了,这中间经历了很多笔和面,先后拿到华为offer,支付宝offer,ASMPT offer,腾讯offer,中电29所offer,成都飞机设计研究所offer,在做其他事情的同时,其实一直都很惦记着百度的信息。二十三号的时候我收到一封莫名其妙的信件,说是将对我的面试进行综合评定,一个月内给消息。有若同学分析说可能是一封委婉的拒信了,意思就是我别盯着百度了,适当的时候可以找找其他的。其实后来我才得知,有些部门的同学在23号就收到offer了,而我报的客户端有同学在23号收到了拒信。我收到叫我等待的邮件,应该还是有戏的,所以我就一直等啊等,等到二十九号,陆续有同学有消息了,比如收到offer或被叫去北京面试了。三十一号,在我刚拒了腾讯签约时,百度的消息终于姗姗来迟了,晚上六点接到电话,说客户端把我的简历传递到质量管理部了,觉得我更适合做质量管理部的测试工具软件开发,问我有没有兴趣,我说可以啊,反正我的项目还和软件测试自动化有关,然后我们约定第二天早上九点半电话面试。
第二天早上九点半,非常准时的电话响了。按预定计划进行,首先就是问了关于项目的问题,问得非常详细,然后问了一下我的知识架构,特地问了一下我做助研的事情,因为我助研的时候负责了《软件工程与质量体系》的课程教学管理,他问了我一些关于软件工程的基本知识,以及CMM五个等级的相关知识,问我关于课程有哪些内容,以及我对软件质量管理的基本理解。因为这个课是由我导师上的,所以感触颇深,我觉得做软件质量管理,做的是一种境界,一种思想,我就如实的向他讲述了自己的一些理解和感触,自我感觉非常不错。最后,我问了一下为什么把我的简历传递到质量管理部,也问了一下质量管理部的工作情况,HR一一做了回答,我打听了一下接下来的流程情况,HR说,接下来会有人力资源的一个讨论会,会做出最后结论,如果被录取,在几天之内就会有消息,如果不被录取,那么会在两周内收到拒信,因为被录取的人是很少的,所以结果快一些,被拒绝的人是很多的,所以会晚一些。
迟到的百度offer
2号晚上快十点左右,我的QQ邮箱冒出提示,标题为“百度校园招聘录用通知书”,我知道我从九月二十四号持续一个多月的百度求职路程画上句号了。虽然被调配了职位,但是幸运的时候仍然是软件研发岗位,不至于太离谱吧。