From 5d14e3ecaf0911f144f7805ed5ae5d5a4008cdcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E6=AD=A3=E6=B5=B7?= <449534191@qq.com> Date: Sun, 19 Apr 2020 01:33:41 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=8F=AA=E6=9C=89blob=E5=92=8Ctext?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=88=97=E5=9C=A8=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E7=B4=A2=E5=BC=95=E6=97=B6=EF=BC=8Cmysql=E6=89=8D=E5=BC=BA?= =?UTF-8?q?=E5=88=B6=E8=A6=81=E6=B1=82=E9=9C=80=E8=A6=81=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E7=B4=A2=E5=BC=95=E7=9A=84=E5=89=8D=E7=BC=80=E9=95=BF=E5=BA=A6?= =?UTF-8?q?=EF=BC=88=E9=94=AE=E9=95=BF=E5=BA=A6=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 只有blob和text类型的列在创建索引时,mysql才强制要求需要指定索引的前缀长度(键长度) --- notes/MySQL.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/notes/MySQL.md b/notes/MySQL.md index 2239d48a..b9fcfa2c 100644 --- a/notes/MySQL.md +++ b/notes/MySQL.md @@ -159,8 +159,13 @@ customer_id_selectivity: 0.0373 ### 4. 前缀索引 -对于 BLOB、TEXT 和 VARCHAR 类型的列,必须使用前缀索引,只索引开始的部分字符。 +对于BLOB和TEXT这种文本类型的列,必须使用前缀索引,在创建索引时必须使用col_name(N)来指定索引的前缀长度(键长度),从而只索引开始的部分字符。 +```sql +CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10))); +``` +https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix +对于VARCHAR和CHAR类型的列,不强制要求使用前缀索引,根据业务自行选择即可 前缀长度的选取需要根据索引选择性来确定。 ### 5. 覆盖索引 From 2952f82f3973c53073dbd04ba4089b670de1196b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E6=AD=A3=E6=B5=B7?= <449534191@qq.com> Date: Sun, 19 Apr 2020 01:38:28 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=8F=AA=E6=9C=89blob=E5=92=8Ctext?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=88=97=E5=9C=A8=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E7=B4=A2=E5=BC=95=E6=97=B6=EF=BC=8Cmysql=E6=89=8D=E5=BC=BA?= =?UTF-8?q?=E5=88=B6=E8=A6=81=E6=B1=82=E9=9C=80=E8=A6=81=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E7=B4=A2=E5=BC=95=E7=9A=84=E5=89=8D=E7=BC=80=E9=95=BF=E5=BA=A6?= =?UTF-8?q?=EF=BC=88=E9=94=AE=E9=95=BF=E5=BA=A6=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 只有blob和text类型的列在创建索引时,mysql才强制要求需要指定索引的前缀长度(键长度) --- notes/MySQL.md | 1 + 1 file changed, 1 insertion(+) diff --git a/notes/MySQL.md b/notes/MySQL.md index b9fcfa2c..b8ee59c3 100644 --- a/notes/MySQL.md +++ b/notes/MySQL.md @@ -166,6 +166,7 @@ CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10))); https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix 对于VARCHAR和CHAR类型的列,不强制要求使用前缀索引,根据业务自行选择即可 + 前缀长度的选取需要根据索引选择性来确定。 ### 5. 覆盖索引 From 471779c0130f843ba747bc1dcae9aa259178ae09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E6=AD=A3=E6=B5=B7?= <449534191@qq.com> Date: Mon, 27 Apr 2020 18:03:17 +0800 Subject: [PATCH 3/7] =?UTF-8?q?Update=20Java=20=E5=B9=B6=E5=8F=91.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java 并发.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Java 并发.md b/notes/Java 并发.md index 9bdcbb8f..035666c3 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -690,7 +690,7 @@ after ## 阻塞(BLOCKED) -请求获取 monitor lock 从而进入 synchronized 函数或者代码块,但是其它线程已经占用了该 monitor lock,所以出于阻塞状态。要结束该状态进入从而 RUNABLE 需要其他线程释放 monitor lock。 +请求获取 monitor lock 从而进入 synchronized 函数或者代码块,但是其它线程已经占用了该 monitor lock,所以出于阻塞状态。要结束该状态从而进入RUNABLE 需要其他线程释放 monitor lock。 ## 无限期等待(WAITING) From b906c2e4409dce6ab3cb6fd7df32c154b7b54015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E6=AD=A3=E6=B5=B7?= <449534191@qq.com> Date: Mon, 27 Apr 2020 21:33:59 +0800 Subject: [PATCH 4/7] =?UTF-8?q?Update=20Java=20=E5=9F=BA=E7=A1=80.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/notes/Java 基础.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notes/Java 基础.md b/docs/notes/Java 基础.md index 479c809d..aab04345 100644 --- a/docs/notes/Java 基础.md +++ b/docs/notes/Java 基础.md @@ -757,7 +757,7 @@ System.out.println(set.size()); // 2 理想的哈希函数应当具有均匀性,即不相等的对象应当均匀分布到所有可能的哈希值上。这就要求了哈希函数要把所有域的值都考虑进来。可以将每个域都当成 R 进制的某一位,然后组成一个 R 进制的整数。 -R 一般取 31,因为它是一个奇素数,如果是偶数的话,当出现乘法溢出,信息就会丢失,因为与 2 相乘相当于向左移一位,最左边的位丢失。并且一个数与 31 相乘可以转换成移位和减法:`31*x == (x<<5)-x`,编译器会自动进行这个优化。 +R 一般取 31,因为它是一个奇数,如果是偶数的话,当出现乘法溢出,信息就会丢失,因为与 2 相乘相当于向左移一位,最左边的位丢失。并且一个数与 31 相乘可以转换成移位和减法:`31*x == (x<<5)-x`,编译器会自动进行这个优化。 ```java @Override From 15253cba0ef1aa87201b9d86135bd4506fdb12e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E6=AD=A3=E6=B5=B7?= <449534191@qq.com> Date: Mon, 27 Apr 2020 22:09:23 +0800 Subject: [PATCH 5/7] =?UTF-8?q?Update=20Java=20=E5=B9=B6=E5=8F=91.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java 并发.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Java 并发.md b/notes/Java 并发.md index 035666c3..2ba31fb6 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -1567,7 +1567,7 @@ public static String concatString(String s1, String s2, String s3) { 如果一系列的连续操作都对同一个对象反复加锁和解锁,频繁的加锁操作就会导致性能损耗。 -上一节的示例代码中连续的 append() 方法就属于这类情况。如果虚拟机探测到由这样的一串零碎的操作都对同一个对象加锁,将会把加锁的范围扩展(粗化)到整个操作序列的外部。对于上一节的示例代码就是扩展到第一个 append() 操作之前直至最后一个 append() 操作之后,这样只需要加锁一次就可以了。 +上一节的示例代码中连续的 append() 方法就属于这类情况。如果虚拟机探测到有这样的一串零碎的操作都对同一个对象加锁,将会把加锁的范围扩展(粗化)到整个操作序列的外部。对于上一节的示例代码就是扩展到第一个 append() 操作之前直至最后一个 append() 操作之后,这样只需要加锁一次就可以了。 ## 轻量级锁 From 84dd2124db604b11185e80764920c9ab6375882b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E6=AD=A3=E6=B5=B7?= <449534191@qq.com> Date: Tue, 28 Apr 2020 12:24:27 +0800 Subject: [PATCH 6/7] =?UTF-8?q?Update=20=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=8E=9F=E7=90=86.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/notes/数据库系统原理.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notes/数据库系统原理.md b/docs/notes/数据库系统原理.md index e97faa90..48ec3aab 100644 --- a/docs/notes/数据库系统原理.md +++ b/docs/notes/数据库系统原理.md @@ -293,7 +293,7 @@ MVCC 维护了一个 ReadView 结构,主要包含了当前系统未提交的 在进行 SELECT 操作时,根据数据行快照的 TRX_ID 与 TRX_ID_MIN 和 TRX_ID_MAX 之间的关系,从而判断数据行快照是否可以使用: -- TRX_ID < TRX_ID_MIN,表示该数据行快照时在当前所有未提交事务之前进行更改的,因此可以使用。 +- TRX_ID < TRX_ID_MIN,表示该数据行快照是在当前所有未提交事务之前进行更改的,因此可以使用。 - TRX_ID > TRX_ID_MAX,表示该数据行快照是在事务启动之后被更改的,因此不可使用。 - TRX_ID_MIN <= TRX_ID <= TRX_ID_MAX,需要根据隔离级别再进行判断: From c9b5e08fe8a400a771c1370c9f849711c38777fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E6=AD=A3=E6=B5=B7?= <449534191@qq.com> Date: Wed, 29 Apr 2020 14:01:04 +0800 Subject: [PATCH 7/7] Update Socket.md --- docs/notes/Socket.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notes/Socket.md b/docs/notes/Socket.md index 6138490c..c5ca24c0 100644 --- a/docs/notes/Socket.md +++ b/docs/notes/Socket.md @@ -236,7 +236,7 @@ epoll 仅适用于 Linux OS。 epoll 比 select 和 poll 更加灵活而且没有描述符数量限制。 -epoll 对多线程编程更有友好,一个线程调用了 epoll_wait() 另一个线程关闭了同一个描述符也不会产生像 select 和 poll 的不确定情况。 +epoll 对多线程编程更友好,一个线程调用了 epoll_wait() 另一个线程关闭了同一个描述符也不会产生像 select 和 poll 的不确定情况。 ```c // Create the epoll descriptor. Only one is needed per app, and is used to monitor all sockets.