From 15dafd4de146c23bfbdcc7d5d71cfebe332f574b Mon Sep 17 00:00:00 2001 From: Guide Date: Mon, 27 Mar 2023 15:25:00 +0800 Subject: [PATCH] [docs add]Java20 new features --- README.md | 6 +- docs/.vuepress/sidebar.ts | 4 +- docs/home.md | 6 +- docs/java/new-features/java12-13.md | 22 +- docs/java/new-features/java14-15.md | 241 ++++++++++++++++++ docs/java/new-features/java14.md | 120 --------- docs/java/new-features/java15.md | 143 ----------- docs/java/new-features/java16.md | 4 +- docs/java/new-features/java17.md | 4 +- docs/java/new-features/java20.md | 169 ++++++++++++ docs/open-source-project/practical-project.md | 88 ++++--- docs/open-source-project/system-design.md | 158 ++++++------ docs/open-source-project/tool-library.md | 57 +++-- docs/open-source-project/tools.md | 42 +-- docs/open-source-project/tutorial.md | 1 + docs/zhuanlan/java-mian-shi-zhi-bei.md | 1 + 16 files changed, 620 insertions(+), 446 deletions(-) create mode 100644 docs/java/new-features/java14-15.md delete mode 100644 docs/java/new-features/java14.md delete mode 100644 docs/java/new-features/java15.md create mode 100644 docs/java/new-features/java20.md diff --git a/README.md b/README.md index 47498b77..74399fc0 100755 --- a/README.md +++ b/README.md @@ -120,13 +120,13 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle - [Java 9 新特性概览](./docs/java/new-features/java9.md) - [Java 10 新特性概览](./docs/java/new-features/java10.md) - [Java 11 新特性概览](./docs/java/new-features/java11.md) -- [Java 12~13 新特性概览](./docs/java/new-features/java12-13.md) -- [Java 14 新特性概览](./docs/java/new-features/java14.md) -- [Java 15 新特性概览](./docs/java/new-features/java15.md) +- [Java 12 & 13 新特性概览](./docs/java/new-features/java12-13.md) +- [Java 14 & 15 新特性概览](./docs/java/new-features/java14-15.md) - [Java 16 新特性概览](./docs/java/new-features/java16.md) - [Java 17 新特性概览](./docs/java/new-features/java17.md) - [Java 18 新特性概览](./docs/java/new-features/java18.md) - [Java 19 新特性概览](./docs/java/new-features/java19.md) +- [Java 20 新特性概览](./docs/java/new-features/java20.md) ## 计算机基础 diff --git a/docs/.vuepress/sidebar.ts b/docs/.vuepress/sidebar.ts index 6e28950c..7c9ad952 100644 --- a/docs/.vuepress/sidebar.ts +++ b/docs/.vuepress/sidebar.ts @@ -143,12 +143,12 @@ export const sidebarConfig = sidebar({ "java10", "java11", "java12-13", - "java14", - "java15", + "java14-15", "java16", "java17", "java18", "java19", + "java20", ], }, ], diff --git a/docs/home.md b/docs/home.md index 4c5f10b9..b63a0663 100644 --- a/docs/home.md +++ b/docs/home.md @@ -122,13 +122,13 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle - [Java 9 新特性概览](./java/new-features/java9.md) - [Java 10 新特性概览](./java/new-features/java10.md) - [Java 11 新特性概览](./java/new-features/java11.md) -- [Java 12~13 新特性概览](./java/new-features/java12-13.md) -- [Java 14 新特性概览](./java/new-features/java14.md) -- [Java 15 新特性概览](./java/new-features/java15.md) +- [Java 12 & 13 新特性概览](./java/new-features/java12-13.md) +- [Java 14 & 15 新特性概览](./java/new-features/java14-15.md) - [Java 16 新特性概览](./java/new-features/java16.md) - [Java 17 新特性概览](./java/new-features/java17.md) - [Java 18 新特性概览](./java/new-features/java18.md) - [Java 19 新特性概览](./java/new-features/java19.md) +- [Java 20 新特性概览](./java/new-features/java20.md) ## 计算机基础 diff --git a/docs/java/new-features/java12-13.md b/docs/java/new-features/java12-13.md index 79b877b4..e1d71432 100644 --- a/docs/java/new-features/java12-13.md +++ b/docs/java/new-features/java12-13.md @@ -1,5 +1,5 @@ --- -title: Java 12 ~ 13 新特性概览 +title: Java 12 & 13 新特性概览 category: Java tag: - Java新特性 @@ -266,6 +266,26 @@ public String translateEscapes() { } ``` +## 补充 + +### 关于预览特性 + +先贴一段 oracle 官网原文:`This is a preview feature, which is a feature whose design, specification, and implementation are complete, but is not permanent, which means that the feature may exist in a different form or not at all in future JDK releases. To compile and run code that contains preview features, you must specify additional command-line options.` + +这是一个预览功能,该功能的设计,规格和实现是完整的,但不是永久性的,这意味着该功能可能以其他形式存在或在将来的 JDK 版本中根本不存在。 要编译和运行包含预览功能的代码,必须指定其他命令行选项。 + +就以`switch`的增强为例子,从 Java12 中推出,到 Java13 中将继续增强,直到 Java14 才正式转正进入 JDK 可以放心使用,不用考虑后续 JDK 版本对其的改动或修改 + +一方面可以看出 JDK 作为标准平台在增加新特性的严谨态度,另一方面个人认为是对于预览特性应该采取审慎使用的态度。特性的设计和实现容易,但是其实际价值依然需要在使用中去验证 + +### JVM 虚拟机优化 + +每次 Java 版本的发布都伴随着对 JVM 虚拟机的优化,包括对现有垃圾回收算法的改进,引入新的垃圾回收算法,移除老旧的不再适用于今天的垃圾回收算法等 + +整体优化的方向是**高效,低时延的垃圾回收表现** + +对于日常的应用开发者可能比较关注新的语法特性,但是从一个公司角度来说,在考虑是否升级 Java 平台时更加考虑的是**JVM 运行时的提升** + ## 参考 - JDK Project Overview : diff --git a/docs/java/new-features/java14-15.md b/docs/java/new-features/java14-15.md new file mode 100644 index 00000000..7746cdf3 --- /dev/null +++ b/docs/java/new-features/java14-15.md @@ -0,0 +1,241 @@ +--- +title: Java 14 & 15 新特性概览 +category: Java +tag: + - Java新特性 +--- + +## Java14 + +### 空指针异常精准提示 + +通过 JVM 参数中添加`-XX:+ShowCodeDetailsInExceptionMessages`,可以在空指针异常中获取更为详细的调用信息,更快的定位和解决问题。 + +```java +a.b.c.i = 99; // 假设这段代码会发生空指针 +``` + +Java 14 之前: + +```java +Exception in thread "main" java.lang.NullPointerException + at NullPointerExample.main(NullPointerExample.java:5) +``` + +Java 14 之后: + +```java + // 增加参数后提示的异常中很明确的告知了哪里为空导致 +Exception in thread "main" java.lang.NullPointerException: + Cannot read field 'c' because 'a.b' is null. + at Prog.main(Prog.java:5) +``` + +### switch 的增强(转正) + +Java12 引入的 switch(预览特性)在 Java14 变为正式版本,不需要增加参数来启用,直接在 JDK14 中就能使用。 + +Java12 为 switch 表达式引入了类似 lambda 语法条件匹配成功后的执行块,不需要多写 break ,Java13 提供了 `yield` 来在 block 中返回值。 + +```java +String result = switch (day) { + case "M", "W", "F" -> "MWF"; + case "T", "TH", "S" -> "TTS"; + default -> { + if(day.isEmpty()) + yield "Please insert a valid day."; + else + yield "Looks like a Sunday."; + } + + }; +System.out.println(result); +``` + +### 预览新特性 + +#### record 关键字 + +`record` 关键字可以简化 **数据类**(一个 Java 类一旦实例化就不能再修改)的定义方式,使用 `record` 代替 `class` 定义的类,只需要声明属性,就可以在获得属性的访问方法,以及 `toString()`,`hashCode()`, `equals()`方法 + +类似于使用 `class` 定义类,同时使用了 lombok 插件,并打上了`@Getter,@ToString,@EqualsAndHashCode`注解 + +```java +/** + * 这个类具有两个特征 + * 1. 所有成员属性都是final + * 2. 全部方法由构造方法,和两个成员属性访问器组成(共三个) + * 那么这种类就很适合使用record来声明 + */ +final class Rectangle implements Shape { + final double length; + final double width; + + public Rectangle(double length, double width) { + this.length = length; + this.width = width; + } + + double length() { return length; } + double width() { return width; } +} +/** + * 1. 使用record声明的类会自动拥有上面类中的三个方法 + * 2. 在这基础上还附赠了equals(),hashCode()方法以及toString()方法 + * 3. toString方法中包括所有成员属性的字符串表示形式及其名称 + */ +record Rectangle(float length, float width) { } +``` + +#### 文本块 + +Java14 中,文本块依然是预览特性,不过,其引入了两个新的转义字符: + +- `\` : 表示行尾,不引入换行符 +- `\s` :表示单个空格 + +```java +String str = "凡心所向,素履所往,生如逆旅,一苇以航。"; + +String str2 = """ + 凡心所向,素履所往, \ + 生如逆旅,一苇以航。"""; +System.out.println(str2);// 凡心所向,素履所往, 生如逆旅,一苇以航。 +String text = """ + java + c++\sphp + """; +System.out.println(text); +//输出: +java +c++ php +``` + +#### instanceof 增强 + +依然是**预览特性** ,[Java 12 新特性](./java12-13.md)中介绍过。 + +### 其他 + +- 从 Java11 引入的 ZGC 作为继 G1 过后的下一代 GC 算法,从支持 Linux 平台到 Java14 开始支持 MacOS 和 Window(个人感觉是终于可以在日常开发工具中先体验下 ZGC 的效果了,虽然其实 G1 也够用) +- 移除了 CMS(Concurrent Mark Sweep) 垃圾收集器(功成而退) +- 新增了 jpackage 工具,标配将应用打成 jar 包外,还支持不同平台的特性包,比如 linux 下的`deb`和`rpm`,window 平台下的`msi`和`exe` + +## Java15 + +### CharSequence + +`CharSequence` 接口添加了一个默认方法 `isEmpty()` 来判断字符序列为空,如果是则返回 true。 + +```java +public interface CharSequence { + default boolean isEmpty() { + return this.length() == 0; + } +} +``` + +### TreeMap + +`TreeMap` 新引入了下面这些方法: + +- `putIfAbsent()` +- `computeIfAbsent()` +- `computeIfPresent()` +- `compute()` +- `merge()` + +### ZGC(转正) + +Java11 的时候 ,ZGC 还在试验阶段。 + +当时,ZGC 的出现让众多 Java 开发者看到了垃圾回收器的另外一种可能,因此备受关注。 + +经过多个版本的迭代,不断的完善和修复问题,ZGC 在 Java 15 已经可以正式使用了! + +不过,默认的垃圾回收器依然是 G1。你可以通过下面的参数启动 ZGC: + +```bash +$ java -XX:+UseZGC className +``` + +### EdDSA(数字签名算法) + +新加入了一个安全性和性能都更强的基于 Edwards-Curve Digital Signature Algorithm (EdDSA)实现的数字签名算法。 + +虽然其性能优于现有的 ECDSA 实现,不过,它并不会完全取代 JDK 中现有的椭圆曲线数字签名算法( ECDSA)。 + +```java +KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519"); +KeyPair kp = kpg.generateKeyPair(); + +byte[] msg = "test_string".getBytes(StandardCharsets.UTF_8); + +Signature sig = Signature.getInstance("Ed25519"); +sig.initSign(kp.getPrivate()); +sig.update(msg); +byte[] s = sig.sign(); + +String encodedString = Base64.getEncoder().encodeToString(s); +System.out.println(encodedString); +``` + +输出: + +``` +0Hc0lxxASZNvS52WsvnncJOH/mlFhnA8Tc6D/k5DtAX5BSsNVjtPF4R4+yMWXVjrvB2mxVXmChIbki6goFBgAg== +``` + +### 文本块(转正) + +在 Java 15 ,文本块是正式的功能特性了。 + +### 隐藏类(Hidden Classes) + +隐藏类是为框架(frameworks)所设计的,隐藏类不能直接被其他类的字节码使用,只能在运行时生成类并通过反射间接使用它们。 + +### 预览新特性 + +#### 密封类 + +**密封类(Sealed Classes)** 是 Java 15 中的一个预览新特性。 + +没有密封类之前,在 Java 中如果想让一个类不能被继承和修改,我们可以使用`final` 关键字对类进行修饰。不过,这种方式不太灵活,直接把一个类的继承和修改渠道给堵死了。 + +密封类可以对继承或者实现它们的类进行限制,这样这个类就只能被指定的类继承。 + +```java +// 抽象类 Person 只允许 Employee 和 Manager 继承。 +public abstract sealed class Person + permits Employee, Manager { + + //... +} +``` + +另外,任何扩展密封类的类本身都必须声明为 `sealed`、`non-sealed` 或 `final`。 + +```java +public final class Employee extends Person { +} + +public non-sealed class Manager extends Person { +} +``` + +![](https://oss.javaguide.cn/javaguide/image-20210820153955587.png) + +如果允许扩展的子类和封闭类在同一个源代码文件里,封闭类可以不使用 permits 语句,Java 编译器将检索源文件,在编译期为封闭类添加上许可的子类。 + +#### instanceof 模式匹配 + +Java 15 并没有对此特性进行调整,继续预览特性,主要用于接受更多的使用反馈。 + +在未来的 Java 版本中,Java 的目标是继续完善 `instanceof` 模式匹配新特性。 + +### 其他 + +- **Nashorn JavaScript 引擎彻底移除** :Nashorn 从 Java8 开始引入的 JavaScript 引擎,Java9 对 Nashorn 做了些增强,实现了一些 ES6 的新特性。在 Java 11 中就已经被弃用,到了 Java 15 就彻底被删除了。 +- **DatagramSocket API 重构** +- **禁用和废弃偏向锁(Biased Locking)** : 偏向锁的引入增加了 JVM 的复杂性大于其带来的性能提升。不过,你仍然可以使用 `-XX:+UseBiasedLocking` 启用偏向锁定,但它会提示 这是一个已弃用的 API。 +- ...... diff --git a/docs/java/new-features/java14.md b/docs/java/new-features/java14.md deleted file mode 100644 index b2187b7f..00000000 --- a/docs/java/new-features/java14.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Java 14 新特性概览 -category: Java -tag: - - Java新特性 ---- - -## 空指针异常精准提示 - -通过 JVM 参数中添加`-XX:+ShowCodeDetailsInExceptionMessages`,可以在空指针异常中获取更为详细的调用信息,更快的定位和解决问题。 - -```java -a.b.c.i = 99; // 假设这段代码会发生空指针 -``` - -Java 14 之前: - -```java -Exception in thread "main" java.lang.NullPointerException - at NullPointerExample.main(NullPointerExample.java:5) -``` - -Java 14 之后: - -```java - // 增加参数后提示的异常中很明确的告知了哪里为空导致 -Exception in thread "main" java.lang.NullPointerException: - Cannot read field 'c' because 'a.b' is null. - at Prog.main(Prog.java:5) -``` - -## switch 的增强(转正) - -Java12 引入的 switch(预览特性)在 Java14 变为正式版本,不需要增加参数来启用,直接在 JDK14 中就能使用。 - -Java12 为 switch 表达式引入了类似 lambda 语法条件匹配成功后的执行块,不需要多写 break ,Java13 提供了 `yield` 来在 block 中返回值。 - -```java -String result = switch (day) { - case "M", "W", "F" -> "MWF"; - case "T", "TH", "S" -> "TTS"; - default -> { - if(day.isEmpty()) - yield "Please insert a valid day."; - else - yield "Looks like a Sunday."; - } - - }; -System.out.println(result); -``` - -## 预览新特性 - -### record 关键字 - -`record` 关键字可以简化 **数据类**(一个 Java 类一旦实例化就不能再修改)的定义方式,使用 `record` 代替 `class` 定义的类,只需要声明属性,就可以在获得属性的访问方法,以及 `toString()`,`hashCode()`, `equals()`方法 - -类似于使用 `class` 定义类,同时使用了 lombok 插件,并打上了`@Getter,@ToString,@EqualsAndHashCode`注解 - -```java -/** - * 这个类具有两个特征 - * 1. 所有成员属性都是final - * 2. 全部方法由构造方法,和两个成员属性访问器组成(共三个) - * 那么这种类就很适合使用record来声明 - */ -final class Rectangle implements Shape { - final double length; - final double width; - - public Rectangle(double length, double width) { - this.length = length; - this.width = width; - } - - double length() { return length; } - double width() { return width; } -} -/** - * 1. 使用record声明的类会自动拥有上面类中的三个方法 - * 2. 在这基础上还附赠了equals(),hashCode()方法以及toString()方法 - * 3. toString方法中包括所有成员属性的字符串表示形式及其名称 - */ -record Rectangle(float length, float width) { } -``` - -### 文本块 - -Java14 中,文本块依然是预览特性,不过,其引入了两个新的转义字符: - -- `\` : 表示行尾,不引入换行符 -- `\s` :表示单个空格 - -```java -String str = "凡心所向,素履所往,生如逆旅,一苇以航。"; - -String str2 = """ - 凡心所向,素履所往, \ - 生如逆旅,一苇以航。"""; -System.out.println(str2);// 凡心所向,素履所往, 生如逆旅,一苇以航。 -String text = """ - java - c++\sphp - """; -System.out.println(text); -//输出: -java -c++ php -``` - -### instanceof 增强 - -依然是**预览特性** ,Java 12 新特性中介绍过。 - -## Java14 其他特性 - -- 从 Java11 引入的 ZGC 作为继 G1 过后的下一代 GC 算法,从支持 Linux 平台到 Java14 开始支持 MacOS 和 Window(个人感觉是终于可以在日常开发工具中先体验下 ZGC 的效果了,虽然其实 G1 也够用) -- 移除了 CMS(Concurrent Mark Sweep) 垃圾收集器(功成而退) -- 新增了 jpackage 工具,标配将应用打成 jar 包外,还支持不同平台的特性包,比如 linux 下的`deb`和`rpm`,window 平台下的`msi`和`exe` diff --git a/docs/java/new-features/java15.md b/docs/java/new-features/java15.md deleted file mode 100644 index 10eca7f9..00000000 --- a/docs/java/new-features/java15.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: Java 15 新特性概览 -category: Java -tag: - - Java新特性 ---- - -## CharSequence - -`CharSequence` 接口添加了一个默认方法 `isEmpty()` 来判断字符序列为空,如果是则返回 true。 - -```java -public interface CharSequence { - default boolean isEmpty() { - return this.length() == 0; - } -} -``` - -## TreeMap - -`TreeMap` 新引入了下面这些方法: - -- `putIfAbsent()` -- `computeIfAbsent()` -- `computeIfPresent()` -- `compute()` -- `merge()` - -## ZGC(转正) - -Java11 的时候 ,ZGC 还在试验阶段。 - -当时,ZGC 的出现让众多 Java 开发者看到了垃圾回收器的另外一种可能,因此备受关注。 - -经过多个版本的迭代,不断的完善和修复问题,ZGC 在 Java 15 已经可以正式使用了! - -不过,默认的垃圾回收器依然是 G1。你可以通过下面的参数启动 ZGC: - -```bash -$ java -XX:+UseZGC className -``` - -## EdDSA(数字签名算法) - -新加入了一个安全性和性能都更强的基于 Edwards-Curve Digital Signature Algorithm (EdDSA)实现的数字签名算法。 - -虽然其性能优于现有的 ECDSA 实现,不过,它并不会完全取代 JDK 中现有的椭圆曲线数字签名算法( ECDSA)。 - -```java -KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519"); -KeyPair kp = kpg.generateKeyPair(); - -byte[] msg = "test_string".getBytes(StandardCharsets.UTF_8); - -Signature sig = Signature.getInstance("Ed25519"); -sig.initSign(kp.getPrivate()); -sig.update(msg); -byte[] s = sig.sign(); - -String encodedString = Base64.getEncoder().encodeToString(s); -System.out.println(encodedString); -``` - -输出: - -``` -0Hc0lxxASZNvS52WsvnncJOH/mlFhnA8Tc6D/k5DtAX5BSsNVjtPF4R4+yMWXVjrvB2mxVXmChIbki6goFBgAg== -``` - -## 文本块(转正) - -在 Java 15 ,文本块是正式的功能特性了。 - -## 隐藏类(Hidden Classes) - -隐藏类是为框架(frameworks)所设计的,隐藏类不能直接被其他类的字节码使用,只能在运行时生成类并通过反射间接使用它们。 - -## 预览新特性 - -### 密封类 - -**密封类(Sealed Classes)** 是 Java 15 中的一个预览新特性。 - -没有密封类之前,在 Java 中如果想让一个类不能被继承和修改,我们可以使用`final` 关键字对类进行修饰。不过,这种方式不太灵活,直接把一个类的继承和修改渠道给堵死了。 - -密封类可以对继承或者实现它们的类进行限制,这样这个类就只能被指定的类继承。 - -```java -// 抽象类 Person 只允许 Employee 和 Manager 继承。 -public abstract sealed class Person - permits Employee, Manager { - - //... -} -``` - -另外,任何扩展密封类的类本身都必须声明为 `sealed`、`non-sealed` 或 `final`。 - -```java -public final class Employee extends Person { -} - -public non-sealed class Manager extends Person { -} -``` - -![](https://oss.javaguide.cn/javaguide/image-20210820153955587.png) - -如果允许扩展的子类和封闭类在同一个源代码文件里,封闭类可以不使用 permits 语句,Java 编译器将检索源文件,在编译期为封闭类添加上许可的子类。 - -### instanceof 模式匹配 - -Java 15 并没有对此特性进行调整,继续预览特性,主要用于接受更多的使用反馈。 - -在未来的 Java 版本中,Java 的目标是继续完善 `instanceof` 模式匹配新特性。 - -## Java15 其他新特性 - -- **Nashorn JavaScript 引擎彻底移除** :Nashorn 从 Java8 开始引入的 JavaScript 引擎,Java9 对 Nashorn 做了些增强,实现了一些 ES6 的新特性。在 Java 11 中就已经被弃用,到了 Java 15 就彻底被删除了。 -- **DatagramSocket API 重构** -- **禁用和废弃偏向锁(Biased Locking)** : 偏向锁的引入增加了 JVM 的复杂性大于其带来的性能提升。不过,你仍然可以使用 `-XX:+UseBiasedLocking` 启用偏向锁定,但它会提示 这是一个已弃用的 API。 -- ...... - -## 总结 - -### 关于预览特性 - -先贴一段 oracle 官网原文:`This is a preview feature, which is a feature whose design, specification, and implementation are complete, but is not permanent, which means that the feature may exist in a different form or not at all in future JDK releases. To compile and run code that contains preview features, you must specify additional command-line options.` - -这是一个预览功能,该功能的设计,规格和实现是完整的,但不是永久性的,这意味着该功能可能以其他形式存在或在将来的 JDK 版本中根本不存在。 要编译和运行包含预览功能的代码,必须指定其他命令行选项。 - -就以`switch`的增强为例子,从 Java12 中推出,到 Java13 中将继续增强,直到 Java14 才正式转正进入 JDK 可以放心使用,不用考虑后续 JDK 版本对其的改动或修改 - -一方面可以看出 JDK 作为标准平台在增加新特性的严谨态度,另一方面个人认为是对于预览特性应该采取审慎使用的态度。特性的设计和实现容易,但是其实际价值依然需要在使用中去验证 - -### JVM 虚拟机优化 - -每次 Java 版本的发布都伴随着对 JVM 虚拟机的优化,包括对现有垃圾回收算法的改进,引入新的垃圾回收算法,移除老旧的不再适用于今天的垃圾回收算法等 - -整体优化的方向是**高效,低时延的垃圾回收表现** - -对于日常的应用开发者可能比较关注新的语法特性,但是从一个公司角度来说,在考虑是否升级 Java 平台时更加考虑的是**JVM 运行时的提升** \ No newline at end of file diff --git a/docs/java/new-features/java16.md b/docs/java/new-features/java16.md index 1b078b73..0a7c7a0f 100644 --- a/docs/java/new-features/java16.md +++ b/docs/java/new-features/java16.md @@ -131,12 +131,12 @@ public class Outer { 密封类由 [JEP 360](https://openjdk.java.net/jeps/360) 提出预览,集成到了 Java 15 中。在 JDK 16 中, 密封类得到了改进(更加严格的引用检查和密封类的继承关系),由 [JEP 397](https://openjdk.java.net/jeps/397) 提出了再次预览。 -在 [Java 15 新特性概览](./java15.md) 中,我有详细介绍到密封类,这里就不再做额外的介绍了。 +在 [Java 14 & 15 新特性概览](./java14-15.md) 中,我有详细介绍到密封类,这里就不再做额外的介绍了。 ## 其他优化与改进 - **JEP 380:Unix-Domain 套接字通道** :Unix-domain 套接字一直是大多数 Unix 平台的一个特性,现在在 Windows 10 和 Windows Server 2019 也提供了支持。此特性为 java.nio.channels 包的套接字通道和服务器套接字通道 API 添加了 Unix-domain(AF_UNIX)套接字支持。它扩展了继承的通道机制以支持 Unix-domain 套接字通道和服务器套接字通道。Unix-domain 套接字用于同一主机上的进程间通信(IPC)。它们在很大程度上类似于 TCP/IP,区别在于套接字是通过文件系统路径名而不是 Internet 协议(IP)地址和端口号寻址的。对于本地进程间通信,Unix-domain 套接字比 TCP/IP 环回连接更安全、更有效 -- **JEP 389:外部链接器 API(孵化) :**该孵化器 API 提供了静态类型、纯 Java 访问原生代码的特性,该 API 将大大简化绑定原生库的原本复杂且容易出错的过程。Java 1.1 就已通过 Java 原生接口(JNI)支持了原生方法调用,但并不好用。Java 开发人员应该能够为特定任务绑定特定的原生库。它还提供了外来函数支持,而无需任何中间的 JNI 粘合代码。 +- **JEP 389:外部链接器 API(孵化) :** 该孵化器 API 提供了静态类型、纯 Java 访问原生代码的特性,该 API 将大大简化绑定原生库的原本复杂且容易出错的过程。Java 1.1 就已通过 Java 原生接口(JNI)支持了原生方法调用,但并不好用。Java 开发人员应该能够为特定任务绑定特定的原生库。它还提供了外来函数支持,而无需任何中间的 JNI 粘合代码。 - **JEP 357:从 Mercurial 迁移到 Git** :在此之前,OpenJDK 源代码是使用版本管理工具 Mercurial 进行管理,现在迁移到了 Git。 - **JEP 369:迁移到 GitHub**:和 JEP 357 从 Mercurial 迁移到 Git 的改变一致,在把版本管理迁移到 Git 之后,选择了在 GitHub 上托管 OpenJDK 社区的 Git 仓库。不过只对 JDK 11 以及更高版本 JDK 进行了迁移。 - **JEP 386:移植 Alpine Linux** :Apine Linux 是一个独立的、非商业的 Linux 发行版,它十分的小,一个容器需要不超过 8MB 的空间,最小安装到磁盘只需要大约 130MB 存储空间,并且十分的简单,同时兼顾了安全性。此提案将 JDK 移植到了 Apline Linux,由于 Apline Linux 是基于 musl lib 的轻量级 Linux 发行版,因此其他 x64 和 AArch64 架构上使用 musl lib 的 Linux 发行版也适用。 diff --git a/docs/java/new-features/java17.md b/docs/java/new-features/java17.md index 23920e9d..45dd2004 100644 --- a/docs/java/new-features/java17.md +++ b/docs/java/new-features/java17.md @@ -1,5 +1,5 @@ --- -title: Java 17 新特性概览 +title: Java 17 新特性概览(重要) category: Java tag: - Java新特性 @@ -143,7 +143,7 @@ static void testFooBar(String s) { 密封类由 [JEP 360](https://openjdk.java.net/jeps/360) 提出预览,集成到了 Java 15 中。在 JDK 16 中, 密封类得到了改进(更加严格的引用检查和密封类的继承关系),由 [JEP 397](https://openjdk.java.net/jeps/397) 提出了再次预览。 -在 [Java 15 新特性概览](./java15.md) 中,我有详细介绍到密封类,这里就不再做额外的介绍了。 +在 [Java 14 & 15 新特性概览](./java14-15.md) 中,我有详细介绍到密封类,这里就不再做额外的介绍了。 ## JEP 410:删除实验性的 AOT 和 JIT 编译器 diff --git a/docs/java/new-features/java20.md b/docs/java/new-features/java20.md new file mode 100644 index 00000000..d2dad92b --- /dev/null +++ b/docs/java/new-features/java20.md @@ -0,0 +1,169 @@ +--- +title: Java 20 新特性概览 +category: Java +tag: + - Java新特性 +--- + +JDK 20 于 2023 年 3 月 21 日发布,非长期支持版本。 + +根据开发计划,下一个 LTS 版本就是将于 2023 年 9 月发布的 JDK 21。 + +![](https://oss.javaguide.cn/github/javaguide/java/new-features/640.png) + +JDK 20 只有 7 个新特性: + +- [JEP 429:Scoped Values(作用域值)](https://openjdk.org/jeps/429)(第一次孵化) +- [JEP 432:Record Patterns(记录模式)](https://openjdk.org/jeps/432)(第二次预览) +- [JEP 433:switch 模式匹配](https://openjdk.org/jeps/433)(第四次预览) +- [JEP 434: Foreign Function & Memory API(外部函数和内存 API)](https://openjdk.org/jeps/434)(第二次预览) +- [JEP 436: Virtual Threads(虚拟线程)](https://openjdk.org/jeps/436)(第二次预览) +- [JEP 437: Structured Concurrency(结构化并发)](https://openjdk.org/jeps/437)(第二次孵化) +- [JEP 432:向量 API(](https://openjdk.org/jeps/438)第五次孵化) + +## JEP 429:作用域值(第一次孵化) + +作用域值(Scoped Values)它可以在线程内和线程间共享不可变的数据,优于线程局部变量,尤其是在使用大量虚拟线程时。 + +```java +final static ScopedValue<...> V = new ScopedValue<>(); + +// In some method +ScopedValue.where(V, ) + .run(() -> { ... V.get() ... call methods ... }); + +// In a method called directly or indirectly from the lambda expression +... V.get() ... +``` + +作用域值允许在大型程序中的组件之间安全有效地共享数据,而无需求助于方法参数。 + +## JEP 432:记录模式(第二次预览) + +记录模式(Record Patterns) 可对 record 的值进行解构,可以嵌套记录模式和类型模式,实现强大的、声明性的和可组合的数据导航和处理形式。 + +记录模式不能单独使用,而是要与 instanceof 或 switch 模式匹配一同使用。 + +记录模式在 Java 19 进行了第一次预览, 由[JEP 405](https://openjdk.org/jeps/405)提出。JDK 20 中是第二次预览,由 [JEP 432](https://openjdk.org/jeps/432) 提出。这次的改进包括: + +- 添加对通用记录模式类型参数推断的支持, +- 添加对记录模式的支持以出现在增强语句的标题中`for` +- 删除对命名记录模式的支持。 + +## JEP 433:switch 模式匹配(第四次预览) + +正如 `instanceof` 一样, `switch` 也紧跟着增加了类型匹配自动转换功能。 + +`instanceof` 代码示例: + +```java +// Old code +if (o instanceof String) { + String s = (String)o; + ... use s ... +} + +// New code +if (o instanceof String s) { + ... use s ... +} +``` + +`switch` 代码示例: + +```java +// Old code +static String formatter(Object o) { + String formatted = "unknown"; + if (o instanceof Integer i) { + formatted = String.format("int %d", i); + } else if (o instanceof Long l) { + formatted = String.format("long %d", l); + } else if (o instanceof Double d) { + formatted = String.format("double %f", d); + } else if (o instanceof String s) { + formatted = String.format("String %s", s); + } + return formatted; +} + +// New code +static String formatterPatternSwitch(Object o) { + return switch (o) { + case Integer i -> String.format("int %d", i); + case Long l -> String.format("long %d", l); + case Double d -> String.format("double %f", d); + case String s -> String.format("String %s", s); + default -> o.toString(); + }; +} +``` + +`switch` 模式匹配分别在 Java17、Java18、Java19 中进行了预览,Java20 是第四次预览了。每一次的预览基本都会有一些小改进,这里就不细提了。 + +## JEP 434: 外部函数和内存 API(第二次预览) + +Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互操作。通过高效地调用外部函数(即 JVM 之外的代码)和安全地访问外部内存(即不受 JVM 管理的内存),该 API 使 Java 程序能够调用本机库并处理本机数据,而不会像 JNI 那样危险和脆弱。 + +外部函数和内存 API 在 Java 17 中进行了第一轮孵化,由 [JEP 412](https://openjdk.java.net/jeps/412) 提出。Java 18 中进行了第二次孵化,由[ JEP 419](https://openjdk.org/jeps/419) 提出。Java 19 中是第一次预览,由 [JEP 424](https://openjdk.org/jeps/424) 提出。 + +JDK 20 中是第二次预览,由 [JEP 434](https://openjdk.org/jeps/434) 提出,这次的改进包括: + +- `MemorySegment` 和 `MemoryAddress` 抽象的统一 +- 增强的 `MemoryLayout` 层次结构 +- `MemorySession`拆分为`Arena`和`SegmentScope`,以促进跨维护边界的段共享。 + +在 [Java 19 新特性概览](./java19.md) 中,我有详细介绍到外部函数和内存 API,这里就不再做额外的介绍了。 + +## JEP 436: 虚拟线程(第二次预览) + +虚拟线程(Virtual Thread-)是 JDK 而不是 OS 实现的轻量级线程(Lightweight Process,LWP),许多虚拟线程共享同一个操作系统线程,虚拟线程的数量可以远大于操作系统线程的数量。 + +虚拟线程在其他多线程语言中已经被证实是十分有用的,比如 Go 中的 Goroutine、Erlang 中的进程。 + +虚拟线程避免了上下文切换的额外耗费,兼顾了多线程的优点,简化了高并发程序的复杂,可以有效减少编写、维护和观察高吞吐量并发应用程序的工作量。 + +知乎有一个关于 Java 19 虚拟线程的讨论,感兴趣的可以去看看:https://www.zhihu.com/question/536743167 。 + +Java 虚拟线程的详细解读和原理可以看下面这两篇文章: + +- [Java19 正式 GA!看虚拟线程如何大幅提高系统吞吐量](https://mp.weixin.qq.com/s/yyApBXxpXxVwttr01Hld6Q) +- [虚拟线程 - VirtualThread 源码透视](https://www.cnblogs.com/throwable/p/16758997.html) + +虚拟线程在 Java 19 中进行了第一次预览,由[JEP 425](https://openjdk.org/jeps/425)提出。JDK 20 中是第二次预览,做了一些细微变化,这里就不细提了。 + +## JEP 437: 结构化并发(第二次孵化) + +Java 19 引入了结构化并发,一种多线程编程方法,目的是为了通过结构化并发 API 来简化多线程编程,并不是为了取代`java.util.concurrent`,目前处于孵化器阶段。 + +结构化并发将不同线程中运行的多个任务视为单个工作单元,从而简化错误处理、提高可靠性并增强可观察性。也就是说,结构化并发保留了单线程代码的可读性、可维护性和可观察性。 + +结构化并发的基本 API 是[`StructuredTaskScope`](https://download.java.net/java/early_access/loom/docs/api/jdk.incubator.concurrent/jdk/incubator/concurrent/StructuredTaskScope.html)。`StructuredTaskScope` 支持将任务拆分为多个并发子任务,在它们自己的线程中执行,并且子任务必须在主任务继续之前完成。 + +`StructuredTaskScope` 的基本用法如下: + +```java + try (var scope = new StructuredTaskScope()) { + // 使用fork方法派生线程来执行子任务 + Future future1 = scope.fork(task1); + Future future2 = scope.fork(task2); + // 等待线程完成 + scope.join(); + // 结果的处理可能包括处理或重新抛出异常 + ... process results/exceptions ... + } // close +``` + +结构化并发非常适合虚拟线程,虚拟线程是 JDK 实现的轻量级线程。许多虚拟线程共享同一个操作系统线程,从而允许非常多的虚拟线程。 + +JDK 20 中对结构化并发唯一变化是更新为支持在任务范围内创建的线程`StructuredTaskScope`继承范围值 这简化了跨线程共享不可变数据,详见[JEP 429 ](https://openjdk.org/jeps/429)。 + +## JEP 432:向量 API(第五次孵化) + +向量计算由对向量的一系列操作组成。向量 API 用来表达向量计算,该计算可以在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于等效标量计算的性能。 + +向量 API 的目标是为用户提供简洁易用且与平台无关的表达范围广泛的向量计算。 + +向量(Vector) API 最初由 [JEP 338](https://openjdk.java.net/jeps/338) 提出,并作为[孵化 API](http://openjdk.java.net/jeps/11)集成到 Java 16 中。第二轮孵化由 [JEP 414](https://openjdk.java.net/jeps/414) 提出并集成到 Java 17 中,第三轮孵化由 [JEP 417](https://openjdk.java.net/jeps/417) 提出并集成到 Java 18 中,第四轮由 [JEP 426](https://openjdk.java.net/jeps/426) 提出并集成到了 Java 19 中。 + +Java20 的这次孵化基本没有改变向量 API ,只是进行了一些错误修复和性能增强,详见 [JEP 438](https://openjdk.org/jeps/438)。 \ No newline at end of file diff --git a/docs/open-source-project/practical-project.md b/docs/open-source-project/practical-project.md index 943bbb62..6cfd231a 100644 --- a/docs/open-source-project/practical-project.md +++ b/docs/open-source-project/practical-project.md @@ -4,68 +4,66 @@ category: 开源项目 icon: project --- +## 快速开发脚手架 + +- [Snowy](https://gitee.com/xiaonuobase/snowy):国内首个国密前后端分离快速开发平台,定位不是深度封装的框架,也不是无代码平台,更不是某个领域的产品。详细介绍:[5.1k!这是我见过最强的前后端分离快速开发脚手架!!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247534316&idx=1&sn=69938397674fc33ecda43c8c9d0a4039&chksm=cea10927f9d68031bc862485c6be984ade5af233d4d871d498c38f22164a84314678c0c67cd7&token=1464380539&lang=zh_CN#rd)。 +- [RuoYi](https://gitee.com/y_project/RuoYi) :RuoYi 一款基于基于 SpringBoot 的权限管理系统 易读易懂、界面简洁美观,直接运行即可用 。 +- [AgileBoot-Back-End](https://github.com/valarchie/AgileBoot-Back-End) :基于Ruoyi做了大量重构优化的基础快速开发框架。 +- [RuoYi-Vue-Pro](https://github.com/YunaiV/ruoyi-vue-pro) : RuoYi-Vue 全新 Pro 版本,优化重构所有功能。 +- [Guns](https://gitee.com/stylefeng/guns) : 现代化的Java应用开发基础框架。 +- [JeecgBoot](https://github.com/zhangdaiscott/jeecg-boot):一款基于代码生成器的 J2EE 低代码快速开发平台,支持生成前后端分离架构的项目。 +- [Erupt](https://gitee.com/erupt/erupt) : 低代码全栈类框架,它使用 Java 注解 动态生成页面以及增、删、改、查、权限控制等后台功能。 +- [SmartAdmin](https://gitee.com/lab1024/smart-admin) : 一套简洁、易用的低代码中后台解决方案。 +- [BallCat](https://github.com/ballcat-projects/ballcat) :一个功能完善的快速开发脚手架!除了最基本的权限管理,定时任务功能之外,还额外支持 XSS 过滤,SQL 防注入、数据脱敏等多种功能 +- [JHipster](https://github.com/jhipster/generator-jhipster) :开源应用程序平台,可在几秒钟内创建 Spring Boot + Angular / React 项目! + +相关阅读 : + +- [听说你要接私活?Guide 连夜整理了 5 个开源免费的 Java 项目快速开发脚手架。](https://sourl.cn/cFyLTR) +- [解放双手,再来推荐 5 个 Java 项目开发快速开发脚手架!项目经验和私活都不愁了!](https://sourl.cn/StkiAv) + ## 博客/论坛系统 下面这几个项目都是非常适合 Spring Boot 初学者学习的,下面的大部分项目的总体代码架构我都看过,个人觉得还算不错,不会误导没有实际做过项目的朋友。 -- **[forest](https://github.com/rymcu)** :下一代的知识社区系统,可以自定义专题和作品集。后端基于 SpringBoot + Shrio + MyBatis + JWT + Redis,前端基于 Vue + NuxtJS + Element-UI。 -- **[vhr](https://github.com/lenve/vhr "vhr")** :微人事是一个前后端分离的人力资源管理系统,项目采用 SpringBoot+Vue 开发。 -- **[favorites-web](https://github.com/cloudfavorites/favorites-web)** :云收藏 Spring Boot 2.X 开源项目。云收藏是一个使用 Spring Boot 构建的开源网站,可以让用户在线随时随地收藏的一个网站,在网站上分类整理收藏的网站或者文章。 -- **[community](https://github.com/codedrinker/community)** :开源论坛、问答系统,现有功能提问、回复、通知、最新、最热、消除零回复功能。功能持续更新中…… 技术栈 Spring、Spring Boot、MyBatis、MySQL/H2、Bootstrap。 -- **[VBlog](https://github.com/lenve/VBlog)** :V 部落,Vue+SpringBoot 实现的多用户博客管理平台! -- **[My-Blog](https://github.com/ZHENFENG13/My-Blog)** : My Blog 是由 SpringBoot + Mybatis + Thymeleaf 等技术实现的 Java 博客系统,页面美观、功能齐全、部署简单及完善的代码,一定会给使用者无与伦比的体验。 +- [forest](https://github.com/rymcu) :下一代的知识社区系统,可以自定义专题和作品集。后端基于 SpringBoot + Shrio + MyBatis + JWT + Redis,前端基于 Vue + NuxtJS + Element-UI。 +- [vhr](https://github.com/lenve/vhr "vhr") :微人事是一个前后端分离的人力资源管理系统,项目采用 SpringBoot+Vue 开发。 +- [favorites-web](https://github.com/cloudfavorites/favorites-web) :云收藏 Spring Boot 2.X 开源项目。云收藏是一个使用 Spring Boot 构建的开源网站,可以让用户在线随时随地收藏的一个网站,在网站上分类整理收藏的网站或者文章。 +- [community](https://github.com/codedrinker/community) :开源论坛、问答系统,现有功能提问、回复、通知、最新、最热、消除零回复功能。功能持续更新中…… 技术栈 Spring、Spring Boot、MyBatis、MySQL/H2、Bootstrap。 +- [VBlog](https://github.com/lenve/VBlog) :V 部落,Vue+SpringBoot 实现的多用户博客管理平台! +- [My-Blog](https://github.com/ZHENFENG13/My-Blog) : My Blog 是由 SpringBoot + Mybatis + Thymeleaf 等技术实现的 Java 博客系统,页面美观、功能齐全、部署简单及完善的代码,一定会给使用者无与伦比的体验。 ## 考试/刷题系统 -- **[uexam](https://gitee.com/mindskip/uexam)** :一个非常不错的考试系统!考试系统应用场景还挺多的,不论是对于在校大学生还是已经工作的小伙伴,并且,类似的私活也有很多。相关阅读:[《好一个 Spring Boot 开源在线考试系统!解决了我的燃眉之急》](http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzg2OTA0Njk0OA%3D%3D%26mid%3D2247491585%26idx%3D1%26sn%3D8d3c6768c22e72d6bfcbeee9624886a7%26chksm%3Dcea1afcaf9d626dc918760289c37025ad526f6255786bc198d2402203df64c873ad7934f58df%26scene%3D178%26cur_album_id%3D1345382825083895808%23rd) 。 -- **[PassJava-Platform](https://github.com/Jackson0714/PassJava-Platform)** :一个基于微服务(SpringBoot、Spring Cloud)的面试刷题系统!相关阅读:[《一个基于 Spring Cloud 的面试刷题系统。面试、毕设、项目经验一网打尽》](http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzg2OTA0Njk0OA%3D%3D%26mid%3D2247497045%26idx%3D1%26sn%3D577175bfd6c040a0df5a494fce6f9758%26chksm%3Dcea1ba9ef9d633883a2e213c0fb9a88bdc87051347d4b3fad2c2befb65d8b16e1ea81d8146dd%26scene%3D178%26cur_album_id%3D1345382825083895808%23rd)。 - -相关文章:[想要搭建个人博客?我调研了 100 来个 Java 开源博客系统,发现这 5 个最好用!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247491191&idx=1&sn=fd5efa645c2f2e09f088f6a018cea028&chksm=cea251bcf9d5d8aac8653c686b7a331ffe4e13aa9ffc9beab2c378ea2497a9bd3295ff8d2c51&token=747074901&lang=zh_CN#rd) +- [uexam](https://gitee.com/mindskip/uexam) :一个非常不错的考试系统!考试系统应用场景还挺多的,不论是对于在校大学生还是已经工作的小伙伴,并且,类似的私活也有很多。相关阅读:[《好一个 Spring Boot 开源在线考试系统!解决了我的燃眉之急》](http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzg2OTA0Njk0OA%3D%3D%26mid%3D2247491585%26idx%3D1%26sn%3D8d3c6768c22e72d6bfcbeee9624886a7%26chksm%3Dcea1afcaf9d626dc918760289c37025ad526f6255786bc198d2402203df64c873ad7934f58df%26scene%3D178%26cur_album_id%3D1345382825083895808%23rd) 。 +- [PassJava-Platform](https://github.com/Jackson0714/PassJava-Platform) :一个基于微服务(SpringBoot、Spring Cloud)的面试刷题系统!相关阅读:[《一个基于 Spring Cloud 的面试刷题系统。面试、毕设、项目经验一网打尽》](http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzg2OTA0Njk0OA%3D%3D%26mid%3D2247497045%26idx%3D1%26sn%3D577175bfd6c040a0df5a494fce6f9758%26chksm%3Dcea1ba9ef9d633883a2e213c0fb9a88bdc87051347d4b3fad2c2befb65d8b16e1ea81d8146dd%26scene%3D178%26cur_album_id%3D1345382825083895808%23rd)。 ## 商城系统 下面的商城系统大多比较复杂比如 mall ,如果没有 Java 基础和 Spring Boot 都还没有摸熟的话不推荐过度研究下面几个项目或者使用这些项目当作毕业设计。 -- **[mall](https://github.com/macrozheng/mall "mall")** :mall 项目是一套电商系统,包括前台商城系统及后台管理系统,基于 SpringBoot+MyBatis 实现。 -- **[mall-swarm](https://github.com/macrozheng/mall-swarm "mall-swarm")** : mall-swarm 是一套微服务商城系统,采用了 Spring Cloud Greenwich、Spring Boot 2、MyBatis、Docker、Elasticsearch 等核心技术,同时提供了基于 Vue 的管理后台方便快速搭建系统。 -- **[onemall](https://github.com/YunaiV/onemall)** :mall 商城,基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba 。 -- **[litemall](https://github.com/linlinjava/litemall "litemall")** : 又一个小商城。litemall = Spring Boot 后端 + Vue 管理员前端 + 微信小程序用户前端 + Vue 用户移动端。 -- **[xmall](https://github.com/Exrick/xmall)** :基于 SOA 架构的分布式电商购物商城 前后端分离 前台商城:Vue 全家桶 后台管理系统:Spring/Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper 等 -- **[newbee-mall](https://github.com/newbee-ltd/newbee-mall)** :newbee-mall 项目(新蜂商城)是一套电商系统,包括 newbee-mall 商城系统及 newbee-mall-admin 商城后台管理系统,基于 Spring Boot 2.X 及相关技术栈开发。 +- [mall](https://github.com/macrozheng/mall "mall") :mall 项目是一套电商系统,包括前台商城系统及后台管理系统,基于 SpringBoot+MyBatis 实现。 +- [mall-swarm](https://github.com/macrozheng/mall-swarm "mall-swarm") : mall-swarm 是一套微服务商城系统,采用了 Spring Cloud Greenwich、Spring Boot 2、MyBatis、Docker、Elasticsearch 等核心技术,同时提供了基于 Vue 的管理后台方便快速搭建系统。 +- [onemall](https://github.com/YunaiV/onemall) :mall 商城,基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba 。 +- [litemall](https://github.com/linlinjava/litemall "litemall") : 又一个小商城。litemall = Spring Boot 后端 + Vue 管理员前端 + 微信小程序用户前端 + Vue 用户移动端。 +- [xmall](https://github.com/Exrick/xmall) :基于 SOA 架构的分布式电商购物商城 前后端分离 前台商城:Vue 全家桶 后台管理系统:Spring/Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper 等 +- [newbee-mall](https://github.com/newbee-ltd/newbee-mall) :newbee-mall 项目(新蜂商城)是一套电商系统,包括 newbee-mall 商城系统及 newbee-mall-admin 商城后台管理系统,基于 Spring Boot 2.X 及相关技术栈开发。 ## 权限管理系统 权限管理系统在企业级的项目中一般都是非常重要的,如果你需求去实际了解一个不错的权限系统是如何设计的话,推荐你可以参考下面这些开源项目。 -- **[Spring-Cloud-Admin](https://github.com/wxiaoqi/Spring-Cloud-Admin "Spring-Cloud-Admin")** :Cloud-Admin 是国内首个基于 Spring Cloud 微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关 API 管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用 Spring Boot2 以及 Spring Cloud Gateway 相关核心组件,前端采用 vue-element-admin 组件。 -- **[pig](https://gitee.com/log4j/pig "pig")**:(gitee)基于 Spring Boot 2.2、 Spring Cloud Hoxton & Alibaba、 OAuth2 的 RBAC 权限管理系统。 -- **[FEBS-Shiro](https://github.com/wuyouzhuguli/FEBS-Shiro "FEBS-Shiro")** :Spring Boot 2.1.3,Shiro1.4.0 & Layui 2.5.4 权限管理系统。 -- **[eladmin](https://github.com/elunez/eladmin)** : 项目基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue 的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。 -- **[SpringBoot-Shiro-Vue](https://github.com/Heeexy/SpringBoot-Shiro-Vue)** :提供一套基于 Spring Boot-Shiro-Vue 的权限管理思路.前后端都加以控制,做到按钮/接口级别的权限。 - -## 快速开发脚手架 - -- **[RuoYi](https://gitee.com/y_project/RuoYi)** :RuoYi 一款基于基于 SpringBoot 的权限管理系统 易读易懂、界面简洁美观,直接运行即可用 。 -- **[AgileBoot-Back-End](https://github.com/valarchie/AgileBoot-Back-End)** :基于Ruoyi做了大量重构优化的基础快速开发框架。采用Springboot + Vue 3 + Mybatis Plus + 更面向对象的业务建模 + 面向生产的项目。(非玩具项目) -- **[RuoYi-Vue-Pro](https://github.com/YunaiV/ruoyi-vue-pro)** : 基于 SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统。 -- **[Guns](https://gitee.com/stylefeng/guns)** : 我在上大学的时候就了解和接触过了这个项目,当时我还是一个 Spring 入门不太久的小菜鸟。一晃,不经意间已经过去快 3 年了。Guns 功能齐全 ,采用主流框架 Spring Boot2.0+开发,并且支持 Spring Cloud Alibaba 微服务)。 适合企业后台管理网站的快速开发场景,不论是对于单体和微服务都有支持。 -- **[JHipster](https://github.com/jhipster/generator-jhipster)** :开源应用程序平台,可在几秒钟内创建 Spring Boot + Angular / React 项目! -- **[JeecgBoot](https://github.com/zhangdaiscott/jeecg-boot)**:一款基于代码生成器的 J2EE 低代码快速开发平台,支持生成前后端分离架构的项目。 -- **[zuihou-admin-cloud](https://github.com/zuihou/zuihou-admin-cloud)** :基于`SpringCloud(Hoxton.SR7)` + `SpringBoot(2.2.9.RELEASE)` 的 SaaS 型微服务快速开发平台,具备用户管理、资源权限管理、网关统一鉴权、Xss 防跨站攻击、自动代码生成、多存储系统、分布式事务、分布式定时任务等多个模块,支持多业务系统并行开发, 支持多服务并行开发,可以作为后端服务的开发脚手架。 -- **[Erupt](https://gitee.com/erupt/erupt)** : 使用 Java 注解,快速开发 Admin 管理后台。零前端代码、零 CURD、不生成任何代码、自动建表、注解式 API,支持所有主流数据库,支持自定义页面,支持多数据源,提供二十几类业务组件,十几种展示形式,支持逻辑删除,动态定时任务,前端后端分离等。 核心技术:Spring Boot、JPA、Reflect、TypeScript、NG-ZORRO 等。 -- **[SmartAdmin](https://gitee.com/lab1024/smart-admin)** : 互联网企业级的通用型中后台解决方案!使用最前沿的前后台技术栈 SpringBoot 和 Vue,前后端分离!代码质量非常高! -- **[BallCat](https://github.com/ballcat-projects/ballcat)** :一个功能完善的快速开发脚手架!除了最基本的权限管理,定时任务功能之外,还额外支持 XSS 过滤,SQL 防注入、数据脱敏等多种功能 - -**相关阅读** : - -- [听说你要接私活?Guide 连夜整理了 5 个开源免费的 Java 项目快速开发脚手架。](https://sourl.cn/cFyLTR) -- [解放双手,再来推荐 5 个 Java 项目开发快速开发脚手架!项目经验和私活都不愁了!](https://sourl.cn/StkiAv) +- [Spring-Cloud-Admin](https://github.com/wxiaoqi/Spring-Cloud-Admin "Spring-Cloud-Admin") :Cloud-Admin 是国内首个基于 Spring Cloud 微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关 API 管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用 Spring Boot2 以及 Spring Cloud Gateway 相关核心组件,前端采用 vue-element-admin 组件。 +- [pig](https://gitee.com/log4j/pig "pig"):(gitee)基于 Spring Boot 2.2、 Spring Cloud Hoxton & Alibaba、 OAuth2 的 RBAC 权限管理系统。 +- [FEBS-Shiro](https://github.com/wuyouzhuguli/FEBS-Shiro "FEBS-Shiro") :Spring Boot 2.1.3,Shiro1.4.0 & Layui 2.5.4 权限管理系统。 +- [eladmin](https://github.com/elunez/eladmin) : 项目基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue 的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。 +- [SpringBoot-Shiro-Vue](https://github.com/Heeexy/SpringBoot-Shiro-Vue) :提供一套基于 Spring Boot-Shiro-Vue 的权限管理思路.前后端都加以控制,做到按钮/接口级别的权限。 ## 造轮子 -- **[guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework)** :一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程。 -- **[mini-spring](https://github.com/DerekYRC/mini-spring)** :简化版的 Spring 框架,能帮助你快速熟悉 Spring 源码和掌握 Spring 的核心原理。代码极度简化,保留了 Spring 的核心功能,如 IoC 和 AOP、资源加载器等核心功能。 -- **[mini-spring-cloud](https://github.com/DerekYRC/mini-spring-cloud)** :一个手写的简化版的 Spring Cloud,旨在帮助你快速熟悉 Spring Cloud 源码及掌握其核心原理。相关阅读:[手写一个简化版的 Spring Cloud!](https://mp.weixin.qq.com/s/v3FUp-keswE2EhcTaLpSMQ) 。 -- **[itstack-demo-jvm](https://github.com/fuzhengwei/itstack-demo-jvm)** :通过 Java 代码来实现 JVM 的基础功能(搜索解析 class 文件、字节码命令、运行时数据区等。相关阅读:[《zachaxy 的手写 JVM 系列》](https://zachaxy.github.io/tags/JVM/) -- **[Freedom](https://github.com/alchemystar/Freedom)** :自己 DIY 一个具有 ACID 的数据库。相关项目:[MYDB](https://github.com/CN-GuoZiyang/MYDB)(一个简单的数据库实现)、[toyDB](https://github.com/erikgrinaker/toydb)(Rust 实现的分布式 SQL 数据库)。 -- **[lu-raft-kv](https://github.com/stateIs0/lu-raft-kv)** :一个 Java 版本的 Raft(CP) KV 分布式存储实现,非常适合想要深入学习 Raft 协议的小伙伴研究。lu-raft-kv 已经实现了 Raft 协议其中的两个核心功能:leader 选举和日志复制。如果你想要学习这个项目的话,建议你提前看一下作者写的项目介绍,比较详细,地址:http://thinkinjava.cn/2019/01/12/2019/2019-01-12-lu-raft-kv/ 。 \ No newline at end of file +- [guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework) :一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程。 +- [mini-spring](https://github.com/DerekYRC/mini-spring) :简化版的 Spring 框架,能帮助你快速熟悉 Spring 源码和掌握 Spring 的核心原理。代码极度简化,保留了 Spring 的核心功能,如 IoC 和 AOP、资源加载器等核心功能。 +- [mini-spring-cloud](https://github.com/DerekYRC/mini-spring-cloud) :一个手写的简化版的 Spring Cloud,旨在帮助你快速熟悉 Spring Cloud 源码及掌握其核心原理。相关阅读:[手写一个简化版的 Spring Cloud!](https://mp.weixin.qq.com/s/v3FUp-keswE2EhcTaLpSMQ) 。 +- [itstack-demo-jvm](https://github.com/fuzhengwei/itstack-demo-jvm) :通过 Java 代码来实现 JVM 的基础功能(搜索解析 class 文件、字节码命令、运行时数据区等。相关阅读:[《zachaxy 的手写 JVM 系列》](https://zachaxy.github.io/tags/JVM/)。 +- [Freedom](https://github.com/alchemystar/Freedom) :自己 DIY 一个具有 ACID 的数据库。相关项目:[MYDB](https://github.com/CN-GuoZiyang/MYDB)(一个简单的数据库实现)、[toyDB](https://github.com/erikgrinaker/toydb)(Rust 实现的分布式 SQL 数据库)。 +- [lu-raft-kv](https://github.com/stateIs0/lu-raft-kv) :一个 Java 版本的 Raft(CP) KV 分布式存储实现,非常适合想要深入学习 Raft 协议的小伙伴研究。lu-raft-kv 已经实现了 Raft 协议其中的两个核心功能:leader 选举和日志复制。如果你想要学习这个项目的话,建议你提前看一下作者写的项目介绍,比较详细,地址:http://thinkinjava.cn/2019/01/12/2019/2019-01-12-lu-raft-kv/ 。 \ No newline at end of file diff --git a/docs/open-source-project/system-design.md b/docs/open-source-project/system-design.md index 8d39023a..b8c80106 100644 --- a/docs/open-source-project/system-design.md +++ b/docs/open-source-project/system-design.md @@ -6,54 +6,54 @@ icon: "xitongsheji" ## 基础框架 -- **[Spring Boot ](https://github.com/spring-projects/spring-boot "spring-boot")** :Spring Boot 可以轻松创建独立的生产级基于 Spring 的应用程序,内置 web 服务器让你可以像运行普通 Java 程序一样运行项 目。另外,大部分 Spring Boot 项目只需要少量的配置即可,这有别于 Spring 的重配置。 -- **[Javalin](https://github.com/tipsy/javalin)** :一个轻量级的 Web 框架,同时支持 Java 和 Kotlin,被微软、红帽、Uber等公司使用。 -- **[Quarkus](https://github.com/quarkusio/quarkus)** : 用于编写 Java 应用程序的云原生和容器优先的框架。 -- **[Guice](https://github.com/google/guice)** :Google 开源的一个轻量级依赖注入框架,相当于一个功能极简化的轻量级 Spring Boot。在某些情况下非常实用,就比如说我们的项目只需要使用依赖注入,不需要 AOP 等功能特性。 -- **[SOFABoot](https://github.com/sofastack/sofa-boot)** :SOFABoot 基于 Spring Boot ,不过在其基础上增加了 Readiness Check,类隔离,日志空间隔离等等能力。 配套提供的还有:SOFARPC(RPC 框架)、SOFABolt(基于 Netty 的远程通信框架)、SOFARegistry(注册中心)...详情请参考:[SOFAStack ](https://github.com/sofastack) 。 -- [**Spring Batch**](https://github.com/spring-projects/spring-batch) : Spring Batch 是一个轻量级但功能又十分全面的批处理框架,主要用于批处理场景比如从数据库、文件或队列中读取大量记录。不过,需要注意的是:**Spring Batch 不是调度框架**。商业和开源领域都有许多优秀的企业调度框架比如 Quartz、XXL-JOB、Elastic-Job。它旨在与调度程序一起工作,而不是取代调度程序。更多介绍请参考 [Spring Batch 官方文档](https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/spring-batch-intro.html#spring-batch-intro),入门教程可以参考 [Spring Batch 从入门到实战](https://mrbird.cc/Spring-Batch入门.html)。 +- [Spring Boot ](https://github.com/spring-projects/spring-boot "spring-boot") :Spring Boot 可以轻松创建独立的生产级基于 Spring 的应用程序,内置 web 服务器让你可以像运行普通 Java 程序一样运行项 目。另外,大部分 Spring Boot 项目只需要少量的配置即可,这有别于 Spring 的重配置。 +- [Javalin](https://github.com/tipsy/javalin) :一个轻量级的 Web 框架,同时支持 Java 和 Kotlin,被微软、红帽、Uber 等公司使用。 +- [Quarkus](https://github.com/quarkusio/quarkus) : 用于编写 Java 应用程序的云原生和容器优先的框架。 +- [Guice](https://github.com/google/guice) :Google 开源的一个轻量级依赖注入框架,相当于一个功能极简化的轻量级 Spring Boot。在某些情况下非常实用,就比如说我们的项目只需要使用依赖注入,不需要 AOP 等功能特性。 +- [SOFABoot](https://github.com/sofastack/sofa-boot) :SOFABoot 基于 Spring Boot ,不过在其基础上增加了 Readiness Check,类隔离,日志空间隔离等等能力。 配套提供的还有:SOFARPC(RPC 框架)、SOFABolt(基于 Netty 的远程通信框架)、SOFARegistry(注册中心)...详情请参考:[SOFAStack ](https://github.com/sofastack) 。 +- [Spring Batch](https://github.com/spring-projects/spring-batch) : Spring Batch 是一个轻量级但功能又十分全面的批处理框架,主要用于批处理场景比如从数据库、文件或队列中读取大量记录。不过,需要注意的是:Spring Batch 不是调度框架。商业和开源领域都有许多优秀的企业调度框架比如 Quartz、XXL-JOB、Elastic-Job。它旨在与调度程序一起工作,而不是取代调度程序。更多介绍请参考 [Spring Batch 官方文档](https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/spring-batch-intro.html#spring-batch-intro),入门教程可以参考 [Spring Batch 从入门到实战](https://mrbird.cc/Spring-Batch入门.html)。 ## 数据库 ### 数据库连接池 -- **[Druid](https://github.com/alibaba/druid)** : 阿里巴巴数据库事业部出品,为监控而生的数据库连接池。 -- **[HikariCP](https://github.com/brettwooldridge/HikariCP)** : 一个可靠的高性能 JDBC 连接池。Springboot 2.0 选择 HikariCP 作为默认数据库连接池。 +- [Druid](https://github.com/alibaba/druid) : 阿里巴巴数据库事业部出品,为监控而生的数据库连接池。 +- [HikariCP](https://github.com/brettwooldridge/HikariCP) : 一个可靠的高性能 JDBC 连接池。Springboot 2.0 选择 HikariCP 作为默认数据库连接池。 ### 数据库框架 -- **[MyBatis-Plus](https://github.com/baomidou/mybatis-plus)** : [MyBatis-Plus](https://github.com/baomidou/mybatis-plus)(简称 MP)是一个 [MyBatis](http://www.mybatis.org/mybatis-3/) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 -- **[Redisson](https://github.com/redisson/redisson "redisson")** : Redis 基础上的一个 Java 驻内存数据网格(In-Memory Data Grid),支持超过 30 个对象和服务:`Set`,`SortedSet`, `Map`, `List`, `Queue`, `Deque` ......,并且提供了多种分布式锁的实现。更多介绍请看:[《Redisson 项目介绍》](https://github.com/redisson/redisson/wiki/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D "Redisson项目介绍")。 +- [MyBatis-Plus](https://github.com/baomidou/mybatis-plus) : [MyBatis-Plus](https://github.com/baomidou/mybatis-plus)(简称 MP)是一个 [MyBatis](http://www.mybatis.org/mybatis-3/) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 +- [Redisson](https://github.com/redisson/redisson "redisson") : Redis 基础上的一个 Java 驻内存数据网格(In-Memory Data Grid),支持超过 30 个对象和服务:`Set`,`SortedSet`, `Map`, `List`, `Queue`, `Deque` ......,并且提供了多种分布式锁的实现。更多介绍请看:[《Redisson 项目介绍》](https://github.com/redisson/redisson/wiki/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D "Redisson项目介绍")。 ### 数据同步 -- **[Canal](https://github.com/alibaba/canal "canal")** [kə'næl] : Canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 -- **[DataX](https://github.com/alibaba/DataX "DataX")** :DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。相关项目:**[DataX-Web](https://github.com/WeiYe-Jing/datax-web)** (DataX 集成可视化页面,选择数据源即可一键生成数据同步任务)。 +- [Canal](https://github.com/alibaba/canal "canal") [kə'næl] : Canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 +- [DataX](https://github.com/alibaba/DataX "DataX") :DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。相关项目:[DataX-Web](https://github.com/WeiYe-Jing/datax-web) (DataX 集成可视化页面,选择数据源即可一键生成数据同步任务)。 -其他:**[Flinkx](https://github.com/DTStack/flinkx)** (基于 Flink 的分布式数据同步工具)。 +其他:[Flinkx](https://github.com/DTStack/flinkx) (基于 Flink 的分布式数据同步工具)。 ### 时序数据库 -- **[IoTDB](https://github.com/apache/iotdb)** :一款 Java 语言编写的国产时序数据库,为用户提供数据收集、存储和分析等服务。与 Hadoop、Spark 和可视化工具(如 Grafana)无缝集成,满足了工业 IoT 领域中海量数据存储、高吞吐量数据写入和复杂数据查询分析的需求。 -- **[KairosDB](https://github.com/kairosdb/kairosdb)** :一个基于 Cassandra 的快速分布式可扩展时间序列数据库。 +- [IoTDB](https://github.com/apache/iotdb) :一款 Java 语言编写的国产时序数据库,为用户提供数据收集、存储和分析等服务。与 Hadoop、Spark 和可视化工具(如 Grafana)无缝集成,满足了工业 IoT 领域中海量数据存储、高吞吐量数据写入和复杂数据查询分析的需求。 +- [KairosDB](https://github.com/kairosdb/kairosdb) :一个基于 Cassandra 的快速分布式可扩展时间序列数据库。 ## 搜索引擎 -- **[Elasticsearch](https://github.com/elastic/elasticsearch "elasticsearch")** (推荐):开源,分布式,RESTful 搜索引擎。 -- **[Solr](https://lucene.apache.org/solr/)** : Solr(读作“solar”)是 Apache Lucene 项目的开源企业搜索平台。 +- [Elasticsearch](https://github.com/elastic/elasticsearch "elasticsearch") (推荐):开源,分布式,RESTful 搜索引擎。 +- [Solr](https://lucene.apache.org/solr/) : Solr(读作“solar”)是 Apache Lucene 项目的开源企业搜索平台。 ## 认证授权 -- **[WxJava](https://github.com/Wechat-Group/WxJava)** : WxJava (微信开发 Java SDK),支持包括微信支付、开放平台、小程序、企业微信/企业号和公众号等的后端开发。 -- **[Sa-Token](https://github.com/dromara/sa-token)** :轻量级 Java 权限认证框架。支持认证授权、单点登录、踢人下线、自动续签等功能。 -- **[JustAuth](https://github.com/justauth/JustAuth)** :小而全而美的第三方登录开源组件。目前已经集成了诸如:Github、Gitee、支付宝、新浪微博、微信、Google、Facebook、Twitter、StackOverflow 等国内外数十家第三方平台。 +- [WxJava](https://github.com/Wechat-Group/WxJava) : WxJava (微信开发 Java SDK),支持包括微信支付、开放平台、小程序、企业微信/企业号和公众号等的后端开发。 +- [Sa-Token](https://github.com/dromara/sa-token) :轻量级 Java 权限认证框架。支持认证授权、单点登录、踢人下线、自动续签等功能。 +- [JustAuth](https://github.com/justauth/JustAuth) :小而全而美的第三方登录开源组件。目前已经集成了诸如:Github、Gitee、支付宝、新浪微博、微信、Google、Facebook、Twitter、StackOverflow 等国内外数十家第三方平台。 ## 网络通讯 -- **[Netty](https://github.com/netty/netty)** : 一个基于 NIO 的 client-server(客户端服务器)框架,使用它可以快速简单地开发网络应用程序。 -- **[Retrofit](https://github.com/square/retrofit)** :适用于 Android 和 Java 的类型安全的 HTTP 客户端。Retrofit 的 HTTP 请求使用的是 [OkHttp](https://square.github.io/okhttp/) 库(一款被广泛使用网络框架)。 -- **[Forest](https://gitee.com/dromara/forest)** :轻量级 HTTP 客户端 API 框架,让 Java 发送 HTTP/HTTPS 请求不再难。它比 OkHttp 和 HttpClient 更高层,是封装调用第三方 restful api client 接口的好帮手,是 retrofit 和 feign 之外另一个选择。 -- **[netty-websocket-spring-boot-starter](https://github.com/YeautyYE/netty-websocket-spring-boot-starter)** :帮助你在 Spring Boot 中使用 Netty 来开发 WebSocket 服务器,并像 spring-websocket 的注解开发一样简单。 +- [Netty](https://github.com/netty/netty) : 一个基于 NIO 的 client-server(客户端服务器)框架,使用它可以快速简单地开发网络应用程序。 +- [Retrofit](https://github.com/square/retrofit) :适用于 Android 和 Java 的类型安全的 HTTP 客户端。Retrofit 的 HTTP 请求使用的是 [OkHttp](https://square.github.io/okhttp/) 库(一款被广泛使用网络框架)。 +- [Forest](https://gitee.com/dromara/forest) :轻量级 HTTP 客户端 API 框架,让 Java 发送 HTTP/HTTPS 请求不再难。它比 OkHttp 和 HttpClient 更高层,是封装调用第三方 restful api client 接口的好帮手,是 retrofit 和 feign 之外另一个选择。 +- [netty-websocket-spring-boot-starter](https://github.com/YeautyYE/netty-websocket-spring-boot-starter) :帮助你在 Spring Boot 中使用 Netty 来开发 WebSocket 服务器,并像 spring-websocket 的注解开发一样简单。 ## 测试 @@ -61,11 +61,11 @@ icon: "xitongsheji" ### 测试框架 -- **[JUnit](http://junit.org/)** : Java 测试框架。 -- **[Mockito](https://github.com/mockito/mockito)** :Mockito 是一个模拟测试框架,可以让你用优雅,简洁的接口写出漂亮的单元测试。(对那些不容易构建的对象用一个虚拟对象来代替,使其在调试期间用来作为真实对象的替代品) -- **[PowerMock](https://github.com/powermock/powermock)** : 编写单元测试仅靠 Mockito 是不够。因为 Mockito 无法 mock 私有方法、final 方法及静态方法等。PowerMock 这个 framework,主要是为了扩展其他 mock 框架,如 Mockito、EasyMock。它使用一个自定义的类加载器,纂改字节码,突破 Mockito 无法 mock 静态方法、构造方法、final 类、final 方法以及私有方法的限制。 -- **[WireMock](https://github.com/tomakehurst/wiremock)** :模拟 HTTP 服务的工具(Mock your APIs)。 -- **[Testcontainers](https://github.com/testcontainers/testcontainers-java)** :一个支持 JUnit 的测试工具库,提供轻量级的且一次性的常见数据库测试支持、Selenium Web 浏览器或者其他任何可以在 Docker 容器中运行的实例支持。 +- [JUnit](http://junit.org/) : Java 测试框架。 +- [Mockito](https://github.com/mockito/mockito) :Mockito 是一个模拟测试框架,可以让你用优雅,简洁的接口写出漂亮的单元测试。(对那些不容易构建的对象用一个虚拟对象来代替,使其在调试期间用来作为真实对象的替代品) +- [PowerMock](https://github.com/powermock/powermock) : 编写单元测试仅靠 Mockito 是不够。因为 Mockito 无法 mock 私有方法、final 方法及静态方法等。PowerMock 这个 framework,主要是为了扩展其他 mock 框架,如 Mockito、EasyMock。它使用一个自定义的类加载器,纂改字节码,突破 Mockito 无法 mock 静态方法、构造方法、final 类、final 方法以及私有方法的限制。 +- [WireMock](https://github.com/tomakehurst/wiremock) :模拟 HTTP 服务的工具(Mock your APIs)。 +- [Testcontainers](https://github.com/testcontainers/testcontainers-java) :一个支持 JUnit 的测试工具库,提供轻量级的且一次性的常见数据库测试支持、Selenium Web 浏览器或者其他任何可以在 Docker 容器中运行的实例支持。 相关阅读: @@ -74,23 +74,23 @@ icon: "xitongsheji" ### 测试平台 -- **[MeterSphere](https://github.com/metersphere/metersphere)** : 一站式开源持续测试平台,涵盖测试跟踪、接口测试、性能测试、团队协作等功能,全面兼容 JMeter、Postman、Swagger 等开源、主流标准。 -- **[Apifox](https://www.apifox.cn/)** :API 文档、API 调试、API Mock、API 自动化测试。 +- [MeterSphere](https://github.com/metersphere/metersphere) : 一站式开源持续测试平台,涵盖测试跟踪、接口测试、性能测试、团队协作等功能,全面兼容 JMeter、Postman、Swagger 等开源、主流标准。 +- [Apifox](https://www.apifox.cn/) :API 文档、API 调试、API Mock、API 自动化测试。 ### API 调试 -- **[Insomnia](https://insomnia.rest/)** :像人类而不是机器人一样调试 API。我平时经常用的,界面美观且轻量,总之很喜欢。 -- **[Postman](https://www.getpostman.com/)** :API 请求生成器。 -- **[Postwoman](https://github.com/liyasthomas/postwoman "postwoman")** :API 请求生成器-一个免费、快速、漂亮的 Postma 替代品。 +- [Insomnia](https://insomnia.rest/) :像人类而不是机器人一样调试 API。我平时经常用的,界面美观且轻量,总之很喜欢。 +- [Postman](https://www.getpostman.com/) :API 请求生成器。 +- [Postwoman](https://github.com/liyasthomas/postwoman "postwoman") :API 请求生成器-一个免费、快速、漂亮的 Postma 替代品。 ## 任务调度 -- **[Quartz](https://github.com/quartz-scheduler/quartz)** :一个很火的开源任务调度框架,Java 定时任务领域的老大哥或者说参考标准, 很多其他任务调度框架都是基于 `quartz` 开发的,比如当当网的`elastic-job`就是基于`quartz`二次开发之后的分布式调度解决方案 -- **[XXL-JOB](https://github.com/xuxueli/xxl-job)** :XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 -- **[Elastic-Job](http://elasticjob.io/index_zh.html)** :Elastic-Job 是当当网开源的一个基于 Quartz 和 Zookeeper 的分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成,一般我们只要使用 Elastic-Job-Lite 就好。 -- **[EasyScheduler](https://github.com/analysys/EasyScheduler "EasyScheduler")** (已经更名为 DolphinScheduler,已经成为 Apache 孵化器项目): Easy Scheduler 是一个分布式工作流任务调度系统,主要解决“复杂任务依赖但无法直接监控任务健康状态”的问题。Easy Scheduler 以 DAG 方式组装任务,可以实时监控任务的运行状态。同时,它支持重试,重新运行等操作... 。 -- **[PowerJob](https://gitee.com/KFCFans/PowerJob)** :新一代分布式任务调度与计算框架,支持 CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,使用简单,功能强大,文档齐全,欢迎各位接入使用!http://www.powerjob.tech/ 。 -- **[DolphinScheduler](https://github.com/apache/dolphinscheduler)** :分布式易扩展的可视化工作流任务调度平台。 +- [Quartz](https://github.com/quartz-scheduler/quartz) :一个很火的开源任务调度框架,Java 定时任务领域的老大哥或者说参考标准, 很多其他任务调度框架都是基于 `quartz` 开发的,比如当当网的`elastic-job`就是基于`quartz`二次开发之后的分布式调度解决方案 +- [XXL-JOB](https://github.com/xuxueli/xxl-job) :XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 +- [Elastic-Job](http://elasticjob.io/index_zh.html) :Elastic-Job 是当当网开源的一个基于 Quartz 和 Zookeeper 的分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成,一般我们只要使用 Elastic-Job-Lite 就好。 +- [EasyScheduler](https://github.com/analysys/EasyScheduler "EasyScheduler") (已经更名为 DolphinScheduler,已经成为 Apache 孵化器项目): Easy Scheduler 是一个分布式工作流任务调度系统,主要解决“复杂任务依赖但无法直接监控任务健康状态”的问题。Easy Scheduler 以 DAG 方式组装任务,可以实时监控任务的运行状态。同时,它支持重试,重新运行等操作... 。 +- [PowerJob](https://gitee.com/KFCFans/PowerJob) :新一代分布式任务调度与计算框架,支持 CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,使用简单,功能强大,文档齐全,欢迎各位接入使用!http://www.powerjob.tech/ 。 +- [DolphinScheduler](https://github.com/apache/dolphinscheduler) :分布式易扩展的可视化工作流任务调度平台。 相关阅读: @@ -103,29 +103,29 @@ icon: "xitongsheji" 微服务下一个系统被拆分为多个服务,但是像 安全认证,流量控制,日志,监控等功能是每个服务都需要的,没有网关的话,我们就需要在每个服务中单独实现,这使得我们做了很多重复的事情并且没有一个全局的视图来统一管理这些功能。 -综上:**一般情况下,网关一般都会提供请求转发、安全认证(身份/权限认证)、流量控制、负载均衡、容灾、日志、监控这些功能。** +综上:一般情况下,网关一般都会提供请求转发、安全认证(身份/权限认证)、流量控制、负载均衡、容灾、日志、监控这些功能。 -上面介绍了这么多功能实际上网关主要做了一件事情:**请求过滤** 。权限校验、流量控制这些都可以通过过滤器实现,请求转也是通过过滤器实现的。 +上面介绍了这么多功能实际上网关主要做了一件事情:请求过滤 。权限校验、流量控制这些都可以通过过滤器实现,请求转也是通过过滤器实现的。 -1. **[Kong](https://github.com/Kong/kong "kong")** :Kong 是一个云原生、快速的、可伸缩的分布式微服务抽象层(也称为 API 网关、API 中间件或在某些情况下称为服务网格)。2015 年作为开源项目发布,其核心价值是高性能和可扩展性。 -2. **[Soul](https://github.com/Dromara/soul "soul")** :高性能、基于 webflux 的反应式 Java API 网关 -3. **[Spring Cloud Gateway](https://github.com/spring-cloud/spring-cloud-gateway)** : 基于 Spring Framework 5.x 和 Spring Boot 2.x 构建的高性能网关。 -4. **[Zuul](https://github.com/Netflix/zuul)** : Zuul 是一个 L7 应用程序网关,它提供了动态路由,监视,弹性,安全性等功能。 +1. [Kong](https://github.com/Kong/kong "kong") :Kong 是一个云原生、快速的、可伸缩的分布式微服务抽象层(也称为 API 网关、API 中间件或在某些情况下称为服务网格)。2015 年作为开源项目发布,其核心价值是高性能和可扩展性。 +2. [Soul](https://github.com/Dromara/soul "soul") :高性能、基于 webflux 的反应式 Java API 网关 +3. [Spring Cloud Gateway](https://github.com/spring-cloud/spring-cloud-gateway) : 基于 Spring Framework 5.x 和 Spring Boot 2.x 构建的高性能网关。 +4. [Zuul](https://github.com/Netflix/zuul) : Zuul 是一个 L7 应用程序网关,它提供了动态路由,监视,弹性,安全性等功能。 ### 配置中心 -- **[Apollo](https://github.com/ctripcorp/apollo "apollo")**(推荐) :Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 -- **[Nacos](https://github.com/alibaba/nacos)**(推荐):Nacos 是 Spring Cloud Alibaba 提供的服务注册发现组件,类似于 Consul、Eureka。并且,提供了分布式配置管理功能。 -- **[Spring Cloud Config](https://github.com/spring-cloud/spring-cloud-config)** : Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Cloud 项目,通过简单的配置即可实现功能。 -- **[Consul](https://github.com/hashicorp/consul)** :Consul 是 HashiCorp 公司推出的开源软件,提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案。 +- [Apollo](https://github.com/ctripcorp/apollo "apollo")(推荐) :Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 +- [Nacos](https://github.com/alibaba/nacos)(推荐):Nacos 是 Spring Cloud Alibaba 提供的服务注册发现组件,类似于 Consul、Eureka。并且,提供了分布式配置管理功能。 +- [Spring Cloud Config](https://github.com/spring-cloud/spring-cloud-config) : Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Cloud 项目,通过简单的配置即可实现功能。 +- [Consul](https://github.com/hashicorp/consul) :Consul 是 HashiCorp 公司推出的开源软件,提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案。 ### 链路追踪 目前分布式链路追踪系统基本都是根据谷歌的《Dapper 大规模分布式系统的跟踪系统》这篇论文发展而来,主流的有 Pinpoint,Skywalking ,CAT(当然也有其他的例如 Zipkin,Jaeger 等产品,不过总体来说不如前面选取的 3 个完成度高)等。 -1. **[Skywalking](https://github.com/apache/skywalking "skywalking")** : 针对分布式系统的应用性能监控,尤其是针对微服务、云原生和面向容器的分布式系统架构。 -2. **[Zipkin](https://github.com/openzipkin/zipkin "zipkin")** :Zipkin 是一个分布式跟踪系统。它有助于收集解决服务体系结构中的延迟问题所需的时序数据。功能包括该数据的收集和查找。 -3. **[CAT](https://github.com/dianping/cat "cat")** : CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC 框架,RPC 框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。 +1. [Skywalking](https://github.com/apache/skywalking "skywalking") : 针对分布式系统的应用性能监控,尤其是针对微服务、云原生和面向容器的分布式系统架构。 +2. [Zipkin](https://github.com/openzipkin/zipkin "zipkin") :Zipkin 是一个分布式跟踪系统。它有助于收集解决服务体系结构中的延迟问题所需的时序数据。功能包括该数据的收集和查找。 +3. [CAT](https://github.com/dianping/cat "cat") : CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC 框架,RPC 框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。 相关阅读: [Skywalking 官网对于主流开源链路追踪系统的对比](https://skywalking.apache.org/zh/blog/2019-03-29-introduction-of-skywalking-and-simple-practice.html) @@ -133,37 +133,37 @@ icon: "xitongsheji" ### 多线程 -- **[Hippo-4J](https://github.com/opengoofy/hippo4j)** :一款强大的动态线程池框架,解决了传统线程池使用存在的一些痛点比如线程池参数没办法动态修改、不支持运行时变量的传递、无法执行优雅关闭。除了支持动态修改线程池参数、线程池任务传递上下文,还支持通知报警、运行监控等开箱即用的功能。 -- **[Dynamic Tp](https://github.com/dromara/dynamic-tp)** :轻量级动态线程池,内置监控告警功能,集成三方中间件线程池管理,基于主流配置中心(已支持Nacos、Apollo,Zookeeper、Consul、Etcd,可通过SPI自定义实现)。 -- **[asyncTool](https://gitee.com/jd-platform-opensource/asyncTool)** : 京东的一位大佬开源的多线程工具库,里面大量使用到了 `CompletableFuture` ,可以解决任意的多线程并行、串行、阻塞、依赖、回调的并行框架,可以任意组合各线程的执行顺序,带全链路执行结果回调。 +- [Hippo-4J](https://github.com/opengoofy/hippo4j) :一款强大的动态线程池框架,解决了传统线程池使用存在的一些痛点比如线程池参数没办法动态修改、不支持运行时变量的传递、无法执行优雅关闭。除了支持动态修改线程池参数、线程池任务传递上下文,还支持通知报警、运行监控等开箱即用的功能。 +- [Dynamic Tp](https://github.com/dromara/dynamic-tp) :轻量级动态线程池,内置监控告警功能,集成三方中间件线程池管理,基于主流配置中心(已支持 Nacos、Apollo,Zookeeper、Consul、Etcd,可通过 SPI 自定义实现)。 +- [asyncTool](https://gitee.com/jd-platform-opensource/asyncTool) : 京东的一位大佬开源的多线程工具库,里面大量使用到了 `CompletableFuture` ,可以解决任意的多线程并行、串行、阻塞、依赖、回调的并行框架,可以任意组合各线程的执行顺序,带全链路执行结果回调。 ### 缓存 -- **[Caffeine](https://github.com/ben-manes/caffeine)** : 一款强大的本地缓存解决方案,性能非常 🐂。 -- **[Redis](https://github.com/redis/redis)** :一个使用 C 语言开发的内存数据库,分布式缓存首选。 +- [Caffeine](https://github.com/ben-manes/caffeine) : 一款强大的本地缓存解决方案,性能非常 🐂。 +- [Redis](https://github.com/redis/redis) :一个使用 C 语言开发的内存数据库,分布式缓存首选。 ### 消息队列 **分布式队列** : -1. **[RocketMQ](https://github.com/apache/rocketmq "RocketMQ")** :阿里巴巴开源的一款高性能、高吞吐量的分布式消息中间件。 -2. **[Kafaka](https://github.com/apache/kafka "Kafaka")**: Kafka 是一种分布式的,基于发布 / 订阅的消息系统。关于它的入门可以查看:[Kafka 入门看这一篇就够了](https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/data-communication/Kafka入门看这一篇就够了.md "Kafka入门看这一篇就够了") -3. **[RabbitMQ](https://github.com/rabbitmq "RabbitMQ")** :由 erlang 开发的基于 AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列。 +- [RocketMQ](https://github.com/apache/rocketmq "RocketMQ") :阿里巴巴开源的一款高性能、高吞吐量的分布式消息中间件。 +- [Kafaka](https://github.com/apache/kafka "Kafaka"): Kafka 是一种分布式的,基于发布 / 订阅的消息系统。关于它的入门可以查看:[Kafka 入门看这一篇就够了](https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/data-communication/Kafka入门看这一篇就够了.md "Kafka入门看这一篇就够了") +- [RabbitMQ](https://github.com/rabbitmq "RabbitMQ") :由 erlang 开发的基于 AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列。 **内存队列** : -- **[Disruptor](https://github.com/LMAX-Exchange/disruptor)** : Disruptor 是英国外汇交易公司 LMAX 开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与 I/O 操作处于同样的数量级)。相关阅读 :[《高性能内存队列——Disruptor》](https://tech.meituan.com/2016/11/18/disruptor.html) 。 +- [Disruptor](https://github.com/LMAX-Exchange/disruptor) : Disruptor 是英国外汇交易公司 LMAX 开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与 I/O 操作处于同样的数量级)。相关阅读 :[《高性能内存队列——Disruptor》](https://tech.meituan.com/2016/11/18/disruptor.html) 。 **可视化管理工具** : -- **[Kafdrop](https://github.com/obsidiandynamics/kafdrop)** : 一个用于查看 Kafka 主题和浏览消费者组的 Web UI。 -- **[EFAK](https://github.com/smartloli/EFAK)** (Eagle For Apache Kafka,以前叫做 Kafka Eagle) :一个简单的高性能监控系统,用于对 Kafka 集群进行全面的监控和管理。 +- [Kafdrop](https://github.com/obsidiandynamics/kafdrop) : 一个用于查看 Kafka 主题和浏览消费者组的 Web UI。 +- [EFAK](https://github.com/smartloli/EFAK) (Eagle For Apache Kafka,以前叫做 Kafka Eagle) :一个简单的高性能监控系统,用于对 Kafka 集群进行全面的监控和管理。 ### 数据库中间件 -- **[ShardingSphere](https://github.com/apache/shardingsphere)** :ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(计划中)这 3 款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。中文文档:[https://shardingsphere.apache.org/document/current/cn/overview/](https://shardingsphere.apache.org/document/current/cn/overview/) 。 -- **[MyCat](https://github.com/MyCatApache/MyCat2)** : MyCat 是数据库分库分表的中间件,MyCat 使用最多的两个功能是:读写分离和分库分表。MyCat 是一些社区爱好者在阿里 Cobar 的基础上进行二次开发,解决了 Cobar 当时存 在的一些问题,并且加入了许多新的功能在其中。 -- **[dynamic-datasource-spring-boot-starter](https://github.com/baomidou/dynamic-datasource-spring-boot-starter)** :dynamic-datasource-spring-boot-starter 是一个基于 springboot 的快速集成多数据源的启动器。如果说你有配置多数据源、读写分离等需求的话,可以了解一下这个项目。 +- [ShardingSphere](https://github.com/apache/shardingsphere) :ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(计划中)这 3 款相互独立的产品组成。 +- [MyCat](https://github.com/MyCatApache/MyCat2) : MyCat 是数据库分库分表的中间件,MyCat 使用最多的两个功能是:读写分离和分库分表。MyCat 是一些社区爱好者在阿里 Cobar 的基础上进行二次开发,解决了 Cobar 当时存 在的一些问题,并且加入了许多新的功能在其中。 +- [dynamic-datasource-spring-boot-starter](https://github.com/baomidou/dynamic-datasource-spring-boot-starter) :dynamic-datasource-spring-boot-starter 是一个基于 springboot 的快速集成多数据源的启动器。如果说你有配置多数据源、读写分离等需求的话,可以了解一下这个项目。 相关阅读:[数据库中间件详解(精品长文)](https://zhuanlan.zhihu.com/p/87144535) @@ -171,26 +171,26 @@ icon: "xitongsheji" ### 限流 -**分布式限流** : +分布式限流 : -- **[ Sentinel](https://github.com/alibaba/Sentinel)**(推荐):面向分布式服务架构的高可用防护组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。 -- **[Hystrix](https://github.com/Netflix/Hystrix)** :类似于 Sentinel 。 +- [ Sentinel](https://github.com/alibaba/Sentinel)(推荐):面向分布式服务架构的高可用防护组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。 +- [Hystrix](https://github.com/Netflix/Hystrix) :类似于 Sentinel 。 相关阅读:[Sentinel 与 Hystrix 的对比](https://sentinelguard.io/zh-cn/blog/sentinel-vs-hystrix.html) -**单机限流** : +单机限流 : -- **[Bucket4j](https://github.com/vladimir-bukhtoyarov/bucket4j)** :一个非常不错的基于令牌/漏桶算法的限流库。 -- **[Resilience4j](https://github.com/resilience4j/resilience4j)** :一个轻量级的容错组件,其灵感来自于 Hystrix。 +- [Bucket4j](https://github.com/vladimir-bukhtoyarov/bucket4j) :一个非常不错的基于令牌/漏桶算法的限流库。 +- [Resilience4j](https://github.com/resilience4j/resilience4j) :一个轻量级的容错组件,其灵感来自于 Hystrix。 ### 监控 -- **[Spring Boot Admin](https://github.com/codecentric/spring-boot-admin)** :管理和监控 Spring Boot 应用程序。 -- **[Metrics](https://github.com/dropwizard/metrics)** :捕获**JVM**和应用程序级别的指标。所以你知道发生了什么事。 +- [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin) :管理和监控 Spring Boot 应用程序。 +- [Metrics](https://github.com/dropwizard/metrics) :捕获 JVM 和应用程序级别的指标。所以你知道发生了什么事。 ### 日志 -- **EKL 老三件套** : 最原始的时候,ELK 是由 3 个开源项目的首字母构成,分别是 **E**lasticsearch 、**L**ogstash、**K**ibana。 -- **新一代 ELK 架构** : Elasticsearch+Logstash+Kibana+Beats。 -- **EFK** : EFK 中的 F 代表的是 [Fluentd](https://github.com/fluent/fluentd)。 -- **[TLog](https://gitee.com/dromara/TLog)** :一个轻量级的分布式日志标记追踪神器,10 分钟即可接入,自动对日志打标签完成微服务的链路追踪。 +- EKL 老三件套 : 最原始的时候,ELK 是由 3 个开源项目的首字母构成,分别是 Elasticsearch 、Logstash、Kibana。 +- 新一代 ELK 架构 : Elasticsearch+Logstash+Kibana+Beats。 +- EFK : EFK 中的 F 代表的是 [Fluentd](https://github.com/fluent/fluentd)。 +- [TLog](https://gitee.com/dromara/TLog) :一个轻量级的分布式日志标记追踪神器,10 分钟即可接入,自动对日志打标签完成微服务的链路追踪。 diff --git a/docs/open-source-project/tool-library.md b/docs/open-source-project/tool-library.md index 32177e90..c56cbb14 100644 --- a/docs/open-source-project/tool-library.md +++ b/docs/open-source-project/tool-library.md @@ -1,52 +1,59 @@ --- -title: Java 优质开源工具类库 +title: Java 优质开源工具类 category: 开源项目 icon: codelibrary-fill --- ## 代码质量 -- **[lombok](https://github.com/rzwitserloot/lombok)** :使用 Lombok 我们可以简化我们的 Java 代码,比如使用它之后我们通过注释就可以实现 getter/setter、equals 等方法。 -- **[guava](https://github.com/google/guava "guava")** :Guava 是一组核心库,其中包括新的集合类型(例如 multimap 和 multiset),不可变集合,图形库以及用于并发、I / O、哈希、原始类型、字符串等的实用程序! -- **[p3c](https://github.com/alibaba/p3c "p3c")** :Alibaba Java Coding Guidelines pmd implements and IDE plugin。Eclipse 和 IDEA 上都有该插件,推荐使用! -- **[arthas](https://github.com/alibaba/arthas "arthas")** : Arthas 是 Alibaba 开源的 Java 诊断工具。 -- **[sonarqube](https://github.com/SonarSource/sonarqube "sonarqube")** :SonarQube 支持所有开发人员编写更干净,更安全的代码。 -- **[checkstyle](https://github.com/checkstyle/checkstyle "checkstyle")** :Checkstyle 是一种开发工具,可帮助程序员编写符合编码标准的 Java 代码。它使检查 Java 代码的过程自动化,从而使人们不必执行这项无聊(但很重要)的任务。这使其成为想要实施编码标准的项目的理想选择。 -- **[pmd](https://github.com/pmd/pmd "pmd")** : 可扩展的多语言静态代码分析器。 -- **[spotbugs](https://github.com/spotbugs/spotbugs "spotbugs")** :SpotBugs 是 FindBugs 的继任者。静态分析工具,用于查找 Java 代码中的错误。 -- **[hutool](https://github.com/looly/hutool "hutool")** : Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以“甜甜的”。 +- [lombok](https://github.com/rzwitserloot/lombok) :使用 Lombok 我们可以简化我们的 Java 代码,比如使用它之后我们通过注释就可以实现 getter/setter、equals 等方法。 +- [guava](https://github.com/google/guava "guava") :Guava 是一组核心库,其中包括新的集合类型(例如 multimap 和 multiset),不可变集合,图形库以及用于并发、I / O、哈希、原始类型、字符串等的实用程序! +- [hutool](https://github.com/looly/hutool "hutool") : Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以“甜甜的”。 +- [p3c](https://github.com/alibaba/p3c "p3c") :Alibaba Java Coding Guidelines pmd implements and IDE plugin。Eclipse 和 IDEA 上都有该插件,推荐使用! +- [arthas](https://github.com/alibaba/arthas "arthas") : Arthas 是 Alibaba 开源的 Java 诊断工具。 +- [sonarqube](https://github.com/SonarSource/sonarqube "sonarqube") :SonarQube 支持所有开发人员编写更干净,更安全的代码。 +- [checkstyle](https://github.com/checkstyle/checkstyle "checkstyle") :Checkstyle 是一种开发工具,可帮助程序员编写符合编码标准的 Java 代码。它使检查 Java 代码的过程自动化,从而使人们不必执行这项无聊(但很重要)的任务。这使其成为想要实施编码标准的项目的理想选择。 +- [pmd](https://github.com/pmd/pmd "pmd") : 可扩展的多语言静态代码分析器。 +- [spotbugs](https://github.com/spotbugs/spotbugs "spotbugs") :SpotBugs 是 FindBugs 的继任者。静态分析工具,用于查找 Java 代码中的错误。 ## 文档处理 ### Excel -- **[easyexcel](https://github.com/alibaba/easyexcel)** :快速、简单避免 OOM 的 java 处理 Excel 工具。 +- [easyexcel](https://github.com/alibaba/easyexcel) :快速、简单避免 OOM 的 Java 处理 Excel 工具。 +- [excel-streaming-reader](https://github.com/monitorjbl/excel-streaming-reader):Excel 流式代码风格读取工具(只支持读取 XLSX 文件),基于 Apache POI 封装,同时保留标准 POI API 的语法。 +- [myexcel](https://github.com/liaochong/myexcel):一个集导入、导出、加密Excel等多项功能的工具包。 ### JSON -- **[JsonPath](https://github.com/json-path/JsonPath)** :处理 JSON 数据的工具库。 +- [JsonPath](https://github.com/json-path/JsonPath) :处理 JSON 数据的工具库。 ### PDF -- **[pdfbox](https://github.com/apache/pdfbox)** :用于处理 PDF 文档的开放源码 Java 工具。该项目允许创建新的 PDF 文档、对现有文档进行操作以及从文档中提取内容。PDFBox 还包括几个命令行实用程序。PDFBox 是在 Apache 2.0 版许可下发布的。 -- **[OpenPDF](https://github.com/LibrePDF/OpenPDF)** :OpenPDF 是一个免费的 Java 库,用于使用 LGPL 和 MPL 开源许可创建和编辑 PDF 文件。OpenPDF 基于 iText 的一个分支。 -- **[itext7](https://github.com/itext/itext7)** :iText 7 代表了想要利用利用好 PDF 的开发人员的更高级别的 sdk。iText 7 配备了更好的文档引擎、高级和低级编程功能以及创建、编辑和增强 PDF 文档的能力,几乎对每个工作流都有好处。 -- **[FOP](https://xmlgraphics.apache.org/fop/)** :Apache FOP 项目的主要的输出目标是 PDF。 +- [pdfbox](https://github.com/apache/pdfbox) :用于处理 PDF 文档的开放源码 Java 工具。该项目允许创建新的 PDF 文档、对现有文档进行操作以及从文档中提取内容。PDFBox 还包括几个命令行实用程序。PDFBox 是在 Apache 2.0 版许可下发布的。 +- [OpenPDF](https://github.com/LibrePDF/OpenPDF) :OpenPDF 是一个免费的 Java 库,用于使用 LGPL 和 MPL 开源许可创建和编辑 PDF 文件。OpenPDF 基于 iText 的一个分支。 +- [itext7](https://github.com/itext/itext7) :iText 7 代表了想要利用利用好 PDF 的开发人员的更高级别的 sdk。iText 7 配备了更好的文档引擎、高级和低级编程功能以及创建、编辑和增强 PDF 文档的能力,几乎对每个工作流都有好处。 +- [FOP](https://xmlgraphics.apache.org/fop/) :Apache FOP 项目的主要的输出目标是 PDF。 + +## 图片处理 + +- [Thumbnailator](https://github.com/coobird/thumbnailator):一个图像处理工具库,主要功能是缩放图像、添加水印、旋转图像、调整图片大小以及区域裁剪。 +- [Imglib](https://github.com/nackily/imglib):一个轻量级的 JAVA 图像处理库,致力于简化对图像的常见处理,主要提供三部分的能力:图像收集、图像处理(基于 Thumbnailator 实现)、聚合与分裂。 ## 验证码 -- **[EasyCaptcha](https://gitee.com/whvse/EasyCaptcha)** :Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目。 -- **[AJ-Captcha](https://gitee.com/anji-plus/captcha)** :行为验证码(滑动拼图、点选文字),前后端(java)交互。 -- **[tianai-captcha](https://gitee.com/tianai/tianai-captcha)** :好看又好用的滑块验证码。 +- [EasyCaptcha](https://gitee.com/whvse/EasyCaptcha) :Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目。 +- [AJ-Captcha](https://gitee.com/anji-plus/captcha) :行为验证码(滑动拼图、点选文字),前后端(java)交互。 +- [tianai-captcha](https://gitee.com/tianai/tianai-captcha) :好看又好用的滑块验证码。 ## 在线支付 -- **[jeepay](https://gitee.com/jeequan/jeepay)** :一套适合互联网企业使用的开源支付系统,已实现交易、退款、转账、分账等接口,支持服务商特约商户和普通商户接口。已对接微信,支付宝,云闪付官方接口,支持聚合码支付。 -- **[YunGouOS-PAY-SDK](https://gitee.com/YunGouOS/YunGouOS-PAY-SDK)** :YunGouOS 微信支付接口、微信官方个人支付接口、非二维码收款,非第四方清算。个人用户可提交资料开通微信支付商户,完成对接。 -- **[IJPay](https://gitee.com/javen205/IJPay)** :聚合支付,IJPay 让支付触手可及,封装了微信支付、QQ 支付、支付宝支付、京东支付、银联支付、PayPal 支付等常用的支付方式以及各种常用的接口。 +- [jeepay](https://gitee.com/jeequan/jeepay) :一套适合互联网企业使用的开源支付系统,已实现交易、退款、转账、分账等接口,支持服务商特约商户和普通商户接口。已对接微信,支付宝,云闪付官方接口,支持聚合码支付。 +- [YunGouOS-PAY-SDK](https://gitee.com/YunGouOS/YunGouOS-PAY-SDK) :YunGouOS 微信支付接口、微信官方个人支付接口、非二维码收款,非第四方清算。个人用户可提交资料开通微信支付商户,完成对接。 +- [IJPay](https://gitee.com/javen205/IJPay) :聚合支付,IJPay 让支付触手可及,封装了微信支付、QQ 支付、支付宝支付、京东支付、银联支付、PayPal 支付等常用的支付方式以及各种常用的接口。 ## 其他 -- **[oshi](https://github.com/oshi/oshi "oshi")** :一款为 Java 语言提供的基于 JNA 的(本机)操作系统和硬件信息库。 -- **[ip2region](https://github.com/lionsoul2014/ip2region)** :最自由的 ip 地址查询库,ip 到地区的映射库,提供 Binary,B 树和纯内存三种查询算法,妈妈再也不用担心我的 ip 地址定位。 -- **[agrona](https://github.com/real-logic/agrona)** :Java 高性能数据结构(`Buffers`、`Lists`、`Maps`、`Scalable Timer Wheel`......)和实用方法。 \ No newline at end of file +- [oshi](https://github.com/oshi/oshi "oshi") :一款为 Java 语言提供的基于 JNA 的(本机)操作系统和硬件信息库。 +- [ip2region](https://github.com/lionsoul2014/ip2region) :最自由的 ip 地址查询库,ip 到地区的映射库,提供 Binary,B 树和纯内存三种查询算法,妈妈再也不用担心我的 ip 地址定位。 +- [agrona](https://github.com/real-logic/agrona) :Java 高性能数据结构(`Buffers`、`Lists`、`Maps`、`Scalable Timer Wheel`......)和实用方法。 \ No newline at end of file diff --git a/docs/open-source-project/tools.md b/docs/open-source-project/tools.md index 4df33698..1bbc3d90 100644 --- a/docs/open-source-project/tools.md +++ b/docs/open-source-project/tools.md @@ -6,47 +6,47 @@ icon: tool ## Java -- **[JADX](https://github.com/skylot/jadx)** :一款功能强大的反编译工具。 -- **[Recaf](https://github.com/Col-E/Recaf)** : Java 字节码编辑器,基于 ASM(Java 字节码操作框架) 来修改字节码,可简化编辑已编译 Java 应用程序的过程。 +- [JADX](https://github.com/skylot/jadx) :一款功能强大的反编译工具。 +- [Recaf](https://github.com/Col-E/Recaf) : Java 字节码编辑器,基于 ASM(Java 字节码操作框架) 来修改字节码,可简化编辑已编译 Java 应用程序的过程。 ## 数据库 ### 数据库建模 -- **[CHINER](https://gitee.com/robergroup/chiner)** :开源免费的国产数据库建模工具。目标是做一款丰富数据库生态,独立于具体数据库之外的,数据库关系模型设计平台。前生是 [PDMan](https://gitee.com/robergroup/pdman),定位为 PowerDesigner 的免费替代方案。 +- [CHINER](https://gitee.com/robergroup/chiner) :开源免费的国产数据库建模工具。目标是做一款丰富数据库生态,独立于具体数据库之外的,数据库关系模型设计平台。前生是 [PDMan](https://gitee.com/robergroup/pdman),定位为 PowerDesigner 的免费替代方案。 开源的数据库建模工具比较少,以下是一些非开源的数据库建模工具(部分需要付费才能使用) : -- **[MySQL Workbench](https://www.mysql.com/products/workbench/)** : MySQL 官方为数据库架构师、开发人员和 DBA 提供的一个可视化工具。 MySQL Workbench 支持数据建模,SQL 开发以及服务器配置、用户管理、性能优化、数据库备份以及迁移等功能,支持 Windows、Linux 和 Mac OS X 平台。 -- **[Navicat Data Modeler](https://www.navicat.com.cn/products/navicat-data-modeler)** : 一款强大的和符合成本效益的数据库设计工具,它能帮助用户创建高质素的概念、逻辑和物理数据模型。让你可视化地设计数据库结构、执行逆向或正向工程程序、从 ODBC 数据源导入模型、生成复杂的 SQL/DDL 和打印模型到文件等。付费。 -- **[DbSchema](https://dbschema.com/)** : 一款功能强大的数据库设计和管理的可视化工具,支持几乎所有的关系型和 NoSQL 数据库。付费。 -- **[dbdiagram.io](https://dbdiagram.io/home)** : 是一款简单免费的在线 ER 图绘制工具,通过编写代码创建模型,专为开发人员和数据分析师而设计。它通过一个简单的自定义语言来生成数据模型,支持 MySQL、PostgreSQL、SQL Server 数据库 DDL 文件的正向工程和逆向工程、版本历史、在线共享、导出图片或者 PDF 等功能。dbdiagram.io 提供了免费版。 +- [MySQL Workbench](https://www.mysql.com/products/workbench/) : MySQL 官方为数据库架构师、开发人员和 DBA 提供的一个可视化工具。 MySQL Workbench 支持数据建模,SQL 开发以及服务器配置、用户管理、性能优化、数据库备份以及迁移等功能,支持 Windows、Linux 和 Mac OS X 平台。 +- [Navicat Data Modeler](https://www.navicat.com.cn/products/navicat-data-modeler) : 一款强大的和符合成本效益的数据库设计工具,它能帮助用户创建高质素的概念、逻辑和物理数据模型。让你可视化地设计数据库结构、执行逆向或正向工程程序、从 ODBC 数据源导入模型、生成复杂的 SQL/DDL 和打印模型到文件等。付费。 +- [DbSchema](https://dbschema.com/) : 一款功能强大的数据库设计和管理的可视化工具,支持几乎所有的关系型和 NoSQL 数据库。付费。 +- [dbdiagram.io](https://dbdiagram.io/home) : 是一款简单免费的在线 ER 图绘制工具,通过编写代码创建模型,专为开发人员和数据分析师而设计。它通过一个简单的自定义语言来生成数据模型,支持 MySQL、PostgreSQL、SQL Server 数据库 DDL 文件的正向工程和逆向工程、版本历史、在线共享、导出图片或者 PDF 等功能。dbdiagram.io 提供了免费版。 ### 数据库管理 -- **[Beekeeper Studio](https://github.com/beekeeper-studio/beekeeper-studio)** :跨平台数据库管理工具,颜值高,支持 SQLite、MySQL、MariaDB、Postgres、CockroachDB、SQL Server、Amazon Redshift。 -- **[Sequel Pro](https://github.com/sequelpro/sequelpro)** :适用于 macOS 的 MySQL/MariaDB 数据库管理工具。 -- **[DBeaver](https://github.com/dbeaver/dbeaver)** :一个基于 Java 开发 ,并且支持几乎所有的数据库产品的开源数据库管理工具。DBeaver 社区版不光支持关系型数据库比如 MySQL、PostgreSQL、MariaDB、SQLite、Oracle、Db2、SQL Server,还比如 SQLite、H2 这些内嵌数据库。还支持常见的全文搜索引擎比如 Elasticsearch 和 Solr、大数据相关的工具比如 Hive 和 Spark。 -- **[Kangaroo](https://gitee.com/dbkangaroo/kangaroo)** :袋鼠是一款为热门数据库系统打造的管理客户端(SQLite / MySQL / PostgreSQL / ...) ,支持建表、查询、模型、同步、导入导出等功能,支持 Windows / Mac / Linux 等操作系统,力求打造成好用、好玩、开发友好的 SQL 工具。 -- **[Arctype](https://arctype.com/)** :一个桌面的数据库查询工具,可以连接各种数据库,在其中执行 SQL 语句,以可视化形式展示数据。 -- **[Mongood](https://github.com/RenzHoly/Mongood)** : MongoDB 图形化的管理工具。基于微软 Fluent UI,支持自动黑暗模式。 +- [Beekeeper Studio](https://github.com/beekeeper-studio/beekeeper-studio) :跨平台数据库管理工具,颜值高,支持 SQLite、MySQL、MariaDB、Postgres、CockroachDB、SQL Server、Amazon Redshift。 +- [Sequel Pro](https://github.com/sequelpro/sequelpro) :适用于 macOS 的 MySQL/MariaDB 数据库管理工具。 +- [DBeaver](https://github.com/dbeaver/dbeaver) :一个基于 Java 开发 ,并且支持几乎所有的数据库产品的开源数据库管理工具。DBeaver 社区版不光支持关系型数据库比如 MySQL、PostgreSQL、MariaDB、SQLite、Oracle、Db2、SQL Server,还比如 SQLite、H2 这些内嵌数据库。还支持常见的全文搜索引擎比如 Elasticsearch 和 Solr、大数据相关的工具比如 Hive 和 Spark。 +- [Kangaroo](https://gitee.com/dbkangaroo/kangaroo) :袋鼠是一款为热门数据库系统打造的管理客户端(SQLite / MySQL / PostgreSQL / ...) ,支持建表、查询、模型、同步、导入导出等功能,支持 Windows / Mac / Linux 等操作系统,力求打造成好用、好玩、开发友好的 SQL 工具。 +- [Arctype](https://arctype.com/) :一个桌面的数据库查询工具,可以连接各种数据库,在其中执行 SQL 语句,以可视化形式展示数据。 +- [Mongood](https://github.com/RenzHoly/Mongood) : MongoDB 图形化的管理工具。基于微软 Fluent UI,支持自动黑暗模式。 ### Redis -- **[Another Redis Desktop Manager](https://github.com/qishibo/AnotherRedisDesktopManager/blob/master/README.zh-CN.md)** :更快、更好、更稳定的 Redis 桌面(GUI)管理客户端。 -- **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 +- [Another Redis Desktop Manager](https://github.com/qishibo/AnotherRedisDesktopManager/blob/master/README.zh-CN.md) :更快、更好、更稳定的 Redis 桌面(GUI)管理客户端。 +- [Redis Manager](https://github.com/ngbdf/redis-manager) :Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 ## Devops -- **[Portainer](https://github.com/portainer/portainer)** :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 +- [Portainer](https://github.com/portainer/portainer) :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 ## ZooKeeper -- **[PrettyZoo](https://github.com/vran-dev/PrettyZoo)** : 一个基于 Apache Curator 和 JavaFX 实现的 ZooKeeper 图形化管理客户端,颜值非常高,支持 Mac / Windows / Linux 。你可以使用 PrettyZoo 来实现对 ZooKeeper 的可视化增删改查。 -- **[zktools](https://zktools.readthedocs.io/en/latest/#installing)** : 一个低延迟的 ZooKeeper 图形化管理客户端,颜值非常高,支持 Mac / Windows / Linux 。你可以使用 zktools 来实现对 ZooKeeper 的可视化增删改查。 +- [PrettyZoo](https://github.com/vran-dev/PrettyZoo) : 一个基于 Apache Curator 和 JavaFX 实现的 ZooKeeper 图形化管理客户端,颜值非常高,支持 Mac / Windows / Linux 。你可以使用 PrettyZoo 来实现对 ZooKeeper 的可视化增删改查。 +- [zktools](https://zktools.readthedocs.io/en/latest/#installing) : 一个低延迟的 ZooKeeper 图形化管理客户端,颜值非常高,支持 Mac / Windows / Linux 。你可以使用 zktools 来实现对 ZooKeeper 的可视化增删改查。 ## Markdown -- **[MarkText](https://github.com/marktext/marktext)** :一个简单而优雅的开源 Markdown 编辑器,专注于速度和可用性。Linux、macOS 和 Windows 均适用。 -- **[Typora](https://www.typora.io/)** :我一直用的一款 Markdown 工具,直接文件夹视图和目录视图,支持 Markdown 格式直接导出成 PDF、HTML 等格式。 -- **[Markdown Here](https://github.com/adam-p/markdown-here)** :使用 Markdown 语法发邮件,并且提供多种主题,快来拯救你的邮件格式吧! +- [MarkText](https://github.com/marktext/marktext) :一个简单而优雅的开源 Markdown 编辑器,专注于速度和可用性。Linux、macOS 和 Windows 均适用。 +- [Typora](https://www.typora.io/) :我一直用的一款 Markdown 工具,直接文件夹视图和目录视图,支持 Markdown 格式直接导出成 PDF、HTML 等格式。 +- [Markdown Here](https://github.com/adam-p/markdown-here) :使用 Markdown 语法发邮件,并且提供多种主题,快来拯救你的邮件格式吧! diff --git a/docs/open-source-project/tutorial.md b/docs/open-source-project/tutorial.md index d2041356..5bd9c756 100644 --- a/docs/open-source-project/tutorial.md +++ b/docs/open-source-project/tutorial.md @@ -54,6 +54,7 @@ icon: "book" ## 开源书籍 +- **[《高并发的哲学原理》](https://github.com/johnlui/PPHC)**:本书的目标是在作者有限的认知范围内,讨论一下高并发问题背后隐藏的一个哲学原理——找出单点,进行拆分。 - **[《Effective Java(第 3 版)》中英对照版](https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual)** :《Effective Java(第 3 版)各章节的中英文学习参考。 - **[《DDIA(设计数据密集型应用)》中文版](https://github.com/Vonng/ddia)** :《Designing Data-Intensive Application》DDIA 中文翻译。 - **[《凤凰架构》](https://github.com/fenixsoft/awesome-fenix)** :讨论如何构建一套可靠的大型分布式系统。 diff --git a/docs/zhuanlan/java-mian-shi-zhi-bei.md b/docs/zhuanlan/java-mian-shi-zhi-bei.md index 55f8b55b..6c3d7433 100644 --- a/docs/zhuanlan/java-mian-shi-zhi-bei.md +++ b/docs/zhuanlan/java-mian-shi-zhi-bei.md @@ -91,6 +91,7 @@ star: 5 + **进入星球之后,记得添加微信,我会发你详细的星球使用指南。**