mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-08-01 16:28:03 +08:00
style: update linter
This commit is contained in:
parent
7ea99a88d7
commit
114342995c
@ -79,7 +79,7 @@ export default hopeTheme({
|
|||||||
return path.resolve(
|
return path.resolve(
|
||||||
__dirname,
|
__dirname,
|
||||||
"../snippets",
|
"../snippets",
|
||||||
file.replace("@", "./")
|
file.replace("@", "./"),
|
||||||
);
|
);
|
||||||
|
|
||||||
return path.resolve(cwd, file);
|
return path.resolve(cwd, file);
|
||||||
|
@ -341,10 +341,10 @@ cl = Thread.currentThread().getContextClassLoader();
|
|||||||
## 推荐阅读
|
## 推荐阅读
|
||||||
|
|
||||||
- 《深入拆解 Java 虚拟机》
|
- 《深入拆解 Java 虚拟机》
|
||||||
- 深入分析 Java ClassLoader 原理:https://blog.csdn.net/xyang81/article/details/7292380
|
- 深入分析 Java ClassLoader 原理:<https://blog.csdn.net/xyang81/article/details/7292380>
|
||||||
- Java 类加载器(ClassLoader):http://gityuan.com/2016/01/24/java-classloader/
|
- Java 类加载器(ClassLoader):<http://gityuan.com/2016/01/24/java-classloader/>
|
||||||
- Class Loaders in Java:https://www.baeldung.com/java-classloaders
|
- Class Loaders in Java:<https://www.baeldung.com/java-classloaders>
|
||||||
- Class ClassLoader - Oracle 官方文档:https://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html
|
- Class ClassLoader - Oracle 官方文档:<https://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html>
|
||||||
- 老大难的 Java ClassLoader 再不理解就老了:https://zhuanlan.zhihu.com/p/51374915
|
- 老大难的 Java ClassLoader 再不理解就老了:<https://zhuanlan.zhihu.com/p/51374915>
|
||||||
|
|
||||||
<!-- @include: @article-footer.snippet.md -->
|
<!-- @include: @article-footer.snippet.md -->
|
||||||
|
@ -507,7 +507,7 @@ $ java -XX:+UseZGC className
|
|||||||
## 参考
|
## 参考
|
||||||
|
|
||||||
- 《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第二版》
|
- 《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第二版》
|
||||||
- https://my.oschina.net/hosee/blog/644618
|
- <https://my.oschina.net/hosee/blog/644618>
|
||||||
- <https://docs.oracle.com/javase/specs/jvms/se8/html/index.html>
|
- <https://docs.oracle.com/javase/specs/jvms/se8/html/index.html>
|
||||||
|
|
||||||
<!-- @include: @article-footer.snippet.md -->
|
<!-- @include: @article-footer.snippet.md -->
|
||||||
|
@ -5,7 +5,7 @@ tag:
|
|||||||
- JVM
|
- JVM
|
||||||
---
|
---
|
||||||
|
|
||||||
> 来自[说出你的愿望吧丷](https://juejin.im/user/5c2400afe51d45451758aa96)投稿,原文地址:https://juejin.im/post/5e1505d0f265da5d5d744050 。
|
> 来自[说出你的愿望吧丷](https://juejin.im/user/5c2400afe51d45451758aa96)投稿,原文地址:<https://juejin.im/post/5e1505d0f265da5d5d744050>。
|
||||||
|
|
||||||
## 前言
|
## 前言
|
||||||
|
|
||||||
@ -190,7 +190,7 @@ public class Person{
|
|||||||
|
|
||||||
局部变量表用于存放方法参数和方法内部所定义的局部变量。它的容量是以 Slot 为最小单位,一个 slot 可以存放 32 位以内的数据类型。
|
局部变量表用于存放方法参数和方法内部所定义的局部变量。它的容量是以 Slot 为最小单位,一个 slot 可以存放 32 位以内的数据类型。
|
||||||
|
|
||||||
虚拟机通过索引定位的方式使用局部变量表,范围为[0,局部变量表的 slot 的数量]。方法中的参数就会按一定顺序排列在这个局部变量表中,至于怎么排的我们可以先不关心。而为了节省栈帧空间,这些 slot 是可以复用的,当方法执行位置超过了某个变量,那么这个变量的 slot 可以被其它变量复用。当然如果需要复用,那我们的垃圾回收自然就不会去动这些内存。
|
虚拟机通过索引定位的方式使用局部变量表,范围为 `[0,局部变量表的 slot 的数量]`。方法中的参数就会按一定顺序排列在这个局部变量表中,至于怎么排的我们可以先不关心。而为了节省栈帧空间,这些 slot 是可以复用的,当方法执行位置超过了某个变量,那么这个变量的 slot 可以被其它变量复用。当然如果需要复用,那我们的垃圾回收自然就不会去动这些内存。
|
||||||
|
|
||||||
#### 3.3.6 虚拟机堆的概念
|
#### 3.3.6 虚拟机堆的概念
|
||||||
|
|
||||||
|
@ -344,10 +344,10 @@ HotSpot 虚拟机主要使用的就是这种方式来进行对象访问。
|
|||||||
|
|
||||||
- 《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第二版》
|
- 《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第二版》
|
||||||
- 《自己动手写 Java 虚拟机》
|
- 《自己动手写 Java 虚拟机》
|
||||||
- Chapter 2. The Structure of the Java Virtual Machine:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html
|
- Chapter 2. The Structure of the Java Virtual Machine:<https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html>
|
||||||
- JVM 栈帧内部结构-动态链接:https://chenxitag.com/archives/368
|
- JVM 栈帧内部结构-动态链接:<https://chenxitag.com/archives/368>
|
||||||
- Java 中 new String("字面量") 中 "字面量" 是何时进入字符串常量池的? - 木女孩的回答 - 知乎:https://www.zhihu.com/question/55994121/answer/147296098
|
- Java 中 new String("字面量") 中 "字面量" 是何时进入字符串常量池的? - 木女孩的回答 - 知乎:<https://www.zhihu.com/question/55994121/answer/147296098>
|
||||||
- JVM 常量池中存储的是对象还是引用呢? - RednaxelaFX 的回答 - 知乎:https://www.zhihu.com/question/57109429/answer/151717241
|
- JVM 常量池中存储的是对象还是引用呢? - RednaxelaFX 的回答 - 知乎:<https://www.zhihu.com/question/57109429/answer/151717241>
|
||||||
- <http://www.pointsoftware.ch/en/under-the-hood-runtime-data-areas-javas-memory-model/>
|
- <http://www.pointsoftware.ch/en/under-the-hood-runtime-data-areas-javas-memory-model/>
|
||||||
- <https://dzone.com/articles/jvm-permgen-%E2%80%93-where-art-thou>
|
- <https://dzone.com/articles/jvm-permgen-%E2%80%93-where-art-thou>
|
||||||
- <https://stackoverflow.com/questions/9095748/method-area-and-permgen>
|
- <https://stackoverflow.com/questions/9095748/method-area-and-permgen>
|
||||||
|
@ -110,10 +110,10 @@ Oracle 的 HotSpot VM 便附带两个用 C++ 实现的 JIT compiler:C1 及 C2
|
|||||||
|
|
||||||
## 参考
|
## 参考
|
||||||
|
|
||||||
- Java 10 Features and Enhancements : https://howtodoinjava.com/java10/java10-features/
|
- Java 10 Features and Enhancements : <https://howtodoinjava.com/java10/java10-features/>
|
||||||
|
|
||||||
- Guide to Java10 : <https://www.baeldung.com/java-10-overview>
|
- Guide to Java10 : <https://www.baeldung.com/java-10-overview>
|
||||||
|
|
||||||
- 4 Class Data Sharing : https://docs.oracle.com/javase/10/vm/class-data-sharing.htm#JSJVM-GUID-7EAA3411-8CF0-4D19-BD05-DF5E1780AA91
|
- 4 Class Data Sharing : <https://docs.oracle.com/javase/10/vm/class-data-sharing.htm#JSJVM-GUID-7EAA3411-8CF0-4D19-BD05-DF5E1780AA91>
|
||||||
|
|
||||||
<!-- @include: @article-footer.snippet.md -->
|
<!-- @include: @article-footer.snippet.md -->
|
||||||
|
@ -125,7 +125,7 @@ Consumer<String> consumer = (String i) -> System.out.println(i);
|
|||||||
|
|
||||||
## 参考
|
## 参考
|
||||||
|
|
||||||
- JDK 11 Release Notes:https://www.oracle.com/java/technologies/javase/11-relnote-issues.html
|
- JDK 11 Release Notes:<https://www.oracle.com/java/technologies/javase/11-relnote-issues.html>
|
||||||
- Java 11 – Features and Comparison:<https://www.geeksforgeeks.org/java-11-features-and-comparison/>
|
- Java 11 – Features and Comparison:<https://www.geeksforgeeks.org/java-11-features-and-comparison/>
|
||||||
|
|
||||||
<!-- @include: @article-footer.snippet.md -->
|
<!-- @include: @article-footer.snippet.md -->
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
欢迎阅读我对 Java 8 的介绍。本教程将逐步指导您完成所有新语言功能。 在简短的代码示例的基础上,您将学习如何使用默认接口方法,lambda 表达式,方法引用和可重复注释。 在本文的最后,您将熟悉最新的 API 更改,如流,函数式接口(Functional Interfaces),Map 类的扩展和新的 Date API。 没有大段枯燥的文字,只有一堆注释的代码片段。
|
欢迎阅读我对 Java 8 的介绍。本教程将逐步指导您完成所有新语言功能。 在简短的代码示例的基础上,您将学习如何使用默认接口方法,lambda 表达式,方法引用和可重复注释。 在本文的最后,您将熟悉最新的 API 更改,如流,函数式接口(Functional Interfaces),Map 类的扩展和新的 Date API。 没有大段枯燥的文字,只有一堆注释的代码片段。
|
||||||
|
|
||||||
### 接口的默认方法(Default Methods for Interfaces)
|
## 接口的默认方法(Default Methods for Interfaces)
|
||||||
|
|
||||||
Java 8 使我们能够通过使用 `default` 关键字向接口添加非抽象方法实现。 此功能也称为[虚拟扩展方法](http://stackoverflow.com/a/24102730)。
|
Java 8 使我们能够通过使用 `default` 关键字向接口添加非抽象方法实现。 此功能也称为[虚拟扩展方法](http://stackoverflow.com/a/24102730)。
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ formula 是作为匿名对象实现的。该代码非常容易理解,6 行代
|
|||||||
|
|
||||||
**译者注:** 不管是抽象类还是接口,都可以通过匿名内部类的方式访问。不能通过抽象类或者接口直接创建对象。对于上面通过匿名内部类方式访问接口,我们可以这样理解:一个内部类实现了接口里的抽象方法并且返回一个内部类对象,之后我们让接口的引用来指向这个对象。
|
**译者注:** 不管是抽象类还是接口,都可以通过匿名内部类的方式访问。不能通过抽象类或者接口直接创建对象。对于上面通过匿名内部类方式访问接口,我们可以这样理解:一个内部类实现了接口里的抽象方法并且返回一个内部类对象,之后我们让接口的引用来指向这个对象。
|
||||||
|
|
||||||
### Lambda 表达式(Lambda expressions)
|
## Lambda 表达式(Lambda expressions)
|
||||||
|
|
||||||
首先看看在老版本的 Java 中是如何排列字符串的:
|
首先看看在老版本的 Java 中是如何排列字符串的:
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ names.sort((a, b) -> b.compareTo(a));
|
|||||||
|
|
||||||
List 类本身就有一个 `sort` 方法。并且 Java 编译器可以自动推导出参数类型,所以你可以不用再写一次类型。接下来我们看看 lambda 表达式还有什么其他用法。
|
List 类本身就有一个 `sort` 方法。并且 Java 编译器可以自动推导出参数类型,所以你可以不用再写一次类型。接下来我们看看 lambda 表达式还有什么其他用法。
|
||||||
|
|
||||||
### 函数式接口(Functional Interfaces)
|
## 函数式接口(Functional Interfaces)
|
||||||
|
|
||||||
**译者注:** 原文对这部分解释不太清楚,故做了修改!
|
**译者注:** 原文对这部分解释不太清楚,故做了修改!
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ public interface Converter<F, T> {
|
|||||||
|
|
||||||
**译者注:** 大部分函数式接口都不用我们自己写,Java8 都给我们实现好了,这些接口都在 java.util.function 包里。
|
**译者注:** 大部分函数式接口都不用我们自己写,Java8 都给我们实现好了,这些接口都在 java.util.function 包里。
|
||||||
|
|
||||||
### 方法和构造函数引用(Method and Constructor References)
|
## 方法和构造函数引用(Method and Constructor References)
|
||||||
|
|
||||||
前一节中的代码还可以通过静态方法引用来表示:
|
前一节中的代码还可以通过静态方法引用来表示:
|
||||||
|
|
||||||
@ -176,9 +176,9 @@ Person person = personFactory.create("Peter", "Parker");
|
|||||||
|
|
||||||
我们只需要使用 `Person::new` 来获取 Person 类构造函数的引用,Java 编译器会自动根据`PersonFactory.create`方法的参数类型来选择合适的构造函数。
|
我们只需要使用 `Person::new` 来获取 Person 类构造函数的引用,Java 编译器会自动根据`PersonFactory.create`方法的参数类型来选择合适的构造函数。
|
||||||
|
|
||||||
### Lambda 表达式作用域(Lambda Scopes)
|
## Lambda 表达式作用域(Lambda Scopes)
|
||||||
|
|
||||||
#### 访问局部变量
|
### 访问局部变量
|
||||||
|
|
||||||
我们可以直接在 lambda 表达式中访问外部的局部变量:
|
我们可以直接在 lambda 表达式中访问外部的局部变量:
|
||||||
|
|
||||||
@ -209,7 +209,7 @@ Converter<Integer, String> stringConverter =
|
|||||||
num = 3;//在lambda表达式中试图修改num同样是不允许的。
|
num = 3;//在lambda表达式中试图修改num同样是不允许的。
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 访问字段和静态变量
|
### 访问字段和静态变量
|
||||||
|
|
||||||
与局部变量相比,我们在 lambda 表达式中对实例字段和静态变量都有读写访问权限。 该行为和匿名对象是一致的。
|
与局部变量相比,我们在 lambda 表达式中对实例字段和静态变量都有读写访问权限。 该行为和匿名对象是一致的。
|
||||||
|
|
||||||
@ -232,7 +232,7 @@ class Lambda4 {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 访问默认接口方法
|
### 访问默认接口方法
|
||||||
|
|
||||||
还记得第一节中的 formula 示例吗? `Formula` 接口定义了一个默认方法`sqrt`,可以从包含匿名对象的每个 formula 实例访问该方法。 这不适用于 lambda 表达式。
|
还记得第一节中的 formula 示例吗? `Formula` 接口定义了一个默认方法`sqrt`,可以从包含匿名对象的每个 formula 实例访问该方法。 这不适用于 lambda 表达式。
|
||||||
|
|
||||||
@ -242,13 +242,13 @@ class Lambda4 {
|
|||||||
Formula formula = (a) -> sqrt(a * 100);
|
Formula formula = (a) -> sqrt(a * 100);
|
||||||
```
|
```
|
||||||
|
|
||||||
### 内置函数式接口(Built-in Functional Interfaces)
|
## 内置函数式接口(Built-in Functional Interfaces)
|
||||||
|
|
||||||
JDK 1.8 API 包含许多内置函数式接口。 其中一些接口在老版本的 Java 中是比较常见的比如:`Comparator` 或`Runnable`,这些接口都增加了`@FunctionalInterface`注解以便能用在 lambda 表达式上。
|
JDK 1.8 API 包含许多内置函数式接口。 其中一些接口在老版本的 Java 中是比较常见的比如:`Comparator` 或`Runnable`,这些接口都增加了`@FunctionalInterface`注解以便能用在 lambda 表达式上。
|
||||||
|
|
||||||
但是 Java 8 API 同样还提供了很多全新的函数式接口来让你的编程工作更加方便,有一些接口是来自 [Google Guava](https://code.google.com/p/guava-libraries/) 库里的,即便你对这些很熟悉了,还是有必要看看这些是如何扩展到 lambda 上使用的。
|
但是 Java 8 API 同样还提供了很多全新的函数式接口来让你的编程工作更加方便,有一些接口是来自 [Google Guava](https://code.google.com/p/guava-libraries/) 库里的,即便你对这些很熟悉了,还是有必要看看这些是如何扩展到 lambda 上使用的。
|
||||||
|
|
||||||
#### Predicate
|
### Predicate
|
||||||
|
|
||||||
Predicate 接口是只有一个参数的返回布尔类型值的 **断言型** 接口。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非):
|
Predicate 接口是只有一个参数的返回布尔类型值的 **断言型** 接口。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非):
|
||||||
|
|
||||||
@ -301,7 +301,7 @@ Predicate<String> isEmpty = String::isEmpty;
|
|||||||
Predicate<String> isNotEmpty = isEmpty.negate();
|
Predicate<String> isNotEmpty = isEmpty.negate();
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Function
|
### Function
|
||||||
|
|
||||||
Function 接口接受一个参数并生成结果。默认方法可用于将多个函数链接在一起(compose, andThen):
|
Function 接口接受一个参数并生成结果。默认方法可用于将多个函数链接在一起(compose, andThen):
|
||||||
|
|
||||||
@ -341,7 +341,7 @@ Function<String, String> backToString = toInteger.andThen(String::valueOf);
|
|||||||
backToString.apply("123"); // "123"
|
backToString.apply("123"); // "123"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Supplier
|
### Supplier
|
||||||
|
|
||||||
Supplier 接口产生给定泛型类型的结果。 与 Function 接口不同,Supplier 接口不接受参数。
|
Supplier 接口产生给定泛型类型的结果。 与 Function 接口不同,Supplier 接口不接受参数。
|
||||||
|
|
||||||
@ -350,7 +350,7 @@ Supplier<Person> personSupplier = Person::new;
|
|||||||
personSupplier.get(); // new Person
|
personSupplier.get(); // new Person
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Consumer
|
### Consumer
|
||||||
|
|
||||||
Consumer 接口表示要对单个输入参数执行的操作。
|
Consumer 接口表示要对单个输入参数执行的操作。
|
||||||
|
|
||||||
@ -359,7 +359,7 @@ Consumer<Person> greeter = (p) -> System.out.println("Hello, " + p.firstName);
|
|||||||
greeter.accept(new Person("Luke", "Skywalker"));
|
greeter.accept(new Person("Luke", "Skywalker"));
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Comparator
|
### Comparator
|
||||||
|
|
||||||
Comparator 是老 Java 中的经典接口, Java 8 在此之上添加了多种默认方法:
|
Comparator 是老 Java 中的经典接口, Java 8 在此之上添加了多种默认方法:
|
||||||
|
|
||||||
|
@ -145,29 +145,29 @@ JSP 有 9 个内置对象:
|
|||||||
|
|
||||||
## Request 对象的主要方法有哪些
|
## Request 对象的主要方法有哪些
|
||||||
|
|
||||||
- setAttribute(String name,Object):设置名字为 name 的 request 的参数值
|
- `setAttribute(String name,Object)`:设置名字为 name 的 request 的参数值
|
||||||
- getAttribute(String name):返回由 name 指定的属性值
|
- `getAttribute(String name)`:返回由 name 指定的属性值
|
||||||
- getAttributeNames():返回 request 对象所有属性的名字集合,结果是一个枚举的实例
|
- `getAttributeNames()`:返回 request 对象所有属性的名字集合,结果是一个枚举的实例
|
||||||
- getCookies():返回客户端的所有 Cookie 对象,结果是一个 Cookie 数组
|
- `getCookies()`:返回客户端的所有 Cookie 对象,结果是一个 Cookie 数组
|
||||||
- getCharacterEncoding():返回请求中的字符编码方式 = getContentLength():返回请求的 Body 的长度
|
- `getCharacterEncoding()`:返回请求中的字符编码方式 = getContentLength()`:返回请求的 Body 的长度
|
||||||
- getHeader(String name):获得 HTTP 协议定义的文件头信息
|
- `getHeader(String name)`:获得 HTTP 协议定义的文件头信息
|
||||||
- getHeaders(String name):返回指定名字的 request Header 的所有值,结果是一个枚举的实例
|
- `getHeaders(String name)`:返回指定名字的 request Header 的所有值,结果是一个枚举的实例
|
||||||
- getHeaderNames():返回所以 request Header 的名字,结果是一个枚举的实例
|
- `getHeaderNames()`:返回所以 request Header 的名字,结果是一个枚举的实例
|
||||||
- getInputStream():返回请求的输入流,用于获得请求中的数据
|
- `getInputStream()`:返回请求的输入流,用于获得请求中的数据
|
||||||
- getMethod():获得客户端向服务器端传送数据的方法
|
- `getMethod()`:获得客户端向服务器端传送数据的方法
|
||||||
- getParameter(String name):获得客户端传送给服务器端的有 name 指定的参数值
|
- `getParameter(String name)`:获得客户端传送给服务器端的有 name 指定的参数值
|
||||||
- getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
|
- `getParameterNames()`:获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
|
||||||
- getParameterValues(String name):获得有 name 指定的参数的所有值
|
- `getParameterValues(String name)`:获得有 name 指定的参数的所有值
|
||||||
- getProtocol():获取客户端向服务器端传送数据所依据的协议名称
|
- `getProtocol()`:获取客户端向服务器端传送数据所依据的协议名称
|
||||||
- getQueryString():获得查询字符串
|
- `getQueryString()`:获得查询字符串
|
||||||
- getRequestURI():获取发出请求字符串的客户端地址
|
- `getRequestURI()`:获取发出请求字符串的客户端地址
|
||||||
- getRemoteAddr():获取客户端的 IP 地址
|
- `getRemoteAddr()`:获取客户端的 IP 地址
|
||||||
- getRemoteHost():获取客户端的名字
|
- `getRemoteHost()`:获取客户端的名字
|
||||||
- getSession([Boolean create]):返回和请求相关 Session
|
- `getSession([Boolean create])`:返回和请求相关 Session
|
||||||
- getServerName():获取服务器的名字
|
- `getServerName()`:获取服务器的名字
|
||||||
- getServletPath():获取客户端所请求的脚本文件的路径
|
- `getServletPath()`:获取客户端所请求的脚本文件的路径
|
||||||
- getServerPort():获取服务器的端口号
|
- `getServerPort()`:获取服务器的端口号
|
||||||
- removeAttribute(String name):删除请求中的一个属性
|
- `removeAttribute(String name)`:删除请求中的一个属性
|
||||||
|
|
||||||
## request.getAttribute()和 request.getParameter()有何区别
|
## request.getAttribute()和 request.getParameter()有何区别
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ head:
|
|||||||
|
|
||||||
> 作者:转转技术团队
|
> 作者:转转技术团队
|
||||||
>
|
>
|
||||||
> 原文:https://mp.weixin.qq.com/s/ONMuELjdHYa0yQceTj01Iw
|
> 原文:<https://mp.weixin.qq.com/s/ONMuELjdHYa0yQceTj01Iw>
|
||||||
|
|
||||||
## 老权限系统的问题与现状
|
## 老权限系统的问题与现状
|
||||||
|
|
||||||
@ -208,6 +208,6 @@ head:
|
|||||||
|
|
||||||
## 参考
|
## 参考
|
||||||
|
|
||||||
- 选择合适的权限模型:https://docs.authing.cn/v2/guides/access-control/choose-the-right-access-control-model.html
|
- 选择合适的权限模型:<https://docs.authing.cn/v2/guides/access-control/choose-the-right-access-control-model.html>
|
||||||
|
|
||||||
<!-- @include: @article-footer.snippet.md -->
|
<!-- @include: @article-footer.snippet.md -->
|
||||||
|
Loading…
x
Reference in New Issue
Block a user