音视频技术壁垒高、需要懂许多知识点才能搭建起音视频系统那么具体也就是面试需要懂的这些一.C 基础相关new/delete与malloc/free的区别1. new是通过构造函数进行分配内存、delete是通过析构函数释放内存malloc是只分配原始堆内存、不初始化free是直接释放内存2. new/delete是C运算符可重载、malloc/free是C库函数3. new失败之后抛异常bad_alloc也可newnullthrow进行分配内存失败返回nullptrmalloc失败后返回NULL4.内存处理都在堆上malloc返回的内存通常满足任意基本类型的对齐要求8或16字节对齐但它不知道对象的具体对齐要求、new会按对象内存规则自动对齐5.new支持类型感知直接返回类型指针malloc无类型感知必须void*手动强转无类型安全const用法1.const用来修饰常量、可修饰整形、字符型、浮点型等且修饰初始化之后不可改变其值2.const修饰指针所指的地址const char* p时指针指向的数据不可变本身地址可以改3.const修饰指针本身char* const p时指针本身地址不可变、指向的数据可以改4.const char* const p指针和地址都不可改static修饰的类类成员与函数的区别1.static类成员属于整个类不属于单个对象必须类外初始化2.static类函数无this指针只能访问static成员不能直接调用非static成员/函数3.所有成员共享一份static成员数据什么是虚表、虚函数、虚表指针1.类有虚函数就会有虚表指针实例化2.虚表在类构造时生成虚表指针指向虚表3.含有纯虚函数的类为抽象类必须依赖子类来实现否则子类也为抽象类4.构造函数不能设置为虚函数虚表指针初始化依赖构造虚函数调用依赖虚表指针循环依赖5.override显式校验子类重写的函数签名保证多态生效overload函数与虚函数的区别1.overload重载同一作用域函数名相同参数个数/类型顺序不同返回值无关不涉及多态和虚函数无关2.override重写父子类继承虚函数函数签名完全一致实现动态多态子类加override3.无overload关键字virtual父类声明子类重写可省略virtual加override三个智能指针shared_ptr、weak_ptr、unique_ptr的用法与区别1.shared_ptr共享所有权引用计数机制计数1共享计数归0自动释放循环引用回自动泄漏2.weak_ptr弱引用不增加引用计数专门解决shared_ptr的循环引用问题3.unique_ptr独占所有权禁止拷贝只支持移动move同一时刻只能有一个指针持有资源轻量无计数如何访问weak_ptr指针指向的资源必须使用lock成员函数lock会尝试提升为shared_ptr如果资源还在返回一个有效的shared_ptr如果资源被释放则返回一个空的shared_ptr左值引用、右值引用1.左值有内存地址、可持久化的值左值引用T绑定普通左值2.右值临时值、即将销毁的值右值引用T接管临时资源3.move只是强制转换为右值引用、不实际清空变量后续原变量进入可移动、可析构的的空状态自动置为NULL4.移动语义、完美转发减少内存拷贝二.数据结构冒泡法、插入排序、快速排序、KMP匹配算法、二分法、哈希表、队列、互斥锁、条件变量是音视频生产者消费者核心、二叉树BST二叉搜索树、红黑树map和unordermap的区别1.map是有序容器底层由红黑树支持取值复杂度Ologn2.unorder_map是无序容器底层由哈希表支持取值速度O1哈希冲突会退化On高频读写优先用unorder_mapvector和list的区别1.vector是动态数组尾插快中间插入删减慢适合帧缓存随机访问O12.list是双向链表内存不连续呈节点分布任意位置增删快不支持随机访问三.操作系统操作系统用户通过用户接口与计算机进行交互的桥梁操作系统的作用1.文件管理2.提供用户接口3.资源管理4.任务调度多进程与多线程的区别1.进程创建开销大线程创建开销小2.进程通过IPC有名管道/无名管道、消息队列、信号量、共享内存、Socket套接字线程通过在同一进程内进行数据交互3.多线程安全生产者消费者模型互斥锁mutex条件变量condition_variable、线程同步四种死锁方式1.互斥解决方案将独占资源改为共享资源通过读写锁2.持有且等待解决方案一次性申请所有资源3.不可剥夺解决方案申请不到新资源时释放已持有的资源4.循环等待解决方案按顺序申请资源四.网络编程select和epoll的区别1.select最多监听1024个端口epoll可以监听端口无上限2.select需要将监听到的端口拷贝到内核空间创建fd进行读写epoll内核维护就绪列表用户态仅拿到就绪事件减少拷贝3.select需要遍历fd进行读写效率极低epoll则是事件触发LT触发/ET边缘触发不用全量遍历高并发高性能4.音视频百万连接监听分发、使用RTMP/HTTP-FLV网络拉流协议优先epollTCP与UDP的区别TCP有拥塞控制、丢包重传、字节流传输、面向连接三次握手四次挥手UDP无面向连接、不安全连接、不丢包重传、数据报、无拥塞控制五.linux命令gdb调试、ps auxgrep 进行进程查看、tail -f查看日志、sudo lsof -i1935用于查看1935端口号是否启动/或被占用、cmake和make用于配置编译文件scp hello 192.168.133.175:\tmp通过网络传输文件到目标端口指定文件下