粘包这个问题的根因是由于开发人员没有正确理解 TCP 面向字节流的数据传输方式,本身并不是 TCP 的问题,是开发者的问题。
TCP 不管发送端要发什么,都基于字节流把数据发到接收端。这个字节流里可能包含上一次想要发的数据的部分信息。接收端根据需要在消息里加上识别消息边界的信息。不加就可能出现粘包问题。
TCP 粘包跟Nagle算法有关系,但关闭 Nagle 算法并不解决粘包问题。
UDP 是基于数据报的传输协议,不会有粘包问题。
IP 层也切片,但是因为不关心消息里有啥,因此有不会有粘包问题。
TCP 发送端可以发 10 次字节流数据,接收端可以分 100 次去取;UDP 发送端发了 10 次数据报,那接收端就要在 10 次收完。
https://segmentfault.com/a/1190000039691657
粘包其实是由于使用者无法正确区分消息边界导致的一个问
RTMP基础:
- Message被切割成一个或多个Chunk,然后在网络上进行发送。默认的Chunk Size是128字节
https://segmentfault.com/a/1190000018582522
rtmp://192.168.23.152/live/movie 的 movie 是这次拉流的 stream。
握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。
当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。
当客户端和服务器分别收到S2和C2后,握手完成。
https://www.nowcoder.com/ta/review-c/review?page=280
牛客网几百道题合集
小根堆的特点:
堆是完全二叉树。
i是,2i+1, 2i+2是左右孩子指针
① array[i] <= array[2i + 1] 且 array[i] <= array[2i + 2]; 称为小根堆;
② array[i] >= array[2i + 1] 且 array[i] >= array[2i + 2]; 称为大根堆;
快排最差n2,倒序时。
稳定排序:基数,冒泡,插入排,归并
hash冲突解决办法:链地址法,链表存哈希冲突的关键字。建公共溢出区。函数获得一个值,值冲突了。
Hi=(H(key)+di)% m i=1,2,…,n
其中H(key)为哈希函数,m 为表长,di称为增量序列。
单向链表通过顺序,读都从头开始。
加密方法:
- 单向加密,MD5, SHA,输入一样,输出一定相同。
- 对称加密,加密解密同一密钥
- 非对称加密,公钥私钥,私钥加密,公钥解密。
LRU最近最少使用,历史访问数据淘汰,
工厂模式:代码复用,更改容易
单例模式:只初始化一次,全局的静态变量或定义全局的指针。
红黑树——右AVL平衡二叉树而来,
const是可以修改的!常量的是指针,常量的是变量。
cppcheck 检查内存泄露
RAII,资源获取初始化一种方法,构造函数完成资源分配,析构函数释放。防止资源泄漏。
多态依赖虚函数,虚函数表普通类没有,会占内存。
KMP算法又next数组,根据查找的子串生成,前缀
P2P点对点通信中UDP打洞。知道对方IP,直接连对方。
进程调度策略:先来先服务,时间片轮转,——非抢占式
短作业优先,响应比最高
设立优先级的队列
中断是什么?CPU暂停正在执行的程序,转而执行中断子程序。