腾讯后台一面
面试时长 1h
面试官给人的感觉非常Nice,我问了面试官需不需要我开摄像头,面试官说没关系,不用了。每一个问题都是由浅入深,问到不会为止。不会的问题面试官会引导者去思考,很棒。
面试官说的最多的两句话就是:来,我给你点提示;这个问题如果不清楚,我们进入下一个。
1.自我介绍
2.介绍项目(背景、框架、难点)。介绍完一个问题没问
3.C++动态多态实现原理(虚函数指针、虚函数表,生成和初始化)
4.构造函数为什么不能是虚函数。
5.STL容器(使用场景、增删改查时间复杂度、内部原理)
6.unorder_map和map的区别(底层数据结构、有序无序、占用内存。。实在想不出来了)
7.线程安全的单例模式?饥汉模式为什么是线程安全的?饿汉模式模式怎么实现线程安全?(下面这个不是线程安全的。说的时候有多自信,被问的时候就有多难受)
SingleInstance *&SingleInstance::GetInstance() { // 这里使用了两个 if判断语句的技术称为双检锁;好处是,只有判断指针为空的时候才加锁, // 避免每次调用 GetInstance的方法都加锁,锁的开销毕竟还是有点大的。 if (m_SingleInstance == NULL) { std::unique_lock<std::mutex> lock(m_Mutex); // 加锁 if (m_SingleInstance == NULL) { m_SingleInstance = new SingleInstance(); } } return m_SingleInstance; }8.三次握手时第二次握手报文丢失怎么办?
9.四次挥手时close_wait太多,对两端的影响,怎么解决?
10.listen、accept什么时候调用?TCP处于状态?底层怎么做的?
11.四次挥手能不能变成三次?如果能?为什么?怎么做?如果不能,不用回答后面两问。
12.redis是单线程的,为什么这么快?
13.redis怎么保证数据安全的?
还有一些问题记不清了,都是网络相关的。
#面经##校招##腾讯##C++工程师#