Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4dba21a

Browse files
Update Rocket.md
update
1 parent 8cc62eb commit 4dba21a

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

‎Rocket.md

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,11 +294,19 @@ MySQL为了保证ACID中的一致性和持久性,使用了WAL(Write-Ahead Logg
294294
1. 模糊查询 %like
295295
2. 索引列参与计算,使用了函数
296296
3. 非最左前缀顺序
297-
4. where对null判断
297+
4. where单列索引对null判断
298298
5. where不等于
299299
6. or操作有至少一个字段没有索引
300300
7. 需要回表的查询结果集过大(超过配置的范围)
301301

302+
### 为什么Mysql数据库存储不建议使用NULL
303+
304+
1. NOT IN子查询在有NULL值的情况下返回永远为空结果,查询容易出错。
305+
2. 索引问题,单列索引无法存储NULL值,where对null判断会不走索引。
306+
3. 如果在两个字段进行拼接(CONCAT函数),首先要各字段进行非null判断,否则只要任意一个字段为空都会造成拼接的结果为null
307+
4. 如果有 Null column 存在的情况下,count(Null column)需要格外注意,null 值不会参与统计。
308+
5. Null列需要更多的存储空间:需要一个额外的字节作为判断是否为NULL的标志位
309+
302310
### explain命令概要
303311

304312
1. id:select选择标识符
@@ -631,6 +639,15 @@ CAS是英文单词CompareAndSwap的缩写,中文意思是:比较并替换。
631639

632640
如果在这段期间它的值曾经被改成了B,后来又被改回为A,那CAS操作就会误认为它从来没有被改变过。Java并发包为了解决这个问题,提供了一个带有标记的原子引用类"AtomicStampedReference",它可以通过控制变量值的版本来保证CAS的正确性。
633641

642+
### Synchronized的四种使用方式
643+
644+
1. synchronized(this):当a线程执行到该语句时,锁住该语句所在对象object,其它线程无法访问object中的所有synchronized代码块。
645+
2. synchronized(obj):锁住对象obj,其它线程对obj中的所有synchronized代码块的访问被阻塞。
646+
3. synchronized method():与(1)类似,区别是(1)中线程执行到某方法中的该语句才会获得锁,而对方法加锁则是当方法调用时立刻获得锁。
647+
4. synchronized static method():当线程执行到该语句时,获得锁,所有调用该方法的其它线程阻塞,但是这个类中的其它非static声明的方法可以访问,即使这些方法是用synchronized声明的,但是static声明的方法会被阻塞;注意,这个锁与对象无关。
648+
649+
前三种方式加的是对象锁,但是如果(2)中obj是一个class类型的对象,那么加的是类锁,并且锁的范围比(4)还要大;如果该class类型的某个实例对象获得了类锁,那么该class类型的所有实例对象的synchronized代码块均无法访问。
650+
634651
### Synchronized和Lock的区别
635652

636653
1. 首先synchronized是java内置关键字在jvm层面,Lock是个java类。
@@ -691,6 +708,16 @@ AQS有两个队列,同步对列和条件队列。同步队列依赖一个双
691708
3. ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务
692709
4. ThreadPoolExecutor.CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务
693710

711+
### 线程池的正确创建方式
712+
713+
不能用Executors,newFixed和newSingle,因为队列无限大,容易造成耗尽资源和OOM,newCached和newScheduled最大线程数是Integer.MAX_VALUE,线程创建过多和OOM。应该通过ThreadPoolExecutor手动创建。
714+
715+
### 线程提交submit()和execute()有什么区别
716+
717+
1. submit()相比于excute(),支持callable接口,也可以获取到任务抛出来的异常
718+
2. 可以获取到任务返回结果
719+
3. 用submit()方法执行任务,用Future.get()获取异常
720+
694721
### 线程池的线程数量怎么确定
695722

696723
1. 一般来说,如果是CPU密集型应用,则线程池大小设置为N+1。
@@ -1108,4 +1135,4 @@ select quantity from products WHERE id=3 for update;
11081135
```
11091136
quantity = select quantity from products WHERE id=3;
11101137
update products set quantity = ($quantity-1) WHERE id=3 and queantity = $quantity;
1111-
```
1138+
```

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /