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();
    }

}

面试总结

  1. 问我有没有那种特别讨厌的人,怎么相处
  • 直接答 高技术 的人都比较纯粹,没有什么特别讨厌的。
  1. 乐观锁和悲观锁,读写锁

  2. 假如一个客户 提需求 做软件, 我这边负责这块业务,这个需求 没有太大意义,我会怎么办? 做不做??

    • 和同时讨论,将建议反馈给客户,最终以客户为准

简历写了 JWT , 问这么理解去中心化

被问2次了,算是重点

JWT的精髓在于:“去中心化”,数据是保存在客户端的。

为了防止用户篡改数据,服务器将在生成对象时添加签名,并对发回的数据进行验证