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

Compare commits

...

3 Commits

Author SHA1 Message Date
Guide
c40ec4c457 [docs update]一些内容的简单完善 2025-01-25 15:37:04 +08:00
Guide
743d9c0877
Merge pull request #2588 from vernon-w/main
Update README.md
2025-01-21 21:13:16 +08:00
Vernon Wei
511ab1109b
Update README.md
修改网站首页错别字
2025-01-21 18:16:06 +08:00
9 changed files with 36 additions and 14 deletions

View File

@ -582,6 +582,7 @@ export default sidebar({
collapsible: true,
children: [
"high-availability-system-design",
"idempotency",
"redundancy",
"limit-request",
"fallback-and-circuit-breaker",

View File

@ -18,8 +18,8 @@ export default hopeTheme({
repo: "https://github.com/Snailclimb/JavaGuide",
docsDir: "docs",
// 纯净模式https://theme-hope.vuejs.press/zh/guide/interface/pure.html
pure: true,
focus: false,
breadcrumb: false,
navbar,
sidebar,

View File

@ -20,7 +20,7 @@ footer: |-
JavaGuide 已经持续维护 6 年多了,累计提交了 **5600+** commit ,共有 **550+** 多位贡献者共同参与维护和完善。真心希望能够把这个项目做好,真正能够帮助到有需要的朋友!
如果觉得 JavaGuide 的内容对你有帮助的话,还请点个免费的 Star绝不强制点 Star觉得内容不错有收再点赞就好),这是对我最大的鼓励,感谢各位一路同行,共勉!传送门:[GitHub](https://github.com/Snailclimb/JavaGuide) | [Gitee](https://gitee.com/SnailClimb/JavaGuide)。
如果觉得 JavaGuide 的内容对你有帮助的话,还请点个免费的 Star绝不强制点 Star觉得内容不错有收再点赞就好),这是对我最大的鼓励,感谢各位一路同行,共勉!传送门:[GitHub](https://github.com/Snailclimb/JavaGuide) | [Gitee](https://gitee.com/SnailClimb/JavaGuide)。
- [项目介绍](./javaguide/intro.md)
- [贡献指南](./javaguide/contribution-guideline.md)

View File

@ -7,7 +7,7 @@ tag:
**Redis 集群** 相关的面试题为我的 [知识星球](../../about-the-author/zhishixingqiu-two-years.md)(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[《Java 面试指北》](../../zhuanlan/java-mian-shi-zhi-bei.md)中。
![](https://oss.javaguide.cn/github/javaguide/database/redis/redis-cluster-javamianshizhibei.png)
![](https://oss.javaguide.cn/xingqiu/mianshizhibei-database.png)
<!-- @include: @planet.snippet.md -->

View File

@ -228,12 +228,16 @@ UUID.randomUUID()
我们这里重点关注一下这个 Version(版本),不同的版本对应的 UUID 的生成规则是不同的。
5 种不同的 Version(版本)值分别对应的含义(参考[维基百科对于 UUID 的介绍](https://zh.wikipedia.org/wiki/通用唯一识别码)
8 种不同的 Version(版本)值分别对应的含义(参考[维基百科对于 UUID 的介绍](https://zh.wikipedia.org/wiki/通用唯一识别码)
- **版本 1** : UUID 是根据时间和节点 ID通常是 MAC 地址)生成;
- **版本 2** : UUID 是根据标识符(通常是组或用户 ID、时间和节点 ID 生成;
- **版本 3、版本 5** : 版本 5 - 确定性 UUID 通过散列hashing名字空间namespace标识符和名称生成
- **版本 4** : UUID 使用[随机性](https://zh.wikipedia.org/wiki/随机性)或[伪随机性](https://zh.wikipedia.org/wiki/伪随机性)生成。
- **版本 1 (基于时间和节点 ID)** : 基于时间戳(通常是当前时间)和节点 ID通常为设备的 MAC 地址)生成。当包含 MAC 地址时,可以保证全球唯一性,但也因此存在隐私泄露的风险。
- **版本 2 (基于标识符、时间和节点 ID)** : 与版本 1 类似,也基于时间和节点 ID但额外包含了本地标识符例如用户 ID 或组 ID
- **版本 3 (基于命名空间和名称的 MD5 哈希)**:使用 MD5 哈希算法,将命名空间标识符(一个 UUID和名称字符串组合计算得到。相同的命名空间和名称总是生成相同的 UUID**确定性生成**)。
- **版本 4 (基于随机数)**几乎完全基于随机数生成通常使用伪随机数生成器PRNG或加密安全随机数生成器CSPRNG来生成。 虽然理论上存在碰撞的可能性但理论上碰撞概率极低2^122 的可能性),可以认为在实际应用中是唯一的。
- **版本 5 (基于命名空间和名称的 SHA-1 哈希)**:类似于版本 3但使用 SHA-1 哈希算法。
- **版本 6 (基于时间戳、计数器和节点 ID)**:改进了版本 1将时间戳放在最高有效位Most Significant BitMSB使得 UUID 可以直接按时间排序。
- **版本 7 (基于时间戳和随机数据)**:基于 Unix 时间戳和随机数据生成。 由于时间戳位于最高有效位,因此支持按时间排序。并且,不依赖 MAC 地址或节点 ID避免了隐私问题。
- **版本 8 (自定义)**:允许用户根据自己的需求定义 UUID 的生成方式。其结构和内容由用户决定,提供更大的灵活性。
下面是 Version 1 版本下生成的 UUID 的示例:
@ -261,7 +265,7 @@ int version = uuid.version();// 4
最后,我们再简单分析一下 **UUID 的优缺点** (面试的时候可能会被问到的哦!) :
- **优点**:生成速度比较快、简单易用
- **优点**:生成速度通常比较快、简单易用
- **缺点**存储消耗空间大32 个字符串128 位)、 不安全(基于 MAC 地址生成 UUID 的算法会造成 MAC 地址泄露)、无序(非自增)、没有具体业务含义、需要解决重复 ID 问题(当机器时间不对的情况下,可能导致会产生重复 ID
#### Snowflake(雪花算法)

View File

@ -6,6 +6,8 @@ icon: circuit
**降级&熔断** 相关的面试题为我的[知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)中。
![](https://oss.javaguide.cn/xingqiu/mianshizhibei-gaobingfa.png)
<!-- @include: @planet.snippet.md -->
<!-- @include: @article-footer.snippet.md -->

View File

@ -0,0 +1,13 @@
---
title: 接口幂等方案总结(付费)
category: 高可用
icon: security-fill
---
**接口幂等** 相关的面试题为我的[知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)中。
![](https://oss.javaguide.cn/xingqiu/mianshizhibei-gaobingfa.png)
<!-- @include: @planet.snippet.md -->
<!-- @include: @article-footer.snippet.md -->

View File

@ -67,7 +67,7 @@ Java 源代码会经历 **编译器优化重排 —> 指令并行重排 —> 内
- 对于处理器通过插入内存屏障Memory Barrier或有时叫做内存栅栏Memory Fence的方式来禁止特定类型的处理器重排序。
> 内存屏障Memory Barrier或有时叫做内存栅栏Memory Fence是一种 CPU 指令,用来禁止处理器指令发生重排序(像屏障一样),从而保障指令执行的有序性。另外,为了达到屏障的效果,它也会使处理器写入、读取值之前,将主内存的值写入高速缓存,清空无效队列,从而保障变量的可见性。
> 内存屏障Memory Barrier或有时叫做内存栅栏Memory Fence是一种 CPU 指令,用来禁止处理器指令发生重排序(像屏障一样),从而保障指令执行的有序性。另外,为了达到屏障的效果,它会在处理器写入值时,强制将写缓冲区中的数据刷新到主内存;在读取值之前,使处理器本地缓存中的相关数据失效,强制从主内存中加载最新值,从而保障变量的可见性。
## JMM(Java Memory Model)

View File

@ -39,10 +39,12 @@ icon: codelibrary-fill
### PDF
- [x-easypdf](https://gitee.com/dromara/x-easypdf):一个用搭积木的方式构建 PDF 的框架(基于 pdfbox/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):一个用于创建、编辑和增强 PDF 文档的 Java 库。
对于简单的 PDF 创建需求OpenPDF 是一个不错的选择它开源免费API 简单易用。对于需要解析、转换和提取文本等操作的复杂场景,可以选择 Apache PDFBox。当然了复杂场景如果不介意 LGPL 许可也可以选择 iText。
- [x-easypdf](https://gitee.com/dromara/x-easypdf):一个用搭积木的方式构建 PDF 的框架(基于 pdfbox/fop支持 PDF 导出和编辑,适合简单的 PDF 文档生成场景。
- [iText](https://github.com/itext/itext7):一个用于创建、编辑和增强 PDF 文档的 Java 库。iText 7 社区版采用 AGPL 许可证,如果你的项目是闭源商业项目,需要购买商业许可证。 iText 5 仍然是 LGPL 许可,可以免费用于商业用途,但已经停止维护。
- [OpenPDF](https://github.com/LibrePDF/OpenPDF):完全开源免费 (LGPL/MPL 双重许可),基于 iText 的一个分支,可以作为 iText 的替代品,简单易用,但功能相比于 iText 更少一些(对于大多数场景已经足够)。
- [Apache PDFBox](https://github.com/apache/pdfbox) :完全开源免费 (Apache 许可证),功能强大,支持 PDF 的创建、解析、转换和提取文本等。不过,由于其功能过于丰富,因此 API 设计相对复杂,学习难度会大一些。
- [FOP](https://xmlgraphics.apache.org/fop/) : Apache FOP 用于将 XSL-FOExtensible Stylesheet Language Formatting Objects格式化对象转换为多种输出格式最常见的是 PDF。
## 图片处理