百度2012暑期实习面经(自动化平台研发)

来源:互联网 发布:淘宝客退款佣金怎么办 编辑:程序博客网 时间:2024/04/29 01:39

 转载请注明出处:http://blog.csdn.net/zbf8441372     

昨天上午进行的笔试,昨天下午收到了通知,约了今天下午面试。职位是北京的自动化平台研发工程师(和运维部关系比较密切)。开始说是下午两点,由于我下午一点要开会,就推迟到了三点。面试地点在学校周边1.7公里开外的快捷酒店里。

     由于我拖延了一小时,觉得不好意思,于是下午两点半就提前到了约定的房间,门开着,里面是一位胖胖的面试官。他问我是几点的面试,我说是三点。于是,我以为他不是我的面试官。不过闲着也是闲着,就和他聊了起来,后来才发现,这也算是一轮面试,只是他在等别的时间段的人,我提前进去被面了。= =

     这第一面也许应该本来是第二面,聊的是简历的内容,包括其他杂七杂八的话题,哈哈。总结几点吧。

     1. 我自我介绍说了对hadoop的实践和对lucene做搜索引擎的经验,简历上也写着。于是就先聊起了hadoop。叫我描述下hadoop整套东西,原理。我就根据几个主要hadoop家族成员和Google的三驾马车说了些,并且自己用zookeeper做过分布式协调器,也在自己本本和服务器上搭建过hadoop环境。他也会具体问namenode的问题,我就说了些搭建过程中这货老出一些问题的经历。他还问HDFS文件节点,我好像自己先说64M,然后他问为什么是64M。我把zookeeper的1M节点记混了,就在64M和1M间说不准了,他就问我应该设计几M好,为什么,可以改变吗等的问题。从效率,性能等考虑,我们就这一问题聊了几分钟。之后还具体聊了zookeeper相关的事,我就我所知的一些原理和自己的zookeeper伪集群说了一遍。

     2. 好像还和我聊了我简历上关于网站开发PM的经历,好像谈到了现在做的搜索引擎的后台技术struts,ajax,jquery等等,不过J2EE的东西我不敢扯开去,一是觉得职位无关,二是怕被人家鄙视,你丫的不就做网站吗。

    3. 简历上提到了NoSQL,他就问了我。我说了些我熟悉的NoSQL。他问我NoSQL存什么的,能干嘛。我就说存非结构化数据,不同的NoSQL存储不同层次级别的数据,面向不同类型的计算要求和存储需求,就没多说了。

    4. 他问我为什么报这个职位,也好像是我自己主动说的,我问了运维部的事。之后他向我解释了运维开发工程师和自动化平台研发工程师的区别和工作,我就我理解的和他聊了会。他问我觉得自己适合哪个职位。我说自动化平台研发工程师。因为运维开发的话和硬件,系统打交道更多,DBA什么的职责也包括进去了。

    5. 聊了在校成绩,学习方面的事情。这时候就扯开了,他也很随和地鼓励说都是过来人,blablabla。应试什么的,blablabla。

  

     快三点了,我就被安排到另一间房间去接受本来三点的那位面试官的面试。直接说重点吧。

    1. 考官熟悉的语言是C和C++,我的语言是java,所以他说语言直接过了。和他聊得最多的事搜索优化的问题。这个问题来自我现在的搜索引擎的demo里索引量,昨天晚上问了小马哥那边索引的情况,建了一个10G的索引,lucene还是完全能承受的,于是我就把这也说了。当然在百度眼里,真是小的不能再小了。于是开始了索引查询优化的问题。先让我处理10T的索引,然后是给我10台,100台服务器,怎么架构,怎么优化,怎么查询,怎么分配,层层地问。我的回答包括:将10T索引分布式存在10台机器,索引不冗余的情况怎么怎么样,索引适当冗余存放怎么怎么样;搜索任务部署的时候,用zookeeper对集群负载做监控,怎么监控,怎么部署一个query,结果合并什么的;怎么给索引做备份,将服务器分批存几套索引,交错查询之类的(很多性能的问题我还没来得及遇到,也可能完全没有机会遇到,只能凭我理解一步步畅想);zookeeper怎么搭建,怎么选择,我还新想了个二层的zookeeper协调器,其实就是加master的热部署服务器,他就问我如果master当掉会怎么样,我说集群就挂了(看他眼神难道集群没事?),然后说master对follower的意义,自圆了下。问题讨论了很久,最后他说,你在简历上说hadoop,你怎么没在搜索方案里提到hadoop?我确实只熟悉zookeeper,其他的看过,印象不深,来之前也没好好看,就用HDFS扯了下,应该不算是个回答。

    2. 比较好的是最近这段时间都在做搜索,昨天半夜正好准备了下lucene in action 的第11章,性能优化。所以在上面的问答中,我一一列举了在改变搜索架构之前,怎么样做到性能最好,包括硬件之类的。多线程搜索啊,维护一个searcher池避免开销啊,运用NoSQL存取减少I/O开销啊(我没查过,但是我想提出这样的一种不同于文件系统的读取方式)等等的优化方案。他告诉我,lucene永远是个单机的东西,设计之初就是如此。我想想也是,lucene的别的分布式方式其实都是有限的。

    3. 在谈职位的时候,我之前有从第一位面试官那听到些,就和他也聊了会。之前的面试官也告诉我百度搜索的一些情况,那也是我问的。

    4. 聊数据结构的时候,问了我排序有哪些,我就说了一些。他说你说英文的啊,我说我上课的时候教的是英文,嘻嘻。做了一个算法题目,可能是他由排序联想到的,因为聊到了真假随机数的问题,题目很简单吧,可能是因为我是个偏工程的选手。我刚开始是脑子里空空的,毕竟聊了那么久,思维在工程上,但是一拿笔,写下public,思路就来了= 。=前前后后重写了三次,我写完,他读完,(java的一些数据结构接口他是不熟的),然后指出问题,我提出修改方案,说到本质处他会说good,我再改,过程还是很棒的体验,很久没有这样的感觉了。之后没有时间了,因为之前聊的多,就没有再做题了。

    5. 最后问我还想了解什么。我就问了一些基本素质的问题。他说本科生在他们看来就一张白纸,blablabla,不怎么看本科生项目经历的,很多是没有项目经历,如果是研究生,blablabla。然后我还是追问了之前索引优化的问题,希望在我之后的搜索工作中得到提点。他简单说了些,好像也不想再深入说了,百度十几年前可能用过lucene,无非就是正排转倒排。他说lucene永远是个单机的东西,设计之初就是如此,他们的设计是先有一个能做分布式搜索的集群,再进行考虑建索引等的其他工作。还提到了每个服务器上自己做正排转倒排任务,我想多了解下,他说想法很多的嘛,笑了笑也不深聊了。一个礼拜内出是否三面的结果。

    我还是阐明了我对搜索和hadoop的兴趣,不过这个职位并不是搞这个的。貌似软件开发有可能会有这个职位?但是,运维的话是了解掌握整套服务的,开发完的服务,整条流水线吧,都是丢给运维来保障的,差不多这个意思。运维部是我内心真正想学到知识的场所,这是一个美丽的梦想啊。

 

   刚打电话来,进三面了,明天再战。