您的位置:首页 > 职场人生

百度面试杂感

2015-09-24 21:55 435 查看
在9月21号参加了百度深圳站的“软件开发工程师”在线测试,并意外

的在第二天晚上九点多收到了面试的电话通知。之所以意外是因为当时在笔试的时候有一设计题,占了30分本人不会做完全给放空了

。当时心底非常高兴

,但对于HR通知说要23号面试有点抱怨的情绪。因为我身在厦门,却要在23号下午三点之前赶到百度的深圳国际大厦,时间很赶。于是就想问能不能改电话面试,HR说没有,并说本人笔试分数不高,面试过的几率很小,问我还来不来。(感觉有点被鄙视了,心里有点小不爽

)。我就回答,那你把面试的时间和地点详情发给我,我再思考下,如果到时候赶不到就算了

。其实要赶过去时间上是完全来的及,主要是路费的问题及担心百度面试太难,到时候一问三不知怎么办

。于是从解完电话就一直考虑:究竟去还是不去的问题。后来一狠心,一咬手就决定去了。说服自已的理由是,这种机会难得,可能对于我来说是第一次也是最后一次。而关于上面所说的路费和面试太难的问题,我是这样想的:第一,路费就当成是与百度大牛交流的费用了(别人花几百块还不一定能获得这机会了

,更何况有人花上百万美金和股神巴菲特共进午餐,我这几百简直就是九牛一毛);第二,问到不会就诚实回答,在大牛面前不懂装懂会死的很惨的!!!

秉着这样的想法,23号一大早(七点左右)就起床,订动车票,直奔深圳。

下面就谈谈自已对这次测试的看法及面试经验。

首先,在线测试的题目分为4大部分,第一部分是有关企业文化的试题,共15题。即让你看图从选项中选出符合该图所要表达的企业文化理念,比如说,画了一个靶子所有的箭头射在了靶中心,表明了企业的文化为:专注目标等等。感觉这部分试题,只要你看懂图的大概意思,再结合下选项应该基本能做出正确的答案。

第二部分就是一些专业基础知识的考查,也是15题(没记错的话)。这部分考查的内容比较广,从C/C++到Java,从php到Linux,从数据结构到TCP/IP等等内容都涉及到了。基本上,本人在应对这部分内容除了C/C++、数据结构把握比较大以外,其它试题都是“合理的推猜”加上运气

。但感觉考的还是比较基础的,只是范围广而已。第三部分就是设计题了,二选一。本人看了下题目,第一题是叫设计一个分布式系统。天啊,什么设计分布式系统,

以前都没怎么接触过这概念何来设计的功力,于是直接跳过看第二题。第二题先陈述了下,手机APP远程控制空调的功能这一背景,然后问你设计这个APP要考虑哪些问题,为什么,还有
第二小问不过本人没看。因为这纯语言描述的,我还是能扯淡一大堆的,但感觉自已答不到点上,而且当时思路也有点乱,就果断的把这部分内容也放弃了。

这样,就省下好多时间啊,可以慢慢地应付第四部分。第四部分是程序编程题。这部分是本人在这一次测试中做的相比比较满意的。

主要原因是因为它支持线下调试。不像阿里、腾讯、CVTE那样,只能在线编写,都不能离开考试界面。当然,这跟个人水平也有很大的关系,你要是水平够的话,对于这种小的程序,一写也能够一个准。可俺距那种“一写一个准”的水平还是差很多的,线下调试对于我的帮助就是大大的。


关于第四部分的具体试题描述:

第一题:输入一行数,第一个数(n)表示这行数的个数,后面几个数表示这行数的具体数值,交换这行数的最大值与最小值的位置,然后输出这些数据,当输入个数为0时(n=0),终止程序的运行(在原题中有限制每行的具体个数和数值的最大与最小值,我忘了是多少了)。比如,输入:4 1 2 3 5 输出为:5 2 3 1 ;其中输入数据的第一个数表示后面要处理输入数据的个数, 比如举例中的4;而后面的1 2 3 5就表示这行处理的具体数值;输出的数据为 5 2 3 1 就是将处理数据的最大值跟最小值进行了交换。这道题相对还是比较好解决的。

本人测试时的思路:首先通读题目,分析题意是必须的,然后进行解题,即算法设计。第一,每行的个数决定了程序的终止,所以要有一个判断每行个数是否为0的语句;第二,每行的个数不一样 ,所以要有一个动态创建适当内存来存储每行的个数的操作;第三,要选出每行中的最大值和最小值然后进行交换,可以选择进行降序排序后记录最大值和最小值的原始位置然后交换,也可以直接选出最大值和最小值然后进行交换。至此题目分析也就差不多了,剩下的就是编程实现和细节问题了。我敢肯定,要是不支持线下调试的话,我肯定做不对。经过大概半小时的调试,上传代码,进行在线调试。嘿嘿,

测试通过数据100%。瞬间有了十足的信心做第二道编程题。

第二题:题目有点长,单单看懂题目就花了好多分钟,更不要说写出代码用了多久。本人又没写全,在线测试的时候,通过数据也就35%。

题目说的是什么“高维降维的”,具体也记不太清了,就 是说先输入一行数据(有三个数据,为N,M,K(这三个值都有具体的限制范围))分别表示高维文明星系的个数为N个,低维文明星系的个数为M个,K为高维文明攻击低维文明的总次数最大值;然后输入第二行数据(有N个)分别表示每个高维文明星系发起的攻击次数;最后第三行数据(有M个)分别表示每个低维文明受到的攻击数;然后让你输出一个二维数组a
[M],其中的数据如a[i][j],表示第i个高维文明攻击第j个低维文明的次数,判断此a[i][j]是否存在,不存在在第四行输出不存在的提示符;存在的话判断a
[M]是否是唯一的,如果是唯一的就输出该二维数组,如果不是唯一的,输出不是唯一的提示符。搞了半天,才看懂题目的我,实在是不忍用自已不成熟的思路来影响别人,这里就不表述自已的思想了。

第三题:感觉像是最优选问题。题目是这样的,假设小明知道花的生长规律,即哪个月浇水,花能生长的高度。问花要长到指定的高度至少要浇几次水。即,在第一行输入花的指定高度(K),第二行输入十二个数表示每个月浇水的话,花能生长的高度,在第三行输出最少浇花次数,当不存在满足条件的情况下输出-1。比如,第一行输入:5,第二行输入:1 1 1 1 2 2 3 2 2 1 1 1;第三行输出:2。(第一行5表示:花要长到指定高度K=5,第二行的第一个1表示:1月份浇水的话,花能生长1,第二个1表示:2月份浇水的话,花能生长1,以此类推;第三行的数2表示:花要长到指定高度5,至少要浇水2次)。题目虽然简短,但本人理解了好几分钟才理清题意与思路,刚开始老是想,直接前几个月的生长高度和大于指定高度不就可以了,可一看,这于题目给出的例子的输出不一致啊。后来,陷入了好几分钟的固定思维状态,始终认为要是不从第一个月开始浇水,或者连续几个月不浇水,花不就死了吗?

而从第一个月开始浇水,很显然(观察第二行的十二个数据)浇水的最少次数
就绝不是2,那与所给例子不是不符。后来想了一下,不能这样理解,这朵花一定是朵“奇花”,几个月没浇水都死不了,

要使得浇水的次数最少,那肯定要选那几个月中浇水花的生长高度最高的时候,于是问题就解决的差不多了。

于是例子也可以理解为什么至少次数是2了,就是先选择花长的高度最高的那个月,一定要浇水(在上面例子中为7月浇水可长3),然后选择次高的(在上面例子中,可以发现次高的有5、6、8、9月都是2)只要随便选择其中一个月浇水即可,这样就能得到最少的浇水次数,即两个月、两次了。想通了这些,接下来就是算法的问题了。

本人在测试时候的思路是:开通一块内存存放12个月各个月份浇水时花的高度,然后从12个数中每次选出最大的数与指定高度做差,设一个变量(表示浇水次数N初始为0),每次做差后加1,做完差将原始数据中的最大值置为0(表示该数已经用过了),然后判断做差后的结果,若小于等于0,则输出N;当12个数都做差结束结果大于0,则输出-1。按着这样的思路编完程序,线下调试后再在线调试,结果发现所有测试数据的通过率只有75%。什么情况,

难道还是理解错了?在线下又单步调试了一下,水平太LOW了

,没发现问题,此时发现测试时间快到了,赶紧点击“交卷”按钮。大喘了一口气,感叹着:又浪费了一次面试的机会。哎,一切随意吧,水平就这样了!


从上面的测试情况来看,被淘汰是大大的,所以考完试后就又投入了复习状态,准备其它企业的校招测试,并没有把百度的这次测试放心里。然而,一切都是那么的幸运,竟然通知面试了,还没担心被骗问了下,你不是诈骗电话吧,

在得到肯定的回答后,就有了上面的那个纠结的一夜。下面,谈谈自已对百度这次面试的看法吧。

在23号早上,撒着脚丫子,一路紧赶,在下午1点多的时候到了深圳百度国际大厦。大厦被围了起来,竟然在施工,这是什么情况?新建的?果然如是。管他新建还是旧楼,来了就得上,不过还是的先吃个饭,喂饱下自已。(尼玛,一碗西红柿鸡蛋面17块

,还让不让我愉快地吃饭了。)此处省略千字对百度国际大厦高端霸气上档次的环境赘述,直奔面试。一下为面试的基本对话内容(Q:为面试官提问;A:本人的回答)

Q:先自我介绍下吧。(此前先问了下名字,提交下纸质简历。问完问题就一边看简历一边听我的介绍,不知道有没有在听)

A:按事先准备的介绍了下

Q:介绍下你简历上的项目吧。(这中间有问了一下小问题,比如,这项目是自已完成的吗?你的算法是自已提出来的?算法的设计思路?遇到的最大的问题?如何解决的)

A:我就把自已当时能想到的全都抖出来了(说的都有点口干舌燥了,现在想想,其实表述的不是很好,没能重点突出自已到底做了什么,当我还要继续抖的时候,面试官说可以了,其实,我多想就直接抖一个小時啊!



Q:写个字符拷贝函数吧,要注意一些细节。

A:(此时,我心一紧,终于要来写代码了。不过这函数有看过噢,嘿嘿。)字符拷贝函数啊,好的。(于是就提笔写起来了,写的字体就不说有多难看了,难代码写作风格简直就是“惨不能睹”

,由于面试官的提示,写完后我又检查了两次,确认除了代码写作风格差意外,应该没什么问题了,然后就说,好了。)

Q:你再看看确认没问题吗

A:没啊

Q:再仔细看看

A:(又认真看了一遍)没看出来,有什么问题。能给点提示吗

Q:你想想要是源拷贝字符大于目的拷贝字符的空间存储,那你这个程序不是瘫了。

A:(恍然大悟)那只有在加个空间分配不就行了

Q:你写下吧

A:(我就写了个先判断长度,然后根据长度的情况进行处理,直接在原来写的代码下写,画了几个箭头,然而并没有完全写完)好了

Q:(问了那几个箭号指向那)你这程序没写完吧

A:是的,后面就是....(然后就解释了下整体思路)

Q:(又看了一下写的代码)然后说,你代码量多吗?

A:就这几个月准备“校招大战”写的比较多(感觉面试官是不喜欢我这样写了,其实我应该从头到尾再写一次的)

Q:你自已觉得擅长哪方面?

A:就目前而言,对视频编码快速算法了解的比较多,其它的TCP/IP、操作系统、Linux都是最近才接触的

Q:TCP和UDP的区别

A:(按照之前看过的,大概说了一下)

Q:TCP建立连接和断开连接的过程

A:(这记的不太牢,磕磕碰碰的说了一堆)

Q:当断开的时候,服务器第二次返回给客户端的返回信号没了会怎么样?

A:(这我那知道啊,但想了下不能这样直白的回答)客户端会一直等待服务器再发出信号

Q:你认为QQ是用哪一种通信协议的?

A:UDP啊,因为它可以同时打开多个窗口进行对话、视频啊

Q:只有UDP吗?

A:(其实,我知道面试官在提醒我肯定我TCP啊,我很想说还有TCP啊,只是我不知道它怎么应用的)应该是吧

Q:你对这方面不太了解是吧

A:嗯,最近这一两周才看的,不过给我多点时间,我应该能掌握这些知识

Q:给出一堆数,从中选出满足和为指定数值的数。现在你设计一个算法实现这一功能,可以先说下思路。

A:(我想了想,怕等太久了不好,就即刻说了下思路(n个遍历),面试官发现了问题,我自已也发现了问题,然后又重新想了一下,又说了另一个思路(排序后再查找),发现复杂度太大了,瞬间慌了,惨了,想不到了,然后面试官就提示“如何快速在一堆数中找到一个数”,我脱口而出,“二分查找”,然后面试官看了下,这道题可以用二分查找,然后我又再说了下思路(排序加二分查找),估计面试官听不下去了,就说了句好了不用纠结这个问题了)

A:看来你对算法也不是很了解啊

Q:就对视频算法了解多一些,其它的都不清楚。偶有课程设计遇到过也没有深入研究过

A:那说下你了解的视频算法吧

Q:(瞬间不知道怎么回答,在那边想了下,没答出来

,其实我应该说对视频快速算法了解比较多的)

A:那你知道那些排序算法?

Q:(感觉面试官确定认为我太水了,才会到现在才问这个问题)插入排序(直插、表插、希尔)、选择排序(冒泡、快排)、归并排序、堆排序,嗯,目前就记得这些了

A:那你写个堆排序吧

Q:(于是埋头写起来了,感觉好像错了,一写完就让面试官查看了(因为觉得写太久了不好,不好好像也写了不少时间),面试官看了下,什么都没说)

A:还记得当初笔试时候的设计题吗?你认为你当初的设计有什么不足的?有什么要改善的吗?

Q:(我瞬间凌乱了,重磅炸弹啊,我都没做出来,然后就老实的交代了情况



A:你有什么要问的吗

Q:(问了一两个问题,然后面试就结束了)

整个过程大概就一个小時左右,面完之后,刚走到楼下就打电话过来,“对不起,耽误你的时间了........”。虽然这早就预料到的,但如此快的收到此通知,我还是有点难过。

人生的第一次正式找工作的面试就这样结束了,我风尘仆仆而来(虽然没抱太大希望),但却被它连衣袖也不挥一下、没声“good bye”的赶回去了。

总结:第一,应试具有技巧,要抓住自已会做的,尽量把它做对,对于不会的暂时没涉及过的坚决跳过,最大化自已的优势;


第二,夯实基础,多进行代码编写练习,多涉猎写知识;


第三,不要做没必要的、幼稚的行为,说没技术含量的话。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: