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、二面(基本照着简历问,问了东西比较深,开放性问