C++面试八股文
⌘K
- 一、语言基础
- 1.1、讲一讲封装、继承、多态是什么?
- 1.2、多态的实现原理是什么?以及多态的优点(特点)?
- 1.3、final标识符的作用是什么?
- 1.4、虚函数是怎么实现的?它存放在哪里在内存的哪个区?
- 1.5、智能指针的本质是什么,它们的实现原理是什么?
- 1.6、匿名函数的本质是什么?他的优点是什么?
- 1.7、右值引用是什么,为什么要引入右值引用?
- 1.8、左值引用和指针的区别?
- 1.9、weak_ptr真的不计数?是否有计数方式,在哪分配的空间
- 1.10、malloc的内存分配的方式,有什么缺点?
- 1.11、为什么不全部使用mmap来分配内存?
- 1.12、为什么不全部都用brk
- 1.13、传入一个指针,它如何确定具体要清理多少空间呢?
- 1.14、define和const的区别是什么?
- 1.15、锁的底层原理是什么?
- 1.16、原子操作是什么?
- 1.17、class与struct的区别
- 1.18、进程之间的通信方式有哪些?
- 1.20、线程之间的通信方式有哪些?
- 1.21、介绍一下socket中的多路复用、epoll的水平和边缘触发模式?
- 1.22、类的生命周期
- 1.23、父类的构造函数和析构函数是否能为虚函数?
- 1.24、死锁是什么?死锁产生的条件,如何解决死锁?
- 1.25、描述一下面向过程和面向对象
- 1.26、++i是左值还是右值,++i和i++哪个效率更高?
- 1.27、介绍一下vector、list的底层实现原理和优缺点
- 1.28、空对象指针为什么能调用函数?
- 1.29、shared_ptr线程安全吗?
- 1.30、push_back()左值和右值的区别是什么?
- 1.31、move底层是怎么实现的?
- 1.32、完美转发的原理是什么?
- 1.33、空类中有什么函数?
- 1.34、explicit用在哪里?有什么作用?
- 1.35、成员变量初始化的顺序是什么?
- 1.36、指针占用的大小是多少?
- 1.37、野指针和内存泄漏是什么?如何避免?
- 1.38、malloc和new的区别是什么?
- 1.39、对比迭代器和指针的区别?
- 1.40、线程有哪些状态,线程锁有哪些种类?
- 1.41、解释说明一下map和unordered_map
- 1.42、vector中的push_back()和emplace_back()的区别
- 1.43、如何实现线程安全,除了加锁还有没有其他的方式?
- 1.44、vector扩容,resize和reserve的区别
- 1.45、C++中空类的大小是多少?
- 1.46、weak_ptr是怎么实现的?
- 1.47、虚函数的底层原理是什么?
- 1.48、一个函数f(int a,int b),其中a和b的地址关系是什么?
- 1.49、移动构造和拷贝构造的区别是什么?
- 1.50、哈希碰撞的处理方法
- 1.51、unordered_map的扩容过程
- 1.52、哪些函数不能被声明为虚函数?
- 1.53、如何保证类的对象只能被开辟在堆上?
- 1.54、动态链接和静态链接的区别,动态链接的原理是什么?
- 1.55、C++中怎么编译C语言代码?
- 1.56、未初始化的全局变量和初始化的全局变量放在哪里?
- 1.57、说一下内联函数及其优缺点
- 1.58、auto是怎么实现自动识别类型的?
- 1.59、map和set的区别和底层实现是什么?
- 1.60、map取值的 find,[],at方法的区别?
- 1.61、详细说一说fcntl的作用
- 1.62、讲一讲迭代器失效及其解决方法
- 1.63、编译器是如何实现重载的?
- 1.64、什么是函数调用约定?
- 1.65、使用条件变量的时候需要注意什么?
- 1.66、强制类型转换有哪几种类型?
- 1.67、类内普通成员函数可以调用类内静态变量吗
- 1.68、类内静态成员函数可以访问类内普通变量吗?
- 1.69、函数调用进行的操作?
- 1.70、make_shared函数的优点,缺点?
- 1.71、静态成员函数可以是虚函数吗?为什么?
- 1.72、什么是this指针,为什么存在this指针?
- 1.73、平衡二叉树的优缺点?
- 1.74、二叉树和平衡二叉树的区别?
- 1.75、为什么会有栈溢出,为什么栈会设置容量?
- 1.76、什么是尾递归?
- 1.77、Linux中的信号有哪些?
- 1.78、回调函数是什么?
- 1.79、C++ sizeof 和 strlen 的区别?
- 1.80、C++ 中 volatile 的作用
- 1.81、什么是大端序、小端序和网络字节序
- 1.82、C++ mutable 的作用
- 1.83、C++析构函数可以抛出异常吗?
- 二、STL(标准模板库)
- 2.1、vector扩容原理
- 2.2、vector如何释放空间
- 2.3、vector 与 list 区别
- 2.4、 vector与deque区别
- 2.5、说一说如何选择顺序容器
- 2.6、list的底层原理和常用函数
- 2.7、讲讲deque实现原理
- 2.8、说一说你了解的优先级队列?
- 2.9、什么时候用map,什么时候用hash_map?
- 2.10、说一说红黑树?
- 2.11、map 底层为什么用红黑树而不是平衡二叉树(AVL)?
- 2.12、remove 和 erase 区别
- 2.13、set的底层实现为什么不用哈希表而是用红黑树
- 2.14、hashtable的实现原理
- 2.15、数组和链表的区别
- 2.16、list 和 forward_list 的区别?
- 2.17、map 的 insert 和 emplace 区别?