1、什么是事务?
事务控制就是将一系列操作当成不可拆分的逻辑单元,保证这些操作要么成功要么失败;
事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。
原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability):持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
事务有两种操作:提交,回滚
2.事务的四个特性,四种隔离级别?
第1级别:Read Uncommitted(读取未提交内容)
第2级别:Read Committed(读取提交内容)
第3级别:Repeatable Read(可重读)
第4级别:Serializable(可序列化)
3.spring中有哪些常用的注解?作用是什么?
@Service:用于标注业务层组件。
@Repository:用于标注数据访问组件,即DAO组件。
@Controller:用于标注控制层组件,如Struts中的Action。
@Autowired和@Resource意义一样都是自动注入,一般使用@Resource注解,因为@Resource是J2EE提供的,而@Autowired是Spring提供的。
4.抽象类与接口的区别?
接口是抽象类的一种特例,接口可以继承接口,抽象类可以实现接口。
抽象类可以继承实体类但是实体类中必须有无参的构造函数。
抽象函数中的方法不一定是抽象方法 接口中的方法必须是抽象方法。
抽象类中构造函数,接口中没有构造函数。
抽象类中可以有普通成员变量,接口中没有普通成员变量。
5.final、finally和finalize的区别是什么?
final——修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finally——再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize——方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
6.异常分为几种异常?
分为已检查异常和未检查异常;
未检查异常和已检查异常的最大区别在于:
如果发生了未检查异常,就说明是程序员的问题了,也就是说一个完美的程序员编出来的程序是不可能抛出未检查异常的,抛出的话,说明程序编的
还不够健壮。
比如NullPointerException这个未检查异常,如果抛出的话,必然是没有先判断变量是否等于null
if(user!=null){
user.save();
}
而已检查异常如IOException,程序员如果想要一辈子不让程序抛出它是不可能的,因为没法控制网络的链接一直保持有效,你可以把网线做的很坚固,但是人家电信那出故障了,一样还是要抛出这个异常。
所以已检查异常是不可控的,所以在程序中一定要对他try/catch或throws到上层调用方法
而未检查异常是可控的,只要你有足够的经验,可以让他一辈子不被抛出
7.session和Cookie的区别?
Cookie
Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
Session
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一
个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
8.悲观锁和乐观锁的区别?
悲观锁
(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
乐观锁
(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。
9.java代码实现对象的排序。
//
排序
Collections
.
sort
(
students
,
new
Comparator
<
Student
>
() {
@Override
public int
compare
(
Student
o1
,
Student
o2
) {
return
(o2.yingYu+o2.shuXue+o2.yuWen) - (o1.yingYu+o1.shuXue+o1.yuWen);
}
})
;
10.java的反射机制;
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
11.什么是线程?
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。