select in share mode 理解
SELECT … LOCK IN SHARE MODE :共享锁(S锁, share locks)。其他事务可以读取数据,但不能对该数据进行修改,直到所有的共享锁被释放。
如果事务对某行数据加上共享锁之后,可进行读写操作;其他事务可以对该数据加共享锁,但不能加排他锁,且只能读数据,不能修改数据。
SELECT … FOR UPDATE:排他锁(X锁, exclusive locks)。如果事务对数据加上排他锁之后,则其他事务不能对该数据加任何的锁。获取排他锁的事务既能读取数据,也能修改数据。
注:普通 select 语句默认不加锁,而CUD操作默认加排他锁。
循环10次打印 ABC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
/**
* @Author lyr
* @create 2021/9/15 19:20
*/
public class Main {
public static volatile char cur = 'A';
private static Object lock = new Object();
public static void main(String[] args) throws Exception{
new Thread(()->{
int cnt = 10;
while(cnt>0) {
synchronized (lock) {
if(cur=='A') {
System.out.println("A");
cur = 'B';
cnt--;
lock.notifyAll();
}else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
new Thread(()->{
int cnt = 10;
while(cnt>0) {
synchronized (lock) {
if(cur=='B') {
System.out.println("B");
cur = 'C';
cnt--;
lock.notifyAll();
}else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
new Thread(()->{
int cnt = 10;
while(cnt>0) {
synchronized (lock) {
if(cur=='C') {
System.out.println("C");
cur = 'A';
cnt--;
lock.notifyAll();
}else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
}
}
|
面试总结
- 问我有没有那种特别讨厌的人,怎么相处
- 直接答 高技术 的人都比较纯粹,没有什么特别讨厌的。
-
乐观锁和悲观锁,读写锁
-
假如一个客户 提需求 做软件, 我这边负责这块业务,这个需求 没有太大意义,我会怎么办? 做不做??
简历写了 JWT , 问这么理解去中心化
被问2次了,算是重点
JWT的精髓在于:“去中心化”,数据是保存在客户端的。
为了防止用户篡改数据,服务器将在生成对象时添加签名,并对发回的数据进行验证