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

百度实习生面试经历

2015-12-14 16:30 585 查看
写下这次面试百度实习生的经历,即做自己学习面试的总结,也提供给有需要的人一点参考吧。
源起

抓住暑假的尾巴在安顺玩耍时,收到一个朋友发给我的百度实习的岗位信息及要求。当时随便看了下,是百度地图的后台开发方面的,要求C++,算法,Linux,以及数据库方面的知识。要求挺高的,其实我是达不到要求的。感觉不好拂了朋友好意,也就让她给了我联系方式,想着随便问一下,聊聊。一开始以为这应该是学长学姐来学校发的内推消息。加上那人之后就开始叫学姐。后来才发现,她和我是同一届的,她是帮她百度的朋友推简历的。当我向她厚颜无耻的夸下我基本满足他们要求,并要到了百度那个哥们儿的联系方式后,其实我是很心虚的。

当时咨询百度的那个哥们儿(为了后文便于叙述,就把他称为W君吧)时,其实我还是没真打算要投简历。推辞着说到,“这几天在外面玩,不方便,手边也没准备好的简历,可否等过两天回到长沙再给他发简历。“
其实,我还真是没有认真准备过简历,也还没投过简历。 这W君倒是干脆,说没简历现在撸一份发过来就是了。于是乎,我就搜了一个简历模板,然后填了填就发过去了。

总的来说,基础和底层知识比较扎实,造过一些小轮子,也了解过一些python Web后端和python数据处理方面的东西。有个人博客(www.qyspaces.com),坚持写博客总结学过的知识及自己的思考。并且擅长不断的学习。因为开学大三,所以还在不断学习中。学习的重点是数据结构与算法,以及数据处理,机器学习等。

基础方面:熟悉计算机原理及体系结构,掌握了常用数据结构和算法以及基本的操作系统知识。长期使用Linux系统,会一点shell及Linux
C,学过一些UNIX POSIX API。

语言方面:熟悉C++和python两门语言。熟悉STL,阅读过一点SGI
STL源码,并且正在尝试自己实现一个版本。python写过一点web后端和网络爬虫。

上面的内容就是我写在简历里的自我评价了。我把自己的技术栈什么的一股脑儿都写进去了。当时撸好这个”简”历也就二十来分钟吧。投完简历,第二天就继续和朋友在安顺吃喝玩乐了。一直到三天后,回到长沙,在从火车站去学校的公交车上,W君突然QQ上找我,然后问了我些问题。估计是想大概了解下我简历的可信度。我记得很清楚的是,问了我一个快排的实现思路的问题。然而我就一个算法弱鸡,当时就愣了。一边言语交流着,一边回忆快排的过程。庆幸的是,稍加回忆也就记起了快排的大概过程,然后就balabala说了一通。其实说完我都还不太确定那是不是快排的过程。当时一直是,快排,希尔排序等几个排序过程傻傻的分不清。然后还问了些其他的什么很基础的问题吧。随后说是,可能过几天会有一个电话面试。当时听说有面试,心里还是有点小激动的呢、毕竟是度厂啊!
一面

接下来的几天就开始准备面试了。拿着基本以前啃过的书在那里看。《深入理解计算机系统》,《STL源码剖析》,《操作系统概念》,《数据结构》,《C/C++代码精粹》等一帮书。因为是为了面试而看书,完全没有平时看书的轻松和愉悦感可言。看一个东西,想的就是要怎么把它记住,如果问这个我要如何回答之类的。实际上,几天时间,也就把以前看过的东西大概熟悉了一下,有个印象。比如C++的内存管理以及内存池这个东西,还有虚拟内存的实现原理等,里面本来就还有很多东西没懂。所以看得也是囫囵吞枣的。

很惨的是,当时由于电脑坏了。没法在网上搜搜典型的面试题目,也没看别人的攻略。还好,以前看博客的时候,看过不少别人写的一些面试攻略,所以基本还是了解面试的重点大概是哪些内容。所以说嘛,有些东西,你真得先准备着,因为你永远也想不到在什么时候它们会派上用场的。那些关于面试心得体会的文章都是去年刚开始接触技术时看的。当时真也就是当故事看着玩的。没想到这么快我就要写个这样的故事来给别人看了。

当我傻傻的把《数据结构》又看了一遍,各类数据结构及基本算法都熟悉了一下,STL的各种设计理念,各种链接,中断,虚拟存储器,进程线程问题都看了一番。面试时却是有点傻眼了。记得在面试前,我还专程问了一个做HR的姐姐面试要注意些什么,然而,在一面二面中并没什么卵用。因为,都!是!技!术!面!

因为电话面试嘛,一开始有点听不太清。然后他让我做个简单的自我介绍。我balabala的说了3,4分钟吧,哪个学校的,什么专业的,技术栈是怎样的,以及怎样发展的之类。其实这些信息,简历里基本都有。自我介绍只是给你一个适应过程,让你进入面试的场景中来。然后开始问问题了。

先是问了一个关于TCP协议如何保证信息可靠性的。我大概说了下三次握手四次断开以及重复发包等过程,然后说这个方面不是很熟悉,大概知道一些。还问了写关于网络访问的整个过程的问题,从浏览器输入地址到浏览器收到服务器的传回来的信息中间的整个过程。这个问题也没什么难度。

然后开始挖一些有深度的问题了。问我虚拟内存的实现机制以及C里面的动态内存分配后面的实现原理。这个问题因为涉及到的知识点太多,而且我自己也还没能把其中一些过程理清。两人你来我去,每问一个问题,都要解释一番,而我回答时,有时也得举个例子什么的。当时,我说C的动态内存分配器,用malloc来管理,其实现层面用了技巧性的带head和footer的自由链表这个东西。因为我说得不清楚,反复说了几遍,他才懂了我说的意思了。

然后问了我一个问烂了的进程与线程的区别。操作系统我别的还没看过,就看过进程线程的知识。。简直感人啊。后来二面中又问了这个问题。不过还问了进程间(IPC)通信的实现机制以及线程间资源共享的方式。他要是问我文件系统什么的我就不知道了。。不过目测他也不太熟悉。之后,问我平时是不是都用Linux。然后问了些Linux下的常规命令。什么grep,top,ps,之类的。学了很多的POSIX API倒是一个都没问我,只跟我我提了一下多线程程序的问题。当时脑子抽了说不太熟悉。。其实就是pthread库的问题啊。。

在这之后,又问了几个C++的问题。无外乎虚函数,多态这些东西的原理以及应用场景。最后,是的就是最后。问了我两个算法问题。一个是如何在线性时间复杂度里找到一个字符串中不含重复字符的最大子串。因为完全没有做这个方面的准备,完全傻眼了。。只得一边与面试官沟通,一边想,同时在草稿本上写写思路。想了挺长时间,没能给出一个可行的方案。最后给出了一个用双指针线性扫描比较的办法,不过时间复杂度貌似是NlogN的。现在想来,这个问题So easy啊!一个hash法直接就解决了。然后又问了一个,如何检测一个链表是否有环的问题。。想了好久,又跪了。。后来看面试笔试宝典发现,两个问题都是问烂了问题。链表环一个快慢指针就解决了。。

两个算法题挂了都是因为没好好准备这方面啊,当时如果稍微用几个小时刷刷这些题目,那就完全没问题了。以前一直觉得考前准备是没用的,这次算是更正了我的看法。面试前抱佛脚真是太有用了。网上不是流传,刷完leetcode后,将题背下就可以进Google了吗。。

其实面完后我是完全没底的,虽然基础问题回答得不错。但是算法问题回答成这样,他们很有可能会认为我一点也不懂算法,然后把我刷掉了。。据说有个哥们儿面试时什么问题都答不上来,但就这个链表检测环的问题答上了。还好的是,后来W君告诉我,让我过了一面,而且是刚好擦着过。应该是看我基础不错,想给我一次机会吧。让我准备准备下周的二面。又是没有具体的时间,不过这次我倒希望时间长一点,可以好好刷刷面试题目。
二面

因为一面中发现算法太渣,并且烂大街的算法题都答不上来。突然开窍了,去买了本《程序员面试笔试宝典》开始刷。那几天的艰苦奋斗啊,把各种常见题目中的链表问题,数组问题,字符串问题,一共50多道,两天的时间,全部刷了一遍。刷到后面真实快吐了。但是也感觉心里有底了,觉得这种常规问题随便他问我都OK了。

面试当天的上午,他们打了个电话跟我约定下午两点面试。然后顺便问了问我C++是不是比较熟啊。然后我不知天高地厚的答了一句还行。。之后,W君告诉我,给我分了一个T6的CPP大神面试我。。然后,下午的面试果然不出我所料,80%的问题都是关于C++的。

上来简单的自我介绍之后,让我先说说C++中的那些关键字,以及注意点。我依次说了,const和static在全局作用域内是什么性质,在类里面,修饰属性和方法又是如何的; struct与class的区别;vitual虚函数关键词。他问到我一个静态数据成员是否只能由静态成员函数访问。这个知识点其实我已经忘了,因为平时代码写得少,很少涉及这些知识点。不过,我按自己的理解推论了一番,然后按照我的理解说,既然静态数据成员是类的成员,不能通过对象this指针指向来访问,那么要用函数操作它,应该也只能用静态成员函数来操作它。静态成员函数的地位是类的成员,和静态数据成员一样。然后给了肯定的回答。以前看别人在面经里写,有时面试官问你一个问题,可能不是要看你能不能记住这个知识点,可能是要看你如何去分析一个问题。这次的切身体会确实是如此。所以,遇到自己忘了或者不懂的问题,不要急于给出肯定或否定的答案,按照自己的理解,分析一番,可能会更有效。

发现C++翻来覆去,能问的就是那些问题了。然后又开始问虚函数,多态,面向对象和泛型了。不过他问我泛型的优点,我说了一通,然后问我缺点。。我还真没想到。只说是这个是编译时特性,只是觉得会把编译器的设计变得更复杂,其他确定没发现。。。因为真不知道啊。

听说STL比较熟,又让我讲STL,看源码时哪些地方对我启发最大。我说到了容器作为数据结构,函数对象作为算法的独立泛型设计,然后通过迭代器这种智能指针将它们耦合起来。这种低耦合高复用的思想在很多地方都用到了,比如Web中的MVC等。然后问我关于容器的底层实现等,红黑树的平衡方法。还有,又是内存管理,STL的内存分配器及其设计。关于STL基本把能问的都问到了。STL我也是假期才看的,真可谓是现学现卖的。

之后,又问了进程线程的问题。。问了一个判断二叉树对称的问题,以及一个脑筋急转弯!题目是,有8个杯子,5个正着放,3个倒着放,每次翻动2个,问几次可以把他们全部翻过来。。想了好久,我说翻不过来。。不过,我可以明显感受到面试快到尾声了,这是挺放松的。

后面还问了些关于链接的问题吧,反正正好都是上学期看过的,问题都不大。然后还问了我new/delete, 和 malloc/free的区别之类的。最让我不爽的是,我刷了那么多数组链表字符串相关的算法题,他一个都没问我啊。。

对了,还问过我做过些什么东西。一面也问过。这点我真的是比较亏,没什么工程经验,又没什么拿得出手的轮子。只有说说以前写的命令行的贪吃蛇,霍夫曼编码的压缩解压器,string类的实现,以及博客后台实现。最多也就几百行代码的东西,真的是自己都不好意思说,但是不说这些又没有其他东西可以说,只有厚颜无耻的说这些东西。我说这些时,他都没深入问一下,明显是觉得这些东西没什么技术含量。
三面

面完二面问什么时候出结果,告诉我说放假回来。还说如果过了还有三面。当时我整个人都快崩了啊。。一开始说好的只有两面,现在过了一二又告诉我还有三面。我在想过了三面是不是还有四面啊。在抗战假放完回来,就通知了接下来的三面。本来通知的三面是在两天后,我还打算准备准备的,结果那天下午被突袭了。。当时我还在上课,电话打过来,说是百度的,然后就开始问我问题了。。技术问得不多,主要是工作时间什么的。基本上都以为没什么问题了,朋友也都说,三面就是走走过场,二面过了一般就没问题了。当时都在想象实习生活会是如何的了。

哎。。估计是因为没有表现出足够高的热情吧,然后表现又不够机智。最终,三面给了我一个 waiting的结果,备胎待遇啊。听说结果后,郁闷了两天。这么半个月,就在准备面试,面试,等待结果,幻想未来中度过,像是一场梦一样啊!W君也说,说的是waiting,不是fail,还是有机会,还有,你才大二,还有机会之类。
最后

过了那两天后,做的百度梦也醒了。写下了新的学习计划:
算法 造轮子 机器学习/数据处理 数学建模美赛

这次面试,最大的收获, 一是得到了肯定,知道自己选择的学习方向没错,是一个值得深挖的方向。这真的太重要了,之前我什么都学,哪里都知道一点,却什么都不精。 二是,发现了自己算法和工程方面的不足,可以在之后的一年中去补上来。

然后就开始刷《算法导论》了。。兼职也找到了,也不愁没钱花了。我还有一年的,完全自主的学习时间嘛。现在学的这些东西,是一年时间,一路磕磕碰碰走过来的,走了好多弯路才找到方向。而接下来的一年,我相信我可以做得更好!以前觉得BAT只能想想,FLAG太过遥远,现在看来BAT努力努力就可以够得着了,FLAG也不是那么遥不可及嘛!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: