百度一面也是一个面试官面的,面的很详细,有项目的问题,有具体的问题,还有一些在电脑上直接编码的问题,这些题目有些作对了,也有做的不全面的,但是面试官很好,给我较好的评价,让我准备下二面。下面就直接说说二面,稍有点难受,题目和回答如下,最后的结果是没有通过。
二面是另一个面试官主面,开始面试官就说今天很忙,事多,让我等他一会,我当然没有问题了,因为我专门请假来面试。一会,面试官打开电脑,查看了我的简历,开始问问题,所有问题和我的回答罗列如下。
1 问:他说计算机有堆,栈,静态存储区等存储方式,问我为什么要这么设计?
答:这个问题有点懵,从来都没想过为啥要这么划分,实在是想不出来,回答说对内存区进行这样功能划分,目的就是为了更好的为应用程序提供服务,为了内存方便管理,然后我就说了下堆栈和静态存储区的各自的特点。这个题答的不好。
2 问:问我做过最好的最有成就感的项目是哪个?
答:之前我们项目中采用redis进行统计存储,达不到性能要求,我开发了一个采用红黑树+堆的数据结构存储,性能提高了一个数量级。他听完之后,就让我再说一个,我又说了一个曾经对消息队列的封装项目。听完之后,他又问,还有吗?我就说其他的都是正常的业务项目,就是完成功能。
3 问:现在有10亿个数字,求他们的中位数,时间和空间复杂度要求最小?
答:用bitmap来实现,用一块大小512M内存,把这些数字遍历一遍,将相应位置置为1。然后设置两个下标,一个在开始位置,一个在末尾位置,一个增加,一个减少,移动的步伐不是完全相同的,而是以碰到值为1的次数为步伐。
这样,最后两个下标相同的时候就是中位数。时间负责度是0(N),空间负责度是512M,也就是0(1)。
4 问:有两个1t的文件,里面存放在url, 怎样求出里面相交的那些URL,就是在两个文件内同时存在的URL,时间复杂度要求最小。
答:把两个文件采用hash分别拆分到10000个文件中,分别记为A1~A10000, B1~B10000, 这样相交的URL就只能出现在配对的文件中,比如A1,B1;A2,B2, A10000, B10000。把A1的数据存放到一个hash表里H1,挨个遍历B1,如果hash值在H1中,则表示此URL同时出现在A1,B1中,即为所求。如此把所有文件都遍历一遍。即可求得所有相交的URL。时间负责度是O(N)。
5 问:采用TCP协议进行通信,什么情况下会丢包?
答:1 网络联通性不好的时候, 2 个人代码逻辑,比如recv的时候,没有判断是否接收完毕。 他还问还有其他情况吗,我说暂时没想到太多。
6 答:两个单项链表求第一个相交节点?
答:先求两个链表各自的长度,然后将长度较长的链表移动长度之差步,然后同时移动指针并比较,如果相同,则为第一个相交节点。
7 问: 进程间的通信方式有哪些?
答:一般有socket,unixsocket,消息队列,共享内存,管道,其他消息中间件,比如redis,memcache,数据库或者文件。
8 问:项目中有用过web方面的知识吗?
答:项目中很多服务需要提供web service,比如曾经用过python的tornado,还有ruby的sinatra等。
最后他问我有啥想问的没,其实我最关心的是能不能通过面试,所以我问了一下我的表现他认为是怎样的?一开口回答我就感觉不妙,因为他稍微犹豫了一下,然后似乎思考了下,这个时候我又补充了下,我说问这个问题主要目的是想知道他们的真实想法,不管是能否通过,听到面试官说出不足之处,自己以后也好针对性的提高。 然后他说我基础还不错,毕竟工作多年了,有些题目都做对了,但是我的表达不是很清楚,没能很好的理解面试官问这个题目的主要目的是什么,没能一下子说到点子上。都这么说了,我也就无话可说了,对方友好的把俺送出了百度,然后就没有然后了。