C++夺命连环问
秋招进行到现在,面了有二三十次了,总结了一些C++的高频面试问题,和一些我认为非常能考察理解深度的问题,供参考。
1. C++11有什么新特性?
2. 函数有哪些常见的传参方式,有何区别?
3. 指针和引用有什么区别?
4. 指针常量和常量指针有何区别?
5. 常见的内存泄漏发生场景有哪些?
6. 常见的内存泄漏检测工具?
7. 虚拟内存和物理内存的区别?
8. 内存空间有哪些区域?分别是做什么的?
9. 段页式内存管理有何优点?
10. 说一下智能指针?
11. 内联函数是什么?和宏有何区别?它有什么优缺点? 什么情况不能内联?
12. 说一下多态的底层原理?为什么要有多态,直接静态重写不好吗?
13. C++空类的大小是多少?如果空类内含有虚函数,类的大小又是多少?
14. 讲讲内存对齐?
15. 虚函数可以是模板函数吗?
16. 虚函数可以内联吗?
17. 32位Linux系统的寻址空间是多大?进程能申请的内存有这么大吗?
18. Linux系统中进程默认栈空间是多大?如何修改?
19. Linux系统中调试崩溃问题的流程是?
20. 栈溢出一般是由哪些原因导致?
21. Static关键字有什么用?static变量修饰全局、函数内和类内变量时,分别在什么时候进行初始化?
22. 初始化列表有什么好处?哪些成员变量必须通过初始化列表初始化?
23. 什么是右值引用?说一下什么是移动语义及使用场景?
24. Malloc/free和new/delete有什么区别?
25. Vector和List有什么区别?讲一下vector动态扩展的原理?
26. Vector动态扩展时,编译器为什么不先判断一下原有空间后面的内存是否空闲,如果空闲,直接在后面的内存空间继续分配空间?(从内存池角度回答)
27. Unordered_map和map,unordered_set和set,分别有什么区别,它们的底层数据结构是什么?
28. prioriry_queue优先级队列的底层数据结构是什么?操作的时间复杂度是什么?
29. 红黑树与AVL树有什么区别?与堆有什么区别?与跳表有什么区别?
30. 如果让你用一维数组模拟一个大根堆,你怎么实现?
31. Sort()函数的排序策略是什么?用到了哪些排序方法?(快速排序、插入排序、堆排序)
32. Sort里面什么情况下会调用插入排序?它时间复杂度是N²,为什么要用它?
33. Sort里面什么情况下会调用堆排?为什么不能无脑用快排?
34. 哈希冲突了怎么办?
35. 如果用链表把冲突的节点链起来,因为这些节点的哈希值都一样,那如何区分这些节点?
36. 哈希表负载因子过大时要进行Rehash,那哈希函数要变吗?
37. 如果有几十亿个id(字符串),怎么快速判断某个id是否存在?
38. 如果要在一亿个数字里找出最大/小的K个,怎么做?
39. 类A提供了拷贝构造函数和等号赋值运算符,假设b是A的一个对象,代码:A a=b;会调用拷贝构造函数还是等号赋值函数?
40. C++编译过程分为哪几步?动态链接和静态链接的区别是?
先记这么多吧,后面再补充~