1. 什么是锁的重入,为什么要锁重入?

锁重入的含义

锁重入(Reentrant Lock)指的是同一个线程在持有锁的情况下,可以多次获得该锁而不会发生死锁
Java 中的 ReentrantLock 就是一种可重入锁,而 synchronized 关键字本质上也是可重入的。

为什么需要锁重入?

如果锁不能重入,线程在递归调用或父类方法调用子类方法时,会因再次申请相同的锁而发生死锁

示例 1:递归调用

public synchronized void method1() {
    method2();  // 如果锁不能重入,这里会死锁
}

public synchronized void method2() {
    System.out.println("method2 called");
}

业务场景举例


2. 什么是 PSYNC?

PSYNC 的含义

PSYNC 是 Redis 复制机制中的一种增量同步命令,Partial Resynchronization(部分同步) 的缩写。
它用于主从服务器之间同步数据,避免全量复制,提升效率。

PSYNC 的两种模式


3. BGSAVE 全称与作用

BGSAVE 的全称

BGSAVE(Background Save),即后台持久化保存

作用

BGSAVE 命令会在后台创建 Redis 数据的 RDB 快照(持久化文件),用于备份或数据恢复。


4. 上下文切换与竞争条件

上下文切换(Context Switch)

上下文切换指的是 CPU 从执行一个线程,切换到另一个线程时的过程。

上下文切换带来的开销:

实例解释

假设有两个线程 A 和 B 争抢 CPU:

竞争条件(Race Condition)

竞争条件是指多个线程在无同步机制的情况下,访问共享资源,导致结果不可预期。

实例

两个线程同时更新一个共享变量 count

count = count + 1;

5. 主键查询与主键索引查询的区别

主键查询

主键查询是通过主键值直接定位到数据行的查询方式。它是 MySQL 查询中最快的一种方式。

主键索引查询

主键索引查询是通过主键索引树来查找数据的过程。

区别


6. eq_ref 的含义与全称

eq_ref 的全称

eq_ref 中的 eq 代表 equal(等于)ref 代表 reference(引用)

eq_ref 的特点


7. 什么是回表?

回表的含义

回表指的是在索引查询时,MySQL 通过二级索引找到主键值后,再到聚簇索引(数据表)中查找完整记录的过程。

为什么回表会影响性能?

回表增加了额外的磁盘 I/O 操作,尤其当数据量较大时,性能下降明显。

如何避免回表?


8. key_len 的作用

key_len 的含义

key_len 是 MySQL EXPLAIN 结果中的一个字段,表示MySQL 使用的索引长度(字节数)

作用


9. 全索引扫描与唯一索引扫描的区别

全索引扫描

唯一索引扫描


10. ref 索引查询与 index 索引树扫描的区别

ref 索引查询

index 索引树扫描

性能差异原因