[docs update&add]完善部分内容描述&新增一篇cas详解 · rafdrew/JavaGuide@fe697ad · GitHub
Skip to content

Commit fe697ad

Browse files
committed
[docs update&add]完善部分内容描述&新增一篇cas详解
1 parent 97dd88a commit fe697ad

9 files changed

Lines changed: 301 additions & 84 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions

docs/.vuepress/sidebar/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ export default sidebar({
112112
collapsible: true,
113113
children: [
114114
"optimistic-lock-and-pessimistic-lock",
115+
"cas",
115116
"jmm",
116117
"java-thread-pool-summary",
117118
"java-thread-pool-best-practices",

docs/database/mysql/mysql-index.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,14 @@ EXPLAIN SELECT * FROM student WHERE name = 'Anne Henry' AND class = 'lIrm08RYVk'
385385
SELECT * FROM student WHERE class = 'lIrm08RYVk';
386386
```
387387

388+
再来看一个常见的面试题:如果有索引 `联合索引(a,b,c)`,查询 `a=1 AND c=1`会走索引么?`c=1` 呢?`b=1 AND c=1`呢?
389+
390+
先不要往下看答案,给自己 3 分钟时间想一想。
391+
392+
1. 查询 `a=1 AND c=1`:根据最左前缀匹配原则,查询可以使用索引的前缀部分。因此,该查询仅在 `a=1` 上使用索引,然后对结果进行 `c=1` 的过滤。
393+
2. 查询 `c=1` :由于查询中不包含最左列 `a`,根据最左前缀匹配原则,整个索引都无法被使用。
394+
3. 查询`b=1 AND c=1`:和第二种一样的情况,整个索引都不会使用。
395+
388396
MySQL 8.0.13 版本引入了索引跳跃扫描(Index Skip Scan,简称 ISS),它可以在某些索引查询场景下提高查询效率。在没有 ISS 之前,不满足最左前缀匹配原则的联合索引查询中会执行全表扫描。而 ISS 允许 MySQL 在某些情况下避免全表扫描,即使查询条件不符合最左前缀。不过,这个功能比较鸡肋, 和 Oracle 中的没法比,MySQL 8.0.31 还报告了一个 bug:[Bug #109145 Using index for skip scan cause incorrect result](https://bugs.mysql.com/bug.php?id=109145)(后续版本已经修复)。个人建议知道有这个东西就好,不需要深究,实际项目也不一定能用上。
389397

390398
## 索引下推

docs/database/sql/sql-syntax-summary.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ WHERE username = 'root';
148148
### 删除数据
149149

150150
- `DELETE` 语句用于删除表中的记录。
151-
- `TRUNCATE TABLE` 可以清空表,也就是删除所有行。
151+
- `TRUNCATE TABLE` 可以清空表,也就是删除所有行。说明:`TRUNCATE` 语句不属于 DML 语法而是 DDL 语法。
152152

153153
**删除表中的指定数据**
154154

docs/home.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ title: JavaGuide(Java学习&面试指南)
7272

7373
**重要知识点详解**
7474

75+
- [乐观锁和悲观锁详解](./java/concurrent/jmm.md)
76+
- [CAS 详解](./java/concurrent/cas.md)
7577
- [JMM(Java 内存模型)详解](./java/concurrent/jmm.md)
7678
- **线程池**[Java 线程池详解](./java/concurrent/java-thread-pool-summary.md)[Java 线程池最佳实践](./java/concurrent/java-thread-pool-best-practices.md)
7779
- [ThreadLocal 详解](./java/concurrent/threadlocal.md)

docs/java/basis/java-basic-questions-02.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ public class Student {
216216

217217
在 Java 8 及以上版本中,接口引入了新的方法类型:`default` 方法、`static` 方法和 `private` 方法。这些方法让接口的使用更加灵活。
218218

219-
Java 8 引入的`default` 方法用于提供接口方法的默认实现,可以在实现类中被覆盖。
219+
Java 8 引入的`default` 方法用于提供接口方法的默认实现,可以在实现类中被覆盖。这样就可以在不修改实现类的情况下向现有接口添加新功能,从而增强接口的扩展性和向后兼容性。
220220

221221
```java
222222
public interface MyInterface {
@@ -226,7 +226,7 @@ public interface MyInterface {
226226
}
227227
```
228228

229-
Java 8 引入的`static` 方法无法在实现类中被覆盖,只能通过接口名直接调用( `MyInterface.staticMethod()`),类似于类中的静态方法。
229+
Java 8 引入的`static` 方法无法在实现类中被覆盖,只能通过接口名直接调用( `MyInterface.staticMethod()`),类似于类中的静态方法。`static` 方法通常用于定义一些通用的、与接口相关的工具方法,一般很少用。
230230

231231
```java
232232
public interface MyInterface {
@@ -255,7 +255,7 @@ public interface MyInterface {
255255
System.out.println("This is a private method used internally.");
256256
}
257257

258-
// 私有方法,只能被 default 方法调用。
258+
// 实例私有方法,只能被 default 方法调用。
259259
private void instanceCommonMethod() {
260260
System.out.println("This is a private instance method used internally.");
261261
}

docs/java/concurrent/cas.md

Lines changed: 160 additions & 0 deletions

0 commit comments

Comments
 (0)