卩s团团丨已回答
下面列举一下常出现的三种死锁情景:
1.有一个用户A访问表A,已经锁住了A表,但是此时A又要去查询B表:同时用户B查询B表,而且也已经锁住了B表,此时B表也想去查询A表,由于此时A表已经被用户A锁,B表也已经用户B锁住,所以就会造成死锁。
2.用户A查询一条纪录,然后修改该条纪录;这时用户B修改该条纪录,这时用户A的事务里锁的性质由查询的共享锁企图上升到独占锁,而用户B里的独占锁由于A 有共享锁存在所以必须等A释放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。这种死锁比较隐蔽,但在稍大点的项 目中经常发生。如在某项目中,页面上的按钮点击后,没有使按钮立刻失效,使得用户会多次快速点击同一按钮,这样同一段代码对数据库同一条记录进行多次操 作,很容易就出现这种死锁的情况。
3.如果在事务中执行了一条不满足条件的update语句,则执行全表扫描,把行级锁上升为表级锁,多个这样的事务执行后,就很容易产生死锁和阻塞。类似的情 况还有当表中的数据量非常庞大而索引建的过少或不合适的时候,使得经常发生全表扫描,最终应用系统会越来越慢,最终发生阻塞或死锁
Session和cookie都是会话(session)跟踪技术.cookie通过在客户端记录信息确定用户身份,而session是通过在服务器端记录信息确定用户身份.但是session的实现依赖于cookie机制来保存JESESSIONID(session的唯一标识,需要存在客户端)区别:cookie的数据存储在...
限定线程的个数,不会导致由于线程过多导致系统运行缓慢或崩溃线程池每次都不需要去创建和销毁,节约了资源线程池不需要每次都去创建,相应时间更快.
使用字节流,因为我们要拷贝的文件,不好确定里面是否全是字符,如果文件中包含图片之类的字节时,就需要使用字节流.所以,我们一般是用字节流拷贝文件.
运行速度:StringBuilder>StringBuffer>String线程安全:StringBuilder是线程不安全的,而StringBuffer是线程安全的如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized...
封装:在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法).例如电脑,抽象:抽象就是将一类实体的共同特性抽象出来,封装在一个抽象类中,所以抽象在面向对象语言是由抽象类来体现的。比如人.classPerson{}继承:继承就像是我们现实生活中的父...
Solr使用的是LuceneAPI实现的全文检索。全文检索本质上是查询的索引。而数据库中并不是所有的字段都建立的索引,更何况如果使用like查询时很大的可能是不使用索引,所以使用solr查询时要比查数据库快。
单点登录的核心是如何在多个系统之间共享身份信息
对象关系映射(ObjectRelationalMapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单来说,将程序中的兑现自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的反感是采用硬编码的方式(jdbc操作sql方式),为每一种可能的数据库访问操作提供单...
通过动态配置方式,可以在执行Action的方法前后,加入相关逻辑,完成业务.struts2中的功能,都是通过系统拦截器实现的.比如:参数处理,文件上传,字符编码.当然,我们也可以自定义拦截器使用场景:用户登陆判断,在执行Action的前面判断是否已经登陆,如果没有登陆则跳转到登陆页面;用户权限的判断,在执行Ac...
MVC全名是modelviewController,是模型(model)—视图(view)—控制器(Controller)的缩写,是一种软件设计典范.最简单的,最经典的就是jsp(view)+servlet(Controller)+javabean(model)1.当控制器收到来自用户的...