1. @Resource和@Autowired区别?
- @Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
- @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
@Autowired默认按类型装配(这个注解是属于spring),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) 。
2. 请写出Spring中基于xml的事务配置过程?
1.配置事务管理器
<bean id="tx" class="DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2.配置事务特性
<tx:advice id="txAdvice" transaction-manager="tx">
<tx:attributes>
<td:method name="delete*" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
3.配置事务切面
<aop:config>
<aop:pointcut expression="" id="xx">
<aop:advisor adivce-ref="txAdvice" pointcut-ref='xx'>
</aop:config>
3. HashMap 与 HashTable 有什么区别?
- HashMap几乎可以等价于HashTable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键(key)和值(value),而HashTable则不行)。
- HashMap是非synchronized,而HashTable是synchronized,这意味着HashTable是线程安全的,多个线程可以共享一个HashTable;而如果没有正确的同步的话,多个线程是不能共享HashTable的。Java 5 提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
- 另外一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而HashTabled enumerator迭代器不是fail-fast的。所以当有其他线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出 ConcurrentModificationException 异常。但这并不是一个一定发生的行为,要看JVM,这条同样也是 Enumeration 和 Iterator 的区别。
- 由于HashTable是线程安全的,也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好于HashTable。
- HashMap 不能保证随着时间的推移Map中的元素次序是不变的。
4. 创建线程的方式有几种?
- 继承Thread类
- 实现Runnable
- 实现Callable
- 线程池
5. Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思? 重写和重载的区别?
重写:继承,
重载:同一类中定义多个同名的方法,参数列表要不同
6. 接口和抽象类的区别是什么?
-
抽象类:抽象类是指这个对象是什么
-
接口:接口是指这个对象能做什么
举例: 定义一个狗类(抽象类):哈士奇,金毛都属于狗类(实现类)狗:睡觉,拆家…可以定义一个接口,让实现类去实现接口
-
因此在Java语言中,一个类只能继承一个类(抽象类)(正如狗不可能同时是生物和非生物),但是接口可以多继承,一个类能够实现多个接口。
-
接口中的所有方法是抽象的(abstract修饰)而抽象类是声明方法而不去实现它的类。
-
接口可以多继承,抽象类单继承
-
接口定义方法,不能实现,而抽象类可以实现部分方法
-
接口中的基本数据类型为static,而抽象类不是。
注:
抽象类的功能远超过接口,但是,定义抽象类的代价比较高。因为高级语言来说(从实际设计出发也是),每个类只能继承一个类。在这个类中你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是接口是针对一个动作的实现,而且一个类能够继承多个接口,在设计中难度会相对降低。
7. Java中Exception和Error有什么区别?
- Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。
- Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。
- Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。
- Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。
8. throw和throws有什么区别?
throw:产生异常
throws:抛出异常
9. sql语句分类是哪些?
DQL
DML
DDL
DCL
10. delete、drop、truncate区别?
delete删除数据
truncate删除数据,表内存结构
drop删除表,删库