百度校招:百度校园招聘完整面试经历



百度是全球最大的中文搜索引擎、最大的中文网站。在已经来临的春招中,想必很多同学已经做好准备要向百度投递简历了,今天小编为大家带来一位同学百度校招的面试经验,希望对大家有所帮助。

笔试:
百度基本也是海笔的政策,而且笔试通知和笔试过程是交给智联招聘的人来做的,整个过程人比较多,也比较混乱,百度和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的衣服,另外还送了我一堆娃娃,说是送给我女朋友,握手道别的时候,他说,希望能在百度大厦见到我。至此我的百度一面顺利度过。