百度电面小结
2011-06-16 00:42
现在确定了一个本地的面试,但是还是想尝试一下其他的,主要是为了锻炼自己,多争取写机会。但是这段时间,过多的机会让我很疲惫,我想静下来,有个实习机会就知足吧。好好做这个实习就行。
百度就工作机会来说它是很好的。5 月底的时候在豆瓣网上看到有个人发布招实习生的消息,留了个邮箱,我就给这个邮箱发了个求职信,附带自己的简历,其实自己的简历很烂。但是由于这种方式,过了几天这个邮箱的主人给我打来电话,让我在百度 hr 网站里把这个部门的职位选了,然后把简历号告诉了他。他说已经帮我内推。之后百度有个 hr 打来电话安排电面,把时间定在周四下午。但是到了周四并没有打来电话,过后一个百度的人打来电话说电面安排在端午节后的第一个工作日,也就是周二。
端午节期间,学校的一个校友,是百度一个部门的经理,他来学校有个座谈会,之前也发过简历,他说有内推的实习生机会。我也发了简历,但是没有通过筛选。我有些不解,就第一次霸王面,想知道简历有哪些不足。面试还算可以,和学长有所交流。
周二的时候我因为家里有事就做火车回家了,下午时候百度的那个人打来电话,开始了电面,但是在火车上,不断的过隧道,手机信号特别不好。就 4 分钟,就终止了电面,只是简单的说了说我研究生做的什么,自我介绍一下。我后来打了电话,道了歉,并把电面时间再次推迟到这个周一。
我从家回来后,周一并没有收到电话,之前也想着是可能不会再打来电话了。但是周二下午还是那个人打来了电话,说 4 点电面。不一会,那个学长发来消息,问我之前有没有申请百度其他部门的职位,我把这个告诉了他。他说只能一次面试一个职位。所以他部门的电面机会要排在这个部门的之后,只有这个部门的电面 fail 了,才能再次有他部门的机会。百度避免不同部门之间调换。我想学长表示了我挺喜欢他部门那个职位的。但是没办法,只能先接受之前的这个部门的电面。
4 点 半的时候还是那个人打来的电话,开始了电话面试。
具体哪些问题我也记不清了,只能想多少说多少。
一开始时问我之前在 IBM 的一个部门实习,都做了什么,干了什么工作,参与了哪些系统实施。我大概描述了一下。
然后问我研究生阶段做了什么,介绍了一下研究方向,与信息检索的区别,所作的工作有哪些结果,分别说了一下,也没有太大的细问。
说到信息检索,就问道搜索引擎中的网络爬虫。这方面的东西我只知道大概,具体的细节不了解。我可能都不能理解他问的问题。又问到怎样避免相同的 url。我说用哈希、失效。
问 url 不同参数怎么处理?我说删除不同的参数,取前面相同的,这个我一点都不知道,他问怎么删,答 可以用聚类的方式
又提到 url 可以深度搜索、广度搜索
后说到动态网页
不同网页相同的部门与不同的部门,怎样去重。我说聚类。具体也不了解。
然后说到对搜索引擎,只是了解一个大的框架,从网络爬虫、倒排索引、查询模块、结果排序、呈现。
又问到倒排索引,如果一个词在很多文档中都有出现,如何办?我可能还是没有理解他说的意思,或者说我根本就不懂搜索引擎。我就说利用词表,但是词表是必须的,所以这个说法根本不成立。关于怎样优化倒排索引,具体我也不太清楚。曾经读过信息检索方面的书,但是并没有深入。
这块的问题,我回答的很差劲,基本上不能通过。
然后问了 C++ 的问题。说明一下虚指针和虚函数表。我就说了一下 C++ 的对象模型,多态,为什么要有多态,举例结合设计模式,虚析构函数,资源丢失。C++ 的问题基本上集中在这方面。
然后又了海量数据处理的问题。他说的是有 50 亿个 32 位的整型数,如何找到重复出现的数。我一开始听成 51 个数了,就直接说用排序,让后遍历,O(NlogN)。又说可以用 hash,由于理解成 51 个数,在 hash 讨论了很久,等发现是 50 亿个数的时候,才发现刚才是多么可笑。然后想了一下,说用位图,开辟一个 2^32 bit 的空间,这样只需占用 512 MB 的内存大小即可。每个待检测的数可以用作 bit 的索引。这个方面是可行的。
然后又问了个用 1 亿个数,找到最大的 1 万个数,我说最直观的方面是排序,最大的 1 万个。当然这种方面不好,造成不必要的排序。就说了可以利用快排 partition 解决。还有另一种方面利用最小堆,遍历所有的数,时间复杂度为 O(NlogM)。这个也是可行的。
之后又问了个设计问题,关于数据结构的。说 vs 中的自动提示功能或者 VA 插件或者 baidu 的 suggestion 如何实现的。我先是说到用排序二叉树、平衡二叉树,但是他并不满意,后说直接一个字符串数组,然后二分查找,还是不行。他希望是更快的速度,只能是映射的方法,采用 hash。停滞了一大会。说可以针对每个函数的前缀字符串建立 hash,这样可以快速的找到相应的提示结果。但是需要做预处理,用空间换时间。
后又问了个网络的问题,TCP 中的三次握手,我描述了一下,SYN、ACK、序号。他问序号是怎样产生的,我还是没能理解他的意思,就说用加 1 的方式。应该是滑动窗口序号随机生成,然后在接收方加 1。
总共大概是这些问题。然后让我问问题,我就问了下,实习生是不是都有 mentor 带,他说有的。然后问了下是不是和正式员工都有培训,也得到肯定的回答。
基本上是这些内容,电面 54 分钟 39 秒。
电面后,我自我感觉挺好,这是昨天下午电面的。我今天一天还是自我感觉挺好的。但是刚刚回顾了上面写的内容,尤其是前面关于搜索引擎方面的问题回答简直是一塌糊涂。其他自己对自己的感觉与实际相差太大了。
今天中午的时候,学长发来消息说昨天的电面还可以,评价也不错。基本上算是通过了这个电面。但是现在也没有正式的通知。另外加之我刚才的回顾,我感觉自己的表现实在不好。只能是当做一次学习的经历了。
总结一下:
这个电面问题的问题还是很广泛而且深入,从实习经历、研究课题到搜索引擎(网络爬虫、倒排索引)、C++、算法(海量数据处理)、数据结构(功能的设计和实现)、网络技术。
各个方面的知识都需要有个深入的学习和理解。要有自己的领悟和观点。真正是懂得了这些东西。
理解面试官问的问题很重要,而这个前提就是你对这个领域有深入的学习和思考。否则,就当然不能理解面试官问的问题,这样就造成答非所问,就闹出笑话,基本上面试就会失败。
心态还是要标准,面试难免不会紧张,但是面试是一个交流和沟通的过程。应该专注在与面试官讨论问题分析问题上,其他的不需要多想。在解决问题的时候,思维应该开放一些,避免因为害怕思路短路了。尽量表现出积极解决问题的决心,不要被问题吓到或者放弃。
以后的学习中,要知道学习什么和学习的程度。首先要有一个学习的方向,知道学习哪些内容。然后将这些东西好好掌握。做到深入理解并且有自己的领悟和看法。
其实什么都是公平的,今天的付出会换来明天的收获,今天的虚度会换来明天的损失。
珍惜时间,明确方向,深入学习。把现在做好,严格律己。