Template
This is a template for C++ blog
【收藏】知识库
收藏的一些很有用/硬核的资源/文章
操作系统
阻塞IO和非阻塞IO 阻塞的文件描述符为阻塞IO 非阻塞的文件描述符为非阻塞IO 同步IO和异步IO 同步IO向应用程序通知的是IO就绪事件。要求用户代码自行执行读写操作,将数据从内核缓冲区读入用户缓冲区。 异步IO向应用程序通知的是IO完成事件 。由内核来执行IO读写操作。在linux环境下,aio.h头文件定义的函数提供了对异步IO的支持。 事件处理模式 reactor 同步IO模型通常用于实现reactor模式。要求主线程只负责监听文件描述符是否有事件发生,有的话就立即将该事件通知工作线程。 proactor 异步IO模型通常用于实现proactor模式。也可以用同步IO...
计算机网络
TCP头部 16位源端口 16位目的端口 32位序号 32位确认序号 4位TCP头部长度 单位为4字节 6位标志位 16位滑动窗口 16位校验和 16位紧急指针 注意:TCP的包没有IP地址,只有源端口和目的端口。一个TCP连接需要4个元组来表示一个连接。(源端口,目的端口,源IP,目的IP) 为什么建立连接需要3次握手 主要是初始化序列号和协商最大报文段长度。 粘包问题 udp不存在粘包的问题,因为udp是个数据包协议,也就是两段数据间有界限的。要么收不到,要么全收。 产生粘包的原因:nagle算法为了改善网络传输效率,延迟发送数据。应用层由于某些原因不能及时取出TCP的数据,导...
C++语言
逻辑用语千万条,第一首先往里套。 首先,其次,然后,最后。 第一,第二,第三,第四。 书籍 《C++ primer》 第五版 《后台开发》 徐晓鑫 《linux高性能服务器编程》 游双 《redis设计与实现》黄健宏 《muduo库》陈硕 static static的使用可以分为两类,一类是用在普通变量和函数上,另一类是用在类中。 普通变量分为全局变量和局部变量。声明为静态全局变量是在全局区分配内存,并且只在当前文件可见,在文件之外是不可见的。其他文件定义同名变量不会发生冲突。变量的值只在第一次执行时进行初始化。声明为静态局部变量时与全局变量类似,只是作用域为局部作用域。 静态...
数据库
B+树 具有n个关键字的节点含有n个分支。而在B树中,具有n个关键字的节点含有n+1个节点。 B+树的叶子节点包含了所有关键字,并且包含信息。 B+树非叶子节点只起索引作用,不存数据。 B+数在叶子节点使用指针将前后磁盘块中的索引连接起来,形成一个线性链表,方便范围查询。 什么是索引 索引是数据表中对字段进行排序的一种数据结构。常用的索引有 B树 哈希索引 全文索引 Rtree索引 AVL树,B树,B+树,红黑树,哈希表。 哈希表和B树不利于范围查找。红黑树在数据量大的时候性能会下降。 **聚集索引:**数据和索引在一起的。 **非聚集索引:**索引文件和数据文件是分离的。 联合索引...
数据结构
单例模式 1234567891011121314151617181920212223class A{ public: static A* getInstance(); static A* instance; private: A(); ~A();};A* A::instance = nullptr;//内存读写reorder不安全 导致双检查锁失效//先分配内存 再执行构造器 最后返回给实例//编译器的优化 A* A::getInstance(){ //读没有问题 写就有问题 //锁前检查 锁的粒度过大 锁后检查安全性 if(instanc...






