树之B+树
B+树是B树的变种,有着比B树更高的查询效率。 B+树的特性 B+树跟B树不同B+树的非叶子节点不保存关键字记录的指针,只进行数据索引,这样使得B+树每个非叶子节点所能保存的关键字大大增加; B+树叶子节点保存了父节点的所有关键字记录的指针,所有数据地址必须要到叶子节点才能获取到。所以每次数据查询的…
树之B树
B树也称B-树,它是一棵多路平衡查找树,B树不要和二叉树混淆,在计算机科学中,B树是一种自平衡树数据结构,它维护有序数据并允许以对数时间进行搜索,顺序访问,插入和删除。B树是二叉搜索树的一般化,因为节点可以有两个以上的子节点。与其他自平衡二进制搜索树不同,B树非常适合读取和写入相对较大的数据块(如光…
树之AVL树
来源 对于一般的搜索二叉树而言,如果数据恰好是按照从小到大的顺序或者从大到小的顺序插入的,那么搜索二叉树就对退化成链表,这个时候查找,插入和删除的时间都会上升到O(n),而这对于海量数据而言,是我们无法忍受的。即使是一颗由完全随机的数据构造成的搜索二叉树,从统计角度去分析,在进行若甘次的插入和删除操…
树之二叉树
概括 树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可…
Redis分布式锁实现原理
命令 SET key value [NX] [XX] [EX <seconds>] [PX [millseconds]] 必选参数说明 SET:命令 key:待设置的key value: 设置的key的value 可选参数说明 NX:表示key不存在才设置,如果存在则返回NULL XX:…
局部性原理与磁盘预读原理
局部性原理 CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续空间。 计算机读取数据层次 寄存器 64位 一级缓存L1 4×64KB 二级缓存L2 4×256KB 三级缓存L3 8MB 内存 4GB 磁盘 1TB 可以发现这些层次一个比一个更大。 寄存器,既是…
进程间通信-unix套接字
概括 UNIX域套接字用于在同一台机器上运行的进程之间的通信。虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高。UNIX域套接字仅仅复制数据;它们并不执行协议处理,不需要添加或删除网络报头,无需计算检验和,不要产生顺序号,无需发送确认报文。 套接字的属性 套接字的特性由3个属性确定,它…
进程间通信-共享内存
概括 共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据…
进程间通信-信号量
概括 信号量本质上是一个计数器,用于多进程对共享数据对象的读取,它和管道有所不同,它不以传送数据为主要目的,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个时刻只有一个进程独享。 信号量是一个特殊的变量,值可以改变,但只能取正整数值,并且对它的加1和减1操作是原子操作。如果信号量值为…
进程间通信-消息队列
概括 linux既支持POSIX标准的消息队列,也支持System V的消息队列。 先看几个基本的概念,这些概念在Syste V通信方式中的信号量和共享内存当中同样也是适用的。 标识符(id) 每个System V的进程通信机制中的对象都和唯一的一个引用标识符相联系,如果进程要访问此IPC对象,则需…