Skip to content

Commit 26e88c1

Browse files
committed
seo:java部分的keywords和description优化
1 parent 2815a92 commit 26e88c1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+465
-231
lines changed

docs/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ actions:
1313
link: /about-the-author/zhishixingqiu-two-years.md
1414
type: default
1515
footer: |-
16-
<a href="https://beian.miit.gov.cn/" target="_blank">鄂ICP备2020015769号-1</a> | 主题: <a href="https://vuepress-theme-hope.github.io/v2/" target="_blank">VuePress Theme Hope</a>
16+
<a href="https://beian.miit.gov.cn/" target="_blank">鄂ICP备2020015769号-1</a> | 主题: <a href="https://theme-hope.vuejs.press/" target="_blank">VuePress Theme Hope</a>
1717
---
1818

1919
## 关于网站

docs/database/mysql/mysql-questions-01.md

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -599,21 +599,12 @@ MySQL 5.6 开始,查询缓存已默认禁用。MySQL 8.0 开始,已经不再
599599

600600
## ⭐️MySQL 日志
601601

602-
MySQL 日志常见的面试题有:
603-
604-
- MySQL 中常见的日志有哪些?
605-
- 慢查询日志有什么用?
606-
- binlog 主要记录了什么?
607-
- redo log 如何保证事务的持久性?
608-
- 页修改之后为什么不直接刷盘呢?
609-
- binlog 和 redolog 有什么区别?
610-
- undo log 如何保证事务的原子性?
611-
- ……
612-
613-
上诉问题的答案可以在[《Java 面试指北》(付费)](../../zhuanlan/java-mian-shi-zhi-bei.md)**「技术面试题篇」** 中找到。
602+
上诉问题的答案可以在[《Java 面试指北》(付费,点击链接领取优惠卷)](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)**「技术面试题篇」** 中找到。
614603

615604
![《Java 面试指北》技术面试题篇](https://oss.javaguide.cn/javamianshizhibei/technical-interview-questions.png)
616605

606+
文章地址:<https://www.yuque.com/snailclimb/mf2z3k/zr4kfk> (密码获取:<https://t.zsxq.com/avfM0>)。
607+
617608
## ⭐️MySQL 事务
618609

619610
### 什么是事务?
@@ -821,8 +812,6 @@ InnoDB 行锁是通过对索引数据页上的记录加锁实现的,MySQL Inno
821812

822813
**在 InnoDB 默认的隔离级别 REPEATABLE-READ 下,行锁默认使用的是 Next-Key Lock。但是,如果操作的索引是唯一索引或主键,InnoDB 会对 Next-Key Lock 进行优化,将其降级为 Record Lock,即仅锁住索引本身,而不是范围。**
823814

824-
一些大厂面试中可能会问到 Next-Key Lock 的加锁范围,这里推荐一篇文章:[MySQL next-key lock 加锁范围是什么? - 程序员小航 - 2021](https://segmentfault.com/a/1190000040129107)
825-
826815
### 共享锁和排他锁呢?
827816

828817
不论是表级锁还是行级锁,都存在共享锁(Share Lock,S 锁)和排他锁(Exclusive Lock,X 锁)这两类:
@@ -950,7 +939,7 @@ CREATE TABLE `sequence_id` (
950939
951940
最后,再推荐一篇文章:[为什么 MySQL 的自增主键不单调也不连续](https://draveness.me/whys-the-design-mysql-auto-increment/)
952941

953-
## MySQL 性能优化
942+
## ⭐️MySQL 性能优化
954943

955944
关于 MySQL 性能优化的建议总结,请看这篇文章:[MySQL 高性能优化规范建议总结](./mysql-high-performance-optimization-specification-recommendations.md)
956945

@@ -983,6 +972,8 @@ MySQL 提供了两个方法来处理 ip 地址
983972

984973
![常见的 SQL 优化手段](https://oss.javaguide.cn/javamianshizhibei/javamianshizhibei-sql-optimization.png)
985974

975+
文章地址:https://www.yuque.com/snailclimb/mf2z3k/abc2sv (密码获取:<https://t.zsxq.com/avfM0>)。
976+
986977
### 如何分析 SQL 的性能?
987978

988979
我们可以使用 `EXPLAIN` 命令来分析 SQL 的 **执行计划** 。执行计划是指一条 SQL 语句在经过 MySQL 查询优化器的优化会后,具体的执行方式。
-164 KB
Binary file not shown.

docs/database/redis/redis-questions-01.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Redis 没有外部依赖,Linux 和 OS X 是 Redis 开发和测试最多的两
3232

3333
全世界有非常多的网站使用到了 Redis,[techstacks.io](https://techstacks.io/) 专门维护了一个[使用 Redis 的热门站点列表](https://techstacks.io/tech/redis),感兴趣的话可以看看。
3434

35-
### Redis 为什么这么快?
35+
### ⭐️Redis 为什么这么快?
3636

3737
Redis 内部做了非常多的性能优化,比较重要的有下面 4 点:
3838

@@ -43,7 +43,7 @@ Redis 内部做了非常多的性能优化,比较重要的有下面 4 点:
4343

4444
> 下面这张图片总结的挺不错的,分享一下,出自 [Why is Redis so fast?](https://twitter.com/alexxubyte/status/1498703822528544770)
4545
46-
![why-redis-so-fast](./images/why-redis-so-fast.png)
46+
![why-redis-so-fast](https://oss.javaguide.cn/github/javaguide/database/redis/why-redis-so-fast.png)
4747

4848
那既然都这么快了,为什么不直接用 Redis 当主数据库呢?主要是因为内存成本太高,并且 Redis 提供的数据持久化仍然有数据丢失的风险。
4949

@@ -96,7 +96,7 @@ PS:篇幅问题,我这并没有对上面提到的分布式缓存选型做详
9696

9797
相信看了上面的对比之后,我们已经没有什么理由可以选择使用 Memcached 来作为自己项目的分布式缓存了。
9898

99-
### 为什么要用 Redis?
99+
### ⭐️为什么要用 Redis?
100100

101101
**1、访问速度更快**
102102

@@ -114,7 +114,7 @@ PS:篇幅问题,我这并没有对上面提到的分布式缓存选型做详
114114

115115
Redis 除了可以用作缓存之外,还可以用于分布式锁、限流、消息队列、延时队列等场景,功能强大!
116116

117-
### 为什么用 Redis 而不用本地缓存呢?
117+
### ⭐️为什么用 Redis 而不用本地缓存呢?
118118

119119
| 特性 | 本地缓存 | Redis |
120120
| ------------ | ------------------------------------ | -------------------------------- |
@@ -147,7 +147,7 @@ Redis 从 4.0 版本开始,支持通过 Module 来扩展其功能以满足特
147147

148148
关于 Redis 模块的详细介绍,可以查看官方文档:<https://redis.io/modules>
149149

150-
## Redis 应用
150+
## ⭐️Redis 应用
151151

152152
### Redis 除了做缓存,还能做什么?
153153

@@ -304,7 +304,7 @@ Redisson 内置的延时队列具备下面这些优势:
304304

305305
关于 Redis 实现延时任务的详细介绍,可以看我写的这篇文章:[如何基于 Redis 实现延时任务?](./redis-delayed-task.md)
306306

307-
## Redis 数据类型
307+
## ⭐️Redis 数据类型
308308

309309
关于 Redis 5 种基础数据类型和 3 种特殊数据类型的详细介绍请看下面这两篇文章以及 [Redis 官方文档](https://redis.io/docs/data-types/)
310310

@@ -463,7 +463,7 @@ Redis 中有一个叫做 `Sorted Set`(有序集合)的数据类型经常被
463463
- 红黑树 vs 跳表:相比较于红黑树来说,跳表的实现也更简单一些,不需要通过旋转和染色(红黑变换)来保证黑平衡。并且,按照区间来查找数据这个操作,红黑树的效率没有跳表高。
464464
- B+ 树 vs 跳表:B+ 树更适合作为数据库和文件系统中常用的索引结构之一,它的核心思想是通过可能少的 IO 定位到尽可能多的索引来获得查询数据。对于 Redis 这种内存数据库来说,它对这些并不感冒,因为 Redis 作为内存数据库它不可能存储大量的数据,所以对于索引不需要通过 B+ 树这种方式进行维护,只需按照概率进行随机维护即可,节约内存。而且使用跳表实现 zset 时相较前者来说更简单一些,在进行插入时只需通过索引将数据插入到链表中合适的位置再随机维护一定高度的索引即可,也不需要像 B+ 树那样插入时发现失衡时还需要对节点分裂与合并。
465465

466-
另外,我还单独写了一篇文章从有序集合的基本使用到跳表的源码分析和实现,让你会对 Redis 的有序集合底层实现的跳表有着更深刻的理解和掌握:[Redis 为什么用跳表实现有序集合](./redis-skiplist.md)
466+
另外,我还单独写了一篇文章从有序集合的基本使用到跳表的源码分析和实现,让你会对 Redis 的有序集合底层实现的跳表有着更深刻的理解和掌握:[Redis 为什么用跳表实现有序集合](https://javaguide.cn/database/redis/redis-skiplist.html)
467467

468468
### Set 的应用场景是什么?
469469

@@ -574,11 +574,11 @@ Bloom Filter 的简单原理图如下:
574574

575575
如果我们需要判断某个字符串是否在布隆过滤器中时,只需要对给定字符串再次进行相同的哈希计算,得到值之后判断位数组中的每个元素是否都为 1,如果值都为 1,那么说明这个值在布隆过滤器中,如果存在一个值不为 1,说明该元素不在布隆过滤器中。
576576

577-
## Redis 持久化机制(重要)
577+
## ⭐️Redis 持久化机制(重要)
578578

579579
Redis 持久化机制(RDB 持久化、AOF 持久化、RDB 和 AOF 的混合持久化)相关的问题比较多,也比较重要,于是我单独抽了一篇文章来总结 Redis 持久化机制相关的知识点和问题:[Redis 持久化机制详解](https://javaguide.cn/database/redis/redis-persistence.html)
580580

581-
## Redis 线程模型(重要)
581+
## ⭐️Redis 线程模型(重要)
582582

583583
对于读写命令来说,Redis 一直是单线程模型。不过,在 Redis 4.0 版本之后引入了多线程来执行一些大键值对的异步删除操作,Redis 6.0 版本之后引入了多线程来处理网络请求(提高网络 IO 读写性能)。
584584

@@ -697,7 +697,7 @@ void bioKillThreads(void);
697697

698698
关于 Redis 后台线程的详细介绍可以查看 [Redis 6.0 后台线程有哪些?](https://juejin.cn/post/7102780434739626014) 这篇就文章。
699699

700-
## Redis 内存管理
700+
## ⭐️Redis 内存管理
701701

702702
### Redis 给缓存数据设置过期时间有什么用?
703703

docs/database/redis/redis-questions-02.md

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ Redis 从 2.6 版本开始支持执行 Lua 脚本,它的功能和事务非常
186186

187187
另外,Redis 7.0 新增了 [Redis functions](https://redis.io/docs/latest/develop/programmability/functions-intro/) 特性,你可以将 Redis functions 看作是比 Lua 更强大的脚本。
188188

189-
## Redis 性能优化(重要)
189+
## ⭐️Redis 性能优化(重要)
190190

191191
除了下面介绍的内容之外,再推荐两篇不错的文章:
192192

@@ -600,7 +600,7 @@ OK
600600

601601
**参考答案**[Redis 内存碎片详解](https://javaguide.cn/database/redis/redis-memory-fragmentation.html)
602602

603-
## Redis 生产问题(重要)
603+
## ⭐️Redis 生产问题(重要)
604604

605605
### 缓存穿透
606606

@@ -760,7 +760,21 @@ Bloom Filter 会使用一个较大的 bit 数组来保存所有的数据,数
760760

761761
### 哪些情况可能会导致 Redis 阻塞?
762762

763-
单独抽了一篇文章来总结可能会导致 Redis 阻塞的情况:[Redis 常见阻塞原因总结](https://javaguide.cn/database/redis/redis-common-blocking-problems-summary.html)
763+
常见的导致 Redis 阻塞原因有:
764+
765+
- `O(n)` 复杂度命令执行(如 `KEYS *``HGETALL``LRANGE``SMEMBERS` 等),随着数据量增大导致执行时间过长。
766+
- 执行 `SAVE` 命令生成 RDB 快照时同步阻塞主线程,而 `BGSAVE` 通过 `fork` 子进程避免阻塞。
767+
- AOF 记录日志在主线程中进行,可能因命令执行后写日志而阻塞后续命令。
768+
- AOF 刷盘(fsync)时后台线程同步到磁盘,磁盘压力大导致 `fsync` 阻塞,进而阻塞主线程 `write` 操作,尤其在 `appendfsync always``everysec` 配置下明显。
769+
- AOF 重写过程中将重写缓冲区内容追加到新 AOF 文件时产生阻塞。
770+
- 操作大 key(string > 1MB 或复合类型元素 > 5000)导致客户端超时、网络阻塞和工作线程阻塞。
771+
- 使用 `flushdb``flushall` 清空数据库时涉及大量键值对删除和内存释放,造成主线程阻塞。
772+
- 集群扩容缩容时数据迁移为同步操作,大 key 迁移导致两端节点长时间阻塞,可能触发故障转移
773+
- 内存不足触发 Swap,操作系统将 Redis 内存换出到硬盘,读写性能急剧下降。
774+
- 其他进程过度占用 CPU 导致 Redis 吞吐量下降。
775+
- 网络问题如连接拒绝、延迟高、网卡软中断等导致 Redis 阻塞。
776+
777+
详细介绍可以阅读这篇文章:[Redis 常见阻塞原因总结](https://javaguide.cn/database/redis/redis-common-blocking-problems-summary.html)
764778

765779
## Redis 集群
766780

@@ -798,8 +812,6 @@ Bloom Filter 会使用一个较大的 bit 数组来保存所有的数据,数
798812
6. 控制 key 的生命周期:避免 Redis 中存放了太多不经常被访问的数据。
799813
7. ……
800814

801-
相关文章推荐:[阿里云 Redis 开发规范](https://developer.aliyun.com/article/531067)
802-
803815
## 参考
804816

805817
- 《Redis 开发与运维》

docs/java/basis/bigdecimal.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@ title: BigDecimal 详解
33
category: Java
44
tag:
55
- Java基础
6+
head:
7+
- - meta
8+
- name: keywords
9+
content: BigDecimal,浮点数精度,小数运算,compareTo,舍入规则,RoundingMode,divide,阿里巴巴规范
10+
- - meta
11+
- name: description
12+
content: 讲解 BigDecimal 的使用场景与核心 API,解决浮点数精度问题并总结常见舍入规则与最佳实践。
613
---
714

815
《阿里巴巴 Java 开发手册》中提到:“为了避免精度丢失,可以使用 `BigDecimal` 来进行浮点数的运算”。

docs/java/basis/generics-and-wildcards.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@ title: 泛型&通配符详解
33
category: Java
44
tag:
55
- Java基础
6+
head:
7+
- - meta
8+
- name: keywords
9+
content: 泛型,通配符,类型擦除,上界通配符,下界通配符,PECS,泛型方法
10+
- - meta
11+
- name: description
12+
content: 解析 Java 泛型与通配符的语法与原理,涵盖类型擦除、边界与 PECS 原则等高频知识点。
613
---
714

815
**泛型&通配符** 相关的面试题为我的[知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)(点击链接即可查看详细介绍以及获取方法)中。

docs/java/basis/java-keyword-summary.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
---
2+
title: Java 关键字总结
3+
category: Java
4+
tag:
5+
- Java基础
6+
head:
7+
- - meta
8+
- name: keywords
9+
content: Java 关键字,final,static,this,super,abstract,interface,enum,volatile,transient
10+
- - meta
11+
- name: description
12+
content: 梳理常见 Java 关键字的语义与用法差异,便于快速查阅与掌握。
13+
---
14+
115
# final,static,this,super 关键字总结
216

317
## final 关键字

docs/java/basis/proxy.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@ title: Java 代理模式详解
33
category: Java
44
tag:
55
- Java基础
6+
head:
7+
- - meta
8+
- name: keywords
9+
content: 代理模式,静态代理,动态代理,JDK 动态代理,CGLIB,横切增强,设计模式
10+
- - meta
11+
- name: description
12+
content: 详解 Java 代理模式的静态与动态实现,理解 JDK/CGLIB 动态代理的原理与应用场景。
613
---
714

815
## 1. 代理模式

docs/java/basis/reflection.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@ title: Java 反射机制详解
33
category: Java
44
tag:
55
- Java基础
6+
head:
7+
- - meta
8+
- name: keywords
9+
content: 反射,Class,Method,Field,动态代理,运行时分析,框架原理
10+
- - meta
11+
- name: description
12+
content: 系统讲解 Java 反射的核心概念与常见用法,结合动态代理与框架底层机制理解运行时能力。
613
---
714

815
## 何为反射?

0 commit comments

Comments
 (0)