百度暑期实习 一二三面
面试岗位:C++研发
面了一天,只记得一部分啦,所以可能不是很全...
上午10点
一面(40分钟):
1、说说自己的项目以及对应的性能优化,线程池的线程个数考虑,服务器QPS
2、C++的强制类型转换(static_cast, dynamic_cast, reinterpret_cast, const_cast)
3、C++多态的实现
4、虚拟内存空间分布?(stack, heap,.bss, 数据段, code段等)
5、TCP/IP四层模型与ISO七层模型
6、HTTP的状态码有哪些?
7、应用层协议有哪些?
8、Nginx源码看过吗?它的http_module有哪些处理?它的多进程模型
9、手写一个脚本,求xxx.txt第二列的平均值(用awk): cat xxx.txt |awk '{sum+=$1}END{print "Average = ", sum/NR}'
(我只写了大概,awk大概框架写出来就行)
算法题:
层序遍历(Leetcode102)
上午11点
二面(40分钟):
1、说说自己的项目
2、STL容器都是线程安全的吗?
3、vector扩容机制?emplace_back机制?
4、unordered_map的哈希表处理冲突的方式?(还有哈希冲突还有哪些其他的方式)
5、左值引用与右值引用的含义与区别?
6、移动构造与move的关系?
7、C++的构造函数和析构函数是否可以为虚函数?
8、静态数组和动态数组的区别?
9、TCP和UDP的区别,以及TCP为了可靠性传输做的事情,UDP的报头。
算法题:
合并有序链表(非递归+递归)
上午12点
三面(40分钟):
一道场景题:
作为服务端,面对一个内存占用很大(50GB)的字典(key value),如何在不影响主线程正常接受请求的情况下,以较低的复杂度进行更新字典与查找字典?并且要保证子线程能够很低的复杂度将修改的key-value传给主线程,
其中涉及到同步,互斥的相关问题;并且如何实现数据修改的一致性,即:如果是主线程查找某一key的过程中,这个key发生了修改,主线程能够得到最新的value,而不是一个老的value。
这题前前后后聊了40多分钟,感觉涉及到的技术点很多,而且比较灵活,自己回答的也不是很全面,后面还需要总结归纳一下,多考虑这种高并发下内存占用很大的场景。