你真的需要分布式锁吗?
用到分布式锁说明遇到了多个进程共同访问同一个资源的问题。一般是在两个场景下会防止对同一个资源的重复访问:
-
**提高效率。**比如多个节点计算同一批任务,如果某个任务已经有节点在计算了,那其他节点就不用重复计算了,以免浪费计算资源。不过重复计算也没事,不会造成其他更大的损失。也就是允许偶尔的失败。
-
**保证正确性。**这种情况对锁的要求就很高了,如果重复计算,会对正确性造成影响。这种不允许失败。
引入分布式锁势必要引入一个第三方的基础设施,比如 MySQL,Redis,Zookeeper 等。这些实现分布式锁的基础设施出问题了,也会影响业务,所以在使用分布式锁前可以考虑下是否可以不用加锁的方式实现?不过这个不在本文的讨论范围内,本文假设加锁的需求是合理的,并且偏向于上面的第二种情况,为什么是偏向?因为不存在 100% 靠谱的分布式锁,看完下面的内容就明白了。
Java基础
1.JAVA 中的几种数据类型是什么,各自占用多少字节。
2.String 类能被继承吗,为什么。
3. 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
4. String 属于基础的数据类型吗?
5.Java 中操作字符串都有哪些类?它们之间有什么区别?
6.Java 中 IO 流分为几种?
7.BIO、NIO、AIO 有什么区别?
8.用过哪些 Map 类,都有什么区别,HashMap 时线程安全的吗,并发下使用的 Map 是什么,他们的内部原理分别是什么,比如存储方法,hashcode,扩容,默认容量等。
9. 如何将字符串反转?
10.抽象类必须要有抽象方法吗?
11.普通类和抽象类有哪些区别?
12.抽象类能使用 final 修饰吗?
13.ArrayList 和 LinkedList 有什么区别?
14