您的位置:首页 > 职场人生

java学习——java面试【事务、锁、多线程】资料整理

2017-01-08 17:22 405 查看
成长之路,一起走!总结一些知识,方面自己学习,也方面热爱学习的伙伴们可以更好的成长!

项目直接是静态的Html,下载后可以直接访问!

地址:https://github.com/dufyun/kuyu/tree/master/kuyuTechHtml

1、JAVA中有哪些锁的关键字,请分别描述下各自的特点?

http://www.tuicool.com/articles/NnQjyq

http://blog.csdn.net/smcwwh/article/details/7193666

(1)Sychronized 同步,并发锁
可以加在方法和代码块上,但是要注意区分 “static”
(2)java.util.concurrent.locks下的锁实现同步
a:可重入的锁ReentrantLock
使用Lock的时候,lock与unlock一定要配对。
b:可重入的读写锁ReentrantReadWriteLock
没有writer,读取锁可以由对个reader线程同时保持,而写入锁定是独占的。


2、synchronized有哪些用法,请举例说明?

可以对方法和代码代码块进行同步,用法对类或者对象上锁。同步!


3、什么是死锁,死锁发生的条件有哪些,请用文字以及图解说明?

至少两个线程等待对方持有的锁,无限的循环下去!


4、死锁如何避免,可用代码举例说明?

(1)主要原因是嵌套封锁的使用!
(2)无限等待对方持有的锁,让等待时间有个上限。
(3)设计代码的时候,程序每次只能获取一个锁。


5、活锁和饥饿如何理解,可用文字及图解说明?

活锁和锁么有太大关系,是一种形象的比喻。
饥饿:一个线程因为cpu时间被被其他线程全部抢走而得不到cpu运行时间


6、多线程中专门用于处理线程锁的是哪个子包?

java.util.concurrent


7、多线程中如何保证锁对象可以被解锁

finally unlock(); 其他的没有想到!


8、多线程中专门用于处理线程锁的子包与synchronized关键字最大的区别是什么?

synchronized是关键字,线程锁的子包是类。是的类换,就可以更灵活地使用锁的特性!可以被继承等


9、多线程中的锁,应该位于哪个层面?

业务代码层面,service
锁:分对象锁和类锁。 常见的mvc模型中 dao层基本上是不用你去管锁的问题的。数据库基本帮你搞定了。
倒是可以对某些service加一些必要的锁保证业务调用的的一致性。 这是我的理解。


10、两个线程执行的代码片段要实现同步互斥的效果,有什么要求?

java多线程与线程并发二:线程互斥:http://www.cnblogs.com/bailiyi/p/3619983.html

代码片段一次只能被一个线程使用,互斥的线程必须使用同一个对象上锁!
同步是一种更为复杂的互斥,而互斥是一种特殊的同步。

  也就是说互斥是两个线程之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,
  另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)!

  总结:

  互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。
  但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

  同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。
  在大多数情况下,同步已经实现了互斥。


11、数据库锁的概念是什么?

对数据库中数据对象进行加锁,防止并发或者多用户操作破坏数据库数据的不一致性。
因为可能存在多个事务同时存取同一数据的情况。


12、数据库锁有哪些分类?

共享锁:多个事务可查看,不能修改
排它锁:只有一个事务封锁,其他不能进入,只能等待X锁释放才能访问。
更新锁:用来锁定修改的资源。防止共享锁导致的死锁现在!
共享锁修改数据两步:获得共享锁,升级为排它锁,在修改数据。


13、数据库锁的粒度体现在哪些方面,各自有什么特点?

小-行:增大并发量,开销也大,维护锁多
大-表:降低并发量,开销低,维护锁少!


14、事务的概念是什么,有哪些基本属性?

数据库管理系统 - 逻辑单位-有限的操作序列!
ACID属性:
Atomicity : 原子性
Consistency:一致性
Isolation:隔离线
Durability:持久性


15、事务有哪几种隔离级别,请从弱到强分别类举说明?

1:Read Uncommitted(读未提交):一个事务可以读取另一个未提交事务的数据。
2:Read Committed(读提交):一个事务要等另一个事务提交后才能读取数据。可以update
3:Repeatable Read(重复读):在开始读取数据(事务开启)时,不再允许修改操作。不可以update,可以insert
4:Serializable(序列化):Serializable 是最高的事务隔离级别,在该级别下,
事务串行化顺序执行,可以避免脏读、不可重复读与幻读。


16、在事务的并发操作中,可能出现的情况是哪些?

脏读,不可重复读,幻读


17、大多数数据库默认的事务隔离级别是哪个?MySql的是否一样,如果不一样请指出?

MySql: Repeatable Read
其他的Sqlservice,oracle : read committed


18、结合Sping谈谈你对事务传播性的理解(文字和图解都可以)?

在ssh开发中,我们一般将事务设置在Service层,当调用service一个方法进行数据库的操作时候
能够保持我们使用的操作在一个事务中。
如果在本service层中除了调用了Dao层方法,还调用其他类的service层方法,
此时必须要保证调用的Service层的方法和我本身的方法在同一事务中,否则不能保证事务的一致性。
此时就出现了事务的传播问题。Spring大多数情况使用 PROPGATION_REQUIRED:如果存在一个事务,
则支持当前事务,没有事务则开启新的事务。


19、Sping的事务控制有哪两个主要特性,请分别简单说明?

传播级别和数据隔离级别!
传播级别定义的是事务的控制范围,事务隔离级别定义的是事务在数据库读写方面的控制范围。


20、Spirng的事务框架设计理念的基本原则是什么?它有哪些事务管理方式,请分别说明下?

理念:让事务管理的关注点与数据访问的关注点相互分离。
方式:
(1)编程式事务
(2)声明式事务


如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页:http://blog.csdn.net/u010648555
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: