Skip to content

Commit a6c6396

Browse files
committed
Update Java Notes
1 parent 9eb6099 commit a6c6396

File tree

4 files changed

+770
-300
lines changed

4 files changed

+770
-300
lines changed

DB.md

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3842,16 +3842,16 @@ MyISAM 的索引方式也叫做非聚集的,之所以这么称呼是为了与
38423842

38433843
#### 原理
38443844

3845-
索引是在MySQL的存储引擎中实现的,不同的存储引擎的所支持的索引不一定完全相同
3845+
索引是在 MySQL 的存储引擎中实现的,不同的存储引擎的所支持的索引不一定完全相同
38463846

3847-
BTree的索引类型是基于B+Tree树型数据结构的,B+Tree又是BTree数据结构的变种,用在数据库和操作系统中的文件系统,特点是能够保持数据稳定有序
3847+
BTree 的索引类型是基于 B+Tree 树型数据结构的,B+Tree 又是 BTree 数据结构的变种,用在数据库和操作系统中的文件系统,特点是能够保持数据稳定有序
38483848

38493849
磁盘存储:
38503850

38513851
* 系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的,位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。
38523852

3853-
- InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位,InnoDB存储引擎中默认每个页的大小为16KB
3854-
- InnoDB引擎将若干个地址连接磁盘块,以此来达到页的大小16KB,在查询数据时如果一个页中的每条数据都能有助于定位数据记录的位置,这将会减少磁盘I/O次数,提高查询效率。
3853+
- InnoDB 存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位,InnoDB 存储引擎中默认每个页的大小为 16KB
3854+
- InnoDB 引擎将若干个地址连接磁盘块,以此来达到页的大小16KB,在查询数据时如果一个页中的每条数据都能有助于定位数据记录的位置,这将会减少磁盘I/O次数,提高查询效率。
38553855

38563856

38573857

@@ -3861,15 +3861,15 @@ BTree的索引类型是基于B+Tree树型数据结构的,B+Tree又是BTree数
38613861

38623862
#### BTree
38633863

3864-
BTree又叫多路平衡搜索树,一颗m叉的BTree特性如下
3864+
BTree 又叫多路平衡搜索树,一颗 m 叉的 BTree 特性如下
38653865

38663866
- 树中每个节点最多包含m个孩子
3867-
- 除根节点与叶子节点外,每个节点至少有[ceil(m/2)]个孩子
3867+
- 除根节点与叶子节点外,每个节点至少有 [ceil(m/2)] 个孩子
38683868
- 若根节点不是叶子节点,则至少有两个孩子
38693869
- 所有的叶子节点都在同一层
3870-
- 每个非叶子节点由n个key与n+1个指针组成,其中 [ceil(m/2)-1] <= n <= m-1
3870+
- 每个非叶子节点由 n 个key与 n+1 个指针组成,其中 [ceil(m/2)-1] <= n <= m-1
38713871

3872-
5叉,key的数量 [ceil(m/2)-1] <= n <= m-1 为 2 <= n <=4 ,当n>4时中间节点分裂到父节点,两边节点分裂
3872+
5叉,key 的数量 [ceil(m/2)-1] <= n <= m-1 为 2 <= n <=4 ,当 n>4 时中间节点分裂到父节点,两边节点分裂
38733873

38743874
插入 C N G A H E K Q M F W L T Z D P R X Y S 数据的工作流程:
38753875

@@ -3905,12 +3905,12 @@ BTree又叫多路平衡搜索树,一颗m叉的BTree特性如下:
39053905

39063906
![](https://gitee.com/seazean/images/raw/master/DB/MySQL-BTree工作流程8.png)
39073907

3908-
BTREE树就已经构建完成了,BTREE树和二叉树相比, 查询数据的效率更高, 因为对于相同的数据量来说,**BTREE的层级结构比二叉树小**,所以搜索速度快
3908+
BTREE 树就已经构建完成了,BTREE 树和二叉树相比, 查询数据的效率更高, 因为对于相同的数据量来说,**BTREE 的层级结构比二叉树小**,所以搜索速度快
39093909

3910-
BTree结构的数据可以让系统高效的找到数据所在的磁盘块,定义一条记录为一个二元组[key, data]key为记录的键值,对应表中的主键值,data为一行记录中除主键外的数据。对于不同的记录,key值互不相同,BTree中的每个节点根据实际情况可以包含大量的关键字信息和分支
3910+
BTree 结构的数据可以让系统高效的找到数据所在的磁盘块,定义一条记录为一个二元组 [key, data]key 为记录的键值,对应表中的主键值,data 为一行记录中除主键外的数据。对于不同的记录,key 值互不相同,BTree 中的每个节点根据实际情况可以包含大量的关键字信息和分支
39113911
![](https://gitee.com/seazean/images/raw/master/DB/索引的原理-BTree.png)
39123912

3913-
当进行范围查找时会出现回旋查找
3913+
缺点:当进行范围查找时会出现回旋查找
39143914

39153915

39163916

@@ -3922,37 +3922,44 @@ BTree结构的数据可以让系统高效的找到数据所在的磁盘块,定
39223922

39233923
##### 数据结构
39243924

3925-
B+Tree为BTree的变种,B+Tree与BTree的区别为
3925+
B+Tree 为 BTree 的变种,B+Tree 与 BTree 的区别为
39263926

3927-
* n叉B+Tree最多含有n个key(哈希值),而BTree最多含有n-1个key。
3927+
* n 叉 B+Tree 最多含有 n 个 key(哈希值),而 BTree 最多含有 n-1 个 key
39283928

3929-
- 所有**非叶子节点只存储键值key**信息,可以看作key的索引部分
3930-
- 所有**数据都存储在叶子节点**,按照key大小顺序排列
3929+
- 所有**非叶子节点只存储键值 key**信息,可以看作 key 的索引部分
3930+
- 所有**数据都存储在叶子节点**,按照 key 大小顺序排列
3931+
- 节点从上到下的所有节点中的 key 在叶子节点中也存在(比如 5),key 允许重复,B 树不同节点不存在重复的 key
39313932

39323933
<img src="https://gitee.com/seazean/images/raw/master/DB/MySQL-B+Tree数据结构.png" style="zoom: 67%;" />
39333934

3935+
B* 树:是 B+ 树的变体,在 B+ 树的非根和非叶子结点再增加指向兄弟的指针
3936+
3937+
3938+
3939+
***
3940+
39343941

39353942

39363943
##### 优化结构
39373944

3938-
BTree数据结构中每个节点中不仅包含数据的key值,还有data值。每一页的存储空间是有限的,如果data数据较大时将会导致每个节点(即一个页)能存储的key的数量很小,当存储的数据量很大时同样会导致B-Tree的深度较大,增大查询时的磁盘I/O次数,进而影响查询效率
3945+
BTree 数据结构中每个节点中不仅包含数据的 key 值,还有 data 值。每一页的存储空间是有限的,如果 data 数据较大时将会导致每个节点(即一个页)能存储的key的数量很小,当存储的数据量很大时同样会导致 B-Tree 的深度较大,增大查询时的磁盘 I/O 次数,进而影响查询效率
39393946

3940-
MySQL 索引数据结构对经典的B+Tree进行了优化,在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,**提高区间访问的性能,防止回旋查找**
3947+
MySQL 索引数据结构对经典的 B+Tree 进行了优化,在原 B+Tree 的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的 B+Tree,**提高区间访问的性能,防止回旋查找**
39413948

39423949
区间访问的意思是访问索引为 5 - 15 的数据,这样就可以直接根据相邻节点的指针遍历
39433950

39443951
![](https://gitee.com/seazean/images/raw/master/DB/索引的原理-B+Tree.png)
39453952

3946-
通常在B+Tree上有两个头指针,一个指向根节点,另一个指向关键字最小的叶子节点,而且所有叶子节点(即数据节点)之间是一种链式环结构。可以对B+Tree进行两种查找运算
3953+
通常在 B+Tree 上有两个头指针,一个指向根节点,另一个指向关键字最小的叶子节点,而且所有叶子节点(即数据节点)之间是一种链式环结构。可以对 B+Tree 进行两种查找运算
39473954

39483955
- 有范围:对于主键的范围查找和分页查找
3949-
- 有顺序:从根节点开始,进行随机查找
3956+
- 有顺序:从根节点开始,进行随机查找,顺序查找
39503957

3951-
InnoDB存储引擎中页的大小为16KB,一般表的主键类型为INT(4字节)或BIGINT(8字节),指针类型也一般为4或8个字节,也就是说一个页(B+Tree中的一个节点)中大概存储16KB/(8B+8B)=1K个键值(估值)。则一个深度为3的B+Tree索引可以维护 `10^3 * 10^3 * 10^3 = 10亿` 条记录
3958+
InnoDB 存储引擎中页的大小为 16KB,一般表的主键类型为 INT(4字节)或 BIGINT(8字节),指针类型也一般为4或8个字节,也就是说一个页(B+Tree中的**一个节点**)中大概存储 16KB/(8B+8B)=1K 个键值(估值)。则一个深度为3的B+Tree索引可以维护 `10^3 * 10^3 * 10^3 = 10亿` 条记录
39523959

3953-
实际情况中每个节点可能不能填充满,因此在数据库中,B+Tree的高度一般都在2-4层。MySQL的InnoDB存储引擎在设计时是将根节点常驻内存的,也就是说查找某一键值的行记录时最多只需要1~3次磁盘 I/O 操作
3960+
实际情况中每个节点可能不能填充满,因此在数据库中,B+Tree的高度一般都在2-4层。MySQL 的 InnoDB 存储引擎在设计时是将根节点常驻内存的,也就是说查找某一键值的行记录时最多只需要1~3次磁盘 I/O 操作
39543961

3955-
B+Tree优点:提高查询速度,减少磁盘的IO次数,树形结构较小
3962+
B+Tree 优点:提高查询速度,减少磁盘的 IO 次数,树形结构较小
39563963

39573964

39583965

@@ -7617,7 +7624,7 @@ Redis (REmote DIctionary Server) :用 C 语言开发的一个开源的高性
76177624

76187625

76197626

7620-
### 下载安装
7627+
### 安装启动
76217628

76227629
#### CentOS
76237630

Issue.md

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,5 @@
11
# Base
22

3-
## Structure
4-
5-
6-
7-
8-
9-
****
10-
11-
12-
133
## Network
144

155
### 传输层
@@ -108,6 +98,8 @@
10898

10999
控制和管理计算机硬件与软件资源的,并合理的组织和调度计算机工作的程序
110100

101+
特征:并发、异步、共享、虚拟
102+
111103
* 什么是系统调度?
112104

113105
在用户程序中调用操作系统提供的核心态级别的子功能,结合用户态和核心态区别回答,一般使用陷入(trap),按调用功能分为:设备管理、文件管理、进程控制、进程通信、内存管理,
@@ -122,6 +114,8 @@
122114

123115
区别:资源、并发、切换、通信、
124116

117+
进程特征:并发、异步、动态、独立
118+
125119
* 进程通信的方式?
126120

127121
同一台计算机的进程通信称为 IPC(Inter-process communication)

0 commit comments

Comments
 (0)