File tree 8 files changed +35
-13
lines changed
8 files changed +35
-13
lines changed Original file line number Diff line number Diff line change @@ -582,6 +582,7 @@ export default sidebar({
582
582
collapsible : true ,
583
583
children : [
584
584
"high-availability-system-design" ,
585
+ "idempotency" ,
585
586
"redundancy" ,
586
587
"limit-request" ,
587
588
"fallback-and-circuit-breaker" ,
Original file line number Diff line number Diff line change @@ -18,8 +18,8 @@ export default hopeTheme({
18
18
19
19
repo : "https://github.com/Snailclimb/JavaGuide" ,
20
20
docsDir : "docs" ,
21
- // 纯净模式:https://theme-hope.vuejs.press/zh/guide/interface/pure.html
22
21
pure : true ,
22
+ focus : false ,
23
23
breadcrumb : false ,
24
24
navbar,
25
25
sidebar,
Original file line number Diff line number Diff line change 7
7
8
8
** Redis 集群** 相关的面试题为我的 [ 知识星球] ( ../../about-the-author/zhishixingqiu-two-years.md ) (点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[ 《Java 面试指北》] ( ../../zhuanlan/java-mian-shi-zhi-bei.md ) 中。
9
9
10
- ![ ] ( https://oss.javaguide.cn/github/javaguide/database/redis/redis-cluster-javamianshizhibei .png )
10
+ ![ ] ( https://oss.javaguide.cn/xingqiu/mianshizhibei-database .png )
11
11
12
12
<!-- @include: @planet.snippet.md -->
13
13
Original file line number Diff line number Diff line change @@ -228,12 +228,16 @@ UUID.randomUUID()
228
228
229
229
我们这里重点关注一下这个 Version(版本),不同的版本对应的 UUID 的生成规则是不同的。
230
230
231
- 5 种不同的 Version(版本)值分别对应的含义(参考[ 维基百科对于 UUID 的介绍] ( https://zh.wikipedia.org/wiki/通用唯一识别码 ) ):
231
+ 8 种不同的 Version(版本)值分别对应的含义(参考[ 维基百科对于 UUID 的介绍] ( https://zh.wikipedia.org/wiki/通用唯一识别码 ) ):
232
232
233
- - ** 版本 1** : UUID 是根据时间和节点 ID(通常是 MAC 地址)生成;
234
- - ** 版本 2** : UUID 是根据标识符(通常是组或用户 ID)、时间和节点 ID 生成;
235
- - ** 版本 3、版本 5** : 版本 5 - 确定性 UUID 通过散列(hashing)名字空间(namespace)标识符和名称生成;
236
- - ** 版本 4** : UUID 使用[ 随机性] ( https://zh.wikipedia.org/wiki/随机性 ) 或[ 伪随机性] ( https://zh.wikipedia.org/wiki/伪随机性 ) 生成。
233
+ - ** 版本 1 (基于时间和节点 ID)** : 基于时间戳(通常是当前时间)和节点 ID(通常为设备的 MAC 地址)生成。当包含 MAC 地址时,可以保证全球唯一性,但也因此存在隐私泄露的风险。
234
+ - ** 版本 2 (基于标识符、时间和节点 ID)** : 与版本 1 类似,也基于时间和节点 ID,但额外包含了本地标识符(例如用户 ID 或组 ID)。
235
+ - ** 版本 3 (基于命名空间和名称的 MD5 哈希)** :使用 MD5 哈希算法,将命名空间标识符(一个 UUID)和名称字符串组合计算得到。相同的命名空间和名称总是生成相同的 UUID(** 确定性生成** )。
236
+ - ** 版本 4 (基于随机数)** :几乎完全基于随机数生成,通常使用伪随机数生成器(PRNG)或加密安全随机数生成器(CSPRNG)来生成。 虽然理论上存在碰撞的可能性,但理论上碰撞概率极低(2^122 的可能性),可以认为在实际应用中是唯一的。
237
+ - ** 版本 5 (基于命名空间和名称的 SHA-1 哈希)** :类似于版本 3,但使用 SHA-1 哈希算法。
238
+ - ** 版本 6 (基于时间戳、计数器和节点 ID)** :改进了版本 1,将时间戳放在最高有效位(Most Significant Bit,MSB),使得 UUID 可以直接按时间排序。
239
+ - ** 版本 7 (基于时间戳和随机数据)** :基于 Unix 时间戳和随机数据生成。 由于时间戳位于最高有效位,因此支持按时间排序。并且,不依赖 MAC 地址或节点 ID,避免了隐私问题。
240
+ - ** 版本 8 (自定义)** :允许用户根据自己的需求定义 UUID 的生成方式。其结构和内容由用户决定,提供更大的灵活性。
237
241
238
242
下面是 Version 1 版本下生成的 UUID 的示例:
239
243
@@ -261,7 +265,7 @@ int version = uuid.version();// 4
261
265
262
266
最后,我们再简单分析一下 ** UUID 的优缺点** (面试的时候可能会被问到的哦!) :
263
267
264
- - ** 优点** :生成速度比较快 、简单易用
268
+ - ** 优点** :生成速度通常比较快 、简单易用
265
269
- ** 缺点** :存储消耗空间大(32 个字符串,128 位)、 不安全(基于 MAC 地址生成 UUID 的算法会造成 MAC 地址泄露)、无序(非自增)、没有具体业务含义、需要解决重复 ID 问题(当机器时间不对的情况下,可能导致会产生重复 ID)
266
270
267
271
#### Snowflake(雪花算法)
Original file line number Diff line number Diff line change @@ -6,6 +6,8 @@ icon: circuit
6
6
7
7
** 降级&熔断** 相关的面试题为我的[ 知识星球] ( https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html ) (点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[ 《Java 面试指北》] ( https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html ) 中。
8
8
9
+ ![ ] ( https://oss.javaguide.cn/xingqiu/mianshizhibei-gaobingfa.png )
10
+
9
11
<!-- @include: @planet.snippet.md -->
10
12
11
13
<!-- @include: @article-footer.snippet.md -->
Original file line number Diff line number Diff line change
1
+ ---
2
+ title : 接口幂等方案总结(付费)
3
+ category : 高可用
4
+ icon : security-fill
5
+ ---
6
+
7
+ ** 接口幂等** 相关的面试题为我的[ 知识星球] ( https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html ) (点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[ 《Java 面试指北》] ( https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html ) 中。
8
+
9
+ ![ ] ( https://oss.javaguide.cn/xingqiu/mianshizhibei-gaobingfa.png )
10
+
11
+ <!-- @include: @planet.snippet.md -->
12
+
13
+ <!-- @include: @article-footer.snippet.md -->
Original file line number Diff line number Diff line change @@ -67,7 +67,7 @@ Java 源代码会经历 **编译器优化重排 —> 指令并行重排 —> 内
67
67
68
68
- 对于处理器,通过插入内存屏障(Memory Barrier,或有时叫做内存栅栏,Memory Fence)的方式来禁止特定类型的处理器重排序。
69
69
70
- > 内存屏障(Memory Barrier,或有时叫做内存栅栏,Memory Fence)是一种 CPU 指令,用来禁止处理器指令发生重排序(像屏障一样),从而保障指令执行的有序性。另外,为了达到屏障的效果,它也会使处理器写入、读取值之前,将主内存的值写入高速缓存,清空无效队列 ,从而保障变量的可见性。
70
+ > 内存屏障(Memory Barrier,或有时叫做内存栅栏,Memory Fence)是一种 CPU 指令,用来禁止处理器指令发生重排序(像屏障一样),从而保障指令执行的有序性。另外,为了达到屏障的效果,它会在处理器写入值时,强制将写缓冲区中的数据刷新到主内存;在读取值之前,使处理器本地缓存中的相关数据失效,强制从主内存中加载最新值 ,从而保障变量的可见性。
71
71
72
72
## JMM(Java Memory Model)
73
73
Original file line number Diff line number Diff line change @@ -39,10 +39,12 @@ icon: codelibrary-fill
39
39
40
40
### PDF
41
41
42
- - [ x-easypdf] ( https://gitee.com/dromara/x-easypdf ) :一个用搭积木的方式构建 PDF 的框架(基于 pdfbox/fop),支持 PDF 导出和编辑。
43
- - [ pdfbox] ( https://github.com/apache/pdfbox ) :用于处理 PDF 文档的开放源码 Java 工具。该项目允许创建新的 PDF 文档、对现有文档进行操作以及从文档中提取内容。PDFBox 还包括几个命令行实用程序。PDFBox 是在 Apache 2.0 版许可下发布的。
44
- - [ OpenPDF] ( https://github.com/LibrePDF/OpenPDF ) :OpenPDF 是一个免费的 Java 库,用于使用 LGPL 和 MPL 开源许可创建和编辑 PDF 文件。OpenPDF 基于 iText 的一个分支。
45
- - [ itext7] ( https://github.com/itext/itext7 ) :一个用于创建、编辑和增强 PDF 文档的 Java 库。
42
+ 对于简单的 PDF 创建需求,OpenPDF 是一个不错的选择,它开源免费,API 简单易用。对于需要解析、转换和提取文本等操作的复杂场景,可以选择 Apache PDFBox。当然了,复杂场景如果不介意 LGPL 许可也可以选择 iText。
43
+
44
+ - [ x-easypdf] ( https://gitee.com/dromara/x-easypdf ) :一个用搭积木的方式构建 PDF 的框架(基于 pdfbox/fop),支持 PDF 导出和编辑,适合简单的 PDF 文档生成场景。
45
+ - [ iText] ( https://github.com/itext/itext7 ) :一个用于创建、编辑和增强 PDF 文档的 Java 库。iText 7 社区版采用 AGPL 许可证,如果你的项目是闭源商业项目,需要购买商业许可证。 iText 5 仍然是 LGPL 许可,可以免费用于商业用途,但已经停止维护。
46
+ - [ OpenPDF] ( https://github.com/LibrePDF/OpenPDF ) :完全开源免费 (LGPL/MPL 双重许可),基于 iText 的一个分支,可以作为 iText 的替代品,简单易用,但功能相比于 iText 更少一些(对于大多数场景已经足够)。
47
+ - [ Apache PDFBox] ( https://github.com/apache/pdfbox ) :完全开源免费 (Apache 许可证),功能强大,支持 PDF 的创建、解析、转换和提取文本等。不过,由于其功能过于丰富,因此 API 设计相对复杂,学习难度会大一些。
46
48
- [ FOP] ( https://xmlgraphics.apache.org/fop/ ) : Apache FOP 用于将 XSL-FO(Extensible Stylesheet Language Formatting Objects)格式化对象转换为多种输出格式,最常见的是 PDF。
47
49
48
50
## 图片处理
You can’t perform that action at this time.
0 commit comments