Skip to content

Commit 198c9ed

Browse files
committed
Update Java Notes
1 parent 2cf310a commit 198c9ed

File tree

4 files changed

+69
-63
lines changed

4 files changed

+69
-63
lines changed

DB.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4225,6 +4225,8 @@ InnoDB 中,聚簇索引是按照每张表的主键构造一颗 B+ 树,叶子
42254225

42264226
**检索过程**:辅助索引找到主键值,再通过聚簇索引(二分)找到数据页,最后通过数据页中的 Page Directory(二分)找到对应的数据分组,遍历组内所所有的数据找到数据行
42274227

4228+
补充:无索引走全表查询,查到数据页后和上述步骤一致
4229+
42284230

42294231

42304232
***
@@ -4233,7 +4235,7 @@ InnoDB 中,聚簇索引是按照每张表的主键构造一颗 B+ 树,叶子
42334235

42344236
##### 索引实现
42354237

4236-
InnoDB 使用 B+Tree 作为索引结构
4238+
InnoDB 使用 B+Tree 作为索引结构,并且 InnoDB 一定有索引
42374239

42384240
主键索引:
42394241

@@ -4739,7 +4741,7 @@ Innodb_xxxx:这几个参数只是针对InnoDB 存储引擎的,累加的算
47394741

47404742
#### 定位低效
47414743

4742-
SQL 由三种原因造成
4744+
SQL 执行慢有两种情况
47434745

47444746
* 偶尔慢:DB 在刷新脏页
47454747
* redo log 写满了
@@ -4898,12 +4900,12 @@ SQL 执行的顺序的标识,SQL 从大到小的执行
48984900

48994901
| type | 含义 |
49004902
| ------ | ------------------------------------------------------------ |
4901-
| ALL | Full Table Scan,MySQL将遍历全表以找到匹配的行,全表扫描 |
4903+
| ALL | Full Table Scan,MySQL 将遍历全表以找到匹配的行,全表扫描 |
49024904
| index | Full Index Scan,index 与 ALL 区别为 index 类型只遍历索引树 |
4903-
| range | 索引范围扫描,常见于between<>等的查询 |
4904-
| ref | 非唯一性索引扫描,返回匹配某个单独值的所有,本质上也是一种索引访问 |
4905+
| range | 索引范围扫描,常见于 between<> 等的查询 |
4906+
| ref | 非唯一性索引扫描,返回匹配某个单独值的所有记录,本质上也是一种索引访问 |
49054907
| eq_ref | 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见于主键或唯一索引扫描 |
4906-
| const | 当 MySQL 对查询某部分进行优化,并转换为一个常量时,使用该类型访问,如将主键置于where列表中,MySQL就能将该查询转换为一个常量 |
4908+
| const | 当 MySQL 对查询某部分进行优化,并转换为一个常量时,使用该类型访问,如将主键置于 where 列表中,MySQL 就能将该查询转换为一个常量 |
49074909
| system | system 是 const 类型的特例,当查询的表只有一行的情况下,使用 system |
49084910
| NULL | MySQL 在优化过程中分解语句,执行时甚至不用访问表或索引 |
49094911

Frame.md

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2858,26 +2858,26 @@ public class LoginRequestMessage extends Message {
28582858

28592859
* 如果能确保编解码器不会保存状态,可以继承 MessageToMessageCodec 父类
28602860

2861-
```java
2862-
@Slf4j
2863-
@ChannelHandler.Sharable
2864-
// 必须和 LengthFieldBasedFrameDecoder 一起使用,确保接到的 ByteBuf 消息是完整的
2865-
public class MessageCodecSharable extends MessageToMessageCodec<ByteBuf, Message> {
2866-
@Override
2867-
protected void encode(ChannelHandlerContext ctx, Message msg, List<Object> outList) throws Exception {
2868-
ByteBuf out = ctx.alloc().buffer();
2869-
// 4 字节的魔数
2870-
out.writeBytes(new byte[]{1, 2, 3, 4});
2871-
// ....
2872-
outList.add(out);
2873-
}
2874-
2875-
@Override
2876-
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
2877-
//....
2878-
}
2879-
}
2880-
```
2861+
````java
2862+
@Slf4j
2863+
@ChannelHandler.Sharable
2864+
// 必须和 LengthFieldBasedFrameDecoder 一起使用,确保接到的 ByteBuf 消息是完整的
2865+
public class MessageCodecSharable extends MessageToMessageCodec<ByteBuf, Message> {
2866+
@Override
2867+
protected void encode(ChannelHandlerContext ctx, Message msg, List<Object> outList) throws Exception {
2868+
ByteBuf out = ctx.alloc().buffer();
2869+
// 4 字节的魔数
2870+
out.writeBytes(new byte[]{1, 2, 3, 4});
2871+
// ....
2872+
outList.add(out);
2873+
}
2874+
2875+
@Override
2876+
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
2877+
//....
2878+
}
2879+
}
2880+
````
28812881

28822882

28832883

@@ -3439,6 +3439,10 @@ RCVBUF_ALLOCATOR:属于 SocketChannal 参数
34393439

34403440

34413441

3442+
# RocketMQ
3443+
3444+
3445+
34423446

34433447

34443448

Java.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12975,9 +12975,9 @@ attributes[](属性表):属性表的每个项的值必须是 attribute_inf
1297512975
| Exceptions | 方法表 | 方法抛出的异常 |
1297612976
| EnclosingMethod | 类文件 | 仅当一个类为局部类或者匿名类是才能拥有这个属性,这个属性用于标识这个类所在的外围方法 |
1297712977
| InnerClass | 类文件 | 内部类列表 |
12978-
| LineNumberTable | Code属性 | Java 源码的行号与字节码指令的对应关系 |
12979-
| LocalVariableTable | Code属性 | 方法的局部变量描述 |
12980-
| StackMapTable | Code属性 | JDK1.6中新增的属性,供新的类型检查检验器检查和处理目标方法的局部变量和操作数有所需要的类是否匹配 |
12978+
| LineNumberTable | Code 属性 | Java 源码的行号与字节码指令的对应关系 |
12979+
| LocalVariableTable | Code 属性 | 方法的局部变量描述 |
12980+
| StackMapTable | Code 属性 | JDK1.6 中新增的属性,供新的类型检查检验器检查和处理目标方法的局部变量和操作数有所需要的类是否匹配 |
1298112981
| Signature | 类,方法表,字段表 | 用于支持泛型情况下的方法签名 |
1298212982
| SourceFile | 类文件 | 记录源文件名称 |
1298312983
| SourceDebugExtension | 类文件 | 用于存储额外的调试信息 |

Tool.md

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,7 +1003,7 @@ Linux 系统中查看进程使用情况的命令是 ps 指令
10031003

10041004

10051005

1006-
**ps和top区别**
1006+
**ps 和 top 区别**
10071007

10081008
* ps 命令:可以查看进程的瞬间信息,是系统在过去执行的进程的静态快照
10091009

@@ -1576,9 +1576,9 @@ tail 命令可用于查看文件的内容,有一个常用的参数 **-f** 常
15761576

15771577
`tail -f filename`:动态显示最尾部的内容
15781578

1579-
`tail -n +2 txtfile.txt`显示文件txtfile.txt 的内容,从第 2 行至文件末尾
1579+
`tail -n +2 txtfile.txt`显示文件 txtfile.txt 的内容,从第 2 行至文件末尾
15801580

1581-
`tail -n 2 txtfile.txt`显示文件txtfile.txt 的内容,最后2行
1581+
`tail -n 2 txtfile.txt`显示文件 txtfile.txt 的内容,最后 2 行
15821582

15831583

15841584

@@ -1605,28 +1605,28 @@ grep 指令用于查找内容包含指定的范本样式的文件,若不指定
16051605
grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
16061606
```
16071607

1608-
* -c:只输出匹配行的计数
1609-
* -i:不区分大小写
1610-
* -h:查询多文件时不显示文件名
1611-
* -l:查询多文件时只输出包含匹配字符的文件名
1612-
* -n:显示匹配行及行号
1613-
* -s:不显示不存在或无匹配文本的错误信息
1614-
* -v:显示不包含匹配文本的所有行
1615-
* --color=auto :可以将找到的关键词部分加上颜色的显示
1608+
* -c:只输出匹配行的计数
1609+
* -i:不区分大小写
1610+
* -h:查询多文件时不显示文件名
1611+
* -l:查询多文件时只输出包含匹配字符的文件名
1612+
* -n:显示匹配行及行号
1613+
* -s:不显示不存在或无匹配文本的错误信息
1614+
* -v:显示不包含匹配文本的所有行
1615+
* --color=auto :可以将找到的关键词部分加上颜色的显示
16161616

16171617
**管道符 |**:表示将前一个命令处理的结果传递给后面的命令处理。
16181618

1619-
`grep aaaa Filename `显示存在关键字aaaa的行
1619+
`grep aaaa Filename `显示存在关键字 aaaa 的行
16201620

1621-
`grep -n aaaa Filename`显示存在关键字aaaa的行,且显示行号
1621+
`grep -n aaaa Filename`显示存在关键字 aaaa 的行,且显示行号
16221622

1623-
`grep -i aaaa Filename`:忽略大小写,显示存在关键字aaaa的行
1623+
`grep -i aaaa Filename`:忽略大小写,显示存在关键字 aaaa 的行
16241624

16251625
`grep -v aaaa Filename`:显示存在关键字aaaa的所有行
16261626

1627-
`ps -ef | grep sshd`查找包含sshd进程的进程信息
1627+
`ps -ef | grep sshd`查找包含 sshd 进程的进程信息
16281628

1629-
` ps -ef|grep -c sshd`查找sshd相关的进程个数
1629+
` ps -ef | grep -c sshd`查找 sshd 相关的进程个数
16301630

16311631

16321632

@@ -1642,32 +1642,32 @@ grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数
16421642
- 通过 `命令 >> 文件`**命令的成功结果** **追加** 指定文件的后面
16431643
- 通过 `命令 &>> 文件`**命令的失败结果** **追加** 指定文件的后面
16441644

1645-
`echo "程序员" >> a.txt`将程序员追加到a.txt后面
1645+
`echo "程序员" >> a.txt`将程序员追加到 a.txt 后面
16461646

1647-
`cat 不存在的目录 &>> error.log`将错误信息追加到error.log文件
1647+
`cat 不存在的目录 &>> error.log`将错误信息追加到 error.log 文件
16481648

16491649

16501650

16511651
#### awk
16521652

1653-
AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
1653+
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
16541654

16551655
```shell
16561656
awk [options] 'script' var=value file(s)
16571657
awk [options] -f scriptfile var=value file(s)
16581658
```
16591659

1660-
* -F fs 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式
1661-
* -v var=value赋值一个用户定义变量
1662-
* -f 从脚本文件中读取awk命令
1663-
* $n(数字) 获取**第几段**内容
1664-
* $0 获取 **当前行** 内容
1665-
* NF 表示当前行共有多少个字段
1666-
* $NF 代表 最后一个字段
1660+
* -F fs指定输入文件折分隔符,fs 是一个字符串或者是一个正则表达式
1661+
* -vvar=value 赋值一个用户定义变量
1662+
* -f:从脚本文件中读取 awk 命令
1663+
* $n(数字)获取**第几段**内容
1664+
* $0:获取**当前行** 内容
1665+
* NF表示当前行共有多少个字段
1666+
* $NF:代表最后一个字段
16671667

1668-
* $(NF-1) 代表 倒数第二个字段
1668+
* $(NF-1):代表倒数第二个字段
16691669

1670-
* NR 代表 处理的是第几行
1670+
* NR:代表处理的是第几行
16711671

16721672
* ```shell
16731673
命令:awk 'BEGIN{初始化操作}{每行都执行} END{结束时操作}'
@@ -1728,19 +1728,19 @@ zhouba 98 44 46
17281728

17291729
#### find
17301730

1731-
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示
1731+
find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为查找的目录名。如果使用该命令不设置任何参数,将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示
17321732

17331733
命令:find <指定目录> <指定条件> <指定内容>
17341734

17351735
* `find . -name "*.gz"`:将目前目录及其子目录下所有延伸档名是 gz 的文件查询出来
1736-
* `find . -ctime -1`:将目前目录及其子目录下所有最近 1天内更新过的文件查询出来
1737-
* ` find / -name 'seazean'`全局搜索seazean
1736+
* `find . -ctime -1`:将目前目录及其子目录下所有最近 1 天内更新过的文件查询出来
1737+
* ` find / -name 'seazean'`全局搜索 seazean
17381738

17391739

17401740

17411741
#### read
17421742

1743-
read命令用于从标准输入读取数值
1743+
read 命令用于从标准输入读取数值
17441744

17451745
read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。
17461746

@@ -1759,10 +1759,10 @@ sort [-bcdfimMnr][文件]
17591759
```
17601760

17611761
* -n 依照数值的大小排序
1762-
* -r 以相反的顺序来排序(sort默认的排序方式是**升序**,改成降序,加-r)
1762+
* -r 以相反的顺序来排序(sort 默认的排序方式是**升序**,改成降序,加 -r)
17631763
* -u 去掉重复
17641764

1765-
面试题:一列数字,输出最大的4个不重复的数
1765+
面试题:一列数字,输出最大的 4 个不重复的数
17661766

17671767
```sh
17681768
sort -ur a.txt | head -n 4

0 commit comments

Comments
 (0)