论坛首页 招聘求职论坛

百度面经(历)

浏览 13565 次
精华帖 (0) :: 良好帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-08   最后修改:2011-11-10

 


百度面经(历)


 

有点繁杂,请看客见谅.

一是想让后来着,了解整个过程.

二是记下当时面试的点滴,兴许对以后有帮助.


 

笔试通知
收到百度2012校园招聘笔试通知函:

具体的座位分配听从现场工作人员安排


 

百度笔试
一大早从学校出发,约莫半个小时到达笔试地点。

开始找考场,找座位。每个考场门外都贴有本考场的考生名单及对应的座位编号,按号入座考试。听说百度专门开辟了几个考场供未投简历,或者未得到笔试邀请的人(这就是所谓的霸笔)参加考试。

 

等待,并与旁边的美女有一岔没 一岔地闲聊,缓解些许紧张,不安的情绪。

 

拿到试卷通篇看了下各题。三道简答题,每题10分。二道算法与程序题,每题20分。一道系统设计题30分。试卷给人的感觉除了不简单外,就是难了。因为对百度的题很难一说,早有耳闻。笔者虽然酷爱计算机,热爱编程,执着于技术,但很笨,思维不灵活,自知能力有限,并未抱有多大幻想。做答过程,暗示自己尽力而为就好,于是因此少了一份紧张,多了一份淡定,整个做答过程不慌不忙,不紧不慢。

 

做答过程:
从头往后做,简答第一题Linux不会,直接跳过,只好做简答第二题。
简答第二题最小值堆理解出错了,以为与学过的最小根堆不一样(因为我记错了,认为最小根堆左孩子的必须要小于右孩子)。先完成第一小题左右子节点访问方式。后面二小题就无奈了,都是要完成功能函数。在矛盾、混乱的思维中,秉着淡定的原则,将印象中的最小根堆的对应的功能思路写到试卷上面。
简答第三题关于hash算法题意都没怎么看懂。
看了下表,约莫过了30~40分了,决定了,简答先这么滴了,花时间太长了,还没什么收益。

 

开始第二大题算法与程序题。
第一题,题设有提及到N的数字位数最大不超过1000,N的数值最大不超过10^500。额,这不是涉及到算法设计里的大整数操作嘛,看到这数就心虚。
还是做第二题吧。一个求给定序列的全排列和给定序列的全组合。说明:算法均可用伪代码表示。相对容易一点的二道程序题,直接用递归思想把整个函数过程写出来(其中未用到任何伪代码)。这给我不少信心,开始实施我惯用的各个击破方针。

 

情况:写在纸上的程序难免会有考虑不全的地方,大到整个程序理解有问题,小到少设了一个变量。如果使用不可涂擦的笔做答,则可能导致你没有地方继续写上你的后续程序。出此情况很可能会导致本来就紧张的我们方寸大乱。

建议:笔者做这道题时,使用的是自动铅笔,可以应变你的思路而很方便地修改试卷上做答的程序。

 

返回上一道题。此题题设很长,看了好一会,花了些时间去理解题意(之前的暗示仍然管用,没有紧张感)。以前写过大整数加法和大整数乘法的程序,并不是一时半会能完成的,所以这道题对于目前的我来说根本没法当场完成整个程序。得意于上一道题全排列和全组合可以用伪代码的提示,灵机一动:把程序模块化、函数化,将一部分函数功能抽取出来,将整个程序的骨架程序写出来,其中二个判断涉及到大整数判断过程单独放到函数中进行,返回bool值用于上述骨架程序中。这样至少完成了大体的程序功能,对于上面提及的二个函数在后面写上注释说明函数用途(至少能拿到一部分分数)。若试卷其他题做完,有时间的话,补充完整。感觉就好似平时编程时,写好一个接口,使程序保持完整性,接口的不同实现可以之后一一添加。

 

紧接着开始做最后一题系统设计题。这是一道“设计一个支持高级语法查询的单机大数据量的磁盘检索系统”相关的题。题意没想象中压轴题那么难理解,也没有想象中的压轴题那么臃肿。看到磁盘检索,呀,开始有点亲切。开始往操作系统方面的知识回忆。
再看下表,时间已所剩不多。只好按照自己的想法写,没时间找最好的解题方法了。觉得这类题也并没有唯一的标准,只要自己的想法合理,说得通,或者说能自圆其说就行。于是,第一小题我采用三级索引来完成兼顾查询性能和资源利用的要求。并依据题设简单设计数据存储格式。
至少第二小题,现在印象不深(因为时间仓促,没过多时间去理清做好是否可行),好像是写了些进程互斥访问临界资源相关的内容。
到第三小题都快没地方可写了,也是把自己差不多的思路写上去了。这题感觉写了些东西,对不对不知道,但至少满满的。

 

再看了下表,好像只剩15分钟不到吧。看了下旁边的MM,好像也写得满满的,有点鸭梨。再看看自己写的试卷,后面二个大题,感觉也觉得不错。

继续各个击破,返回前面未完成的简答题。


第一题网络中断,程序将会中断?因为没有数据输入?猜测网络未中断的时候,来自网络的数据一直输入到程序,或许存在一个一直操作程序的句柄;网络中断的时候,未有句柄操作程序,所以自动中断。要是在网络中断的时候,循环给程序发送空操作或者空数据就会一直存在一个操作程序的句柄,程序就不会中断,另外操作是空操作,不会对程序的输出有什么作用。不会,瞎猜并瞎写的~~

好像剩3分钟不到,接着看简答第三小题。因为此题是关于hash算法。hash算法的二个关键问题之一是hash函数的定义。于是,根据在这有限的时间想到的突破口,写了个根据最小粒度值得到其对应的层次。不会写,咱还不会编呀,不惜墨。


百度笔试题请参见:百度2012软件研发笔试题[转载](点击查看)

 

 

 

百度一面
凌晨,百度发来短信通知一面,并要求回复一下。激动一晚没睡好。早上八点左右起,差不多一个半小时的路上颠簸到了百度HR入住的公寓。来到17楼,大约10个人的样子在等待面试。一了解,才知道都是大连理工大学的,就我一个不是。985院校的学生就是能人多。
预约面试的10点时,我站在2402房间门外,很礼貌地敲门并说明来意。面试官很客气叫我进去,并请我坐下。介绍了下他自己,然后就开始问我对笔试的感觉,觉得题出得怎么样。第一次被问及这个问题,就很勉强地说比较有深度。在我支吾地说着的时候,面试官说我做的笔试不错,在全国范围内不知道怎么样,但是在整个大连地区做得算是很好的。这就好像给我吃了镇定剂,突然有了自信。
①然后开始问简历上的项目,知道我是做Java这块的,但是投的软件工程师(北京)是C方向的。鉴于我简历上写道熟悉C语言,他开始给我出一道C的程序题:字符串拷贝(点击查看) 。
可能是因为他知道我是主攻Java,所以说有不明白题意可以尽管问。于是大胆地问函数定义处的双*是什么意思,经他解释后,我提议换成引用&。同意后,很快写完程序。反复问及拷贝的字符串dest的内存分配是在函数里面,还是在函数外面时,我坚持说是在外面。后来,他说想清楚了之类的,我知道我回答得不对。于是把自己的看法说出来:malloc(sizeof(char *))是用来动态申请内存的,但是字符中的内容是在函数里面给赋值的。结果才知道他问的意思就是最终得到的字符串内容的内存空间的分配。说出自己的看法还是好,这时,我才知道他的真正问题,他也知道我对问题的理解。期间给我倒了杯水,很热情的说。


②开始给我出一个算法题:常数时间内求栈中最大值(点击查看) 。这道题有点颠覆我的传统理解。知道是想要用空间换时间,这怎么换?一步步想好几种方法,最后还是给做出来了。思路:我借助一个变量count和一个数组空间(其实就是一个栈)完成该时间复杂度为O(1)的算法设计。


 

最后,他说如果有机会的话,可以考虑跟同事商量把我调到Java面试官那边去面试(他是C/C++面试官)。


 


这就结束了长达四十分钟的面试。因为面试官的和蔼,和来时就秉着能受邀参加笔试已经是莫大的荣幸的思想,使得面试过程自己一点也不紧张(即使在没做对的情况)。另外,从他口中得知,笔试做得不错,然后面试出的二题都答出来了。一面感觉还挺好。


 


 

 


百度二面
前天去腾讯一面的时候,听人说大工那边都有人已经三面了,甚至谣传已经有人收到offer了。一面腾讯的时候,心里一个不爽呀。晚上十二点后(这已经是一面后三天了)决定躺床上听心爱的音乐。意外地收到二面通知。

早上依旧空着肚子,颠簸一个半小时到目的地。
预约面试的10点10分时,我站在2006房间门外,很礼貌地敲门并说明来意。面试官笑脸相迎很是亲切。简单交谈得知,他是Java面试官。吼吼~这次心里有点底了,面Java我有的是经验和准备。


开始自我介绍,我只是简单说了自己的姓名,学校,学历,专业。说完自己的专业后,就开始引导面试官(这是我的面试经验,有空再奉上)。一个过渡句:我酷爱计算机,热爱编程,执着于技术。现在对Java技术研究的比较底层,因为Java封装性,使得程序只会表面的程序编写,而不知道其中的机制,所以平时经常看JDK及一些开源的代码,另外还看了些JVM的知识。然后开始列举我上一年所做过的研究(基本都是写在本博客空间的文章内容)。面试官于是对其中的个别感兴趣的话题深入寻问,问得差不多的时候,我又开始适时说列举另一些或者选择一些我觉得比较有说头的研究,从而引导面试官到我会的领域。期间有问到一个问题,如何通过session和cookie实现多点登录。过了差不多40分钟后,开始问我简历上的二个项目。结束后,差不多过了一个小时。

 

接着,他告诉我在我之前本来有个吉林大学的,因为二面给通知间隔时间太长已经回去了;我后面还有个大连理工大学的,今天也来不了。我们有的是时间,给我出了三道智力题:
1. 百度二面智力题(破碎临界层)(点击查看)做这题的时候,很热情地给我倒了杯水。
2. 百度二面智力题(圆湖中的鸭子)(点击查看)
3. 从1000个灯泡中挑选出合格灯泡


这些智力题都是面试官现场在网上搜的,给我出题,然后自己看解题方法。笔者比较愚钝,都是经面试官引导做出来。

终于结束了一个小时四十分钟的二面,告诉我回家等通知,今晚九点前就能出结果。这一面感觉也不错,他问的Java技术方面的问题没什么难倒我的,相谈甚欢。后面的智力题虽然不会,但也向他展示了自己一步步思考问题,解决问题的过程,在他的引导下也做出个大概。


 


 


百度终面
前天晚上7点左右,终面的短信如期而至。


早上在车上默记了下,前天早晨通过工具查看到的百度各大网站使用的静态页面服务器,甚至个别网站使用的后台编程语言。
以及昨天下午和晚上准备的一些百度公司文化相关的知识。额,才知道百度CEO叫李彦宏,百度一名出处以及百度公司的历程等(笔者只爱编程,只关注技术,对这些名人,名企的了解甚少)。

又是10点多,这次是在1806HR所在房间,等待经理面完上一个。HR告诉我这个经理很厉害,百度从某知名互联网公司挖过来二次。即使面试不通过,可以问他们一些问题,听他的解答对以后的发展也是一个不可多得的指引。

 

等待二十分后,我心情很复杂地坐在经理对面。经理笑容可掬地向我要了份简历,很热情地、很亲和地给我倒了杯水。然后让用自己的方法实现一个HashMap函数:百度终面结构设计题(实现HashMap(点击查看) 。结果误打误撞,跟HashMap的原始设计雷同。花了点时间想思路,并把包含主要功能的实现程序写在他给的纸上。写完后,他还挺满意。他说其实就是想知道个思路就行,主要是想跟我聊其他方面的话题。


说了很多,聊了项目,说到我曾经做过的研究。还说起我查看过他们各个网站的服务器,各个服务器名,以及该服务器的出处和目前使用的情况还有我对百度服务器集群的猜测以及我对集群的疑惑。然后,他就告诉我服务器集群怎么工作等等。总感觉这个时候他高兴的心情溢于言表。

这一面一个小时三十分钟,问的问题方方面面,不过技术方面的话题还是占85%~90%。其他的就是家庭呀,在校期间学习成绩,健康情况,平时与同学不快的解决办法,平时看什么书这些琐事。从经理和蔼到高兴的表情变化,感觉到不出意外,应该是大功告成了。


 


 


 

百度签约
终面的表现果真没让我失望。当天晚上收到签约通知。但是由于笔者实力有限,对自己特别地不自信,之前为了保底已经与HS签了三方协议,与HW签了二方协议,就跟HR说明情况。结果那边很爽快地答应明天可以过去先签个offer,至于三方可以违约后再给邮寄过去。

 

 

因为笔者深知进百度的都是牛人,大部分都是985类院校,笔者即非大牛,也非生于985类院校,自惭形秽。签约的时候,我诉说了自己的不安,会不会因为没有三方而把我给辞退了,或者试用期结束把我给辞退这类的问题。他说百度试用期不会辞退应届生,因为考虑到应届生经验不足,及刚参加工作需要适应一段的情况。试用期只会辞退社招员工。

 

 


 

 

 

   发表时间:2011-11-09  
我记得面试的时候有个什么保密提示的

楼主注意点,别让百度的人知道你是谁。。。

否则泄露面试题可能被辞退。。。。
0 请登录后投票
   发表时间:2011-11-09  
看来群主的确有实力啊
0 请登录后投票
   发表时间:2011-11-10   最后修改:2011-11-10
suigara 写道
我记得面试的时候有个什么保密提示的

楼主注意点,别让百度的人知道你是谁。。。

否则泄露面试题可能被辞退。。。。

哦。谢谢你的提醒。
明天看看有什么可以隐去的。
0 请登录后投票
   发表时间:2011-11-10  
jyjava 写道
看来群主的确有实力啊

其实很差。还得不断学习。
0 请登录后投票
   发表时间:2011-11-10  
②开始给我出一个算法题:常数时间内求栈中最大值(点击查看) 。这道题有点颠覆我的传统理解。知道是想要用空间换时间,这怎么换?一步步想好几种方法,最后还是给做出来了。思路:我借助一个变量count和一个数组空间(其实就是一个栈)完成该时间复杂度为O(1)的算法设计。

这题难道不是修改下push,保存个max变量,在push的时候就记下最大值搞定吗?
0 请登录后投票
   发表时间:2011-11-10  
int08h 写道
②开始给我出一个算法题:常数时间内求栈中最大值(点击查看) 。这道题有点颠覆我的传统理解。知道是想要用空间换时间,这怎么换?一步步想好几种方法,最后还是给做出来了。思路:我借助一个变量count和一个数组空间(其实就是一个栈)完成该时间复杂度为O(1)的算法设计。

这题难道不是修改下push,保存个max变量,在push的时候就记下最大值搞定吗?

我也举得是 push 一个结构体进去,结构体包含当前值,和最大值,每次push的 时候都更下下 这个push值,这样pop出来就直接从结构体里面取出最大值
0 请登录后投票
   发表时间:2011-11-10  
楼主吉大的,应该也属于985,211类院校
0 请登录后投票
   发表时间:2011-11-10   最后修改:2011-11-10
makeyouown 写道
楼主吉大的,应该也属于985,211类院校

非吉大的.
0 请登录后投票
   发表时间:2011-11-10   最后修改:2011-11-10
int08h 写道
②开始给我出一个算法题:常数时间内求栈中最大值(点击查看) 。这道题有点颠覆我的传统理解。知道是想要用空间换时间,这怎么换?一步步想好几种方法,最后还是给做出来了。思路:我借助一个变量count和一个数组空间(其实就是一个栈)完成该时间复杂度为O(1)的算法设计。

这题难道不是修改下push,保存个max变量,在push的时候就记下最大值搞定吗?

你说的是全局一个max变量吗?
是这样的话,就我理解搞不定.
栈有push操作,也pop操作.
如果一系列push操作后,记录下当前最大值.

当做一次pop最大值时,max值没法得到了.

不知道我有没理解错你的意思.
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics