Skip to content

Commit 114a705

Browse files
committed
[docs update]java基础&开源项目部分内容完善
1 parent 26afcc7 commit 114a705

File tree

4 files changed

+19
-12
lines changed

4 files changed

+19
-12
lines changed

Diff for: docs/distributed-system/theorem&algorithm&protocol/paxos-algorithm.md

+11-9
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,19 @@ tag:
1111

1212
## Paxos 算法介绍
1313

14-
Paxos 算法是 Leslie Lamport([莱斯利·兰伯特](https://zh.wikipedia.org/wiki/莱斯利·兰伯特))在 **1990** 年提出了一种分布式系统共识算法
14+
Paxos 算法是 Leslie Lamport([莱斯利·兰伯特](https://zh.wikipedia.org/wiki/莱斯利·兰伯特))在 **1990** 年提出了一种分布式系统 **共识** 算法。这也是第一个被证明完备的共识算法(前提是不存在拜占庭将军问题,也就是没有恶意节点)
1515

16-
> 很多人会误把 Paxos 看作是一致性算法。
17-
>
18-
> ⚠️注意:**Paxos 不是一致性算法而是共识算法,一致性和共识并不是一个概念。**
16+
为了介绍 Paxos 算法,兰伯特专门写了一篇幽默风趣的论文。在这篇论文中,他虚拟了一个叫做 Paxos 的希腊城邦来更形象化地介绍 Paxos 算法。
1917

20-
为了介绍 Paxos 算法,兰伯特专门写了一篇幽默风趣的论文。在这篇论文中,他虚拟了一个叫做 Paxos 的希腊城邦来更形象化地介绍 Paxos 算法。不过,审稿人可不觉得论文太幽默是一件好事,他们就给兰伯特说:“如果你想要成功发表这篇论文的话,必须删除所有 Paxos 相关的故事背景”。兰伯特一听就不开心了:“我凭什么修改啊,你们这些审稿人就是缺乏幽默细胞,发不了就不发了呗!”。
18+
不过,审稿人并不认可这篇论文的幽默。于是,他们就给兰伯特说:“如果你想要成功发表这篇论文的话,必须删除所有 Paxos 相关的故事背景”。兰伯特一听就不开心了:“我凭什么修改啊,你们这些审稿人就是缺乏幽默细胞,发不了就不发了呗!”。
2119

2220
于是乎,提出 Paxos 算法的那篇论文在当时并没有被成功发表。
2321

24-
直到 1998 年,系统研究中心 (Systems Research Center,SRC)的两个大佬需要找一些合适的算法来服务他们正在构建的分布式系统,Paxos 算法刚好可以解决他们的部分需求。因此,兰伯特就把论文发给了他们。在看了论文之后,这俩大佬觉得论文还是挺不错的。于是,兰伯特在 **1998** 年重新发表论文 [《The Part-Time Parliament》](http://lamport.azurewebsites.net/pubs/lamport-paxos.pdf)
22+
直到 1998 年,系统研究中心 (Systems Research Center,SRC)的两个技术研究员需要找一些合适的分布式算法来服务他们正在构建的分布式系统,Paxos 算法刚好可以解决他们的部分需求。因此,兰伯特就把论文发给了他们。在看了论文之后,这俩大佬觉得论文还是挺不错的。于是,兰伯特在 **1998** 年重新发表论文 [《The Part-Time Parliament》](http://lamport.azurewebsites.net/pubs/lamport-paxos.pdf)
2523

26-
论文发表之后,各路学者直呼看不懂,言语中还略显调侃之意。这谁忍得了,在 **2001** 年的时候,兰伯特又写了一篇 [《Paxos Made Simple》](http://lamport.azurewebsites.net/pubs/paxos-simple.pdf) 的论文来简化对 Paxos 的介绍,主要讲述两阶段共识协议部分。
24+
论文发表之后,各路学者直呼看不懂,言语中还略显调侃之意。这谁忍得了,在 **2001** 年的时候,兰伯特专门又写了一篇 [《Paxos Made Simple》](http://lamport.azurewebsites.net/pubs/paxos-simple.pdf) 的论文来简化对 Paxos 的介绍,主要讲述两阶段共识协议部分,顺便还不忘嘲讽一下这群学者
2725

28-
这篇论文就 14 页,相比于 《The Part-Time Parliament》的33 页精简了不少。最关键的是这篇论文的摘要就一句话:
26+
《Paxos Made Simple》这篇论文就 14 页,相比于 《The Part-Time Parliament》的33 页精简了不少。最关键的是这篇论文的摘要就一句话:
2927

3028
![](./images/paxos/paxos-made-simple.png)
3129

@@ -42,7 +40,7 @@ Paxos 算法是 Leslie Lamport([莱斯利·兰伯特](https://zh.wikipedia.org
4240

4341
由于 Paxos 算法在国际上被公认的非常难以理解和实现,因此不断有人尝试简化这一算法。到了2013 年才诞生了一个比 Paxos 算法更易理解和实现的共识算法—[Raft 算法](https://javaguide.cn/distributed-system/theorem&algorithm&protocol/raft-algorithm.html) 。更具体点来说,Raft 是Multi-Paxos的一个变种,其简化了 Multi-Paxos 的思想,变得更容易被理解以及工程实现。
4442

45-
Paxos是第一个被证明完备的共识算法(前提是不存在拜占庭将军问题,也就是没有恶意节点),除了 Raft 算法之外,当前最常用的一些共识算法比如 ZAB 协议、 Fast Paxos 算法都是基于 Paxos 算法改进的。
43+
针对没有恶意节点的情况,除了 Raft 算法之外,当前最常用的一些共识算法比如 ZAB 协议、 Fast Paxos 算法都是基于 Paxos 算法改进的。
4644

4745
针对存在恶意节点的情况,一般使用的是工作量证明(POW,Proof-of-Work)、权益证明(PoS,Proof-of-Stake )等共识算法。这类共识算法最典型的应用就是区块链,就比如说前段时间以太坊官方宣布其共识机制正在从工作量证明(PoW)转变为权益证明(PoS)。
4846

@@ -56,6 +54,10 @@ Paxos是第一个被证明完备的共识算法(前提是不存在拜占庭将
5654

5755
## 一致性(Consistency)与共识(Consensus)
5856

57+
很多人会误把 Paxos 看作是一致性算法,这其实是一个非常大的误区。
58+
59+
⚠️注意:**Paxos 不是一致性算法而是共识算法,一致性和共识并不是一个概念。**
60+
5961

6062

6163
## Basic Paxos 算法

Diff for: docs/java/basis/java-basic-questions-01.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -640,11 +640,11 @@ public class VariableLengthArgument {
640640
641641
Java 中有 8 种基本数据类型,分别为:
642642
643-
1. 6 种数字类型:
643+
- 6 种数字类型:
644644
- 4 种整数型:`byte`、`short`、`int`、`long`
645645
- 2 种浮点型:`float`、`double`
646-
2. 1 种字符类型:`char`
647-
3. 1 种布尔型:`boolean`。
646+
- 1 种字符类型:`char`
647+
- 1 种布尔型:`boolean`。
648648
649649
8 种基本数据类型的默认值以及所占空间的大小如下:
650650

Diff for: docs/java/basis/java-basic-questions-02.md

+4
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,10 @@ public final class String implements java.io.Serializable, Comparable<String>, C
285285
>
286286
> 新版的 String 其实支持两个编码方案: Latin-1UTF-16。如果字符串中包含的汉字没有超过 Latin-1 可表示范围内的字符,那就会使用 Latin-1 作为编码方案。Latin-1 编码方案下,`byte` 占一个字节(8位),`char` 占用2个字节(16),`byte` 相较 `char` 节省一半的内存空间。
287287
>
288+
> JDK 官方就说了绝大部分字符串对象只包含 Latin-1 可表示的字符。
289+
>
290+
> ![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/jdk9-string-latin1.png)
291+
>
288292
> 如果字符串中包含的汉字超过 Latin-1 可表示范围内的字符,`byte` 和 `char` 所占用的空间是一样的。
289293
>
290294
> 这是官方的介绍:https://openjdk.java.net/jeps/254 。

Diff for: docs/open-source-project/tutorial.md

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ category: 开源项目
1717

1818
## 计算机基础
1919

20+
- **[cs-self-learning ](https://github.com/PKUFlyingPig/cs-self-learning)** :计算机自学指南,汇总欧美众多名校高质量计算机课程。
2021
- **[CS-Notes](https://github.com/CyC2018/CS-Notes "CS-Notes")** :技术面试必备基础知识、Leetcode 题解、后端面试、Java 面试、春招、秋招、操作系统、计算机网络、系统设计。
2122
- **[Waking-Up](https://github.com/wolverinn/Waking-Up)** :计算机基础(计算机网络/操作系统/数据库/Git...)面试问题全面总结。
2223

0 commit comments

Comments
 (0)