Skip to content

Commit 7346e50

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents 643aebb + 67fe023 commit 7346e50

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1342
-486
lines changed

README.md

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
推荐你通过在线阅读网站进行阅读,体验更好,速度更快!
2-
3-
- **[JavaGuide 在线阅读网站(新版,推荐 👍)](https://javaguide.cn/)**
4-
- [JavaGuide 在线阅读版(老版)](https://snailclimb.gitee.io/javaguide/#/)
1+
推荐你通过在线阅读网站进行阅读,体验更好,速度更快!地址:[javaguide.cn](https://javaguide.cn/)
52

63
[<img src="https://oss.javaguide.cn/xingqiu/xingqiu.png" style="width:850px;margin: 0 auto" />](https://sourl.cn/e7ee87)
74

@@ -32,9 +29,10 @@
3229

3330
## 项目相关
3431

35-
- [项目介绍](./docs/javaguide/intro.md)
36-
- [贡献指南](./docs/javaguide/contribution-guideline.md)
37-
- [常见问题](./docs/javaguide/faq.md)
32+
- [项目介绍](https://javaguide.cn/javaguide/intro.html)
33+
- [使用建议](https://javaguide.cn/javaguide/use-suggestion.html)
34+
- [贡献指南](https://javaguide.cn/javaguide/contribution-guideline.html)
35+
- [常见问题](https://javaguide.cn/javaguide/faq.html)
3836

3937
## Java
4038

@@ -73,6 +71,7 @@
7371
- [HashMap 核心源码+底层数据结构分析](./docs/java/collection/hashmap-source-code.md)
7472
- [ConcurrentHashMap 核心源码+底层数据结构分析](./docs/java/collection/concurrent-hash-map-source-code.md)
7573
- [CopyOnWriteArrayList 核心源码分析](./docs/java/collection/copyonwritearraylist-source-code.md)
74+
- [ArrayBlockingQueue 核心源码分析](./docs/java/collection/arrayblockingqueue-source-code.md)
7675

7776
### IO
7877

@@ -353,12 +352,13 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
353352

354353
### 分布式 ID
355354

356-
- [分布式 ID 常见知识点&面试题总结](https://javaguide.cn/distributed-system/distributed-id.html)
355+
- [分布式ID介绍&实现方案总结](https://javaguide.cn/distributed-system/distributed-id.html)
357356
- [分布式 ID 设计指南](https://javaguide.cn/distributed-system/distributed-id-design.html)
358357

359358
### 分布式锁
360359

361-
[分布式锁常见知识点&面试题总结](https://javaguide.cn/distributed-system/distributed-lock.html)
360+
- [分布式锁介绍](https://javaguide.cn/distributed-system/distributed-lock.html)
361+
- [分布式锁常见实现方案总结](https://javaguide.cn/distributed-system/distributed-lock-implementations.html)
362362

363363
### 分布式事务
364364

docs/.vuepress/navbar.ts

+21-5
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,34 @@ import { navbar } from "vuepress-theme-hope";
22

33
export default navbar([
44
{ text: "面试指南", icon: "java", link: "/home.md" },
5-
{
6-
text: "知识星球",
7-
icon: "planet",
8-
link: "/about-the-author/zhishixingqiu-two-years.md",
9-
},
105
{ text: "开源项目", icon: "github", link: "/open-source-project/" },
116
{ text: "技术书籍", icon: "book", link: "/books/" },
127
{
138
text: "程序人生",
149
icon: "article",
1510
link: "/high-quality-technical-articles/",
1611
},
12+
{
13+
text: "知识星球",
14+
icon: "planet",
15+
children: [
16+
{
17+
text: "星球介绍",
18+
icon: "about",
19+
link: "/about-the-author/zhishixingqiu-two-years.md",
20+
},
21+
{
22+
text: "星球专属优质专栏",
23+
icon: "about",
24+
link: "/zhuanlan/",
25+
},
26+
{
27+
text: "星球优质主题汇总",
28+
icon: "star",
29+
link: "https://www.yuque.com/snailclimb/rpkqw1/ncxpnfmlng08wlf1",
30+
},
31+
],
32+
},
1733
{
1834
text: "网站相关",
1935
icon: "about",

docs/.vuepress/sidebar/index.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export default sidebar({
1313
"/high-quality-technical-articles/": highQualityTechnicalArticles,
1414
"/zhuanlan/": [
1515
"java-mian-shi-zhi-bei",
16+
"back-end-interview-high-frequency-system-design-and-scenario-questions",
1617
"handwritten-rpc-framework",
1718
"source-code-reading",
1819
],
@@ -89,6 +90,7 @@ export default sidebar({
8990
"hashmap-source-code",
9091
"concurrent-hash-map-source-code",
9192
"copyonwritearraylist-source-code",
93+
"arrayblockingqueue-source-code",
9294
],
9395
},
9496
],
@@ -472,7 +474,7 @@ export default sidebar({
472474
{
473475
text: "分布式锁",
474476
icon: "lock",
475-
children: ["distributed-lock"],
477+
children: ["distributed-lock", "distributed-lock-implementations"],
476478
},
477479
{
478480
text: "RPC",

docs/cs-basics/data-structure/bloom-filter.md

+9-7
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ tag:
2222

2323
布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于 1970 年提出的。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的的 List、Map、Set 等数据结构,它占用空间更少并且效率更高,但是缺点是其返回的结果是概率性的,而不是非常准确的。理论情况下添加到集合中的元素越多,误报的可能性就越大。并且,存放在布隆过滤器的数据不容易删除。
2424

25-
![布隆过滤器示意图](https://oss.javaguide.cn/github/javaguide/%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8-bit%E6%95%B0%E7%BB%84.png)
25+
Bloom Filter 会使用一个较大的 bit 数组来保存所有的数据,数组中的每个元素都只占用 1 bit ,并且每个元素只能是 0 或者 1(代表 false 或者 true),这也是 Bloom Filter 节省内存的核心所在。这样来算的话,申请一个 100w 个元素的位数组只占用 1000000Bit / 8 = 125000 Byte = 125000/1024 kb ≈ 122kb 的空间。
2626

27-
位数组中的每个元素都只占用 1 bit ,并且每个元素只能是 0 或者 1。这样申请一个 100w 个元素的位数组只占用 1000000Bit / 8 = 125000 Byte = 125000/1024 kb ≈ 122kb 的空间。
27+
![位数组](https://oss.javaguide.cn/github/javaguide/cs-basics/algorithms/bloom-filter-bit-table.png)
2828

2929
总结:**一个名叫 Bloom 的人提出了一种来检索元素是否在给定大集合中的数据结构,这种数据结构是高效且性能很好的,但缺点是具有一定的错误识别率和删除难度。并且,理论情况下,添加到集合中的元素越多,误报的可能性就越大。**
3030

@@ -40,9 +40,9 @@ tag:
4040
1. 对给定元素再次进行相同的哈希计算;
4141
2. 得到值之后判断位数组中的每个元素是否都为 1,如果值都为 1,那么说明这个值在布隆过滤器中,如果存在一个值不为 1,说明该元素不在布隆过滤器中。
4242

43-
举个简单的例子
43+
Bloom Filter 的简单原理图如下
4444

45-
![布隆过滤器hash计算](https://oss.javaguide.cn/github/javaguide/%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8-hash%E8%BF%90%E7%AE%97.png)
45+
![Bloom Filter 的简单原理示意图](https://oss.javaguide.cn/github/javaguide/cs-basics/algorithms/bloom-filter-simple-schematic-diagram.png)
4646

4747
如图所示,当字符串存储要加入到布隆过滤器中时,该字符串首先由多个哈希函数生成不同的哈希值,然后将对应的位数组的下标设置为 1(当位数组初始化时,所有位置均为 0)。当第二次存储相同字符串时,因为先前的对应位置已设置为 1,所以很容易知道此值已经存在(去重非常方便)。
4848

@@ -54,8 +54,10 @@ tag:
5454

5555
## 布隆过滤器使用场景
5656

57-
1. 判断给定数据是否存在:比如判断一个数字是否存在于包含大量数字的数字集中(数字集很大,5 亿以上!)、 防止缓存穿透(判断请求的数据是否有效避免直接绕过缓存请求数据库)等等、邮箱的垃圾邮件过滤、黑名单功能等等。
58-
2. 去重:比如爬给定网址的时候对已经爬取过的 URL 去重。
57+
1. 判断给定数据是否存在:比如判断一个数字是否存在于包含大量数字的数字集中(数字集很大,上亿)、 防止缓存穿透(判断请求的数据是否有效避免直接绕过缓存请求数据库)等等、邮箱的垃圾邮件过滤(判断一个邮件地址是否在垃圾邮件列表中)、黑名单功能(判断一个IP地址或手机号码是否在黑名单中)等等。
58+
2. 去重:比如爬给定网址的时候对已经爬取过的 URL 去重、对巨量的 QQ号/订单号去重。
59+
60+
去重场景也需要用到判断给定数据是否存在,因此布隆过滤器主要是为了解决海量数据的存在性问题。
5961

6062
## 编码实战
6163

@@ -256,7 +258,7 @@ RedisBloom 提供了多种语言的客户端支持,包括:Python、Java、Ja
256258

257259
**具体操作如下:**
258260

259-
```
261+
```bash
260262
~ docker run -p 6379:6379 --name redis-redisbloom redislabs/rebloom:latest
261263
~ docker exec -it redis-redisbloom bash
262264
root@21396d02c252:/data# redis-cli

docs/cs-basics/operating-system/linux-intro.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ Linux 系统是一个多用户多任务的分时操作系统,任何一个要
373373
- 用户级别环境变量 : `~/.bashrc``~/.bash_profile`
374374
- 系统级别环境变量 : `/etc/bashrc``/etc/environment``/etc/profile``/etc/profile.d`
375375

376-
上述配置文件执行先后顺序为:`/etc/enviroment` –> `/etc/profile` –> `/etc/profile.d` –> `~/.bash_profile` –> `/etc/bashrc` –> `~/.bashrc`
376+
上述配置文件执行先后顺序为:`/etc/environment` –> `/etc/profile` –> `/etc/profile.d` –> `~/.bash_profile` –> `/etc/bashrc` –> `~/.bashrc`
377377

378378
如果要修改系统级别环境变量文件,需要管理员具备对该文件的写入权限。
379379

docs/distributed-system/distributed-id.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: 分布式ID常见问题总结
2+
title: 分布式ID介绍&实现方案总结
33
category: 分布式
44
---
55

0 commit comments

Comments
 (0)