成长之路,一起走!总结一些知识,方面自己学习,也方面热爱学习的伙伴们可以更好的成长!
项目直接是静态的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、结合Spring谈谈你对事务传播性的理解(文字和图解都可以)?
在ssh开发中,我们一般将事务设置在Service层,当调用service一个方法进行数据库的操作时候
能够保持我们使用的操作在一个事务中。
如果在本service层中除了调用了Dao层方法,还调用其他类的service层方法,
此时必须要保证调用的Service层的方法和我本身的方法在同一事务中,否则不能保证事务的一致性。
此时就出现了事务的传播问题。Spring大多数情况使用 PROPGATION_REQUIRED:如果存在一个事务,
则支持当前事务,没有事务则开启新的事务。
19、Spring的事务控制有哪两个主要特性,请分别简单说明?
传播级别和数据隔离级别!
传播级别定义的是事务的控制范围,事务隔离级别定义的是事务在数据库读写方面的控制范围。
20、Spring的事务框架设计理念的基本原则是什么?它有哪些事务管理方式,请分别说明下?
理念:让事务管理的关注点与数据访问的关注点相互分离。
方式:
(1)编程式事务
(2)声明式事务
如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!
欢迎访问我的csdn博客,我们一同成长!
“不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!”