面试题

1. java.util.*包的UML结构图。
Collection
¦
¦_List
¦ ¦_LinkedList
¦ ¦_ArrayList
¦ ¦_Vector
¦
¦_Set
¦
¦_Map
¦ ¦_HashMap
¦
¦_Compare,Comparetor
¦
¦_Dictionary
¦ ¦_Hashtable
¦_ ...

2.Vector和ArrayList、LinkedList区别 Hashtable 和 HashMap之间的区别
LinkedList内部以链表形式存储数据
ArrayList内部以数组形式存储数据。
Vector同ArrayList,不过它与ArrayList比较起来是thread-safe的。
Hashtable是继承了Dictionary,是线程安全的。HashMap实现了Map接口,不是线程安全的。
如何保证线程安全的?每个修改容器中数据的操作都是同步的(synchronized),因此保证了线程安全。

3.String、StringBuffer,StringBuilder之间区别。
String是长度不可变的,StringBuffer和StringBuilder长度都是可以变化的。
StringBuffer是线程安全的,StringBuilder不是线程安全的。

4.介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?
Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)
Map提供key到value的映射

5.多线程有几种表示方法,都是什么?同步有几种实现方法,都是什么?
多线程有两种实现方法。一种是继承Thread类,一种是实现Runnable接口!
同步有两种方法。一种同步方法,一种同步代码!分别是synchronized,wait与notify

6.Java中的异常处理机制的简单原理和应用~~
JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发 NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用 throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。
eg:第一种
  
class Test{
public int devide(int x ,int y) throws Exception{ //
int result = x/y;
return result;
}
}
class TestException{
public static void main(String[] args){
try{
new Test().devide(3,0);
}catch(Exception e){
System.out.println(e.getMessage());//虽然Exception除了Constructor之外没有其它的函数,
//但它继承了Throwable类.
}
System.out.println("Program running here");
}
}

当编写Test class不知道它是否抛出异常时,可以在devide methods方法后添加 throws Exception 就可以..而在TestException中必须处理抛出的异常.
eg:第二种
如果自己定义异常类,必须继承Exception,也就是它的子类.
 class Test{
public int devide(int x ,int y) throws Exception{ //
if(y < 0)
throw DevideMyMinusException("devide is" + y);
int result = x/y;
return result;
}
}
class DevideMyMinusException extends Exception{
public DevideMyMinusException (String msg){
super(msg); //调用父类(Exception)的Construtor,主函数getMessage()输出自定义的异常:"devide is..."
}
}

eg.第三种
可以抛出多个异常类.
 class Test{
public int devide(int x ,int y) throws ArithmeticException,DevideMyMinusException{ //
if(y < 0)
throw new DevideMyMinusException("devide is" + y);
int result = x/y;
return result;
}
}
class DevideMyMinusException extends Exception{
public DevideMyMinusException (String msg){
super(msg);
}
}

class TestException{
public static void main(String[] args){
try{
new Test().devide(3,-1);
}catch(ArithmeticException e){
System.out.println("program running into ArithmeticException ");
e.printStackTrace();
}catch(DevideMyMinusException e){
System.out.println("program running into DevideMyMinusException");
e.printStackTrace();
}catch(Exception e){
System.out.println(e.getMessage)
)finally{
System.out.println("finally running");//不管程序发生异常没有,finally代码块都要执行.
}


System.out.println("Program running here");
}
}

a.程序根据异常类型的匹配.自动进入相应的catch语句.Exception应放在其它异常语句后,因为他们都继承Exception ,其它异常要放在后面,就没有什么意义了.
b.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 会执行,而且在return 前执行.
c.什么时候finally里的代码不会执行呢? 当出现System.exit(0);时,它不会执行,程序会退出.

7.同步方法 和 同步块 有什么不同
同步方法就是调用某方法的时候获得该对象的对象锁(当然如果是同步静态方法获得的就是类锁),而同步块是在调用某方发的时候,执行到该方法的同步块时获得某个对象的对象锁.大体上差不多,要注意同步块可以指定获得某对象锁,而同步方法获得的对象锁只能是该方法的拥有者对象本身的对象锁

8.PreparedStatement和Statement
数据库在执行sql语句的时候如果使用PreparedStatement语句会有一点优势:因为数据库会PreparedStatement语句进行预编译,下次执行相同的sql语句时,数据库端不会再进行预编译了,而直接用数据库的缓冲区,提高数据访问的效率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值