1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

[docs update]java基础&开源项目部分内容完善

This commit is contained in:
guide 2022-03-22 23:24:16 +08:00
parent 26afcc7706
commit 114a705b56
4 changed files with 19 additions and 12 deletions

View File

@ -11,21 +11,19 @@ tag:
## Paxos 算法介绍 ## Paxos 算法介绍
Paxos 算法是 Leslie Lamport[莱斯利·兰伯特](https://zh.wikipedia.org/wiki/莱斯利·兰伯特))在 **1990** 年提出了一种分布式系统共识算法。 Paxos 算法是 Leslie Lamport[莱斯利·兰伯特](https://zh.wikipedia.org/wiki/莱斯利·兰伯特))在 **1990** 年提出了一种分布式系统 **共识** 算法。这也是第一个被证明完备的共识算法(前提是不存在拜占庭将军问题,也就是没有恶意节点)
> 很多人会误把 Paxos 看作是一致性算法。 为了介绍 Paxos 算法,兰伯特专门写了一篇幽默风趣的论文。在这篇论文中,他虚拟了一个叫做 Paxos 的希腊城邦来更形象化地介绍 Paxos 算法。
>
> ⚠️注意:**Paxos 不是一致性算法而是共识算法,一致性和共识并不是一个概念。**
为了介绍 Paxos 算法,兰伯特专门写了一篇幽默风趣的论文。在这篇论文中,他虚拟了一个叫做 Paxos 的希腊城邦来更形象化地介绍 Paxos 算法。不过,审稿人可不觉得论文太幽默是一件好事,他们就给兰伯特说:“如果你想要成功发表这篇论文的话,必须删除所有 Paxos 相关的故事背景”。兰伯特一听就不开心了:“我凭什么修改啊,你们这些审稿人就是缺乏幽默细胞,发不了就不发了呗!”。 不过,审稿人并不认可这篇论文的幽默。于是,他们就给兰伯特说:“如果你想要成功发表这篇论文的话,必须删除所有 Paxos 相关的故事背景”。兰伯特一听就不开心了:“我凭什么修改啊,你们这些审稿人就是缺乏幽默细胞,发不了就不发了呗!”。
于是乎,提出 Paxos 算法的那篇论文在当时并没有被成功发表。 于是乎,提出 Paxos 算法的那篇论文在当时并没有被成功发表。
直到 1998 年,系统研究中心 (Systems Research CenterSRC的两个大佬需要找一些合适的算法来服务他们正在构建的分布式系统Paxos 算法刚好可以解决他们的部分需求。因此,兰伯特就把论文发给了他们。在看了论文之后,这俩大佬觉得论文还是挺不错的。于是,兰伯特在 **1998** 年重新发表论文 [《The Part-Time Parliament》](http://lamport.azurewebsites.net/pubs/lamport-paxos.pdf)。 直到 1998 年,系统研究中心 (Systems Research CenterSRC的两个技术研究员需要找一些合适的分布式算法来服务他们正在构建的分布式系统Paxos 算法刚好可以解决他们的部分需求。因此,兰伯特就把论文发给了他们。在看了论文之后,这俩大佬觉得论文还是挺不错的。于是,兰伯特在 **1998** 年重新发表论文 [《The Part-Time Parliament》](http://lamport.azurewebsites.net/pubs/lamport-paxos.pdf)。
论文发表之后,各路学者直呼看不懂,言语中还略显调侃之意。这谁忍得了,在 **2001** 年的时候,兰伯特又写了一篇 [《Paxos Made Simple》](http://lamport.azurewebsites.net/pubs/paxos-simple.pdf) 的论文来简化对 Paxos 的介绍,主要讲述两阶段共识协议部分。 论文发表之后,各路学者直呼看不懂,言语中还略显调侃之意。这谁忍得了,在 **2001** 年的时候,兰伯特专门又写了一篇 [《Paxos Made Simple》](http://lamport.azurewebsites.net/pubs/paxos-simple.pdf) 的论文来简化对 Paxos 的介绍,主要讲述两阶段共识协议部分,顺便还不忘嘲讽一下这群学者
这篇论文就 14 页,相比于 《The Part-Time Parliament》的33 页精简了不少。最关键的是这篇论文的摘要就一句话: 《Paxos Made Simple》这篇论文就 14 页,相比于 《The Part-Time Parliament》的33 页精简了不少。最关键的是这篇论文的摘要就一句话:
![](./images/paxos/paxos-made-simple.png) ![](./images/paxos/paxos-made-simple.png)
@ -42,7 +40,7 @@ Paxos 算法是 Leslie Lamport[莱斯利·兰伯特](https://zh.wikipedia.org
由于 Paxos 算法在国际上被公认的非常难以理解和实现因此不断有人尝试简化这一算法。到了2013 年才诞生了一个比 Paxos 算法更易理解和实现的共识算法—[Raft 算法](https://javaguide.cn/distributed-system/theorem&algorithm&protocol/raft-algorithm.html) 。更具体点来说Raft 是Multi-Paxos的一个变种其简化了 Multi-Paxos 的思想,变得更容易被理解以及工程实现。 由于 Paxos 算法在国际上被公认的非常难以理解和实现因此不断有人尝试简化这一算法。到了2013 年才诞生了一个比 Paxos 算法更易理解和实现的共识算法—[Raft 算法](https://javaguide.cn/distributed-system/theorem&algorithm&protocol/raft-algorithm.html) 。更具体点来说Raft 是Multi-Paxos的一个变种其简化了 Multi-Paxos 的思想,变得更容易被理解以及工程实现。
Paxos是第一个被证明完备的共识算法前提是不存在拜占庭将军问题也就是没有恶意节点,除了 Raft 算法之外,当前最常用的一些共识算法比如 ZAB 协议、 Fast Paxos 算法都是基于 Paxos 算法改进的。 针对没有恶意节点的情况,除了 Raft 算法之外,当前最常用的一些共识算法比如 ZAB 协议、 Fast Paxos 算法都是基于 Paxos 算法改进的。
针对存在恶意节点的情况一般使用的是工作量证明POWProof-of-Work、权益证明PoSProof-of-Stake )等共识算法。这类共识算法最典型的应用就是区块链,就比如说前段时间以太坊官方宣布其共识机制正在从工作量证明(PoW)转变为权益证明(PoS)。 针对存在恶意节点的情况一般使用的是工作量证明POWProof-of-Work、权益证明PoSProof-of-Stake )等共识算法。这类共识算法最典型的应用就是区块链,就比如说前段时间以太坊官方宣布其共识机制正在从工作量证明(PoW)转变为权益证明(PoS)。
@ -56,6 +54,10 @@ Paxos是第一个被证明完备的共识算法前提是不存在拜占庭将
## 一致性Consistency与共识Consensus ## 一致性Consistency与共识Consensus
很多人会误把 Paxos 看作是一致性算法,这其实是一个非常大的误区。
⚠️注意:**Paxos 不是一致性算法而是共识算法,一致性和共识并不是一个概念。**
## Basic Paxos 算法 ## Basic Paxos 算法

View File

@ -640,11 +640,11 @@ public class VariableLengthArgument {
Java 中有 8 种基本数据类型,分别为: Java 中有 8 种基本数据类型,分别为:
1. 6 种数字类型: - 6 种数字类型:
- 4 种整数型:`byte``short``int``long` - 4 种整数型:`byte``short``int``long`
- 2 种浮点型:`float``double` - 2 种浮点型:`float``double`
2. 1 种字符类型:`char` - 1 种字符类型:`char`
3. 1 种布尔型:`boolean` - 1 种布尔型:`boolean`
这 8 种基本数据类型的默认值以及所占空间的大小如下: 这 8 种基本数据类型的默认值以及所占空间的大小如下:

View File

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

View File

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