java面试过关宝典.docx
《java面试过关宝典.docx》由会员分享,可在线阅读,更多相关《java面试过关宝典.docx(11页珍藏版)》请在冰豆网上搜索。
java面试过关宝典
1.finalfinallyfinalize什么区别
答:
final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。
因此一个类不能既被声明为abstract的,又被声明为final的。
将变量或方法声明为final,可以保证它们在使用中不被改变。
被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
被声明为final的方法也同样只能使用,不能重载
finally-再异常处理时提供finally块来执行任何清除操作。
如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。
finalize-方法名。
Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是在Object类中定义的,因此所有的类都继承了它。
子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。
finalize()方法是在垃圾收集器删除对象之前对这个对象调用的
2.AnoymouseInnerclass(匿名内部类)是否可以继承其他类是否可以实现其他接口
答:
不能继承类,但可以实现接口
3.&和&&的区别
答:
区别主要答两点:
a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型
b.逻辑操作不会产生短路
4.HashMap和HashTable的区别
答:
就HashMap与HashTable主要从三方面来说。
一.历史原因:
Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现
二.同步性:
Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:
只有HashMap可以让你将空值作为一个表的条目的key或value
5.重写和重载的区别
答:
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型
6.set元素是不能重复的,那么用什么方法来区分?
用==或者用equals()它们有何去区别
答:
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。
equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象,equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
7.error和exception区别
答:
error 表示恢复不是不可能但很困难的情况下的一种严重问题。
比如说内存溢出。
不可能指望程序能处理这样的情况;exception 表示一种设计或实现问题。
也就是说,它表示如果程序运行正常,从不会发生的情况
8.给出一个runtimeException
答:
NullPointerException、IOExcpetion、ClassNotFoundException、FileNotFoundException
ArrayIndexOutOfBoundException、NumberFormatException、SQLException、ClassCastException
9.abstractclass和interface
答:
声明方法的存在而不去实现它的类被叫做抽象类(abstractclass),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。
不能创建abstract类的实例。
然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。
不能有抽象构造函数或抽象静态方法。
Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。
取而代之,在子类中实现该方法。
知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。
在接口中,所有方法都是抽象的。
多继承性可通过实现这样的接口而获得。
接口中的所有方法都是抽象的,没有一个有程序体。
接口只可以定义staticfinal成员变量。
接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。
当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。
然后,它可以在实现了该接口的类的任何对象上调用接口的方法。
由于有抽象类,它允许使用接口名作为引用变量的类型。
通常的动态联编将生效。
引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口
10.list实现类有哪些?
并按照存储结构,机制简单说一下
答:
ArrayList和LinkedList
ArrayList顺序结构,执行查询较快,执行增删较慢
LinkedList链表结构,执行增删较快,执行查询较慢
11.在Hibernate应用中Java对象的状态有哪些?
答:
瞬时、持久和游离
刚实例化的对象,存了数据,并未和数据库建立连接时对象状态瞬时的
瞬时对象经过save或者将数据库中数据查询放入实体类中,此时该对象状态时持久的
持久对象在数据库连接关闭后,转换为游离状态
游离状态的对象经过update操作后,转换为持久状态
持久对象经过delete操作后,转换为瞬时状态
12.简述下inverse和cascade的作用
答:
cascade级联操作,可以级联save-update、delete、all、none
Inverse在级联操作时控制权由谁管理,true-由外键方管理,false-由主键方管理
13.什么是AOP,作用是什么
答:
面向切面编程:
将程序中公共部分提取出来,通过配置文件切入到业务逻辑代码中
14.写出一个排序方式
答:
冒泡、插入
15.使用cookie的好处?
答:
在客户端可以较长时间存储数据,只要在有效期内通过本机访问,都可以使用该数据
安全性较低
1、java中是否可以多重继承,如果不能用什么代替?
答:
不可以,使用接口替代
2.你对jndi的理解
答:
java命名和目录接口,即通过执行名称找到指定的资源,此资源可在web服务器上配置
3.javaGUI有哪些,特点是什么?
答:
图形用户界面,awt和swing
4垃圾回收的机制是什么?
能否手动回收?
答:
System.GC()方法或者finalize方法手动回收;默认是自动垃圾回收
5.异常机制的原理?
答:
6关于基线的理解
答:
4、事务是什么?
有什么作用?
Spring事务如何配置?
(1):
事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。
这些操作要么都做,要么都不做,是一个不可分割的工作单位。
通过事务,SQLServer能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。
事务通常是以BEGINTRANSACTION开始,以COMMIT或ROLLBACK结束。
(2):
事务通常是以BEGINTRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT表示提交,即提交事务的所有操作。
具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态。
(3)统观spring事务,围绕着两个核心PlatformTransactionManager和TransactionStatus
spring提供了几个关于事务处理的类:
TransactionDefinition//事务属性定义
TranscationStatus//代表了当前的事务,可以提交,回滚。
PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。
一般事务定义步骤:
TransactionDefinitiontd=newTransactionDefinition();
TransactionStatusts=transactionManager.getTransaction(td);
try
{//dosth
transactionMmit(ts);
}
catch(Exceptione){transactionManager.rollback(ts);}
spring提供的事务管理可以分为两类:
编程式的和声明式的。
编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。
编程式主要使用transactionTemplate。
省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.
voidadd()
{
transactionTemplate.execute(newTransactionCallback(){
pulicObjectdoInTransaction(TransactionStatusts)
{//dosth}
}
}
声明式:
使用TransactionProxyFactoryBean:
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED,readOnly
围绕Poxy的动态代理能够自动的提交和回滚事务
org.springframework.transaction.interceptor.TransactionProxyFactoryBean
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。
这是最常见的选择。
PROPAGATION_SUPPORTS--支持