java 面试题

1 同步方法和同步代码块的区别是什么?

答: 同步方法的锁是当前类的对象,同步代码块的锁可以自定义,同步方法锁的范围较大,对性能的影响比较大,因此代码中尽量用同步代码块。

 

2 什么是死锁(deadlock)?

答:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去

3 Iterator和ListIterator的区别是什么?


下面列出了他们的区别:
Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

 

4 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?

快速失败:当你在迭代一个集合的时候,如果有另一个线程正在修改你正在访问的那个集合时,就会抛出一个ConcurrentModification异常。

    在java.util包下的都是快速失败。
安全失败:你在迭代的时候会去底层集合做一个拷贝,所以你在修改上层集合的时候是不会受影响的,不会抛出ConcurrentModification异常。
    在java.util.concurrent包下的全是安全失败的。
 
5 HashMap 的工作原理
  答 : HashMap的底层是用hash数组和单向链表实现的 ,当调用put方法是,首先计算key的hashcode,定位到合适的数组索引,然后再在该索引上的单向链表进行循环遍历用equals比较key是否存在,如果存在则用新的value覆盖原值,如果没有则向后追加。
 
6.hashCode()和equals()方法的重要性体现在什么地方?
Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个不同的键可能会有相同的hash值,因此,可能会被集合认为是相等的。而且,这两个方法也用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是至关重要的。
 
7.数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
  1. Array可以包涵基本类型和对象类型,ArrayList只能包涵对象类型。
  2. Array大小是固定的,ArrayList的大小是动态变化的,
  3. ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
对于基本数据类型,集合使用自动装箱来减少编码的工作量。但是当处理固定大笑的基本数据类型的时候这种方式相对比较慢。
 
8.ArrayList和LinkedList有什么区别?
ArrayList底层是数组,LinkedList底层是链表,ArrayList随机存取速度快,LinkedList插入和删除速度快
posted @ 2017-02-19 13:36  英特费斯  阅读(150)  评论(0编辑  收藏  举报