diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index b436a8b11cf..bee4100fa2b 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -13,7 +13,7 @@ jobs:
uses: actions/checkout@v6
- name: Install pnpm
- uses: pnpm/action-setup@v4
+ uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4
- name: Setup Node.js
uses: actions/setup-node@v6
diff --git a/README.md b/README.md
index 8e6393003af..d4559350694 100755
--- a/README.md
+++ b/README.md
@@ -15,12 +15,23 @@
> - **面试资料补充**:
> - [《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html):四年打磨,和 [JavaGuide 开源版](https://javaguide.cn/)的内容互补,带你从零开始系统准备面试!
> - [《后端面试高频系统设计&场景题》](https://javaguide.cn/zhuanlan/back-end-interview-high-frequency-system-design-and-scenario-questions.html):30+ 道高频系统设计和场景面试,助你应对当下中大厂面试趋势。
-> - **使用建议** :有水平的面试官都是顺着项目经历挖掘技术问题。一定不要死记硬背技术八股文!详细的学习建议请参考:[JavaGuide 使用建议](https://javaguide.cn/javaguide/use-suggestion.html)。
+> - **使用建议** :如果你想要系统准备 Java 后端面试但又不知道如何开始的,可以参考 [Java 后端面试通关计划(后端通用)](https://javaguide.cn/interview-preparation/backend-interview-plan.html)。
> - **求个 Star**:如果觉得 JavaGuide 的内容对你有帮助的话,还请点个免费的 Star,这是对我最大的鼓励,感谢各位一起同行,共勉!传送门:[GitHub](https://github.com/Snailclimb/JavaGuide) | [Gitee](https://gitee.com/SnailClimb/JavaGuide)。
> - **转载须知**:以下所有文章如非文首说明为转载皆为 JavaGuide 原创,转载请在文首注明出处。如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
+## 面试准备
+
+- [⭐Java 后端面试通关计划(涵盖后端通用体系)](./docs/interview-preparation/backend-interview-plan.md) (一定要看 :+1:)
+- [如何高效准备 Java 面试?](./docs/interview-preparation/teach-you-how-to-prepare-for-the-interview-hand-in-hand.md)
+- [Java 后端面试重点总结](./docs/interview-preparation/key-points-of-interview.md)
+- [Java 学习路线(最新版,4w+ 字)](./docs/interview-preparation/java-roadmap.md)
+- [程序员简历编写指南](./docs/interview-preparation/resume-guide.md)
+- [项目经验指南](./docs/interview-preparation/project-experience-guide.md)
+- [面试太紧张怎么办?](./docs/interview-preparation/how-to-handle-interview-nerves.md)
+- [校招没有实习经历怎么办?实习经历怎么写?](./docs/interview-preparation/internship-experience.md)
+
## Java
### 基础
@@ -203,6 +214,7 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8](https://docs.oracle.
**重要知识点:**
- [MySQL 索引详解](./docs/database/mysql/mysql-index.md)
+- [MySQL 索引失效场景总结](./docs/database/mysql/mysql-index-invalidation.md)
- [MySQL 事务隔离级别图文详解)](./docs/database/mysql/transaction-isolation-level.md)
- [MySQL 三大日志(binlog、redo log 和 undo log)详解](./docs/database/mysql/mysql-logs.md)
- [InnoDB 存储引擎对 MVCC 的实现](./docs/database/mysql/innodb-implementation-of-mvcc.md)
@@ -223,6 +235,7 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8](https://docs.oracle.
**重要知识点:**
- [3 种常用的缓存读写策略详解](./docs/database/redis/3-commonly-used-cache-read-and-write-strategies.md)
+- [Redis 能做消息队列吗?怎么实现?](./docs/database/redis/redis-stream-mq.md)
- [Redis 5 种基本数据结构详解](./docs/database/redis/redis-data-structures-01.md)
- [Redis 3 种特殊数据结构详解](./docs/database/redis/redis-data-structures-02.md)
- [Redis 持久化机制详解](./docs/database/redis/redis-persistence.md)
@@ -264,8 +277,8 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8](https://docs.oracle.
## 系统设计
-- [系统设计常见面试题总结](./docs/system-design/system-design-questions.md)
-- [设计模式常见面试题总结](./docs/system-design/design-pattern.md)
+- [⭐系统设计常见面试题总结](./docs/system-design/system-design-questions.md)
+- [⭐设计模式常见面试题总结](https://interview.javaguide.cn/system-design/design-pattern.html)
### 基础
@@ -313,6 +326,7 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8](https://docs.oracle.
- [敏感词过滤方案总结](./docs/system-design/security/sentive-words-filter.md)
- [数据脱敏方案总结](./docs/system-design/security/data-desensitization.md)
- [为什么前后端都要做数据校验](./docs/system-design/security/data-validation.md)
+- [为什么忘记密码时只能重置,不能告诉你原密码?](./docs/system-design/security/why-password-reset-instead-of-retrieval.md)
### 定时任务
@@ -324,12 +338,15 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8](https://docs.oracle.
## 分布式
+- [⭐分布式高频面试题](https://interview.javaguide.cn/distributed-system/distributed-system.html)
+
### 理论&算法&协议
- [CAP 理论和 BASE 理论解读](https://javaguide.cn/distributed-system/protocol/cap-and-base-theorem.html)
- [Paxos 算法解读](https://javaguide.cn/distributed-system/protocol/paxos-algorithm.html)
- [Raft 算法解读](https://javaguide.cn/distributed-system/protocol/raft-algorithm.html)
-- [Gossip 协议详解](https://javaguide.cn/distributed-system/protocol/gossip-protocl.html)
+- [ZAB 协议解读](https://javaguide.cn/distributed-system/protocol/zab.html)
+- [Gossip 协议详解](https://javaguide.cn/distributed-system/protocol/gossip-protocol.html)
- [一致性哈希算法详解](https://javaguide.cn/distributed-system/protocol/consistent-hashing.html)
### RPC
diff --git a/README_EN.md b/README_EN.md
index ce2a5bc88e7..ec1366de844 100644
--- a/README_EN.md
+++ b/README_EN.md
@@ -64,6 +64,7 @@ Recommended to read through online reading platforms for better experience and f
- [ArrayList Core Source Code + Expansion Mechanism Analysis](./docs/java/collection/arraylist-source-code.md)
- [LinkedList Core Source Code Analysis](./docs/java/collection/linkedlist-source-code.md)
- [HashMap Core Source Code + Underlying Data Structure Analysis](./docs/java/collection/hashmap-source-code.md)
+
# Java Collection & Concurrency Series
## Collection
@@ -128,6 +129,7 @@ The JVM part mainly refers to the [JVM Specification - Java 8](https://docs.orac
- [Java 18 New Features Overview](./docs/java/new-features/java18.md)
- [Java 19 New Features Overview](./docs/java/new-features/java19.md)
- [Java 20 New Features Overview](./docs/java/new-features/java20.md)
+
# Overview of Java 21, 22, 23, 24, and 25 New Features
## Computer Fundamentals
@@ -169,7 +171,7 @@ The JVM part mainly refers to the [JVM Specification - Java 8](https://docs.orac
- [Linear Data Structures: Arrays, Linked Lists, Stacks, Queues](./docs/cs-basics/data-structure/linear-data-structure.md)
- [Graphs](./docs/cs-basics/data-structure/graph.md)
- [Heaps](./docs/cs-basics/data-structure/heap.md)
-- [Trees](./docs/cs-basics/data-structure/tree.md): Focus on [Red-Black Trees](./docs/cs-basics/data-structure/red-black-tree.md), B-, B+, B* Trees, and LSM Trees
+- [Trees](./docs/cs-basics/data-structure/tree.md): Focus on [Red-Black Trees](./docs/cs-basics/data-structure/red-black-tree.md), B-, B+, B\* Trees, and LSM Trees
Other Commonly Used Data Structures:
@@ -205,6 +207,7 @@ Additionally, [GeeksforGeeks](https://www.geeksforgeeks.org/fundamentals-of-algo
### MySQL
**Knowledge Points/Interview Questions Summary:**
+
# MySQL Common Knowledge Points & Interview Questions Summary (Must-Read :+1:)
- [MySQL Common Knowledge Points & Interview Questions Summary](./docs/database/mysql/mysql-questions-01.md)
@@ -233,6 +236,7 @@ Additionally, [GeeksforGeeks](https://www.geeksforgeeks.org/fundamentals-of-algo
**Important Knowledge Points:**
- [Detailed Explanation of 3 Common Cache Read and Write Strategies](./docs/database/redis/3-commonly-used-cache-read-and-write-strategies.md)
+- [Can Redis Be Used as a Message Queue? How to Implement It?](./docs/database/redis/redis-stream-mq.md)
- [Detailed Explanation of Redis' 5 Basic Data Structures](./docs/database/redis/redis-data-structures-01.md)
- [Detailed Explanation of Redis' 3 Special Data Structures](./docs/database/redis/redis-data-structures-02.md)
- [Detailed Explanation of Redis Persistence Mechanism](./docs/database/redis/redis-persistence.md)
@@ -290,6 +294,7 @@ Additionally, [GeeksforGeeks](https://www.geeksforgeeks.org/fundamentals-of-algo
#### Spring/SpringBoot (Must-Read :+1:)
**Knowledge Points/Interview Questions Summary**:
+
- [Summary of Common Spring Knowledge Points and Interview Questions](./docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md)
- [Summary of Common SpringBoot Knowledge Points and Interview Questions](./docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md)
- [Summary of Common Spring/SpringBoot Annotations](./docs/system-design/framework/spring/spring-common-annotations.md)
@@ -338,7 +343,7 @@ Additionally, [GeeksforGeeks](https://www.geeksforgeeks.org/fundamentals-of-algo
- [Interpretation of CAP Theory and BASE Theory](https://javaguide.cn/distributed-system/protocol/cap-and-base-theorem.html)
- [Interpretation of Paxos Algorithm](https://javaguide.cn/distributed-system/protocol/paxos-algorithm.html)
- [Interpretation of Raft Algorithm](https://javaguide.cn/distributed-system/protocol/raft-algorithm.html)
-- [Detailed Explanation of Gossip Protocol](https://javaguide.cn/distributed-system/protocol/gossip-protocl.html)
+- [Detailed Explanation of Gossip Protocol](https://javaguide.cn/distributed-system/protocol/gossip-protocol.html)
- [Detailed Explanation of Consistent Hashing Algorithm](https://javaguide.cn/distributed-system/protocol/consistent-hashing.html)
### RPC
@@ -364,6 +369,7 @@ Additionally, [GeeksforGeeks](https://www.geeksforgeeks.org/fundamentals-of-algo
- [Design Guide for Distributed ID](https://javaguide.cn/distributed-system/distributed-id-design.html)
### Distributed Lock
+
# Distributed Locks
- [Introduction to Distributed Locks](https://javaguide.cn/distributed-system/distributed-lock.html)
@@ -443,4 +449,4 @@ Deploying multiple instances of the same service to avoid single point of failur
If you want to stay up-to-date with my latest articles and share my valuable content, you can follow my official public account.
-
\ No newline at end of file
+
diff --git a/docs/.vuepress/client.ts b/docs/.vuepress/client.ts
index e6fc1f7b6c5..9468f265cd4 100644
--- a/docs/.vuepress/client.ts
+++ b/docs/.vuepress/client.ts
@@ -1,10 +1,12 @@
import { defineClientConfig } from "vuepress/client";
import { h } from "vue";
import LayoutToggle from "./components/LayoutToggle.vue";
+import GlobalUnlock from "./components/unlock/GlobalUnlock.vue";
+import UnlockContent from "./components/unlock/UnlockContent.vue";
export default defineClientConfig({
- rootComponents: [
- // 将切换按钮添加为根组件,会在所有页面显示
- () => h(LayoutToggle),
- ],
+ enhance({ app }) {
+ app.component("UnlockContent", UnlockContent);
+ },
+ rootComponents: [() => h(LayoutToggle), () => h(GlobalUnlock)],
});
diff --git a/docs/.vuepress/components/unlock/GlobalUnlock.vue b/docs/.vuepress/components/unlock/GlobalUnlock.vue
new file mode 100644
index 00000000000..a1abdcb316a
--- /dev/null
+++ b/docs/.vuepress/components/unlock/GlobalUnlock.vue
@@ -0,0 +1,453 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 为保障正常阅读体验,本站部分内容已开启一次性验证。验证后全站解锁。
+
+
+
+
![公众号二维码]()
+
+ 扫码/微信搜索关注
+ “JavaGuide”
+
+
回复 “验证码”
+
+
+
+
+
+
+
+
+ 验证码错误,请重试
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/.vuepress/components/unlock/UnlockContent.vue b/docs/.vuepress/components/unlock/UnlockContent.vue
new file mode 100644
index 00000000000..f85351ae8f4
--- /dev/null
+++ b/docs/.vuepress/components/unlock/UnlockContent.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+
+ 为保障正常阅读体验,本站部分内容已开启一次性验证。验证后全站自动解锁。
+
+
+
+
![公众号二维码]()
+
+ 扫码关注公众号,回复 “验证码”
+
+
+
+
+
+
+
+
+
+ 验证码错误,请重新输入
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/.vuepress/features/unlock/config.ts b/docs/.vuepress/features/unlock/config.ts
new file mode 100644
index 00000000000..c2272adb650
--- /dev/null
+++ b/docs/.vuepress/features/unlock/config.ts
@@ -0,0 +1,37 @@
+import { PREVIEW_HEIGHT } from "./heights";
+
+const withDefaultHeight = (
+ paths: readonly string[],
+ height: string = PREVIEW_HEIGHT.XL,
+): Record =>
+ Object.fromEntries(paths.map((path) => [path, height]));
+
+export const unlockConfig = {
+ // 版本号变更可强制用户重新验证
+ unlockVersion: "v1",
+ // 调试用:设为 true 时无视本地已解锁状态,始终触发限制
+ forceLock: false,
+ code: "8888",
+ // 使用相对路径,图片放在 docs/.vuepress/public/images 下
+ qrCodeUrl: "/images/qrcode-javaguide.jpg",
+ // 路径 -> 可见高度(建议使用 PREVIEW_HEIGHT 预设)
+ protectedPaths: {
+ ...withDefaultHeight([
+ "/java/jvm/memory-area.html",
+ "/java/basis/java-basic-questions-02.html",
+ "/java/collection/java-collection-questions-02.html",
+ "/cs-basics/network/tcp-connection-and-disconnection.html",
+ "/cs-basics/network/http-vs-https.html",
+ "/cs-basics/network/dns.html",
+ ]),
+ // 如需特殊高度,再单独覆盖
+ // "/some/page.html": PREVIEW_HEIGHT.MEDIUM,
+ },
+ // 目录前缀 -> 可见高度(该目录下所有文章都触发验证)
+ // 例如 "/java/collection/" 会匹配 "/java/collection/**"
+ protectedPrefixes: {
+ ...withDefaultHeight(["/database/", "/high-performance/"]),
+ },
+} as const;
+
+export { PREVIEW_HEIGHT };
diff --git a/docs/.vuepress/features/unlock/heights.ts b/docs/.vuepress/features/unlock/heights.ts
new file mode 100644
index 00000000000..34ba390ca45
--- /dev/null
+++ b/docs/.vuepress/features/unlock/heights.ts
@@ -0,0 +1,10 @@
+export const PREVIEW_HEIGHT = {
+ SHORT: "500px",
+ MEDIUM: "1000px",
+ LONG: "1500px",
+ XL: "2000px",
+ XXL: "2500px",
+} as const;
+
+export type PreviewHeight =
+ (typeof PREVIEW_HEIGHT)[keyof typeof PREVIEW_HEIGHT];
diff --git a/docs/.vuepress/navbar.ts b/docs/.vuepress/navbar.ts
index 621399385d7..86b01633884 100644
--- a/docs/.vuepress/navbar.ts
+++ b/docs/.vuepress/navbar.ts
@@ -1,8 +1,8 @@
import { navbar } from "vuepress-theme-hope";
export default navbar([
- { text: "面试指南", icon: "java", link: "/home.md" },
- { text: "开源项目", icon: "github", link: "/open-source-project/" },
+ { text: "后端面试", icon: "java", link: "/home.md" },
+ { text: "AI面试", icon: "machine-learning", link: "/ai/" },
{ text: "实战项目", icon: "project", link: "/zhuanlan/interview-guide.md" },
{
text: "知识星球",
@@ -25,6 +25,7 @@ export default navbar([
text: "推荐阅读",
icon: "book",
children: [
+ { text: "开源项目", icon: "github", link: "/open-source-project/" },
{ text: "技术书籍", icon: "book", link: "/books/" },
{
text: "程序人生",
diff --git a/docs/.vuepress/public/images/qrcode-javaguide.jpg b/docs/.vuepress/public/images/qrcode-javaguide.jpg
new file mode 100644
index 00000000000..731d912ae05
Binary files /dev/null and b/docs/.vuepress/public/images/qrcode-javaguide.jpg differ
diff --git a/docs/.vuepress/shims-vue.d.ts b/docs/.vuepress/shims-vue.d.ts
new file mode 100644
index 00000000000..525d5f827b6
--- /dev/null
+++ b/docs/.vuepress/shims-vue.d.ts
@@ -0,0 +1,5 @@
+declare module "*.vue" {
+ import type { DefineComponent } from "vue";
+ const component: DefineComponent