Skip to content

Commit 2aad0b5

Browse files
committed
[docs fix]修正系统调用的过程描述和图解
1 parent 1a54147 commit 2aad0b5

File tree

3 files changed

+17
-8
lines changed

3 files changed

+17
-8
lines changed

docs/cs-basics/operating-system/operating-system-basic-questions-01.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ _玩玩电脑游戏还是必须要有 Windows 的,所以我现在是一台 Win
151151

152152
1. 用户态的程序发起系统调用,因为系统调用中涉及一些特权指令(只能由操作系统内核态执行的指令),用户态程序权限不足,因此会中断执行,也就是 Trap(Trap 是一种中断)。
153153
2. 发生中断后,当前 CPU 执行的程序会中断,跳转到中断处理程序。内核程序开始执行,也就是开始处理系统调用。
154-
3. 内核处理完成后,主动触发 Trap,这样会再次发生中断,切换回用户态工作
154+
3. 当系统调用处理完成后,操作系统使用特权指令(如 `iret``sysret``eret`)切换回用户态,恢复用户态的上下文,继续执行用户程序
155155

156156
![系统调用的过程](https://oss.javaguide.cn/github/javaguide/cs-basics/operating-system/system-call-procedure.png)
157157

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

+15-6
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,21 @@ TIMESTAMP 只需要使用 4 个字节的存储空间,但是 DATETIME 需要耗
165165

166166
### NULL 和 '' 的区别是什么?
167167

168-
`NULL``''`(空字符串)是两个完全不一样的值,区别如下:
169-
170-
- `NULL` 代表一个不确定的值,就算是两个 `NULL`,它俩也不一定相等。例如,`SELECT NULL=NULL`的结果为 false,但是在我们使用`DISTINCT`,`GROUP BY`,`ORDER BY`时,`NULL`又被认为是相等的。
171-
- `''`的长度是 0,是不占用空间的,而`NULL` 是需要占用空间的。
172-
- `NULL` 会影响聚合函数的结果。例如,`SUM``AVG``MIN``MAX` 等聚合函数会忽略 `NULL` 值。 `COUNT` 的处理方式取决于参数的类型。如果参数是 `*`(`COUNT(*)`),则会统计所有的记录数,包括 `NULL` 值;如果参数是某个字段名(`COUNT(列名)`),则会忽略 `NULL` 值,只统计非空值的个数。
173-
- 查询 `NULL` 值时,必须使用 `IS NULL``IS NOT NULLl` 来判断,而不能使用 =、!=、 <、> 之类的比较运算符。而`''`是可以使用这些比较运算符的。
168+
`NULL``''` (空字符串) 是两个完全不同的值,它们分别表示不同的含义,并在数据库中有着不同的行为。`NULL` 代表缺失或未知的数据,而 `''` 表示一个已知存在的空字符串。它们的主要区别如下:
169+
170+
1. **含义**:
171+
- `NULL` 代表一个不确定的值,它不等于任何值,包括它自身。因此,`SELECT NULL = NULL` 的结果是 `NULL`,而不是 `true``false``NULL` 意味着缺失或未知的信息。虽然 `NULL` 不等于任何值,但在某些操作中,数据库系统会将 `NULL` 值视为相同的类别进行处理,例如:`DISTINCT`,`GROUP BY`,`ORDER BY`。需要注意的是,这些操作将 `NULL` 值视为相同的类别进行处理,并不意味着 `NULL` 值之间是相等的。 它们只是在特定操作中被特殊处理,以保证结果的正确性和一致性。 这种处理方式是为了方便数据操作,而不是改变了 `NULL` 的语义。
172+
- `''` 表示一个空字符串,它是一个已知的值。
173+
2. **存储空间**:
174+
- `NULL` 的存储空间占用取决于数据库的实现,通常需要一些空间来标记该值为空。
175+
- `''` 的存储空间占用通常较小,因为它只存储一个空字符串的标志,不需要存储实际的字符。
176+
3. **比较运算**:
177+
- 任何值与 `NULL` 进行比较(例如 `=`, `!=`, `>`, `<` 等)的结果都是 `NULL`,表示结果不确定。要判断一个值是否为 `NULL`,必须使用 `IS NULL``IS NOT NULL`
178+
- `''` 可以像其他字符串一样进行比较运算。例如,`'' = ''` 的结果是 `true`
179+
4. **聚合函数**:
180+
- 大多数聚合函数(例如 `SUM`, `AVG`, `MIN`, `MAX`)会忽略 `NULL` 值。
181+
- `COUNT(*)` 会统计所有行数,包括包含 `NULL` 值的行。`COUNT(列名)` 会统计指定列中非 `NULL` 值的行数。
182+
- 空字符串 `''` 会被聚合函数计算在内。例如,`SUM` 会将其视为 0,`MIN``MAX` 会将其视为一个空字符串。
174183

175184
看了上面的介绍之后,相信你对另外一个高频面试题:“为什么 MySQL 不建议使用 `NULL` 作为列默认值?”也有了答案。
176185

docs/java/jvm/jvm-garbage-collection.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ public class ReferenceCountingGc {
253253
254254
JDK1.2 之前,Java 中引用的定义很传统:如果 reference 类型的数据存储的数值代表的是另一块内存的起始地址,就称这块内存代表一个引用。
255255
256-
JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种(引用强度逐渐减弱),强引用就是Java中普通的对象,而软引用、弱引用、虚引用在JDK中定义的类分别是SoftReference、WeakReferencePhantomReference。
256+
JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种(引用强度逐渐减弱),强引用就是 Java 中普通的对象,而软引用、弱引用、虚引用在JDK中定义的类分别是 `SoftReference``WeakReference``PhantomReference`
257257
258258
![Java 引用类型总结](https://oss.javaguide.cn/github/javaguide/java/jvm/java-reference-type.png)
259259

0 commit comments

Comments
 (0)