大厂最爱问的97道面试题——基础篇②

悲观锁 乐观锁

乐观锁 悲观锁

是一种思想。可以用在很多方面。

比如数据库方面。

悲观锁就是for update(锁定查询的行)

乐观锁就是 version字段(比较跟上一次的版本号,如果一样则更新,如果失败则要重复读­

比较­写的操作。)

JDK方面:

悲观锁就是sync

乐观锁就是原子类(内部使用CAS实现)

本质来说,就是悲观锁认为总会有人抢我的。

乐观锁就认为,基本没人抢。

CAS 乐观锁

乐观锁是一种思想,即认为读多写少,遇到并发写的可能性比较低,所以采取在写时先读出

当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重

复读­比较­写的操作。

CAS是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败。

CAS顶多算是乐观锁写那一步操作的一种实现方式罢了,不用CAS自己加锁也是可以的。

ABA 问题

ABA:如果另一个线程修改V值假设原来是A,先修改成B,再修改回成A,当前线程的CAS

操作无法分辨当前V值是否发生过变化

乐观锁的业务场景及实现方式

乐观锁(Optimistic Lock):

每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的时候都不会进行加锁,

但是在更新数据的时候需要判断该数据是否被别人修改过。如果数据被其他线程修改,则不

进行数据更新,如果数据没有被其他线程修改,则进行数据更新。由于数据没有进行加锁,

期间该数据可以被其他线程进行读写操作。

乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可

能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量

的查询操作,降低了系统的吞吐量。

Arraylist 与 LinkedList 区别

Arraylist:

优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查

询操作效率会比较高(在内存里是连着放的)。

缺点:因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低。

LinkedList:

优点:LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等

一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势。LinkedList 适

用于要头尾操作或插入指定位置的场景

缺点:因为LinkedList要移动指针,所以查询操作性能比较低。

适用场景分析:

当需要对数据进行对此访问的情况下选用ArrayList,当需要对数据进行多次增加删除修改时

采用LinkedList。

ArrayList 与 Vector 区别

大厂最爱问的97道面试题——基础篇②

关注,私信获取更多Java技术资料免费分享

Vector有四个构造方法:

大厂最爱问的97道面试题——基础篇②

关注,私信获取更多Java技术资料免费分享

大厂最爱问的97道面试题——基础篇②

关注,私信获取更多Java技术资料免费分享

ArrayList和Vector都是用数组实现的,主要有这么三个区别:

1. Vector是多线程安全的,线程安全就是说多线程访问同一代码,不会产生不确定的结

果。而ArrayList不是,这个可以从源码中看出,Vector类中的方法很多有synchronized

进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;

2. 两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是

不同。

3. Vector可以设置增长因子,而ArrayList不可以。

4. Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。

适用场景分析:

1. Vector是线程同步的,所以它也是线程安全的,而ArrayList是线程异步的,是不安全

的。如果不考虑到线程的安全因素,一般用ArrayList效率比较高。

2. 如果集合中的元素的数目大于目前集合数组的长度时,在集合中使用数据量比较大的数

据,用Vector有一定的优势。

重载和重写的区别

override(重写)

1. 方法名、参数、返回值相同。

2. 子类方法不能缩小父类方法的访问权限。

3. 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

4. 存在于父类和子类之间。

5. 方法被定义为final不能被重写。

overload(重载)

1. 参数类型、个数、顺序至少有一个不相同。

2. 不能重载只有返回值不同的方法名。

3. 存在于父类和子类、同类中。

1. 参数类型、个数、顺序至少有一个不相同。

2. 不能重载只有返回值不同的方法名。

3. 存在于父类和子类、同类中。

大厂最爱问的97道面试题——基础篇②

关注,私信获取更多Java技术资料免费分享

大厂最爱问的97道面试题——基础篇②

关注,私信获取更多Java技术资料免费分享

关于面试题系列,每日更新。

完整系列面试题+Q 2118797017

大厂最爱问的97道面试题——基础篇②

关于面试题系列,每日更新。完整系列面试题+Q2118797017

大厂最爱问的97道面试题——基础篇②

关于面试题系列,每日更新。完整系列面试题+Q2118797017

大厂最爱问的97道面试题——基础篇②

关于面试题系列,每日更新。完整系列面试题+Q2118797017

大厂最爱问的97道面试题——基础篇②

关于面试题系列,每日更新。完整系列面试题+Q2118797017

大厂最爱问的97道面试题——基础篇②

关于面试题系列,每日更新。完整系列面试题+Q2118797017

大厂最爱问的97道面试题——基础篇②

关于面试题系列,每日更新。完整系列面试题+Q2118797017

大厂最爱问的97道面试题——基础篇②

关于面试题系列,每日更新。完整系列面试题+Q2118797017

大厂最爱问的97道面试题——基础篇②

关于面试题系列,每日更新。完整系列面试题+Q2118797017


分享到:


相關文章: