C语言中struct 和union的区别
struct中的每个数据成员有独立的存储空间
struct可以通过最后的数组标识符产生柔性数组
union 中的所有数据成员共享同一个存储空间
union的使用会受到系统大小端的影响
数组和链表区别
1、数组占内存中一块连续的区域。 链表在内存中可以存在任何地方,不要求连续。
2、数组需要预留空间,使用前要先申请占内存的大小,可能会浪费内存空间。链表内存利用率高,不会浪费内存。
3、数组插入数据和删除数据效率低。链表高。
4、数组随机读取效率很高。链表查找效率低。
5、数组不利于扩展,数组定义的空间不够时要重新定义数组。链表大小没有固定,拓展很灵活。
栈和队列区别
相关排序算法复杂度比较
C++11的新特性(语法改进和标准库扩充)
1、语法的改进
(1)统一的初始化方法
(2)成员变量默认初始化
(3)auto关键字 用于定义变量,编译器可以自动判断的类型(前提:定义一个变量时对其进行初始化)
(4)decltype 求表达式的类型
(5)智能指针 shared_ptr
(6)空指针 nullptr(原来NULL)
(7)基于范围的for循环
(8)右值引用和move语义 让程序员有意识减少进行深拷贝操作
2、标准库扩充(往STL里新加进一些模板类,比较好用)
(9)无序容器(哈希表) 用法和功能同map一模一样,区别在于哈希表的效率更高
(10)正则表达式 可以认为正则表达式实质上是一个字符串,该字符串描述了一种特定模式的字符串
(11)Lambda表达式
STL之vector相关
vector的emplace_back和push_back 区别
push_back利用拷贝构造函数复制目标值,往vector中添加新的元素;emplace_back直接在目标位置上生成对象,直接原地生成效率较高。尽量用emplace_back替换push_back。
vector 扩容为什么要以1.5倍或者2倍扩容?
1、采用成倍方式扩容,可以保证常数的时间复杂度,而增加指定大小的容量只能达到O(n)的时间复杂度,因此,使用成倍的方式扩容更高效。
2、使用 k=2 增长因子,那么之前分配的内存空间不可能被使用。这样对于缓存并不友好。当 k =1.5 时,在几次扩展以后,可以重用之前的内存空间。
YUV和RGB
https://www.usbzh.com/article/detail-214.html
ffmpeg的解码函数,过程
进程线程解释
视频传输协议
RTMP——Real Time Messaging Protocol(实时消息传输协议)
RTSP(Real Time Streaming Protocol)
RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或者RTP完成数据传输,目前市场上大多数采用RTP来传输媒体数据。
HTTP Live Streaming(缩写是HLS)
一个由苹果公司提出的基于Http协议的的流媒体网络传输协议。