最近在准备面试,所以基础回顾中 。。。 不断更新
1. 抽象类和接口的区别
@1 子类只能继承一个抽象类作为父类,但是可以实现很多歌接口,用逗号隔开
@2 抽象类可以定义 public protected package private 的静态非静态 ,final 非 final 属性 。但接口的属性必须是public static final
2. int 与 Integer 的区别
@1 int 是基本类型32位长度的整数 , integer是封装类
@2 int 存储在虚拟机栈中,integer 对象存储在堆中。
注意:Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)
3. String 和StringBuffer 和 StringBuilder 的区别
@1 String 是immutable的,内部private final char[] ;
StringBuilder 内部char[]
StringBuffer 内部 private transient char[] 内部方法均为sychonized
@2 只有StringBuffer 是线程安全的
4. HashMap和Hashtable的区别
@1 HashMap可以存放 null
Hashtable不能存放null
@2 HashMap不是线程安全的类
Hashtable是线程安全的类
@3 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
@4 Hashtable数组 + 链表方式存储
HashMap 数组+链表/红黑树
原文链接: Javarevisited 翻译: ImportNew.com - 唐小娟
译文链接: http://www.importnew.com/7010.html
5.sleep() 和 wait() 有什么区别
sleep 是Thread类的方法,指的是当前线程暂停。
wait 是Object类的方法, 指的占用当前对象的线程临时释放对当前对象的占用,以使得其他线程有机会占用当前对象。 所以调用wait方法一定是在synchronized 中进行
6. lock 与 synchronized
@1. Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,Lock是代码层面的实现。
@2. Lock可以选择性的获取锁,如果一段时间获取不到,可以放弃。synchronized不行,会一根筋一直获取下去。 借助Lock的这个特性,就能够规避死锁,synchronized必须通过谨慎和良好的设计,才能减少死锁的发生。
@3. synchronized在发生异常和同步块结束的时候,会自动释放锁。而Lock必须手动释放, 所以如果忘记了释放锁,一样会造成死锁。