Merge c9b5e08fe8a400a771c1370c9f849711c38777fd into ce3090d8b08b1435826defcd03919805a5332ed9

This commit is contained in:
何正海 2020-10-09 23:15:30 +08:00 committed by GitHub
commit af8a66cd6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 12 additions and 6 deletions

View File

@ -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

View File

@ -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.

View File

@ -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需要根据隔离级别再进行判断

View File

@ -690,7 +690,7 @@ after
## 阻塞BLOCKED
请求获取 monitor lock 从而进入 synchronized 函数或者代码块但是其它线程已经占用了该 monitor lock所以出于阻塞状态要结束该状态进入从而 RUNABLE 需要其他线程释放 monitor lock
请求获取 monitor lock 从而进入 synchronized 函数或者代码块但是其它线程已经占用了该 monitor lock所以出于阻塞状态要结束该状态从而进入RUNABLE 需要其他线程释放 monitor lock
## 无限期等待WAITING
@ -1567,7 +1567,7 @@ public static String concatString(String s1, String s2, String s3) {
如果一系列的连续操作都对同一个对象反复加锁和解锁频繁的加锁操作就会导致性能损耗
上一节的示例代码中连续的 append() 方法就属于这类情况如果虚拟机探测到这样的一串零碎的操作都对同一个对象加锁将会把加锁的范围扩展粗化到整个操作序列的外部对于上一节的示例代码就是扩展到第一个 append() 操作之前直至最后一个 append() 操作之后这样只需要加锁一次就可以了
上一节的示例代码中连续的 append() 方法就属于这类情况如果虚拟机探测到这样的一串零碎的操作都对同一个对象加锁将会把加锁的范围扩展粗化到整个操作序列的外部对于上一节的示例代码就是扩展到第一个 append() 操作之前直至最后一个 append() 操作之后这样只需要加锁一次就可以了
## 轻量级锁

View File

@ -161,7 +161,13 @@ customer_id_selectivity: 0.0373
### 4. 前缀索引
对于 BLOBTEXT 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类型的列不强制要求使用前缀索引根据业务自行选择即可
前缀长度的选取需要根据索引选择性来确定