C++ 虚函数
1.在有继承关系的父子类中,构建和析构一个子类对象时,父子构造函数和析构函数的执行顺序分别是怎样的?
2.在有继承关系的类体系中,父类的构造函数和析构函数一定要申明为 virtual 吗?如果不申明为 virtual 会怎样?
3.什么是 C++ 多态?C++ 多态的实现原理是什么?
4.什么是虚函数?虚函数的实现原理是什么?
5.什么是虚表?虚表的内存结构布局如何?虚表的第一项(或第二项)是什么?
6.菱形继承(类D同时继承B和C,B和C又继承自A)体系下,虚表在各个类中的布局如何?如果类B和类C同时有一个成员变了m,m如何在D对象的内存地址上分布的?是否会相互覆盖?
参考:c++虚继承_baidu_16370559的博客-CSDN博客_虚继承
C++11/14/17
参考:c++ 11 新特性讲解大全_baidu_16370559的博客-CSDN博客_c++11到23新特性
1.统一的类成员初始化语法与 std::initializer_list<T>
2.注解标签(attributes)
3.final/override/=default/=delete 语法
4.auto 关键字
5.Range-based 循环语法
6.结构化绑定
7.stl 容器新增的实用方法
8.std::thread
9.线程局部存储 thread_local
10.线程同步原语 std::mutex、std::condition_variable 等
11.原子操作类
12.智能指针类
13.std::bind/std::function
算法与数据结构基础
1.排序(常考的排序按频率考排序为:快速排序 > 冒泡排序 > 归并排序 > 桶排序)
2.二分查找
3.链表
如链表的查找、定位、反转、连接等等。
4.队列与栈
栈一般对于基础要求高的面试,会结合函数调用实现来问。即函数如何实现的,包括函数的调用的几种常见调用方式、参数的入栈顺序、内存栈在地址从高向低扩展、栈帧指针和栈顶指针的位置、函数内局部变量在栈中的内存分布、函数调用结束后,调用者和被调用者谁和如何清理栈等等。
哈希表
有哈希冲突的检测、让面试者写一个哈希插入函数等等
树
说出红黑树的概念、左旋右旋的方式、分析出查找和插入的平均算法复杂度和最好最坏时的算法复杂度
B树一般不会直接问,问的最多的形式是通过问 MySQL 索引实现原理
多线程开发
知道何种场合下需要新建新的线程、线程如何创建和等待、线程与进程的关系、线程局部存储(TLS 或者叫 thread local)、多线程访问资源产生竞态的原因和解决方案等等、熟练使用所在操作系统平台提供的线程同步的各种原语。
网络编程
如 select 函数的用法,非阻塞 connect 函数的写法,epoll 的水平和边缘模式、阻塞socket与非阻塞socket的区别、send/recv函数的返回值情形、reuse_addr选项等等。Windows 平台可能还会问 WSAEventSelect 和 WSAAsyncSelect 函数的用法、完成端口(IOCP模型)。
- nagle算法;
- keepalive选项;
- Linger选项;
- 对于某一端出现大量CLOSE_WAIT 或者 TIME_WAIT如何解决;
- 通讯协议如何设计或如何解决数据包的粘包与分片问题;
- 心跳机制如何设计;(可能不会直接问问题本身,如问如何检查死链)
- 断线重连机制如何设计;
- 对 IO Multiplexing 技术的理解;
- 收发数据包正确的方式,收发缓冲区如何设计;
- 优雅关闭;
- 定时器如何设计;
- epoll 的实现原理。