| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 1a54147 commit 2aad0b5
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -151,7 +151,7 @@ _玩玩电脑游戏还是必须要有 Windows 的,所以我现在是一台 Win | |||
| 151 | 151 | ||
| 152 | 152 | 1. 用户态的程序发起系统调用,因为系统调用中涉及一些特权指令(只能由操作系统内核态执行的指令),用户态程序权限不足,因此会中断执行,也就是 Trap(Trap 是一种中断)。 | |
| 153 | 153 | 2. 发生中断后,当前 CPU 执行的程序会中断,跳转到中断处理程序。内核程序开始执行,也就是开始处理系统调用。 | |
| 154 | - 3. 内核处理完成后,主动触发 Trap,这样会再次发生中断,切换回用户态工作。 | ||
| 154 | + 3. 当系统调用处理完成后,操作系统使用特权指令(如 `iret`、`sysret` 或 `eret`)切换回用户态,恢复用户态的上下文,继续执行用户程序。 | ||
| 155 | 155 | ||
| 156 | 156 |  | |
| 157 | 157 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -165,12 +165,21 @@ TIMESTAMP 只需要使用 4 个字节的存储空间,但是 DATETIME 需要耗 | |||
| 165 | 165 | ||
| 166 | 166 | ### NULL 和 '' 的区别是什么? | |
| 167 | 167 | ||
| 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` 会将其视为一个空字符串。 | ||
| 174 | 183 | ||
| 175 | 184 | 看了上面的介绍之后,相信你对另外一个高频面试题:“为什么 MySQL 不建议使用 `NULL` 作为列默认值?”也有了答案。 | |
| 176 | 185 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -253,7 +253,7 @@ public class ReferenceCountingGc { | |||
| 253 | 253 | ||
| 254 | 254 | JDK1.2 之前,Java 中引用的定义很传统:如果 reference 类型的数据存储的数值代表的是另一块内存的起始地址,就称这块内存代表一个引用。 | |
| 255 | 255 | ||
| 256 | - JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种(引用强度逐渐减弱),强引用就是Java中普通的对象,而软引用、弱引用、虚引用在JDK中定义的类分别是SoftReference、WeakReference、PhantomReference。 | ||
| 256 | + JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种(引用强度逐渐减弱),强引用就是 Java 中普通的对象,而软引用、弱引用、虚引用在JDK中定义的类分别是 `SoftReference`、`WeakReference`、`PhantomReference`。 | ||
| 257 | 257 | ||
| 258 | 258 |  | |
| 259 | 259 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments