Java初级程序员面试总结(三)--Lock篇

Java初级程序员面试总结(三)

引言:
我是一个菜鸟程序员,坐标HZ,面试总结系列将无期更新,有疑问的朋友可以留言
Q1: 你知道Java有哪些锁?
Answer: 乐观锁和悲观锁.乐观锁是CAS(CompareAndSwap).悲观锁是Lock锁,偏向锁,轻量锁,重量锁这些.(悲观锁太多了,我记不全,sync不是悲观锁,它有4种状态,第一种是自旋是乐观锁,其他的是悲观锁)–这题欢迎水友补充
Q2: 你知道Lock锁和Sync锁的区别吗?
Answer: Lock锁是API级别的.Lock锁的范围是锁代码块的,在其锁的代码块中出现异常时,会死锁,需要在finaily中unlock手动释放锁.Lock锁可以指定为读锁或写锁.Lock锁可以中断.可以调用tryLock获取锁,并可指定等待获取时间.Sync是JVM级别的.Sync锁的范围是锁代码块,static方法,方法.在锁的范围内出现异常,不会死锁,手动释放锁.不可手动指定为读锁.不可以中断.获取锁需要其他线程释放锁.
Q3: 你知道数据库有哪些锁吗?
Answer: 乐观锁和悲观锁.乐观锁是CAS(CompareAndSwap).悲观锁是读锁和写锁…写锁分为行锁,表锁,页面锁.innodb默认是行锁,MyISAM默认是表锁,Memory默认也是表锁.行锁会在无索引或索引数据占其数据库的大部分时升级成表锁.行锁和页面锁会死锁,开销大.表锁不会死锁,开销小.
Q4: 你知道分布式锁有哪些吗?
Answer: Redis锁,Zookeeper锁,数据库锁.Redis锁使用setnx进行,基于Redis单线程,进行原子性操作设置,如果存在则在锁定状态,如果不存在则不在锁住状态.可以设置过期时间,到期释放锁防止死锁.Redis挂了时,会进行死锁.Zookeeper锁,基于Zookeeper创建节点,按0,1,2…顺序进行.创建了最小的节点,则该节点在锁定状态,如果该节点删除,则解锁.宕机时,不会死锁.


欢迎留言补充,这里简单介绍了锁的种类,面试最好能结合项目应用回答

你可能感兴趣的:(Java,java,面试,多线程)