Skip to content

Commit 8d5f129

Browse files
committed
fix: Java 后端面试通关计划(涵盖后端通用体系)中的链接错误修复
1 parent 3a59af8 commit 8d5f129

File tree

2 files changed

+46
-35
lines changed

2 files changed

+46
-35
lines changed

docs/database/redis/redis-persistence.md

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -673,14 +673,17 @@ alert_rules:
673673
674674
**RDB 比 AOF 优秀的地方**:
675675
676-
- RDB 文件存储的内容是经过压缩的二进制数据, 保存着某个时间点的数据集,文件很小,适合做数据的备份,灾难恢复。AOF 文件存储的是每一次写命令,类似于 MySQL 的 binlog 日志,通常会比 RDB 文件大很多。当 AOF 变得太大时,Redis 能够在后台自动重写 AOF。新的 AOF 文件和原有的 AOF 文件所保存的数据库状态一样,但体积更小。不过, Redis 7.0 版本之前,如果在重写期间有写入命令,AOF 可能会使用大量内存,重写期间到达的所有写入命令都会写入磁盘两次。
677-
- 使用 RDB 文件恢复数据,直接解析还原数据即可,不需要一条一条地执行命令,速度非常快。而 AOF 则需要依次执行每个写命令,速度非常慢。也就是说,与 AOF 相比,恢复大数据集的时候,RDB 速度更快。
676+
- **文件紧凑,适合备份和灾难恢复**:RDB 文件存储的内容是经过压缩的二进制数据,保存着某个时间点的数据集,文件很小,非常适合做数据的备份和灾难恢复。AOF 文件存储的是每一次写命令,类似于 MySQL 的 binlog 日志,通常会比 RDB 文件大很多。当 AOF 变得太大时,Redis 能够在后台自动重写 AOF,新的 AOF 文件和原有的 AOF 文件所保存的数据库状态一样,但体积更小。不过,Redis 7.0 版本之前,如果在重写期间有写入命令,AOF 可能会使用大量内存,重写期间到达的所有写入命令都会写入磁盘两次。
677+
- **恢复速度快**:使用 RDB 文件恢复数据,直接解析还原数据即可,不需要一条一条地执行命令,速度非常快。而 AOF 则需要依次执行每个写命令,速度非常慢。也就是说,与 AOF 相比,恢复大数据集的时候,RDB 速度更快。
678+
- **主从复制优势**:在副本(replica)上,RDB 支持重启和故障转移后的**部分重新同步**(Partial Resynchronization)。副本可以使用 RDB 快照快速同步到主节点的某个时间点状态,而不需要全量同步。
679+
- **性能开销小**:RDB 最大化 Redis 性能,因为 Redis 父进程需要做的唯一持久化工作就是 fork 子进程,子进程将完成所有其余工作。父进程永远不会执行磁盘 I/O 或类似操作。
678680
679681
**AOF 比 RDB 优秀的地方**:
680682
681-
- RDB 的数据安全性不如 AOF,没有办法实时或者秒级持久化数据。生成 RDB 文件的过程是比较繁重的, 虽然 BGSAVE 子进程写入 RDB 文件的工作不会阻塞主线程,但会对机器的 CPU 资源和内存资源产生影响,严重的情况下甚至会直接把 Redis 服务干宕机。AOF 支持秒级数据丢失(取决于 `fsync` 策略,如果是 `everysec`,通常最多丢失 1 秒的数据;但磁盘 I/O 繁忙时可能丢失 2 秒且主线程会阻塞),仅仅是追加命令到 AOF 文件,操作轻量。
682-
- RDB 文件是以特定的二进制格式保存的,并且在 Redis 版本演进中有多个版本的 RDB,所以存在老版本的 Redis 服务不兼容新版本的 RDB 格式的问题。
683-
- AOF 以一种易于理解和解析的格式包含所有操作的日志。你可以轻松地导出 AOF 文件进行分析,你也可以直接操作 AOF 文件来解决一些问题。比如,如果执行`FLUSHALL`命令意外地刷新了所有内容后,只要 AOF 文件没有被重写,删除最新命令并重启即可恢复之前的状态。
683+
- **数据安全性更高,支持秒级持久化**:RDB 的数据安全性不如 AOF,没有办法实时或者秒级持久化数据。生成 RDB 文件的过程是比较繁重的,虽然 BGSAVE 子进程写入 RDB 文件的工作不会阻塞主线程,但会对机器的 CPU 资源和内存资源产生影响,严重的情况下甚至会直接把 Redis 服务干宕机。AOF 支持秒级数据丢失(取决于 `fsync` 策略,如果是 `everysec`,通常最多丢失 1 秒的数据;但磁盘 I/O 繁忙时可能丢失 2 秒且主线程会阻塞),仅仅是追加命令到 AOF 文件,操作轻量。
684+
- **版本兼容性好**:RDB 文件是以特定的二进制格式保存的,并且在 Redis 版本演进中有多个版本的 RDB,所以存在老版本的 Redis 服务不兼容新版本的 RDB 格式的问题。
685+
- **可读性和可操作性强**:AOF 以一种易于理解和解析的格式包含所有操作的日志。你可以轻松地导出 AOF 文件进行分析,也可以直接操作 AOF 文件来解决一些问题。比如,如果执行`FLUSHALL`命令意外地刷新了所有内容后,只要 AOF 文件没有被重写,删除最新命令并重启即可恢复之前的状态。
686+
- **追加日志无损坏风险**:AOF 日志是追加日志,没有寻道,也没有断电损坏问题。即使日志由于某种原因(磁盘已满或其他原因)以半写入命令结尾,`redis-check-aof` 工具也能轻松修复。
684687

685688
**版本演进对选型的影响**:
686689

@@ -694,14 +697,22 @@ alert_rules:
694697
- **fork 阻塞**:无论是 RDB bgsave 还是 AOF 重写,fork 操作本身都会阻塞主线程(数据集越大,阻塞时间越长)
695698
- **官方建议**:Redis 官方文档至今仍建议**同时开启 RDB 和 AOF**,RDB 作为额外的冷备手段,应对 AOF 文件损坏或写入错误等极端场景
696699

700+
**AOF 和 RDB 的交互**:
701+
702+
当 AOF 和 RDB 持久化同时启用时:
703+
704+
- **避免同时进行重 I/O 操作**:Redis 2.4+ 确保避免在 RDB 快照进行时触发 AOF 重写,或允许在 AOF 重写期间进行 BGSAVE。这防止两个 Redis 后台进程同时进行繁重的磁盘 I/O。
705+
- **AOF 重写调度**:当快照正在进行且用户显式请求日志重写操作(使用 BGREWRITEAOF)时,服务器将返回 OK 状态码,告诉用户操作已调度,重写将在快照完成后开始。
706+
- **重启恢复优先级**:如果 AOF 和 RDB 持久化都启用且 Redis 重启,**AOF 文件将用于重建原始数据集**,因为它被保证是最完整的。
707+
697708
**选型建议**:
698709

699-
| 场景 | 推荐方案 | 原因 |
700-
| ---------------------------------------- | ---------------------------- | ---------------------------------------------------------------------- |
701-
| **数据可丢失**(缓存、临时数据) | **仅 RDB** | 开销最小,恢复速度快,适合对数据丢失不敏感的场景 |
702-
| **数据重要性中等**(用户会话、配置数据) | **RDB + AOF混合持久化)** | 兼顾性能和数据安全,恢复速度快(RDB base)+ 数据丢失窗口小(AOF 增量) |
703-
| **数据重要性高**(金融、交易数据) | **RDB + AOF(Multi-Part)** | Redis 7.0+ 推荐,利用 Multi-Part AOF 降低重写开销,同时保留 RDB 冷备 |
704-
| **主从架构** | **主节点仅 RDB,从节点 AOF** | 降低主节点持久化开销,从节点承担持久化和备份任务,避免主节点 fork 风险 |
710+
| 场景 | 推荐方案 | 说明 |
711+
| -------------------------------- | -------------------------------------------------------------------- | ----------------------------------------------------------- |
712+
| **纯缓存(可丢失)** | **关闭持久化** 或仅 RDB(低频) | 完全关闭开销最小;若需冷备则保留低频 RDB |
713+
| **数据重要性中等**(会话、配置) | **RDB + AOF 混合持久化**(Redis 4.0+) | RDB 加速恢复,AOF 增量补充,`everysec` 最多丢 1s |
714+
| **数据重要性高**(业务核心数据) | **RDB + AOF(MP-AOF,Redis 7.0+)**,且 Redis 作为缓存层而非唯一存储 | MP-AOF 降低重写开销;真正的持久化由主数据库(MySQL 等)负责 |
715+
| **主从架构** | **主节点关闭持久化,从节点开启 AOF** | 主节点禁止配置自动重启,防止空数据集覆盖从节点 |
705716

706717
## 参考
707718

docs/interview-preparation/backend-interview-plan.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -42,22 +42,22 @@ head:
4242

4343
在系统刷八股前,先把「怎么准备、怎么写简历、怎么稳住心态」搞定,避免方向跑偏。
4444

45-
| 事项 | 说明 | 对应文章 |
46-
| ---------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
47-
| 准备方法 | 明确复习节奏、自测方式、时间分配 | [如何高效准备 Java 面试?](https://javaguide.cn/interview-preparation/teach-you-how-to-prepare-for-the-interview-hand-in-hand.html)<br />[Java后端面试重点总结](http://localhost:8080/interview-preparation/key-points-of-interview.html) |
48-
| 简历 | 一到两页纸、项目 STAR、技术栈与岗位匹配 | [程序员简历编写指南](https://javaguide.cn/interview-preparation/resume-guide.html) |
49-
| 学习路线 | 查漏补缺,确定自己当前所处阶段 | [Java 学习路线(最新版,4w+ 字)](https://javaguide.cn/interview-preparation/java-roadmap.html) |
50-
| 项目与经历 | 没有项目/实习时如何包装、怎么讲 | [项目经验指南](https://javaguide.cn/interview-preparation/project-experience-guide.html)<br />[校招没有实习经历怎么办?实习经历怎么写?](https://javaguide.cn/interview-preparation/internship-experience.html) |
51-
| 心态 | 减少紧张、发挥更稳 | [面试太紧张怎么办?](https://javaguide.cn/interview-preparation/how-to-handle-interview-nerves.html) |
45+
| 事项 | 说明 | 对应文章 |
46+
| ---------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
47+
| 准备方法 | 明确复习节奏、自测方式、时间分配 | [如何高效准备 Java 面试?](https://javaguide.cn/interview-preparation/teach-you-how-to-prepare-for-the-interview-hand-in-hand.html)<br />[Java后端面试重点总结](https://javaguide.cn/interview-preparation/key-points-of-interview.html) |
48+
| 简历 | 一到两页纸、项目 STAR、技术栈与岗位匹配 | [程序员简历编写指南](https://javaguide.cn/interview-preparation/resume-guide.html) |
49+
| 学习路线 | 查漏补缺,确定自己当前所处阶段 | [Java 学习路线(最新版,4w+ 字)](https://javaguide.cn/interview-preparation/java-roadmap.html) |
50+
| 项目与经历 | 没有项目/实习时如何包装、怎么讲 | [项目经验指南](https://javaguide.cn/interview-preparation/project-experience-guide.html)<br />[校招没有实习经历怎么办?实习经历怎么写?](https://javaguide.cn/interview-preparation/internship-experience.html) |
51+
| 心态 | 减少紧张、发挥更稳 | [面试太紧张怎么办?](https://javaguide.cn/interview-preparation/how-to-handle-interview-nerves.html) |
5252

5353
**核心要点**
5454

55-
- **技术好≠面试能过**,必须系统准备——尽早以求职为导向学习,根据招聘要求制定技能清单
56-
- **掌握投递简历的黄金时间**:秋招 7-9 月,春招 3-4 月;多渠道获取招聘信息(官网、招聘网站、牛客网、内推等)
57-
- **花 2-3 天完善简历**,重视项目经历描述;**校招简历不超过 2 页,社招不超过 3 页**
58-
- **八股文很有意义**,日常开发也会用到;不要抱侥幸心理,打铁还需自身硬
59-
- **提前准备 1-2 分钟自我介绍话术**,能流畅讲出个人背景、技术栈和求职意向
60-
- **多多自测**可以用 AI 辅助模拟面试,找同学朋友互相模拟面试
55+
- **技术好≠面试能过**,必须系统准备——尽早以求职为导向学习,根据招聘要求制定技能清单
56+
- **掌握投递简历的黄金时间**:秋招 7-9 月,春招 3-4 月;多渠道获取招聘信息(官网、招聘网站、牛客网、内推等)
57+
- **花 2-3 天完善简历**,重视项目经历描述;**校招简历不超过 2 页,社招不超过 3 页**
58+
- **八股文很有意义**,日常开发也会用到;不要抱侥幸心理,打铁还需自身硬
59+
- **提前准备 1-2 分钟自我介绍话术**,能流畅讲出个人背景、技术栈和求职意向
60+
- **多多自测**可以用 AI 辅助模拟面试,找同学朋友互相模拟面试
6161

6262
### 第一阶段:项目与简历深挖(约 1 周)
6363

@@ -66,18 +66,18 @@ head:
6666
**产出物**
6767

6868
- **项目卡片**:按简历逐条过项目,为每个项目写清——业务背景、技术栈、你负责的模块、1~2 个难点与解决方式、可量化的成果(如 QPS、耗时、节省成本)。
69-
- **必会题清单**:根据项目用到的技术,列出「必会题」(例如:用了 Redis 限流 → Redis 常见数据结构 + 限流算法;用了 MySQL → 索引、事务、慢 SQL 优化)。可参考 [Java 面试常见问题总结](https://t.zsxq.com/0eRq7EJPy) 按项目拓展
69+
- **必会题清单**:根据项目用到的技术,列出「必会题」(例如:用了 Redis 缓存→ Redis 常见数据结构、持久化机制、线程模型等;用了 MySQL → 索引、事务、慢 SQL 优化等)。可参考 [JavaGuide](https://javaguide.cn/) 网站中的面试题总结按项目拓展
7070
- **话术稿**:每个项目准备 1~2 分钟版本(自我介绍用)和 3~5 分钟版本(深挖用),能流畅讲出「为什么这么选、遇到什么问题、怎么解决的」。
7171

7272
**每日建议**:每天至少梳理 1 个项目 + 对应必会题,周末做一次脱稿自测(录音或对着镜子讲)。
7373

74-
**自测**:能脱稿讲清每个项目的背景、难点和你的贡献;必会题清单里的题能答出要点。
74+
**自测**:能脱稿讲清每个项目的背景、难点和你的贡献;必会题清单里的题能答出要点,对于大厂面试要能抗住深挖,做到举一反三
7575

7676
**没有项目经验怎么办?**
7777

78-
1. **实战项目视频/专栏**:慕课网、哔哩哔哩、拉勾、极客时间等;选择适合自己能力的项目,不必强求微服务项目
79-
2. **实战类开源项目**:JavaGuide 推荐的[优质开源实战项目](https://javaguide.cn/open-source-project/practical-project.html);在理解基础上改进或增加功能
80-
3. **参加大公司组织的比赛**:阿里云天池大赛等;获奖项目含金量高
78+
1. **实战项目视频/专栏**:慕课网、哔哩哔哩、拉勾、极客时间等;选择适合自己能力的项目,不必强求微服务项目[JavaGuide 官方知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)已经推出[⭐AI 智能面试辅助平台 + RAG 知识库](https://javaguide.cn/zhuanlan/interview-guide.html)[手写 RPC 框架](https://javaguide.cn/zhuanlan/handwritten-rpc-framework.html)。并且,还分享了很多高频项目经历(如博客、外卖、线程池、短连接)的优化版介绍和面试准备。
79+
2. **实战类开源项目**:JavaGuide 推荐的[优质开源实战项目](https://javaguide.cn/open-source-project/practical-project.html);在理解基础上改进或增加功能
80+
3. **参加大公司组织的比赛**:阿里云天池大赛等;获奖项目含金量高
8181

8282
**项目经历写作要点(STAR 法则)**
8383

@@ -86,13 +86,13 @@ head:
8686
- **Action(行动)**:你具体做了什么?用了什么技术?遇到了什么问题?如何解决的?
8787
- **Result(结果)**:取得了什么成果?最好量化(QPS 从 xxx 提高到 xxx,响应时间降低 xx%)
8888

89-
**项目介绍常见问题**
89+
**项目介绍高频问题**
9090

91-
- 技术架构直接写技术名词,不需要解释
92-
- 减少纯业务描述,多挖掘技术亮点
93-
- 优化成果要量化(QPS、响应时间、成本节省等)
94-
- 避免 6-8 条个人职责介绍,精选 3-4 条有亮点的
95-
- 避免模糊性描述(如"负责开发"),要具体(技术+场景+效果)
91+
- 技术架构直接写技术名词,不需要解释
92+
- 减少纯业务描述,多挖掘技术亮点,结合具体业务场景描述。
93+
- 优化成果要量化(QPS、响应时间、成本节省等),非真实项目包装合理数值即可。
94+
- 工作内容介绍控制在 6~8 条左右比较好,多了少了都有影响,一定要至少有 3-4 条是有技术亮点的,能吸引到面试官。
95+
- 避免模糊性描述(如"负责开发"),要具体(技术+场景+效果)
9696

9797
### 第二阶段:Java 核心 + MySQL + Redis (约 2~3 周)
9898

0 commit comments

Comments
 (0)