下午两点面试,面试官迟到了一会,面试官人很好,整体面试经历很不错,但是我人太紧张了,基础知识掌握的深度不够,没有深挖,
是做音视频的底层相关的,
实习要求只要每天打卡够九个小时就行
智能指针有哪些?
auto_ptr shared_ptr weak_ptr unique_ptr
shared_ptr大概怎么实现的?
有一个指针和一个引用计数的指针,每次拷贝和复制都会使引用计数加一,析构时减一,如果引用计数为零,那么就证明没人使用这块内存,可以成功析构。
shared_ptr可以实现一起读安全,但是一起写不安全
shared_ptr也会有内存泄漏,当两个类的对象里面都有shared_ptr指针,且两个对象互相引用,那么引用计数都不会下降
智能指针的作用是什么
防止内存泄漏
什么叫内存泄漏
就是因为失误导致的使用完某块内存之后,忘记释放掉,导致失去对它的控制。
lambda表达式
左值右值
右值引用的意义在哪? 为什么右值引用可以有这个意义? 是怎么实现的
右值引用其实就是在栈上在开辟一块空间用来放右值引用指向的值,然后再把地址传给右值引用的对象,相当于把原来的将要消失的对象寿命强行延长到试用结束
vector和数组的区别
vector可变大小,数组不行 vector是一段连续的内存
vector内部有一个size()和capacity()?
size()是已使用的大小,capacity()是最大容量
每次都是加倍扩容
resize()是变size的大小,如果resize(len)len>capacity? 那么size和capacity都等于len
reserve是变capacity的大小 如果len<capacity则什么也不变 否则capacity变为len
list指向的是一块块不连续的空间? ? ?环状的双向链表
插入和删除元素很方便
deque
deque是一个双端开口的线性连续空间,其内部为分段连续的空间组成,随时可以加一段新的空间并链接(deque的迭代器比vector复杂,所以尽量使用vector,为了提高效率,可以在对deque排序的时候把deque复制到vector中进行排序最后再复制回deque)
deque是由一段一段的定量连续空间组成的,一旦有必要在其头部或者尾部增加字段,就配置一段定量连续空间,串接在deque的头或者尾
好处:避免和vector一样扩容时申请空间,复制,释放原空间,维护着整体连续的假象,并提供随机访问的接口
坏处:迭代器很复杂
一个map存放指针,每个指针都指向一片线性连续空间,成为缓存区
stack&queue
底层以deque为架构
heap
priority_queue
无迭代器
map&&set
共同的:都是C++的关联容器? 通过提供的接口对里面的元素进行访问,底层都是红黑树
不同的:? set是判断一个元素是否在里面,map是映射,把一个值映射成另一个值(字典)
查找一个树:O(logn)
缺点:插入数值时,需要调整红黑树
map&&unordered map
底层:map基于红黑树,元素的排列是有序的
????????unordered_map基于哈希表,元素的排列顺序时杂乱无序的
map:优:有序性,增删改查都是logn 但是缺点也是增删改查为logn
unordered_map 优点:增删查 时间复杂度为O(1)?
? ? ?缺点:内部基于哈希表,以(key,value)形式储存,空间占用率高
? ? ? ? ? ? ?增删改时间复杂度不稳定平均为O(1),取决于哈希函数
UDP/TCP
udp和TCP的区别在哪,
tcp怎么实现的稳定链接(主要ACK)
能不能用udp构建tcp连接
http1.0 1.1 2.0区别在哪
H264结构是什么
gop的作用
SPS PPS ESI
STL几个组件
fw啊? ?小吴,答得一坨