Skip to content

Commit 2e0b82c

Browse files
20240906
1 parent f43e84a commit 2e0b82c

File tree

4 files changed

+91
-8
lines changed

4 files changed

+91
-8
lines changed

_posts/2022-06-21-java.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ Garbage First(G1)收集器:
224224
3. 最终标记(Final Marking),为了修正在并发标记期间因用户程序继续运作而导致标记产生变动的那一部分标记记录,STW,但是可并行执行。
225225
4. 筛选回收(Live Data Counting and Evacuation),对各个Region中的回收价值和成本进行排序并制定回收计划。
226226

227+
227228
![](https://raw.githubusercontent.com/CompetitiveLin/ImageHostingService/picgo/imgs/202305091525435.png)
228229

229230

@@ -437,11 +438,12 @@ ThreadLocal: 提供线程内的局部变量,在多线程的环境中保证各
437438
线程工厂用于创建新线程。线程工厂提供了创建线程的方法,可以自定义线程的名称、优先级等属性。
438439

439440
7. 拒绝策略(rejectedExecutionHandler):
440-
拒绝策略定义了当线程池无法接受新任务时的处理策略。当工作队列已满且线程池中的线程数已达到最大线程数时,新任务将被拒绝执行。常见的拒绝策略有丢弃、丢弃最旧的任务、抛出异常等。
441+
拒绝策略定义了当线程池无法接受新任务时的处理策略。当工作队列已满且线程池中的线程数已达到最大线程数时,新任务将被拒绝执行。常见的拒绝策略有丢弃、丢弃最旧的任务、抛出异常等。
441442
1. AbortPolicy 拒绝任务并抛出一个异常 RejectedExecutionException
442443
2. DiscardPolicy 拒绝任务,不抛出异常。
443444
3. DiscardOldestPolicy 把老的任务丢掉,执行新任务。
444-
4. CallerRunsPolicy 直接调用线程处理该任务,
445+
4. CallerRunsPolicy 直接调用线程处理该任务。
446+
445447

446448

447449
JDK四种线程池:

_posts/2022-06-22-mysql.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,20 @@ MySQL 规定除了 TEXT、BLOBs 这种大对象类型之外,其他所有的列
4646

4747
行格式溢出后,数据存放到**溢出页**
4848

49+
## text 各个类型对比
50+
51+
- TINYTEXT 最大长度是 255 (2^8 – 1) 个字符。
52+
- TEXT 最大长度是 65535 (2^16 – 1) 个字符。
53+
- MEDIUMTEXT 最大长度是 16777215 (2^24 – 1) 个字符。
54+
- LONGTEXT 最大长度是 4294967295 (2^32 – 1) 个字符
55+
- Varchar 对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个字节
56+
- Char 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节
57+
58+
数据的检索效率是:char>varchar>text
59+
60+
char: 定长,会用空格补齐
61+
varchar:变长
62+
4963
# B树和B+树
5064

5165
- B树(多路的平衡搜索树),节点可以存储多个数据,并且每个节点存放索引和数据,一个节点的**关键字**等于该节点子节点个数减一。查询的最好情况是O(1),一般高度为3。
@@ -154,6 +168,8 @@ EXPLAIN 命令的extra一栏中有Using index condition,表明使用了索引
154168
7. 使用区分度高的列作为索引
155169
8. 扩展索引而不是新建索引
156170

171+
### 强制索引
172+
157173

158174
### 深度分页
159175

@@ -225,7 +241,7 @@ WAL 核心:将随机写(磁盘的写操作是随机IO,耗性能)转变
225241

226242
### 三大日志binlog, redolog, undolog:
227243
1. Buffer Pool是MySQL进程管理的一块内存空间,有减少磁盘IO次数的作用。
228-
2. redo log重做日志是InnoDB存储引擎的一种物理格式的日志,用来实现事务**持久性**,主要有两部分文件组成,再内存中的重做日志缓冲(redo log buffer)以及磁盘中的重做日志文件(redo log),(循环写,数据会被覆盖)。使用场景:**崩溃恢复**,在发生故障的时间点,尚有脏页未写入磁盘,在重启 mysql 服务的时候,根据 redo log 进行重做,从而达到事务的持久性这一特性。
244+
2. redo log重做日志是InnoDB存储引擎的一种物理格式的日志,用来实现事务**持久性**,主要有两部分文件组成,在内存中的重做日志缓冲(redo log buffer)以及磁盘中的重做日志文件(redo log),(循环写,数据会被覆盖)。使用场景:**崩溃恢复**,在发生故障的时间点,尚有脏页未写入磁盘,在重启 mysql 服务的时候,根据 redo log 进行重做,从而达到事务的持久性这一特性。
229245
3. undo log回滚日志是InnoDB存储引擎的一种逻辑格式的日志,记录的是数据的逻辑变化,保证的是数据库的**原子性**,比如一条insert语句对应的是一条delete的undo log,在发生事务错误时,就能回滚到事务之前的数据状态;**MVCC**,事务未提交前,undo log 保存了未提交的版本数据,作为旧版本的快照数据,类似于做备份。
230246
4. binlog是MySQL Server层的一种逻辑格式的日志,用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。使用场景:**主从复制** :采用异步复制方式,在 Master 端开启 binlog ,然后将 binlog 发送到各个 Slave 端, Slave 端重放 binlog 从而达到主从数据一致;**数据恢复**,通过使用 mysqlbinlog 工具再结合 binlog 文件,可以将数据恢复到过去的某一时刻。
231247

_posts/2023-08-10-elasticsearch.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,3 +195,9 @@ ElasticSearch 默认为text类型,但是text类型总会有keyword的类型的
195195
1. 手动触发
196196
2. 段 flush 触发
197197
3. 由前一个成功的 merge 触发
198+
199+
# 分词器
200+
1. ik-analyzer 分词器,支持中文分词
201+
2. pinyin 分词器,支持输入拼音查到相关关键词
202+
3. pattern 分词器,支持正则表达式
203+
4. whitespace 分词器,用于去除空格

_posts/2023-09-07-note-from-work.md

Lines changed: 64 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -393,22 +393,54 @@ Paxos 和 Raft 算法都属于一致性算法,所以是保证 CP
393393
1. 基于 http
394394
2. 基于 tcp(常见)
395395

396-
# TCP/UDP 可以使用同一个端口吗
396+
# 计算机网络
397+
398+
## TCP/UDP 可以使用同一个端口吗
397399

398400
可以。传输层有两个传输协议分别是 TCP 和 UDP,在内核中是两个完全独立的软件模块。可以在 IP 包头的**协议号**字段判断出 TCP 还是 UDP
399401

400-
# TCP 三次握手
402+
## TCP 三次握手
401403

402-
## 为什么三次握手
404+
### 为什么三次握手
403405

404406
防止建立历史连接,使得重复连接
405407

406-
## 为什么四次握手
408+
### 为什么四次挥手
407409

408410
本质原因是 TCP 是全双工通信,客户端确认没有数据发送后,发出结束报文,此时服务端返回确认后,服务端也不会接收客户端数据。但是此时服务端可能还有数据没有传输完,客户端还是可以接收数据。
409411

410412
如果挥手过程中「没有数据要发送」并且「开启了 TCP 延迟确认机制」,那么第二和第三次挥手就会合并传输,这样就出现了**三次挥手**
411413

414+
## DNS使用TCP还是UDP
415+
416+
DNS 在进行区域传输的时候使用 TCP,其他情况使用 UDP。
417+
418+
区域传输:是指DNS主从服务器之间的数据同步,保证数据的一致性,传送会利用DNS域,所以就称为DNS区域传送。
419+
420+
## TCP 保证可靠传输
421+
1. 序列号
422+
2. 连接建立:三次握手四次挥手
423+
3. 头部检验和
424+
4. 确认应答
425+
5. 超时重传
426+
6. 拥塞控制:四种算法
427+
1. 慢启动
428+
2. 拥塞避免
429+
3. 拥塞发生
430+
4. 快速恢复
431+
7. 流量控制:滑动窗口实现
432+
433+
## OSI 七层模型和 TCP/IP 四层模型
434+
1. 应用层:HTTP,DNS,FTP
435+
1. 应用层
436+
2. 表示层
437+
3. 会话层
438+
2. 传输层:TCP,UDP
439+
3. 网络层:IP,ARP
440+
4. 网络接口层
441+
1. 数据链路层
442+
2. 物理层
443+
412444
# 架构
413445

414446
在高并发环境下,服务之间的依赖关系导致调用失败,解决的方式通常是: 限流->熔断->隔离->降级, 其目的是防止雪崩效应。
@@ -418,4 +450,31 @@ Paxos 和 Raft 算法都属于一致性算法,所以是保证 CP
418450
1. 互斥
419451
2. 请求和保持
420452
3. 不可剥夺
421-
4. 循环等待
453+
4. 循环等待
454+
455+
# 一致性哈希
456+
一致性哈希是指将「存储节点」和「数据」都映射到一个首尾相连的哈希环(固定大小)上。数据存储在哈希值通过**顺时针**找到的第一个节点。
457+
458+
459+
## 优势
460+
一致性哈希算法是对 `2^32` 取模,是一个固定的值;而普通哈希表的长度是由节点数决定的。
461+
- 普通哈希函数,如果节点数量发生了变化(对系统进行扩容缩容的时候),大部分改变了映射关系,因此需要迁移大量的数据。
462+
- 一致性哈希算法,如果节点数量发生了变化,只影响该节点顺时针相邻的后继节点。
463+
464+
465+
## 虚拟节点的引入
466+
一致性哈希算法并不保证节点能够在哈希环上分布均匀,因此引入均匀分布的虚拟节点,建立真实节点和虚拟节点的映射关系。
467+
468+
# IO
469+
1. 同步
470+
1. 同步阻塞IO
471+
2. 同步非阻塞IO
472+
3. IO多路复用
473+
4. 信号驱动IO
474+
2. 异步
475+
1. 异步IO
476+
477+
478+
479+
## 虚拟内存
480+
虚拟内存是一种计算机技术,它允许系统将一部分硬盘空间当作RAM(随机存取存储器)使用。当物理内存不足以支持正在运行的应用程序时,系统会将不常用的数据移动至磁盘中。虚拟内存为每个进程提供了一个一致的、私有的地址空间

0 commit comments

Comments
 (0)