Java并发机制的底层实现原理

本文最后更新于:2022年7月11日 晚上

volatile的应用和原理

synchronized 的原理和应用

synchronized是重量级锁的一个表现形式。

synchronized 通常被称为重量级锁,因为获得锁和释放锁会进行上下文切换,需要耗费资源,为了减少性能消耗,Java 1.6 引入了偏向锁和轻量级锁,锁的粒度更加地细了,锁会根据需求不断进行升级,直到升级为重量级锁。


面试问题

Q:
多态–》引用—》强软弱虚引用—》

String对象都存在堆上吗?

String对象为什么是不可变的?

final关键字的作用?

StringBuffer和StringBulder的区别?

synchronized 的含义?
1
int i = 1;
i++;是线程安全的吗?

计网三次握手

HTTP 和 HTTPS的区别

CA是做什么的?

MySQL数据库中的事务是什么?
从ACID来讲:
A原子性:事务的一段操作,要么全部成功,要么全部失败
C一致性:例如,A账户向B账户转账,保证AB账户的总额是不变的。无论转账操作进行成功与否。
I隔离性:多个事务,b事务对数据库的修改,不干扰a事务的正常运行。
D持久性:事务操作会被一些日志文件给记录下来。

什么是分布式事务呢?你是怎么理解分布式事务的?
个人觉得:分布式事务就是 多个服务器,例如主从数据库,在多连接的条件下保证数据的一致性。

主从数据库的数据是相同的吗?
最终的结果,数据是要保证一致的。

什么是分布式事务中的数据一致性呢?

如何保证数据的强一致性?

Spring中的事务传播机制?

事务的隔离级别:
4个级别:
读未提交
读已提交
可重复读
事务的串行化:所有的事务来了都要进行排队,如果一条事务A要执行很久,那后面的事务都要排队。

MySQL用的是可重复读的隔离级别

可重复读的级别 可以解决 幻读问题吗?
先解释一下什么是幻读。
个人认为,幻读是指事务A读到的两次读取结果不一样,因为这两次读取之间有事务B往表中新插入insert了一列。

幻读:幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读可能发生在update,delete操作中,而幻读发生在insert操作中。

幻读两种情况:select和update读取,快照读和当前读,解决幻读的形式是不一样的。

不可重复读是 某一条或多条数据的内容前后不一致,但数据条数相同。

乐观锁:
乐观锁认为 进行的操作不会有多线程冲突的。

悲观锁:
认为 每一次操作都会产生线程冲突。

如何根据具体场景选择乐观锁和悲观锁:
读多,用乐观锁。
写多,用悲观锁。

在数据库中设计乐观锁,你会如何设计呢?

数据库的悲观锁是怎么实现的呢?

StringBulder的capacity和length的区别

作者:宁愿
链接:https://juejin.cn/post/6844903799534911496
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!