1、笔试(手撕代码)
两道题,半小时。
1)单字符串压缩 :
输入:ABBBCCD , 输出AB3C2D
2)多字符串压缩
输入:AABCABCD,输出A(ABC)2D(暴力写了一半,时间到了)
2、一面
0)自我介绍
1)笔试代码交给面试官。(我介绍了自己代码的思路)
2)多态,多态的实现,派生类虚表的布局是怎样的(虚表布局不太清楚)
3)模板类了解吗?实现一个unique_list容器(插入操作)(手撕,借助vector实现的)
4)STL的使用,哪些容器用的比较多,介绍一下
5)vector容器的扩容
6)n个元素插入一个空的vector对象里面,时间复杂度是多少?O(N)(白扯了半天,在面试官的一再提醒下,才算清执行多少次复制操作)。
7)(最大或最小)堆了解吗?给你一个无序数组,怎么调整成一个堆,时间复杂度是多少(O(N))。我问能用优先队列吗?ans:笑着说,当然不能。
8)在一个堆上插入一个元素,怎么调整,时间复杂度多少(O(LogN)
9)问你一下网络编程吧,介绍一下滑动窗口机制和作用(流量控制和拥塞控制)
10)介绍一下select()和epoll()区别(1.文件描述符的限制;2.检查机制;3.fd在内核和用户进程之间的拷贝)
11)了解操作系统吗?介绍一下LRU。想一下用什么数据结构实现LRU比较好。(先说链表,想了一下还是堆比较好)
12)介绍一下操作系统中的锁(互斥锁,读写锁)
13)只有互斥锁,如何实现读写锁?(纠结了老半天,面试官提醒了好半天,设置读写标志位)
14)图形学了解吗?(不)
15)介绍一下红黑树
16)用的哪个版本的C++?C++11了解多少?
17)还有什么问题吗?(我问,下一面面什么?不告诉我)面试官是挺年轻的小哥哥,态度也挺好,各种提示,面试完让我去休息区等二面通知。
3、二面(基本照着简历问,问了东西比较深,开放性问题比较多,有点懵)
0)自我介绍
1)说说你比较有成就的一个项目(介绍了京东的《GOC城市物流运输车辆智能调度》的比赛)
2)你对STL了解吗?是通过读源码吗(STL源码剖析)?通过这本书,学到了什么?
3)说说你最擅长的三个方面
4)B+、B-树了解吗?(不太了解,知道avl树和红黑树)
5)什么时候读的UNIX网络编程和Redis设计与实现?
6)Redis事务支持到什么程度(不会)
7)Redis的持久化?(RDB和AOF)。RDB怎么实现的?
8)读Redis的源码了吗?(读了一部分)
9)主从服务器如何同步?如何发现主服务器掉线?谁来发现?如何实现?哪个服务器来实现?(????懵)
10)主服务器故障,在从服务器中如何选举一个新的主服务器?(a:从服务器直接向邻居拉选票;q:会出现死锁,怎么解决?a:发送的数据包带时间戳;q:时钟不同步呢?a:那就根据各个从服务器的数据状态。)
11)设计一个分布式邮件系统,包括一对一发送和群发功能?(面试官递过来了纸和笔,慌的一批)
12)1g数据的文本文件,不知道行数,每行都是一个整数,求和?可以使用电脑一台,4核。(ans:哈希成四份文件?ques:效果可能更差,再想想。... 懵)
13)求和的那题。 比较耗时的是那部分?(ans:字符串转为整数。ques:嗯,不是,I/O最耗时,再想想?...继续懵)
14)设计模式了解哪些?(Reactor、Observer)
15)C++11了解多少?
16)有没有经历过比较大的打击?
17)职业规划?
18)薪资待遇?
19)有没有收到其他offer?
20)还有什么问题吗?简历留下,面试结束。这周或下周给结果。等消息吧。
可能还有其他问题,记不太清楚了?