Skip to content
Merged
Show file tree
Hide file tree
Changes from 108 commits
Commits
Show all changes
206 commits
Select commit Hold shift + click to select a range
5014c53
Update 如何设计一个亿级网关.md
Aug 27, 2021
c1a239a
补充丢失的文字
Aug 27, 2021
76ef548
错别字
chengcjk Aug 27, 2021
b982a6e
[feat] add 灾备设计&异地多活
Snailclimb Aug 27, 2021
4baeecd
Update [加餐]大白话带你认识JVM.md
liukun2634 Aug 27, 2021
1741a67
Update [加餐]大白话带你认识JVM.md
liukun2634 Aug 27, 2021
06baca5
Merge pull request #1350 from anaer/patch-11
Snailclimb Aug 28, 2021
47aad33
Merge pull request #1352 from chengcjk/master
Snailclimb Aug 28, 2021
3055a04
Merge pull request #1351 from rocky-peng/patch-3
Snailclimb Aug 28, 2021
b4a9f12
Merge pull request #1353 from kaka2634/master
Snailclimb Aug 28, 2021
20cb19b
Update naming.md
Aug 30, 2021
bd6443f
Update JAD反编译tricks.md
Aug 30, 2021
d8be08b
Update JWT优缺点分析以及常见问题解决方案.md
Aug 30, 2021
2e7f5c4
Merge pull request #1354 from anaer/patch-12
Snailclimb Aug 30, 2021
050d306
Merge pull request #1355 from anaer/patch-13
Snailclimb Aug 30, 2021
4656fd9
Merge pull request #1356 from anaer/patch-14
Snailclimb Aug 30, 2021
4189bbe
Update Java集合框架常见面试题.md
Snailclimb Aug 31, 2021
24f27e5
Update RabbitMQ入门看这一篇就够了.md
Aug 31, 2021
bdcd1af
Update IO模型.md
Sep 1, 2021
e534636
Update 代理模式详解.md
Sep 1, 2021
0222e9c
Update BIO,NIO,AIO总结.md
Sep 1, 2021
ffe1c91
Update BIO,NIO,AIO总结.md
Sep 1, 2021
ce6daf1
Create CompletableFuture从入门到实战.md
Snailclimb Sep 1, 2021
4cf77fb
Update 数据库基础知识.md
fengx20 Sep 1, 2021
f0683e5
[feat]CompletableFuture入门
Snailclimb Sep 2, 2021
576e5df
[feat]CompletableFuture入门
Snailclimb Sep 2, 2021
81422c6
Merge pull request #1357 from anaer/patch-16
Snailclimb Sep 2, 2021
f7cc597
Merge pull request #1358 from anaer/patch-17
Snailclimb Sep 2, 2021
a6a0782
Merge pull request #1359 from anaer/patch-18
Snailclimb Sep 2, 2021
d89366f
Merge pull request #1360 from anaer/patch-19
Snailclimb Sep 2, 2021
ec42874
Update RESTfulAPI简明教程.md
Sep 3, 2021
03ba6d7
Merge pull request #1363 from anaer/patch-20
Snailclimb Sep 5, 2021
619be0f
Merge pull request #1361 from fengx20/patch-1
Snailclimb Sep 5, 2021
de32126
Update 万字详解ThreadLocal关键字.md
Sep 6, 2021
7bddf34
Update JDK监控和故障处理工具总结.md
Sep 6, 2021
cc5f281
Update java新特性总结.md
Snailclimb Sep 6, 2021
c656dd8
Update Java基础知识疑难点.md
weixsun Sep 6, 2021
b5b446f
Update 数据库基础知识.md
linzlb Sep 7, 2021
2f974f4
Update Java基础知识.md
Sep 7, 2021
4066882
Update 用好Java中的枚举真的没有那么简单.md
Sep 7, 2021
2e6bf93
Update Spring事务总结.md
weixsun Sep 7, 2021
00422da
Update Spring事务总结.md
weixsun Sep 7, 2021
9b358a9
Update Spring事务总结.md
weixsun Sep 7, 2021
e3da427
Update CAP理论.md
Sep 7, 2021
6842592
Merge pull request #1364 from anaer/patch-21
Snailclimb Sep 7, 2021
376b389
Merge pull request #1365 from anaer/patch-22
Snailclimb Sep 7, 2021
abcd7bf
Merge pull request #1367 from weixsun/Update-Java-基础知识疑难点
Snailclimb Sep 7, 2021
eaf0fb4
Merge pull request #1368 from linzlb/patch-1
Snailclimb Sep 7, 2021
a6abed3
Merge pull request #1369 from anaer/patch-23
Snailclimb Sep 7, 2021
614a292
Merge pull request #1370 from anaer/patch-24
Snailclimb Sep 7, 2021
232ae9b
Merge pull request #1371 from weixsun/Update-Spring事务总结
Snailclimb Sep 7, 2021
545ddee
Merge pull request #1372 from anaer/patch-25
Snailclimb Sep 7, 2021
ada7691
Update README.md
weixsun Sep 7, 2021
7405817
Merge pull request #1373 from weixsun/Update-README
Snailclimb Sep 8, 2021
9f88ccb
Update Git.md
Sep 8, 2021
767f601
Update SpringBoot+Spring常用注解总结.md
Sep 8, 2021
4b87e9b
Merge pull request #1374 from anaer/patch-28
Snailclimb Sep 8, 2021
ac930c3
Merge pull request #1375 from anaer/patch-29
Snailclimb Sep 8, 2021
b9d3148
Update Java8新特性总结.md
Sep 9, 2021
0e2aeec
Update InnoDB对MVCC的实现.md
mo-nian Sep 9, 2021
a975e7d
Merge pull request #1 from mo-nian/mo-nian-patch-1
mo-nian Sep 9, 2021
9fa49af
Update SSO单点登录看这一篇就够了.md
Sep 9, 2021
54df60e
Update bloom-filter.md
Sep 9, 2021
6cdbe28
Update MySQL三大日志.md
ShiqiRao Sep 9, 2021
c9ea539
Update Docker.md
Sep 10, 2021
f077543
Update Docker从入门到实战.md
Sep 10, 2021
a999466
Merge pull request #1376 from anaer/patch-30
Snailclimb Sep 10, 2021
3988950
Merge pull request #1378 from mo-nian/master
Snailclimb Sep 10, 2021
ed6ed0f
Merge pull request #1379 from anaer/patch-31
Snailclimb Sep 10, 2021
8570b57
Merge pull request #1380 from anaer/patch-33
Snailclimb Sep 10, 2021
959753c
Merge pull request #1383 from nockyQ/patch-2
Snailclimb Sep 10, 2021
fb6a0d2
Merge pull request #1384 from anaer/patch-34
Snailclimb Sep 10, 2021
c5e03c7
Merge pull request #1385 from anaer/patch-35
Snailclimb Sep 10, 2021
ff5f4b0
Update Spring常见问题总结.md
huh0ngtao Sep 11, 2021
ffbcf71
Update java线程池学习总结.md
error0g Sep 11, 2021
219a006
Update Spring事务总结.md
error0g Sep 11, 2021
7fed7cc
typo
error0g Sep 11, 2021
44232fc
Update Spring常见问题总结.md
liukun2634 Sep 12, 2021
a7f8dfb
Merge pull request #1387 from hu-asc/master
Snailclimb Sep 13, 2021
a0e826b
Merge pull request #1388 from error0g/error0g-patch-1
Snailclimb Sep 13, 2021
6cc177a
Merge pull request #1390 from error0g/error0g-patch-3
Snailclimb Sep 13, 2021
ba32cba
Merge pull request #1392 from kaka2634/master
Snailclimb Sep 13, 2021
0ebf887
[fix]完全二叉树图片错误修复
Snailclimb Sep 13, 2021
1fdb7f1
[fix]线程池使用不当导致死锁图片修正
Snailclimb Sep 13, 2021
46146f8
[fix]数据可见性算法笔误&内容完善
Snailclimb Sep 13, 2021
c00721e
Update Java集合框架常见面试题.md
Aaron-Ge Sep 13, 2021
d740936
Merge branch 'Snailclimb:master' into master
Aaron-Ge Sep 13, 2021
87d31f1
Merge pull request #1393 from Aaron-Ge/master
Snailclimb Sep 13, 2021
b23da48
Update README.md
Snailclimb Sep 14, 2021
f949397
Update ConcurrentHashMap源码+底层数据结构分析.md
Snailclimb Sep 15, 2021
e4a4e1c
Update 最重要的JVM参数指南.md
Snailclimb Sep 15, 2021
4e2db76
Update Java基础知识.md
gongjixiaobai Sep 16, 2021
f6bbf59
Update 服务之间的调用为啥不直接用HTTP而用RPC.md
Sep 16, 2021
35a7876
Update 服务之间的调用为啥不直接用HTTP而用RPC.md
Sep 16, 2021
b412617
Update Dubbo.md
Sep 16, 2021
8ac6241
Update Kafka常见面试题总结.md
Sep 16, 2021
b0014ac
Update RocketMQ-Questions.md
Sep 16, 2021
90dd5e8
Update RocketMQ.md
Sep 16, 2021
d84f043
Update java新特性总结.md
Snailclimb Sep 16, 2021
225e998
Merge pull request #1398 from gongjixiaobai/patch-1
Snailclimb Sep 16, 2021
628f9e2
Merge pull request #1403 from anaer/patch-42
Snailclimb Sep 16, 2021
9cf981b
Merge pull request #1402 from anaer/patch-41
Snailclimb Sep 16, 2021
a98f58d
Merge pull request #1401 from anaer/patch-39
Snailclimb Sep 16, 2021
af57f15
Merge pull request #1400 from anaer/patch-38
Snailclimb Sep 16, 2021
79bcd3f
Merge pull request #1399 from anaer/patch-36
Snailclimb Sep 16, 2021
fecc256
Update and rename 为什么要网站有哪些常见的网站系统.md to 为什么要网关有哪些常见的网关系统.md
Sep 16, 2021
fba4e83
Merge pull request #1404 from anaer/patch-43
Snailclimb Sep 16, 2021
3edfca4
Update limit-request.md
Sep 17, 2021
f2ef8e4
Update 如何设计一个高可用系统要考虑哪些地方.md
Sep 17, 2021
44cb97c
Update 读写分离&分库分表.md
Sep 17, 2021
53542c4
Update redis-all.md
Qiwenlii Sep 22, 2021
e731a78
fix redis.md bug
Qiwenlii Sep 22, 2021
504e6fa
Merge pull request #1405 from anaer/patch-44
Snailclimb Sep 22, 2021
423a12e
Merge pull request #1406 from anaer/patch-45
Snailclimb Sep 22, 2021
111c224
Merge pull request #1407 from anaer/patch-46
Snailclimb Sep 22, 2021
7ec4dcd
Update Kafka常见面试题总结.md
Snailclimb Sep 22, 2021
1947e5a
[feat]分布式ID文章完善更新
Snailclimb Sep 23, 2021
1bbe22b
Update README.md
Snailclimb Sep 23, 2021
2c1d170
[feat]Java内存区域内容完善补充
Snailclimb Sep 23, 2021
437abe6
Update Java内存区域.md
Snailclimb Sep 23, 2021
dcea444
Update Java内存区域.md
Snailclimb Sep 23, 2021
2996747
[refractor]文件名修改
Snailclimb Sep 24, 2021
b4d29c2
Update java线程池学习总结.md
Snailclimb Sep 24, 2021
66d7c41
Merge pull request #1410 from Qiwenlii/master
Snailclimb Sep 25, 2021
078f4ae
[feat]定时任务
Snailclimb Sep 26, 2021
a2479a7
Update Java并发基础常见面试题总结.md
Snailclimb Sep 26, 2021
08cc656
Update Java并发进阶常见面试题总结.md
Aaron-Ge Sep 26, 2021
83f9e69
Update InnoDB对MVCC的实现.md
hligaty Sep 27, 2021
48e4c18
Update Java集合框架常见面试题.md
debugjoker Sep 27, 2021
302c115
Update Java并发进阶常见面试题总结.md
Aaron-Ge Sep 28, 2021
56d02d2
Update java线程池学习总结.md
Aaron-Ge Sep 28, 2021
3a90b25
Update 拿来即用的线程池最佳实践.md
Aaron-Ge Sep 28, 2021
9211b3e
[feat]首页添加《程序员副业赚钱之路》
Snailclimb Sep 28, 2021
0e7714a
Update README.md
Snailclimb Sep 28, 2021
d4e04d6
Merge pull request #1418 from hligaty/patch-1
Snailclimb Sep 28, 2021
f6e0428
Merge pull request #1420 from debugjoker/patch-3
Snailclimb Sep 28, 2021
eea8a1e
Merge pull request #1417 from Aaron-Ge/master
Snailclimb Sep 28, 2021
e33e785
Update README.md
Snailclimb Sep 28, 2021
e4caa8a
CMS垃圾收集器jvm参数大小写错误
1036956372 Sep 29, 2021
7af2d8a
Merge pull request #1422 from 1036956372/patch-1
Snailclimb Sep 30, 2021
6e77ea0
[feat]api网关重构
Snailclimb Oct 4, 2021
abd8907
Update 堆.md
Masker99 Oct 4, 2021
8023698
Merge pull request #1426 from Masker99/master
Snailclimb Oct 6, 2021
50e2ead
[feat]IntelliJ IDEA 使用指南 | 必备插件推荐 | 插件开发入门 | 重构小技巧 | 源码阅读技巧
Snailclimb Oct 10, 2021
3a6faf3
[feat]字符集详解:为什么不建议在MySQL中使用 utf8 ?
Snailclimb Oct 13, 2021
cbe983e
修改错误字
qiuqianorg Oct 14, 2021
a5b9860
Update README.md
Snailclimb Oct 15, 2021
e3d1c97
Update java线程池学习总结.md
Snailclimb Oct 15, 2021
f6ac89a
Update java线程池学习总结.md
Snailclimb Oct 15, 2021
69a0134
Merge pull request #1428 from SimonLi0427/master
Snailclimb Oct 15, 2021
bd3b9fe
[feat]灾备设计和异地多活文章推荐
Snailclimb Oct 17, 2021
f014952
feat:补充kafka不重复消费的解答
machitaoX Oct 17, 2021
3d92eca
Merge pull request #1431 from machitaoX/feature_completeKafka
Snailclimb Oct 18, 2021
83519ff
Update Kafka常见面试题总结.md
Snailclimb Oct 18, 2021
1ee0f5e
Update README.md
Snailclimb Oct 20, 2021
c1b14de
Update README.md
Snailclimb Oct 24, 2021
81ffbed
[fix]《手把手教你定位常见 Java 性能问题》图片修复
Snailclimb Oct 25, 2021
78857ee
Update README.md
Snailclimb Oct 28, 2021
973f1ee
redis AOF重写描述不准确
xjlgod Nov 1, 2021
8f138f2
Update README.md
Snailclimb Nov 3, 2021
416bb02
装箱和拆箱写反了
xjlgod Nov 4, 2021
f0a7154
Merge branch 'Snailclimb:master' into master
xjlgod Nov 4, 2021
b919dff
Merge pull request #1436 from xjlgod/master
Snailclimb Nov 6, 2021
3dd194a
[feat]内容重构,删除无用文章,优化文件名
Snailclimb Nov 6, 2021
3a5cd7b
Merge branch 'master' of github.com:Snailclimb/JavaGuide
Snailclimb Nov 6, 2021
0ff5f5a
Delete MySQL Index.md
Snailclimb Nov 6, 2021
63bf25b
[feat]Java基础内容重构,删除无用文章,优化文件名
Snailclimb Nov 6, 2021
bb784d4
[feat]Java并发内容重构,删除无用文章,优化文件名
Snailclimb Nov 6, 2021
de3a900
Delete synchronized在JDK1.6之后的底层优化.md
Snailclimb Nov 6, 2021
47b7c85
[feat]jvm内容重构,删除无用文章,优化文件名
Snailclimb Nov 7, 2021
a26ff09
Delete submission.html
Snailclimb Nov 7, 2021
23efacc
Update java集合框架基础知识&面试题总结.md
Snailclimb Nov 7, 2021
dc45389
[feat]🔥 基于 vuepress 重构整个项目,提升阅读体验
Snailclimb Nov 9, 2021
3916409
[feat]网站首页更新
Snailclimb Nov 9, 2021
25b0f2b
[feat]在线阅读网站样式完善
Snailclimb Nov 9, 2021
cbfb2c5
[feat]文章名规范&在线阅读完善样式美化
Snailclimb Nov 9, 2021
06f726f
Update readme.md
Snailclimb Nov 9, 2021
a66506d
fix typos
Casflawed Nov 9, 2021
9dd6f54
Merge branch 'Snailclimb:master' into flameking_work-A
Casflawed Nov 9, 2021
afc837a
Update .gitignore
Snailclimb Nov 9, 2021
537fdce
Create .gitattributes
Snailclimb Nov 9, 2021
6f5aeb1
Merge branch 'Snailclimb:master' into flameking_work-A
Casflawed Nov 9, 2021
bd2f4ef
fix typos
Casflawed Nov 9, 2021
91ccfe3
[文件名更正]
Snailclimb Nov 10, 2021
2a78961
Update readme.md
Snailclimb Nov 10, 2021
b87ef11
Merge branch 'Snailclimb:master' into flameking_work-A
Casflawed Nov 10, 2021
351ea31
[fix]图片错误修复
Snailclimb Nov 10, 2021
47a6b08
Update README.md
Snailclimb Nov 10, 2021
e9b4a0c
fix typos
Casflawed Nov 10, 2021
405dec3
[feat]百度统计
Snailclimb Nov 10, 2021
e7b509e
fix typos
Casflawed Nov 10, 2021
e0cd0a3
Merge branch 'Snailclimb:master' into flameking_work-A
Casflawed Nov 10, 2021
d0a5502
[fix]百度统计
Snailclimb Nov 10, 2021
580617f
Merge branch 'Snailclimb:master' into flameking_work-A
Casflawed Nov 10, 2021
78d1cb4
Merge pull request #1444 from acflameking/flameking_work-A
Snailclimb Nov 10, 2021
a2f9479
Update config.js
Snailclimb Nov 10, 2021
63e8ee6
Update 手把手教你定位常见Java性能问题.md
Snailclimb Nov 10, 2021
1543c0d
Update 操作系统常见面试题&知识点总结.md
Aaron-Ge Nov 10, 2021
c0cdd9f
Update 操作系统常见面试题&知识点总结.md
Aaron-Ge Nov 11, 2021
7e718d5
修改错误字
qiuqianorg Nov 13, 2021
e878f58
Merge pull request #1446 from Aaron-Ge/master
Snailclimb Nov 16, 2021
8965fcd
Merge pull request #1448 from qiuqianorg/master
Snailclimb Nov 16, 2021
b54c726
修改错别字
cliveyuan Mar 9, 2022
77260e6
Merge pull request #1605 from cliveyuan/patch-1
Snailclimb Mar 12, 2022
fb6e11b
修改错别字
Mar 20, 2022
98eafbd
Merge pull request #1631 from drlifeL/master
Snailclimb Mar 21, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 24 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
3. [并发容器总结](docs/java/multi-thread/并发容器总结.md)
4. [JUC 中的 Atomic 原子类总结](docs/java/multi-thread/Atomic原子类总结.md)
5. [AQS 原理以及 AQS 同步组件总结](docs/java/multi-thread/AQS原理以及AQS同步组件总结.md)
6. [CompletableFuture入门](docs/java/multi-thread/CompletableFuture入门.md)

### JVM (必看 :+1:)

Expand Down Expand Up @@ -170,6 +171,10 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
2. [Redis 常见问题总结](docs/database/Redis/redis-all.md)
3. [面试/工作必备!3种常用的缓存读写策略!](docs/database/Redis/3种常用的缓存读写策略.md)

## 搜索引擎

用于提高搜索效率,功能和浏览器搜索引擎类似。比较常见的搜索引擎是 Elasticsearch(推荐) 和 Solr。

## 系统设计

### 系统设计必备基础
Expand Down Expand Up @@ -255,10 +260,6 @@ CAP 也就是 Consistency(一致性)、Availability(可用性)、Partiti

**Paxos 算法**诞生于 1990 年,这是一种解决分布式系统一致性的经典算法 。但是,由于 Paxos 算法非常难以理解和实现,不断有人尝试简化这一算法。到了2013 年才诞生了一个比 Paxos 算法更易理解和实现的分布式一致性算法—**Raft 算法**。

#### 搜索引擎

用于提高搜索效率,功能和浏览器搜索引擎类似。比较常见的搜索引擎是 Elasticsearch(推荐) 和 Solr。

#### RPC

RPC 让调用远程服务调用像调用本地方法那样简单。
Expand All @@ -277,7 +278,7 @@ Dubbo 是一款国产的 RPC 框架,由阿里开源。相关阅读:

#### 分布式 id

在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如数据量太大之后,往往需要对进行对数据进行分库分表,分库分表后需要有一个唯一 ID 来标识一条数据或消息,数据库的自增 ID 显然不能满足需求。相关阅读:[为什么要分布式 id ?分布式 id 生成方案有哪些?](docs/system-design/micro-service/分布式id生成方案总结.md)
在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如数据量太大之后,往往需要对数据进行分库分表,分库分表后需要有一个唯一 ID 来标识一条数据或消息,数据库的自增 ID 显然不能满足需求。相关阅读:[为什么要分布式 id ?分布式 id 生成方案有哪些?](docs/system-design/micro-service/分布式id生成方案总结.md)

#### 分布式事务

Expand Down Expand Up @@ -360,6 +361,24 @@ Dubbo 是一款国产的 RPC 框架,由阿里开源。相关阅读:

另外,重试的次数一般设为 3 次,再多次的重试没有好处,反而会加重服务器压力(部分场景使用失败重试机制会不太适合)。

#### 灾备设计

**灾备** = 容灾+备份。

- **备份** : 将系统所产生的的所有重要数据多备份几份。
- **容灾** : 在异地建立两个完全相同的系统。当某个地方的系统突然挂掉,整个应用系统可以切换到另一个,这样系统就可以正常提供服务了。

#### 异地多活

异地多活描述的是将服务部署在异地并且服务同时对外提供服务。和传统的灾备设计的最主要区别在于“多活”,即所有站点都是同时在对外提供服务的。

异地多活是为了应对突发状况比如火灾、地震等自然或者认为灾害。

相关阅读:

- [四步构建异地多活](https://mp.weixin.qq.com/s/hMD-IS__4JE5_nQhYPYSTg)
- [《从零开始学架构》— 28 | 业务高可用的保障:异地多活架构](http://gk.link/a/10pKZ)

### 大型网站架构

- [8 张图读懂大型网站技术架构](docs/system-design/website-architecture/8%20张图读懂大型网站技术架构.md)
Expand Down
4 changes: 2 additions & 2 deletions docs/cs-basics/data-structure/bloom-filter.md
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ root@21396d02c252:/data# redis-cli

1. **`BF.ADD`**:将元素添加到布隆过滤器中,如果该过滤器尚不存在,则创建该过滤器。格式:`BF.ADD {key} {item}`。
2. **`BF.MADD`** : 将一个或多个元素添加到“布隆过滤器”中,并创建一个尚不存在的过滤器。该命令的操作方式`BF.ADD`与之相同,只不过它允许多个输入并返回多个值。格式:`BF.MADD {key} {item} [item ...]` 。
3. **`BF.EXISTS` ** : 确定元素是否在布隆过滤器中存在。格式:`BF.EXISTS {key} {item}`。
3. **`BF.EXISTS`** : 确定元素是否在布隆过滤器中存在。格式:`BF.EXISTS {key} {item}`。
4. **`BF.MEXISTS`** : 确定一个或者多个元素是否在布隆过滤器中存在格式:`BF.MEXISTS {key} {item} [item ...]`。

另外,`BF.RESERVE` 命令需要单独介绍一下:
Expand All @@ -272,7 +272,7 @@ root@21396d02c252:/data# redis-cli
下面简单介绍一下每个参数的具体含义:

1. key:布隆过滤器的名称
2. error_rate :误报的期望概率。这应该是介于 0 到 1 之间的十进制值。例如,对于期望的误报率 0.1%(1000 中为 1),error_rate 应该设置为 0.001。该数字越接近零,则每个项目的内存消耗越大,并且每个操作的 CPU 使用率越高。
2. error_rate : 期望的误报率。该值必须介于 0 到 1 之间。例如,对于期望的误报率 0.1%(1000 中为 1),error_rate 应该设置为 0.001。该数字越接近零,则每个项目的内存消耗越大,并且每个操作的 CPU 使用率越高。
3. capacity: 过滤器的容量。当实际存储的元素个数超过这个值之后,性能将开始下降。实际的降级将取决于超出限制的程度。随着过滤器元素数量呈指数增长,性能将线性下降。

可选参数:
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<mxfile host="Electron" modified="2021-05-29T04:42:25.021Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="9xBcn-ucL7HJWro9_3VJ" version="13.4.5" type="device"><diagram id="uNQEILGOwt5n9zeOTizL" name="Page-1">7V1bc6O4Ev41PI4LXRGPtuPMPpytmjqzVbv7dAobbLNLjBeTSbK//ggMGLC4GMuIDCSpChJYQupPn1rdLVlDy5f3r4F13P/q246nQd1+19CTBiEAOuX/opyPc45pGueMXeDayUOXjO/uv06SqSe5r67tnAoPhr7vhe6xmLnxDwdnExbyrCDw34qPbX2vWOvR2jlXGd83lned+7trh/tzLoPGJf8Xx93t05oBNc93Xqz04aQlp71l+2+5LLTS0DLw/fB89fK+dLyo89J+OX/uueJu9mKBcwjbfMB13M3//vXf0Jevf32cdPzP0/r0JSnlh+W9Jg3WIPV4eYs1v9hFF/y/9XLkF4f16XhOxw9sfV4vb1b4kfQV/efVT298OcWSnPMHIDm+X26mpeppMfyFzyVltaXZuTeAhYogbxiXP08s3vZu6Hw/WpvozhuHIM/bhy8eTwF+aZ2OZ1Bs3XfHjt7N9byl7/lBXBDabh262fD8Uxj4fzu5O7ZhrnU9q/yHE4TOe2XPg0yefCA4/osTBh/8keQDiCYQSMYATNNvOUQlWfscmNI8K8HwLiv5ImZ+kUj6BqlDgdTLXXyw59Hw4amDf3CK3crbHXz8kU/8mU88Re3Ws9RHkura9459NURLPc/f3H8NNk5Nk1HCHVawc8KmAXEtyZykiEBSaV7geFbo/ii+rkh8SQ3ffDceRClQcBEohJQQcG5m8qn8WC8XZJYK0ksFnfvhqqAYTVmzuwMMtaIVCTQCR0QjmNGCUBFRTCO4Usqno3XoLtQrrACxOLO8c3U/h5Qh0oclZdLXWEYjGsuAFKWMkWIp076kTEYkZQzwsKRs3Kv4vbvhH7nrP1NFj19ftL4okSp9maqYJQavKuJPqSrSjqoi0VkRoxj2qiqyeyEpXIvoDQBLgazngAxqgfwpIEmUQrI8p3VevTA2gwxDA0BsYAoBKmlE4ts9AdaUBdjPw4i0JfyQSvgRZM4oQgRhRrjyAUARjMCcmcA0MeN3MNWNbtDEuLgGI7jfhXVqFn38mguPaM2FwMC0cSCyy96rqNXPb2JaappHP8WsCHSx9HuaFvXCdAXM4mRmgJkBiAGZQTiFsVLxradMJCwmrQQLX6EvzoKVnCV5bUlHtLYkdGicJTL63q/Jy1eMMt1/BgySX8jO9CxdwZE88c0JXN5hTpDkSeSzdKAMW8/CJpuZlEIT6JirWowUYUj1GTFw5CElkBFKaDdCI6ioaOG+Fa1q47Zk0jJGRFoAVFgtlJFWtXVbsj7NRqRPZ/IajJhF5u1ui/YZ+bx2pmZNGaucWQDja3QzU2INVrSeE8BnaD1n9+k4tQBKZ4RWmpcIQjOMLm/Rs7J8t4n+J0CqOqN6LwAsmxuubPePxpjI5p5NV51DMSq89J97KjNK7nig2h0PpNmfb1pmieih3vPXflpqXBilIZTN8xdTSR8UlpbkXR0g1CgV1HP4VtqOHiJ7zBGpxaykFkPVJhsoMjM/RM6lpfIm6+DLJ7kQEP+5LgzctkL+KaFDBgedaqOubIrQRyRnXJIzgqrlXB3KOwV5dhazaQ5NzCJz501aZU+RYTK1ytZWkWFplV0jvQxWjPRCPUd6QZGt9f6Vi3zDhgqMnftCGcbK007Z29IaY6AUm1XUWrDSyC0ozQp809JZJpzabmPK7TBUACeGUU0oFtKlhGIZVSH0faFJZKl9jGZERqQaXVGRctXo7gjlnmKxlExbhtJpC9WFVkEqJbSKiovJFuIqQ6ugyBj8EA6CI6IgUp5ZsGIKSme2UVEQbEtB5nApCIFadpBDQQjX8tyjt3r3ZkNGI6IgY2gGIgQlUVD7ZXi35b5MCmrrdkRKoxaM+gBzORRkNASYK6Wg3mzUY1qIZU7nwWhBsmzUn4mC2mpBSO3eO1JLQaYUCiJmHQVhtRTUWxyxMSIKonhoFHS3Bbk7Bd0YzymThIy2JKR0/3k/JCTer5f55pSSULVFuvueFV3ISiuqsWfNhNqKaIxoc5JcMKStDG2BtXk+auPmbS2cMsLiwCnyTDKw8qSUZFmeuzvw5IajPNqjtYgIyN1Y3jy58eLatlfFgIH/erAjvnuSxWAl5y0RxO3UDQn5DHabNXvjWaeTu6kgsRks7J+r5TGJfISUGp2NkoMCl2eb1lad8klfsFTQo+nitkjiBigAPkvk5rSZDnH9vPbYvZRqMcKazl9sjZESf9CenZypwlWHkdPeOkaXobX2SuqOiGNP/JXD5KDfSOgbPjlY7iEGAYjTnmcdT25c2PmJvevZ/7E+/NcwrSZNlfVS23LYVqiX0g1z1ltJS+PSBg4q0EsN2KdiilscGJHKibczdC3vv1zBtw67NiK7Fokd+MffUnUwyjhGCHSC1Q/ehSfteoNQMj2H/jG56Tnb9LNrPwz9lyQRJL2VFRp3FVnwP955y0gLJrw1S54GlzT/ix4PwqV/4KK33FiQjnUK35xT2FbqNUOglkmEsi6H0MiTtcgUK0WrKyuLLleG3hvWm0XdTiLk4vO8rQvk7kaTz6W/9eK5bM+VQOdwHyyabb60V1RUG0Elo6IpHntChHgpcD1H9AuQ6hMNJAOkKZJ7Aoj4cASBj69fhFQbMSUjBE4I6YQQphoh1ccES0ZIk7N/Qoj45A3BSqRfhFTbICUjpOmAwgkh4rMOddUIqT59QDJCmrz1E0LECFGuqVZHtUpGCJ0Q0gUhWLWmmpppH4+QJnf7hJD6fczKEFIdlirZF8oq0dDC0TlehBDVmiqpNqNKRog5IaSbwUw1Qh7xNWZChBTOuJgg0h4iqlVV0iImdfK7SfW7fRRFqswNR3qzlp5rmPTQ6gE4HDccaREhOkJxDMQHRiTs2W/p4bjrOKPxIkS5E4zIN0/edtzdtTt1skF0g5JyG0RvdszGYzQniAzTXZZW1gNEprCdThBR7i+j1ZZM2RCZHGbdIKJaraXVpswpLGMICFHuMKO9RYdOwX/dEKJaWaWP+MIrIWTu+gb48SJEucOMVhs8JSMETgjpZl1TjZDq8FDJCLnrS/NGjBDlmqrAALsi2mKlzVfaCmuLZ20Oot3lpq6ZS20FNRZftPr6CNMU2dO+uuH+dR3vWF9pJtNWpsYMzeS1sKjSqDqiMRZtZq/AVPIWTxmWgzbABVi8c55o5kIzV9HFHGvsSUojvz09N749by/vAT50ovY+ayZN3oV3ftQVhjZHuT4xogvTiGWx1Bbz+OHn+MKIHkj1lcHt2vesteMtrM3fuzi/XDnvmmTzKcBJOrdLdBH/th2CDWe4lb/my7gefFDksizvA28x+ngy8CNEZPe+8r7Z/+rbTvTE/wE=</diagram></mxfile>
<mxfile host="Electron" modified="2021-09-13T02:02:53.966Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="dKxw4KtKSwJUg7jbYpyW" version="13.4.5" type="device"><diagram id="uNQEILGOwt5n9zeOTizL" name="Page-1">5VpLc+I4EP41OoaynpaOPJzsZatSNYedOW0ZWwHvGMwYM8D8+m3bsrGMCQwhhAyVQ9QtoUf3p+5PDYgOZ5un1F9M/05CHSPihBtER4gQjB0B/3LNttRIRUrFJI1CM2in+BL90kbpGO0qCvXSGpglSZxFC1sZJPO5DjJL56dpsraHvSSxverCn+g9xZfAj/e1/0RhNjWnIO5O/5eOJtNqZSxU2TPzq8HmJMupHybrhop6iA7TJMnK1mwz1HFuvMou5eceD/TWG0v1PDvlA5GOgn9/JWv68PTfdumwH6Px8sHM8tOPV+bAiIgY5huMoTHJG/Dfny2gMR8vF6VcDHhJYF04VrY1thI/VknV8bAsPNmHAYQvNrvOalanmgY2XM5Ur1apGzsg1kIEDgb+B2GwnkaZ/rLwg7xnDRAE3TSbxSBhaPrLRQmKl2ijw3xvURwPkzhJi4noy4sWQQD6ZZYm33WjJ3TV2HHqxZtmrmym00xvGipj9iedzHSWbmGI6aXCQMDcAVLJ6waijGraAFOl8w2GJ/XMOzdDw3j6N7xOOrzeNvE87OfXB6R5Mte2WcEU6fZrU/jWFEb5uZ1a2hrpgrZfJqs00K+ckJpQ4acTnR3Hvw6tKLDvyYaneIenKl2qYz+Lftqxo8t9ZoXnJCouUQUUZgOF8xYCynObTzXvensi1ZrIaU1UGmZvogJN9bHPBxg9KaxcIIyQOwojTArLqZR/cBhhB728XPjz8526hxXc7c5aVy73Z3iZUOe2vMyvdZfpHd1lzG0vM/rBXhbX8jK/Iy8zzG7Ly+5bid8myr422t8qogftHevLhYr01VSxFm6NKrI/gyqKM6kid6SNUUauShXlWyHZ+RZxjgCsArLTADJ+Fci3CEl+W5Bs57SzXy9S9ohkxMWEuUwQTFuMqLv7SoBVlwLszUZEcSL86E3Bj1PVE5RyyiQH8oGxDUasegorxST0MOG450GTMfsNxtl1H9ZVWfT931zsjt5cFN8YG8ddddm3ErXX81t3WDqWR28xK1bOvJG4RB0rXWFlJzMX91zMXSJdDiFMtqY/OWXSzmmqRVjnFq4Vs8jBmHXht6W4o7clF7cWs7qKvm9n8pcnRjX372GXNx+yPaeWD8RIEJ51GoHBdGp058ez6l58Mp7FlOwpIYjCDgOqJbkNQ+H0uMvyb0g5kVxwcV5A49QmWuzaROtwcfvCQcu9o6DV/lrqo2vb+HBx+8J0Wt4Rna5/8tCuTX2Ym7uq2+e92Xv805SZjhNl1plYTkhd/CMTEJbwlFc113WlXWTnGBK50ygPnZmBsBA9Lg5WoTilPUZ3u7gyp36PSv7VkLkHuONQ5Z8BmZRdBZntcsVe7f+dwSc6wOdxNPBQ30MeQ4NH1MfIEwjSvRoijyBZNGy6FNSI2SVPQJVSlO7n06com67G+ZzSQ0oiTyHpIgWryHzRfDmOpESKHGJTZhejOjOnp2R3zDqzOyymBkh5eaPPkBxd5JDPo8eju4fzggWANObnfURKmL2A8XNTuKhPGzZx84ZyC18M0aBfDH4sGm4+oMq4jagBOT6zQ4V9wU0oaUYDo/LjaDIHMYDrnj+PBjljiAI/7puOWRSG8SEWkyareZhzliLYxP5YxwM/+D4p9O3FwTTmp6KQw0q5EYAGxd+FSoPuccpa851mSCG/T2ZA3P0ctLysux/VUu9/</diagram></mxfile>
Binary file modified docs/cs-basics/data-structure/pictures/树/完全二叉树.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 0 additions & 10 deletions docs/database/Redis/redis-all.md
Original file line number Diff line number Diff line change
Expand Up @@ -791,13 +791,3 @@ Cache Aside Pattern 中遇到写请求是这样的:更新 DB,然后直接删
- Redis 命令总结:http://Redisdoc.com/string/set.html
- 通俗易懂的 Redis 数据结构基础教程:[https://juejin.im/post/5b53ee7e5188251aaa2d2e16](https://juejin.im/post/5b53ee7e5188251aaa2d2e16)
- WHY Redis choose single thread (vs multi threads): [https://medium.com/@jychen7/sharing-redis-single-thread-vs-multi-threads-5870bd44d153](https://medium.com/@jychen7/sharing-redis-single-thread-vs-multi-threads-5870bd44d153)

### 20. 公众号

如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。

**《Java 面试突击》:** 由本文档衍生的专为面试而生的《Java 面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java 面试突击"** 即可免费领取!

**Java 工程师必备学习资源:** 一些 Java 工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。

![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png)
34 changes: 28 additions & 6 deletions docs/database/mysql/InnoDB对MVCC的实现.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,24 @@

### ReadView

```c
class ReadView {
/* ... */
private:
trx_id_t m_low_limit_id; /* 大于这个 ID 的事务均不可见 */

trx_id_t m_up_limit_id; /* 小于这个 ID 的事务均可见 */

trx_id_t m_creator_trx_id; /* 创建该 Read View 的事务ID */

trx_id_t m_low_limit_no; /* 事务 Number, 小于该 Number 的 Undo Logs 均可以被 Purge */

ids_t m_ids; /* 创建 Read View 时的活跃事务列表 */

m_closed; /* 标记 Read View 是否 close */
}
```

[`Read View`](https://github.com/facebook/mysql-8.0/blob/8.0/storage/innobase/include/read0types.h#L298) 主要是用来做可见性判断,里面保存了 “当前对本事务不可见的其他活跃事务”

主要有以下字段:
Expand All @@ -65,6 +83,10 @@
- `m_ids`:`Read View` 创建时其他未提交的活跃事务 ID 列表。创建 `Read View`时,将当前未提交事务 ID 记录下来,后续即使它们修改了记录行的值,对于当前事务也是不可见的。`m_ids` 不包括当前事务自己和已提交的事务(正在内存中)
- `m_creator_trx_id`:创建该 `Read View` 的事务 ID

**事务可见性示意图**([图源](https://leviathan.vip/2019/03/20/InnoDB%E7%9A%84%E4%BA%8B%E5%8A%A1%E5%88%86%E6%9E%90-MVCC/#MVCC-1)):

![trans_visible](https://leviathan.vip/2019/03/20/InnoDB%E7%9A%84%E4%BA%8B%E5%8A%A1%E5%88%86%E6%9E%90-MVCC/trans_visible.jpg)

### undo-log

`undo log` 主要有两个作用:
Expand All @@ -90,23 +112,23 @@

![](https://ddmcc-1255635056.file.myqcloud.com/6a276e7a-b0da-4c7b-bdf7-c0c7b7b3b31c.png)

不同事务或者相同事务的对同一记录行的修改,会使该记录行的 `undo log` 成为一条链表,链首就是最新的记录,链尾就是最早的旧记录
不同事务或者相同事务的对同一记录行的修改,会使该记录行的 `undo log` 成为一条链表,链首就是最新的记录,链尾就是最早的旧记录

### 数据可见性算法

在 `InnoDB` 存储引擎中,创建一个新事务后,执行每个 `select` 语句前,都会创建一个快照(Read View),**快照中保存了当前数据库系统中正处于活跃(没有 commit)的事务的 ID 号**。其实简单的说保存的是系统中当前不应该被本事务看到的其他事务 ID 列表(即 m_ids)。当用户在这个事务中要读取某个记录行的时候,`InnoDB` 会将该记录行的 `DB_TRX_ID` 与 `Read View` 中的一些变量及当前事务 ID 进行比较,判断是否满足可见性条件

[具体的比较算法](https://github.com/facebook/mysql-8.0/blob/8.0/storage/innobase/include/read0types.h#L161)如下:[图源](https://leviathan.vip/2019/03/20/InnoDB%E7%9A%84%E4%BA%8B%E5%8A%A1%E5%88%86%E6%9E%90-MVCC/#MVCC-1)

![markdown](https://ddmcc-1255635056.file.myqcloud.com/8778836b-34a8-480b-b8c7-654fe207a8c2.png)
![](https://ddmcc-1255635056.file.myqcloud.com/8778836b-34a8-480b-b8c7-654fe207a8c2.png)

1. 如果记录 DB_TRX_ID < m_up_limit_id,那么表明最新修改该行的事务(DB_TRX_ID)在当前事务创建快照之前就提交了,所以该记录行的值对当前事务是可见的

2. 如果 DB_TRX_ID >= m_low_limit_id,那么表明最新修改该行的事务(DB_TRX_ID)在当前事务创建快照之后才修改该行,所以该记录行的值对当前事务不可见。跳到步骤 5

3. m_ids 为空,则表明在当前事务创建快照之前,修改该行的事务就已经提交了,所以该记录行的值对当前事务是可见的

4. 如果 m_up_limit_id <= DB_TRX_ID < m_up_limit_id,表明最新修改该行的事务(DB_TRX_ID)在当前事务创建快照的时候可能处于“活动状态”或者“已提交状态”;所以就要对活跃事务列表 m_ids 进行查找(源码中是用的二分查找,因为是有序的)
4. 如果 m_low_limit_id <= DB_TRX_ID < m_up_limit_id,表明最新修改该行的事务(DB_TRX_ID)在当前事务创建快照的时候可能处于“活动状态”或者“已提交状态”;所以就要对活跃事务列表 m_ids 进行查找(源码中是用的二分查找,因为是有序的)

- 如果在活跃事务列表 m_ids 中能找到 DB_TRX_ID,表明:① 在当前事务创建快照前,该记录行的值被事务 ID 为 DB_TRX_ID 的事务修改了,但没有提交;或者 ② 在当前事务创建快照后,该记录行的值被事务 ID 为 DB_TRX_ID 的事务修改了。这些情况下,这个记录行的值对当前事务都是不可见的。跳到步骤 5

Expand Down Expand Up @@ -149,7 +171,7 @@

- 此时最新记录的 `DB_TRX_ID` 为 102,m_up_limit_id <= 102 < m_low_limit_id,所以要在 `m_ids` 列表中查找,发现 `DB_TRX_ID` 存在列表中,那么这个记录不可见

- 根据 `DB_ROLL_PTR` 找到 `undo log` 中的上一版本记录,上一条记录的 `DB_TRX_ID` 为 101,满足 102 < m_up_limit_id,记录可见,所以在 `T6` 时间点查询到数据为 `name = 李四`,与时间 T4 查询到的结果不一致,不可重复读!
- 根据 `DB_ROLL_PTR` 找到 `undo log` 中的上一版本记录,上一条记录的 `DB_TRX_ID` 为 101,满足 101 < m_up_limit_id,记录可见,所以在 `T6` 时间点查询到数据为 `name = 李四`,与时间 T4 查询到的结果不一致,不可重复读!

3. **`时间线来到 T9 ,数据的版本链为`:**

Expand Down Expand Up @@ -210,6 +232,6 @@
## 参考

- **《MySQL 技术内幕 InnoDB 存储引擎第 2 版》**

- [Innodb 中的事务隔离级别和锁的关系](https://tech.meituan.com/2014/08/20/innodb-lock.html)
- [MySQL 事务与 MVCC 如何实现的隔离级别](https://blog.csdn.net/qq_35190492/article/details/109044141)
- [MySQL 事务与 MVCC 如何实现的隔离级别](https://blog.csdn.net/qq_35190492/article/details/109044141)
- [InnoDB 事务分析-MVCC](https://leviathan.vip/2019/03/20/InnoDB%E7%9A%84%E4%BA%8B%E5%8A%A1%E5%88%86%E6%9E%90-MVCC/)
Loading