JAVA集合面试题

JAVA集合面试题
JAVA集合面试题

Java集合框架为Java编程语言的基础,也是Java面试中非常重要的一个知识点。

这里,我列出了一些关于Java集合的重要问题和答案。

1.Java集合框架是什么?说出一些集合框架的长处?

每种编程语言中都有集合。最初的Java版本号包括几种集合类:Vector、Stack、HashTable和Array。

随着集合的广泛使用。Java1.2提出了囊括全部集合接口、实现和算法的集合框架。

在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了非常久。它还包括在Java并发包中,堵塞接口以及它们的实现。

集合框架的部分长处例如以下:

(1)使用核心集合类减少开发成本,而非实现我们自己的集合类。

(2)随着使用经过严格測试的集合框架类。代码质量会得到提高。

(3)通过使用JDK附带的集合类,能够减少代码维护成本。

(4)复用性和可操作性。

2.集合框架中的泛型有什么长处?

Java1.5引入了泛型。全部的集合接口和实现都大量地使用它。泛型同意我们为集合提供一个能够容纳的对象类型,因此。假设你加入其他类型的不论什么元素,它会在编译时报错。这避免了在执行时出现ClassCastException。由于你将会在编译时得到报错信息。

泛型也使得代码整洁,我们不须要使用显式转换和instanceOf操作符。

它也给执行时带来长处。由于不会产生类型检查的字节码指令。

3.Java集合框架的基础接口有哪些?

o Collection为集合层级的根接口。

一个集合代表一组对象。这些对象即为它的元素。

Java平台不提供这个接口不论什么直接的实现。

o Set是一个不能包括反复元素的集合。

这个接口对数学集合抽象进行建模。被用来代表集合,就如一副牌。

o List是一个有序集合。能够包括反复元素。

你能够通过它的索引来訪问不论什么元素。List更像长度动态变换的数组。

o Map是一个将key映射到value的对象.一个Map不能包括反复的key:每一个key最多仅仅能映射一个value。

一些其他的接口有Queue、Dequeue、SortedSet、SortedMap和ListIterator。

4.为何Collection不从Cloneable和Serializable接口继承?

Collection接口指定一组对象,对象即为它的元素。怎样维护这些元素由

Collection的详细实现决定。

比如。一些如List的Collection实现同意反复的元素。而其他的如Set就不同意。

非常多Collection实现有一个公有的clone方法。

然而。把它放到集合的全部实现中也是没有意义的。这是由于Collection是一个抽象表现。重要的是实现。

当与详细实现打交道的时候,克隆或序列化的语义和含义才发挥作用。所以,详细实现应该决定怎样对它进行克隆或序列化,或它能否够被克隆或序列化。

在全部的实现中授权克隆和序列化,终于导致更少的灵活性和很多其他的限制。

特定的实现应该决定它能否够被克隆和序列化。

5.为何Map接口不继承Collection接口?

虽然Map接口和它的实现也是集合框架的一部分。但Map不是集合。集合也不是Map。

因此,Map继承Collection毫无意义,反之亦然。

假设Map继承Collection接口,那么元素去哪儿?Map包括key-value对,它提供抽取key或value列表集合的方法,可是它不适合“一组对象”规范。

6.Iterator是什么?

Iterator接口提供遍历不论什么Collection的接口。

我们能够从一个Collection中使用迭代器方法来获取迭代器实例。迭代器代替了Java集合框架中的Enumeration。迭代器同意调用者在迭代过程中移除元素。

7.Enumeration和Iterator接口的差别?

Enumeration的速度是Iterator的两倍,也使用更少的内存。

Enumeration是非常基础的,也满足了基础的须要。可是,与Enumeration相比,Iterator更加安全,由于当一个集合正在被遍历的时候。它会阻止其他线程去改动集合。

迭代器代替了Java集合框架中的Enumeration。

迭代器同意调用者从集合中移除元素,而Enumeration不能做到。

为了使它的功能更加清晰,迭代器方法名已经经过改善。

8.为何没有像Iterator.add()这种方法。向集合中加入元素?

语义不明。已知的是,Iterator的协议不能确保迭代的次序。然而要注意。ListIterator没有提供一个add操作,它要确保迭代的顺序。

9.为何迭代器没有一个方法能够直接获取下一个元素。而不须要移动游标?

它能够在当前Iterator的顶层实现。可是它用得非常少,假设将它加到接口中,每一个继承都要去实现它。这没有意义。

10.Iterater和ListIterator之间有什么差别?

(1)我们能够使用Iterator来遍历Set和List集合,而ListIterator仅仅能遍历List。

(2)Iterator仅仅能够向前遍历。而LIstIterator能够双向遍历。

(3)ListIterator从Iterator接口继承,然后加入了一些额外的功能,比方加入一个元素、替换一个元素、获取前面或后面元素的索引位置。

**********

11.遍历一个List有哪些不同的方式?

List strList = new ArrayList<>();

//使用for-each循环

for(String obj : strList){

System.out.println(obj);

}

//using iterator

Iterator it = strList.iterator();

while(it.hasNext()){

String obj = it.next();

System.out.println(obj);

}

使用迭代器更加线程安全。由于它能够确保,在当前遍历的集合元素被更改的时候。它会抛出ConcurrentModificationException。

12.通过迭代器fail-fast属性,你明确了什么?

每次我们尝试获取下一个元素的时候,Iterator fail-fast属性检查当前集合结构里的不论什么改动。假设发现不论什么改动。它抛出ConcurrentModificationException。Collection中全部Iterator的实现都是按fail-fast来设计的(ConcurrentHashMap和CopyOnWriteArrayList这类并发集合类除外)。

13.fail-fast与fail-safe有什么差别?

Iterator的fail-fast属性与当前的集合共同起作用,因此它不会受到集合中不论什么改动的影响。

Java.util包中的全部集合类都被设计为fail-fast的。而java.util.concurrent中的集合类都为fail-safe的。

Fail-fast迭代器抛出ConcurrentModificationException,而fail-safe迭代器从不抛出ConcurrentModificationException。

14.在迭代一个集合的时候,怎样避免ConcurrentModificationException?

在遍历一个集合的时候,我们能够使用并发集合类来避免ConcurrentModificationException,比方使用CopyOnWriteArrayList。而不是ArrayList。

15.为何Iterator接口没有详细的实现?

Iterator接口定义了遍历集合的方法。但它的实现则是集合实现类的责任。每一个能够返回用于遍历的Iterator的集合类都有它自己的Iterator实现内部类。

这就同意集合类去选择迭代器是fail-fast还是fail-safe的。比方,ArrayList迭代器是fail-fast的。而CopyOnWriteArrayList迭代器是fail-safe的。

16.UnsupportedOperationException是什么?UnsupportedOperationException是用于表明操作不支持的异常。

在JDK类中已被大量运用,在集合框架

java.util.Collections.UnmodifiableCollection将会在全部add和remove操作中抛出这个异常。

17.在Java中,HashMap是怎样工作的?

HashMap在Map.Entry静态内部类实现中存储key-value对。

HashMap使用哈希算法。在put和get方法中。它使用hashCode()和equals()方法。当我们通过传递key-value对调用put方法的时候。HashMap使用Key hashCode()和哈希算法来找出存储key-value对的索引。

Entry存储在LinkedList中,所以假设存在entry。它使用equals()方法来检查传递的key是否已经存在。假设存在,它会覆盖value。假设不存在。它会创建一个新的entry然后保存。

当我们通过传递key调用get方法时,它再次使用hashCode()来找到数组中的索引,然后使用equals()方法找出正确的Entry,然后返回它的值。下面的图片解释了详细内容。

其他关于HashMap比較重要的问题是容量、负荷系数和阀值调整。HashMap 默认的初始容量是32,负荷系数是0.75。

阀值是为负荷系数乘以容量,不管何时我们尝试加入一个entry,假设map的大小比阀值大的时候,HashMap会对map的内容进行又一次哈希。且使用更大的容量。容量总是2的幂。所以假设你知道你须要存储大量的key-value对,比方缓存从数据库里面拉取的数据,使用正确的容量和负荷系数对HashMap进行初始化是个不错的做法。

18.hashCode()和equals()方法有何重要性?

HashMap使用Key对象的hashCode()和equals()方法去决定key-value对的索引。当我们试着从HashMap中获取值的时候,这些方法也会被用到。

假设这些方法没有被正确地实现,在这种情况下,两个不同Key或许会产生同样的hashCode()和equals()输出,HashMap将会觉得它们是同样的,然后覆盖它们。而非把它们存储到不同的地方。

同样的,全部不同意存储反复数据的集合类都使用hashCode()和equals()去查找反复。所以正确实现它们非常重要。

equals()和hashCode()的实现应该遵循下面规则:

(1)假设o1.equals(o2),那么o1.hashCode() == o2.hashCode()总是为true 的。

(2)假设o1.hashCode() == o2.hashCode()。并不意味着o1.equals(o2)会为true。

19.我们能否使用不论什么类作为Map的key?

我们能够使用不论什么类作为Map的key,然而在使用它们之前,须要考虑下面几点:

(1)假设类重写了equals()方法。它也应该重写hashCode()方法。

(2)类的全部实例须要遵循与equals()和hashCode()相关的规则。请參考之前提到的这些规则。

(3)假设一个类没有使用equals(),你不应该在hashCode()中使用它。

(4)用户自己定义key类的最佳实践是使之为不可变的。这样,hashCode()值能够被缓存起来,拥有更好的性能。

不可变的类也能够确保hashCode()和equals()在未来不会改变,这样就会解决与可变相关的问题了。

比方,我有一个类MyKey,在HashMap中使用它。

//传递给MyKey的name參数被用于equals()和hashCode()中

MyKey key = new MyKey('Pankaj'); //assume hashCode=1234

myHashMap.put(key, 'Value');

// 下面的代码会改变key的hashCode()和equals()值

key.setName('Amit'); //assume new hashCode=7890

//下面会返回null,由于HashMap会尝试查找存储同样索引的key。而key已被改变了,匹配失败,返回null

myHashMap.get(new MyKey('Pankaj'));

那就是为何String和Integer被作为HashMap的key大量使用。

20.Map接口提供了哪些不同的集合视图?

Map接口提供三个集合视图:

(1)Set keyset():返回map中包括的全部key的一个Set视图。

集合是受map支持的,map的变化会在集合中反映出来,反之亦然。当一个迭代器正在遍历一个集合时。若map被改动了(除迭代器自身的移除操作以外),迭代器的结果会变为没有定义。

集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear 操作进行元素移除。从map中移除相应的映射。它不支持add和addAll操作。

(2)Collection values():返回一个map中包括的全部value的一个Collection 视图。

这个collection受map支持的。map的变化会在collection中反映出来,反之亦然。当一个迭代器正在遍历一个collection时,若map被改动了(除迭代器自身的移除操作以外),迭代器的结果会变为没有定义。

集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear 操作进行元素移除,从map中移除相应的映射。它不支持add和addAll操作。

(3)Set> entrySet():返回一个map钟包括的全部映射的一个集合视图。

这个集合受map支持的,map的变化会在collection中反映出来。反之亦然。当一个迭代器正在遍历一个集合时,若map被改动了(除迭代器自身的移除操作,以及对迭代器返回的entry进行setValue外),迭代器的结果会变为没有定义。

集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear 操作进行元素移除,从map中移除相应的映射。它不支持add和addAll操作。

**********

21.HashMap和HashTable有何不同?

(1)HashMap同意key和value为null。而HashTable不同意。

(2)HashTable是同步的,而HashMap不是。所以HashMap适合单线程环境,HashTable适合多线程环境。

(3)在Java1.4中引入了LinkedHashMap,HashMap的一个子类,假如你想要遍历顺序,你非常easy从HashMap转向LinkedHashMap,可是HashTable 不是这种。它的顺序是不可预知的。

(4)HashMap提供对key的Set进行遍历。因此它是fail-fast的。但HashTable 提供对key的Enumeration进行遍历,它不支持fail-fast。

(5)HashTable被觉得是个遗留的类。假设你寻求在迭代的时候改动Map,你应该使用CocurrentHashMap。

22.怎样决定选用HashMap还是TreeMap?

对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。然而。假如你须要对一个有序的key集合进行遍历,TreeMap是更好的选择。基于你的collection的大小,或许向HashMap中加入元素会更快。将map换为TreeMap 进行有序key的遍历。

23.ArrayList和Vector有何异同点?

ArrayList和Vector在非常多时候都非常类似。

(1)两者都是基于索引的,内部由一个数组支持。

(2)两者维护插入的顺序,我们能够依据插入顺序来获取元素。

(3)ArrayList和Vector的迭代器实现都是fail-fast的。

(4)ArrayList和Vector两者同意null值。也能够使用索引值对元素进行随机訪问。

下面是ArrayList和Vector的不同点。

(1)Vector是同步的,而ArrayList不是。

然而。假设你寻求在迭代的时候对列表进行改变。你应该使用

CopyOnWriteArrayList。

(2)ArrayList比Vector快。它由于有同步。不会过载。

(3)ArrayList更加通用,由于我们能够使用Collections工具类轻易地获取同步列表和仅仅读列表。

24.Array和ArrayList有何差别?什么时候更适合用Array?

o Array能够容纳基本类型和对象,而ArrayList仅仅能容纳对象。

o Array是指定大小的,而ArrayList大小是固定的。

o Array没有提供ArrayList那么多功能,比方addAll、removeAll和iterator等。

虽然ArrayList明显是更好的选择。但也有些时候Array比較好用。

(1)假设列表的大小已经指定,大部分情况下是存储和遍历它们。

(2)对于遍历基本数据类型,虽然Collections使用自己主动装箱来减轻编码任务,在指定大小的基本类型的列表上工作也会变得非常慢。

(3)假设你要使用多维数组,使用[][]比List>更easy。

25.ArrayList和LinkedList有何差别?

ArrayList和LinkedList两者都实现了List接口,可是它们之间有些不同。

(1)ArrayList是由Array所支持的基于一个索引的数据结构,所以它提供对元素的随机訪问。复杂度为O(1),但LinkedList存储一系列的节点数据。每一个节点都与前一个和下一个节点相连接。所以。虽然有使用索引获取元素的方法,内部实现是从起始点開始遍历,遍历到索引的节点然后返回元素。时间复杂度为O(n)。比ArrayList要慢。

(2)与ArrayList相比,在LinkedList中插入、加入和删除一个元素会更快。由于在一个元素被插入到中间的时候,不会涉及改变数组的大小,或更新索引。

(3)LinkedList比ArrayList消耗很多其他的内存,由于LinkedList中的每一个节点存储了前后节点的引用。

26.哪些集合类提供对元素的随机訪问?

ArrayList、HashMap、TreeMap和HashTable类提供对元素的随机訪问。

27.EnumSet是什么?

java.util.EnumSet是使用枚举类型的集合实现。当集合创建时,枚举集合中的全部元素必须来自单个指定的枚举类型,能够是显示的或隐示的。EnumSet是不同步的,不同意值为null的元素。它也提供了一些实用的方法,比方

copyOf(Collection c)、of(E first,E…rest)和complementOf(EnumSet s)。

28.哪些集合类是线程安全的?

Vector、HashTable、Properties和Stack是同步类,所以它们是线程安全的,能够在多线程环境下使用。

Java1.5并发API包括一些集合类。同意迭代时改动,由于它们都工作在集合的克隆上。所以它们在多线程环境中是安全的。

29.并发集合类是什么?

Java1.5并发包(java.util.concurrent)包括线程安全集合类,同意在迭代时改动集合。

迭代器被设计为fail-fast的,会抛出ConcurrentModificationException。一部分类为:CopyOnWriteArrayList、 ConcurrentHashMap、CopyOnWriteArraySet。

30.BlockingQueue是什么?

Java.util.concurrent.BlockingQueue是一个队列,在进行检索或移除一个元素的时候,它会等待队列变为非空;当在加入一个元素时,它会等待队列中的可用空间。

BlockingQueue接口是Java集合框架的一部分,主要用于实现生产者-消费者模式。我们不须要操心等待生产者有可用的空间。或消费者有可用的对象。由于它都在BlockingQueue的实现类中被处理了。

Java提供了集中BlockingQueue的实现,比方ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue,、SynchronousQueue等。

**********

31.队列和栈是什么,列出它们的差别?

栈和队列两者都被用来预存储数据。java.util.Queue是一个接口,它的实现类在Java并发包中。队列同意先进先出(FIFO)检索元素,但并不是总是这样。Deque 接口同意从两端检索元素。

栈与队列非常类似,但它同意对元素进行后进先出(LIFO)进行检索。

Stack是一个扩展自Vector的类,而Queue是一个接口。

32.Collections类是什么?

Java.util.Collections是一个工具类仅包括静态方法。它们操作或返回集合。它包括操作集合的多态算法,返回一个由指定集合支持的新集合和其他一些内容。这个类包括集合框架算法的方法,比方折半搜索、排序、混编和逆序等。

https://www.360docs.net/doc/c55589068.html,parable和Comparator接口是什么?

假设我们想使用Array或Collection的排序方法时。须要在自己定义类里实现Java提供Comparable接口。

Comparable接口有compareTo(T OBJ)方法,它被排序方法所使用。我们应该重写这种方法,假设“this”对象比传递的对象參数更小、相等或更大时,它返回一个负整数、0或正整数。

可是。在大多数实际情况下,我们想依据不同參数进行排序。

比方。作为一个CEO。我想对雇员基于薪资进行排序。一个HR想基于年龄对他们进行排序。这就是我们须要使用Comparator接口的情景。由于https://www.360docs.net/doc/c55589068.html,pareTo(Object o)方法实现仅仅能基于一个字段进行排序,我们不能依据对象排序的须要选择字段。

Comparator接口的compare(Object o1, Object o2)方法的实现须要传递两个对象參数,若第一个參数比第二个小,返回负整数;若第一个等于第二个。返回0;若第一个比第二个大。返回正整数。

https://www.360docs.net/doc/c55589068.html,parable和Comparator接口有何差别?

Comparable和Comparator接口被用来对对象集合或者数组进行排序。Comparable接口被用来提供对象的自然排序。我们能够使用它来提供基于单个逻辑的排序。

Comparator接口被用来提供不同的排序算法,我们能够选择须要使用的Comparator来对给定的对象集合进行排序。

35.我们怎样对一组对象进行排序?

假设我们须要对一个对象数组进行排序,我们能够使用Arrays.sort()方法。假设我们须要排序一个对象列表,我们能够使用Collection.sort()方法。

两个类都实用于自然排序(使用Comparable)或基于标准的排序(使用Comparator)的重载方法sort()。Collections内部使用数组排序方法,全部它们两者都有同样的性能。仅仅是Collections须要花时间将列表转换为数组。

36.当一个集合被作为參数传递给一个函数时,怎样才干够确保函数不能改动它?

在作为參数传递之前,我们能够使用

Collections.unmodifiableCollection(Collection c)方法创建一个仅仅读集合,这将确保改变集合的不论什么操作都会抛出UnsupportedOperationException。

37.我们怎样从给定集合那里创建一个synchronized的集合?

我们能够使用Collections.synchronizedCollection(Collection c)依据指定集合来获取一个synchronized(线程安全的)集合。

38.集合框架里实现的通用算法有哪些?

Java集合框架提供经常使用的算法实现,比方排序和搜索。Collections类包括这些方法实现。大部分算法是操作List的,但一部分对全部类型的集合都是可用的。部分算法有排序、搜索、混编、最大最小值。

39.大写的O是什么?举几个样例?

大写的O描写叙述的是。就数据结构中的一系列元素而言,一个算法的性能。

Collection类就是实际的数据结构。我们通常基于时间、内存和性能,使用大写的O来选择集合实现。

比方:

样例1:ArrayList的get(index i)是一个常量时间操作,它不依赖list中元素的数量。所以它的性能是O(1)。

样例2:一个对于数组或列表的线性搜索的性能是O(n),由于我们须要遍历全部的元素来查找须要的元素。

40.与Java集合框架相关的有哪些最好的实践?

(1)依据须要选择正确的集合类型。比方,假设指定了大小,我们会选用Array 而非ArrayList。

假设我们想依据插入顺序遍历一个Map,我们须要使用TreeMap。假设我们不想反复。我们应该使用Set。

(2)一些集合类同意指定初始容量。所以假设我们能够预计到存储元素的数量,我们能够使用它,就避免了又一次哈希或大小调整。

(3)基于接口编程,而非基于实现编程。它同意我们后来轻易地改变实现。

(4)总是使用类型安全的泛型。避免在执行时出现ClassCastException。

(5)使用JDK提供的不可变类作为Map的key,能够避免自己实现hashCode()和equals()。

(6)尽可能使用Collections工具类,或者获取仅仅读、同步或空的集合,而非编写自己的实现。

它将会提供代码重用性,它有着更好的稳定性和可维护性。

1、Collection和Collections的差别

java.util.Collection 是一个集合接口,Collection接口在Java类库中有非常多详细的实现。比如List、Set

java.util.Collections 是针对集合类的一个帮助类,它提供了一系列的静态方法实现对各种集合的搜索、排序、线程安全化等操作。

2、array 和 arraylist 的区别?

· Array 类似 object 集合类型,大小固定

· Arraylist 是同质和异质元素的集合

3、Iterator、ListIterator 和 Enumeration的区别?

· Enumeration 接口在 Java1.2 版本开始有,所以 Enumeration 是合法规范的接口

· Enumeration 使用 elements() 方法

· Iterator 对所有 Java 集合类都有实现

· Iterator 使用 iterator 方法

· Iterator 只能往一个方向前进

· ListIterator 仅仅对 List 类型的类实现了

· ListIterator 使用 listIterator ()方法

4、Java 中 Set 与 List 有什么不同?

· Set 是一个不允许重复元素存在的集合

· Set 没有索引

· Set 仅仅允许一个 null 值

· Set 有类: HashSet 、 LinkedHashMap 、 TreeSet

· List 有索引

· List 允许 N 个 null 值

· List 可以按插入顺序显示

· List 有类: Vector 、 ArrayList 、 LinkedList

5、arraylist 与 vector 的区别?

· Vector 在 Java 的第一个版本就引入了,也就是说 vector 是一个合法规范的类

· ArrayList 在 Java1.2 版本引入的,是 Java 集合框架的组成部分

· Vector 是同步的

· ArrayList 是不同步的

6、ArrayList与Vector的差别

这两个类都实现了List接口(List接口继承自Collection接口)。它们都是有序集合。它们内部的元素都是能够反复的,都能够依据序号取出当中的某一元素。

它们两个的差别在于:

(1)、线程安全的问题:Vector是早期Java就有的,是同意多线程操作的。是线程安全的;而ArrayList是在Java2中才出现,它是线程不安全的,仅仅能使用单线程操作。因为Vector支持多线程操作,所以在性能上就比不上ArrayList 了。

相同的HashTable相比于HashMap也是支持多线程的操作而导致性能不如HashMap。

(2)、数据增长的问题

ArrayList和Vector都有一个初始的容量大小,当存储进去它们里面的元素个数超出容量的时候。就须要添加ArrayList和Vector的存储空间,每次添加存储空间的时候不是仅仅添加一个存储单元。是添加多个存储单元。

Vector默认添加原来的一倍,ArrayList默认添加原来的0.5倍。

Vector能够由我们自己来设置增长的大小,ArrayList没有提供相关的方法。

7、LinkedList与ArrayList有什么差别

两者都实现的是List接口。不同之处在于:

(1)、ArrayList是基于动态数组实现的,LinkedList是基于链表的数据结构。

(2)、get訪问List内部随意元素时。ArrayList的性能要比LinkedList性能好。LinkedList中的get方法是要依照顺序从列表的一端開始检查,直到还有一端

(3)、对于新增和删除操作LinkedList要强于ArrayList。由于ArrayList要移动数据

8、comparable 和 comparator的不同之处?

· comparable 接口实际上是出自 https://www.360docs.net/doc/c55589068.html,ng 包

· 它有一个 compareTo(Object obj) 方法来将 objects 排序

· comparator 接口实际上是出自 java.util 包

· 它有一个compare(Object obj1, Object obj2) 方法来将 objects 排序

9、HashMap与HashTable的差别

两者都实现了Map接口。主要差别在于:

· 同步或线程安全

· Null 键和 Null 值

· 迭代值

· 默认容量大小

10、List与Map的差别

List是存储单列数据的集合,Map是存储key和value这样双列数据的集合,List 中存储的数据是有顺序的,而且同意反复。

Map其中存储的数据是没有顺序的,它存储的key是不能反复的,value是能够反复的。

List继承Collection接口,Map不是。Map没有父类

11、fail-fast 与 fail-safe 之间的区别?

· Fail fast 快速地报告任何的 failure 。无论何时任何一个问题都会引发fail fast 系统 fails

· 在Java Fail fast 迭代器中,迭代 objects 集合有时会出现并发修改异常,出现这种情况有 2 个原因

· 如果一个线程正在迭代一个集合,而另一个线程同时试图修改这个集合

· 在调用remove() 方法后,如何我们还试图去修改集合 object

Java笔试题及答案

Java笔试题及答案 一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A. Java程序经编译后会产生machine code B. Java程序经编译后会产生byte code C. Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名 C. constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 详解:见下面代码,很明显方法是可以和类名同名的,和构造方法唯一的区别就是,构造方法没有返回值。 package net.study; public class TestConStructor { public TestConStructor() {

} public void TestConStructor() { } public static void main(String[] args) { TestConStructor testConStructor = new TestConStructor(); testConStructor.TestConStructor(); } } 4.提供Java存取数据库能力的包是() 答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 详解: java 中没有<> := 这种运算符,if else不算运算符 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是()

2016最新java面试题_详细版

详解笔试面试题集 (1)下列各题ABCD四个选顼中,只有一个选项是正确的,请将正确选项填写在答题纸上 (1)下列关于栈的描述中错误的是( B) A. 栈是先进后出的线性表 B 栈只能顺序存储 C 栈具有记忆作用 D 对栈的插入弓删除操作中,不需要改变栈底指针 正确答案:B 分析:栈是链式存储的 (2)对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是( ) A 冒泡排序为n/2 B 冒泡排序为n C 快速排序为n D 快速排序为n(n-l)/2 正确答案:D 分析: 想想快速排序,每次都会选取线性表的轴值,随后以此轴值划分为两个子线性表再分别进行快排,在最坏情况下,也就是说每次选出的线性表轴值完全不能将这个线性表划分为两个子线性表。那么此时快速排序退化为冒泡排序了。 那么第一趟排序时,轴值(线性表的中间位置)被选出,这个值绝对是这个线性表中最大的(不然也不能是最坏情况),其他值都比他小,那么线性表现在分为完全不对等的两段(一段是0,另一段是n - 1),一段是这个值,一段是其他值。同样第二趟排序在刚才剩下的值中选中间值(剩余值中最大的那个),又分为不对等两段,依次递推。也就是说每次都比较了N - 1个元素(轴值选出后都与它比较大小),那么肯定是比较了n - 1次(如第一次先挑了个轴值,然后剩下n - 1比较),n代表当前子线性表中元素个数由此最白痴的数列问题出现了,如下 1 + 2 + 3 + .......... + n - 2 + n - 1 = n(n - 1) / 2 还有一种投机取巧的方法,在最垃圾情况下既然快排变为冒泡,那由时间复杂度知其必为o(n ^ 2)的复杂度,答案中ABC都是线性时间复杂,显然错误 (3)下列对于线性链表的描述中正确的是( ) A 存储空间间不一定是连续,且各元素的存储顺序是任意的

Java面试题大全(答案版)

一个".java"源文件中是否可以包括多个类(不是内部类)?有 什么限制? 可以,但是只能有一个类用public修饰,并且用public修饰的类名与文件名要一致 2、&和&&的区别。 &和&&都可以用作逻辑与; &&还具有短路功能,即如果第一个表达式的结果为false,则不再计算第二 个表达式; &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。 3、J ava有没有goto? java中的保留字,现在没有在java中使用。 4、在JAVA中,如何跳出当前的多重嵌套循环? break+变量控制与return 5、s witch是否能作用在byte(拜特)上,是否能作用在long上,是否能作用在Stri ng 上? Switch可以作用在int上,而byte可以隐式转换为int所以能作用在byte 上 不能作用在long上,也不能作用在String上 6、s hort s1 = 1; s1 = s1 + 有什么错? short s1 = 1; s1 += 有什么错? 1在java中为int数据类型,short+int=int,大类型转为小类型,编译时,会报告需要强制转换类型的错误。s1+=1不会报,因为JVM会对它特殊处理(自动强转) 7、char型变量中能不能存贮一个中文汉字?为什么? 可以,char型变量是用来存储uni code(依妮Q特)编码的,而uni code编码包含了中文,所以是可以保存的

&编程题:用最有效率的方法算出2乘以8等於几? 2<<3,表示将2左移3位;一个数左移几位就表示这个数乘以了2的几次方, 左移运算,CPU直接支持,所以是最有效率的 9、请设计一个一百亿的计算器 思路:用两个数组分别保存两个操作数,再新建一个数组保存结果。 0、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 引用变量不能变 1、"=="和equals方法究竟有什么区别? ==和equals方法都可以用来比较两个对象是否是同一个对象。 ==还可以比较两个变量的值是否相等。 equals是Object类中的方法,可以由子类重写此方法,实现内容相等。 2、静态变量和实例变量的区别? 语法上不同:静态变量前要加static关键字,实例变量不需要 程序运行时不同:实例变量是属于某个对象的,只有创建了对象,才会为这个对象的实例变量分配空间。静态变量是属于类的,当程序加载了这个类的字节码文件,就会为静态变量分配空间,并且所有对象共享这个变量 3、是否可以从一个static方法内部发出对非static方法的调用? 不可以,非static方法需要与对象关联在一起的,而static方法调用时不需要对象,可以直接调用,也就是说调用static方法时,可能还没有创建任何实例 4、Integer与int的区别 int是java中的8种基本数据类型之一,默认值是0, Integer是int的包装类, 默认值是null,即Integer可以表示未赋值和赋值为0

JAVA面试题汇总

目录 概念题 ---------------------------------------------------------------------------------错误!未定义书签。 一、JAVA基础 ------------------------------------------------------------------------------ 错误!未定义书签。 1)面向对象的特征 --------------------------------------------------------------------------------------- 错误!未定义书签。 2)什么是OOP?什么是类?请对比类和对象实例之间的关系。 ----------------------- 错误!未定义书签。 3)简述类与对象的概念 -------------------------------------------------------------------------------- 错误!未定义书签。 4)什么是属性与方法? -------------------------------------------------------------------------------- 错误!未定义书签。 5)什么是封装? ------------------------------------------------------------------------------------------ 错误!未定义书签。 6)描述一下JVM加载class文件的原理机制 --------------------------------------------------- 错误!未定义书签。 7)Java程序怎么优化? -------------------------------------------------------------------------------- 错误!未定义书签。 8)一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?----- 错误!未定义书签。 9)char型变量中能不能存贮一个中文汉字 ----------------------------------------------------- 错误!未定义书签。 10)逻辑操作符(&,|,^)与条件操作符(&&,||)的区别--------------------------------------- 错误!未定义书签。 11)Math.round(11.5)等於多少? Math.round(-11.5)等於多少? ------------------------- 错误!未定义书签。 12)Java有没有goto?-------------------------------------------------------------------------------- 错误!未定义书签。 13)int 和Integer 的区别 --------------------------------------------------------------------------- 错误!未定义书签。 14)如何将数值型字符转换为数字?如何去小数四舍五入保留小数点后两位。错误!未定义书签。 15)short s1 = 1; s1 = s1 + 1;和short s1 = 1; s1 += 1;有什么错误 -------------------------- 错误!未定义书签。 16)float f=3.4是否正确? ----------------------------------------------------------------------------- 错误!未定义书签。 17)String 和StringBuffer的区别 ------------------------------------------------------------------ 错误!未定义书签。 18)String是否是最基本的数据类型,能否被继承 ----------------------------------------- 错误!未定义书签。 19)String s = new String("xyz");创建了几个String Object? ------------------------------- 错误!未定义书签。 20)数组有没有length()这个方法? String有没有length()这个方法? ---------------- 错误!未定义书签。 21)排序都有哪几种方法?用JAVA实现一个快速排序 ----------------------------------- 错误!未定义书签。 22)swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上--- 错误!未定义书 签。 23)在JAVA中,如何跳出当前的多重嵌套循环? ------------------------------------------ 错误!未定义书签。 24)关于日期和时间的几个问题------------------------------------------------------------------- 错误!未定义书签。 25)一个对象被当作参数传递到一个方法,是值传递还是引用传递----------------- 错误!未定义书签。 26)什么时候用assert?------------------------------------------------------------------------------ 错误!未定义书签。 27)GC是什么? 为什么要有GC? ---------------------------------------------------------------- 错误!未定义书签。 28)垃圾回收的优点和原理 ------------------------------------------------------------------------- 错误!未定义书签。 29)垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?错误!未定义书 签。 30)java中会存在内存泄漏吗,请简单描述 -------------------------------------------------- 错误!未定义书签。 31)java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,他们分别是哪些 类?错误!未定义书签。 32)文件和目录(I/O)操作 ------------------------------------------------------------------------ 错误!未定义书签。 33)什么是java序列化?如何实现java序列化?------------------------------------------- 错误!未定义书签。

JAVA框架面试题汇总

1.SpringMVC Framework的理解: 1、它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件。并且和Spring提供的其他基础结构紧密集成 2、不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的) 3、可以任意使用各种视图技术,而不仅仅局限于JSP 4、支持各种请求资源的映射策略 5、它应是易于扩展的 2.简单的谈一下SpringMVC的工作流程? 流程? 1、用户发送请求至前端控制器DispatcherServlet? 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。? 3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。? 4、DispatcherServlet调用HandlerAdapter处理器适配器? 5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。? 6、Controller执行完成返回ModelAndView? 7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet? 8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器? 9、ViewReslover解析后返回具体View? 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。? 11、DispatcherServlet响应用户 3.如何解决POST请求中文乱码问题,GET的又如何处理呢? 在web.xml中加入: . .CharacterEncodingFilter . .???? .????????encoding .?????? utf-8

2019最新Java面试题,常见面试题及答案汇总

ava最新常见面试题+ 答案汇总 1、面试题模块汇总 面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示: 可能对于初学者不需要后面的框架和JVM 模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。 适宜阅读人群 需要面试的初/中/高级java 程序员 想要查漏补缺的人 想要不断完善和扩充自己java 技术栈的人 java 面试官 具体面试题 下面一起来看208 道面试题,具体的内容。 一、Java 基础 1.JDK 和JRE 有什么区别? 2.== 和equals 的区别是什么? 3.两个对象的hashCode()相同,则equals()也一定为true,对吗? 4.final 在java 中有什么作用? 5.java 中的Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些区别? 13.抽象类能使用final 修饰吗?

14.接口和抽象类有什么区别? 15.java 中IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap 和Hashtable 有什么区别? 22.如何决定使用HashMap 还是TreeMap? 23.说一下HashMap 的实现原理? 24.说一下HashSet 的实现原理? 25.ArrayList 和LinkedList 的区别是什么? 26.如何实现数组和List 之间的转换? 27.ArrayList 和Vector 的区别是什么? 28.Array 和ArrayList 有何区别? 29.在Queue 中poll()和remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器Iterator 是什么? 32.Iterator 怎么使用?有什么特点? 33.Iterator 和ListIterator 有什么区别? 34.怎么确保一个集合不能被修改?

java面试题大全

JAVA面试题最全集 一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc。 3.数据类型之间的转换 如何将数值型字符转换为数字(Integer,Double) 如何将数字转换为字符 如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的最后一天 如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何列出某个目录下的所有文件 如何列出某个目录下的所有子目录 判断一个文件或目录是否存在 如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中需要处理HTML标记时,应做什么样的处理,要筛选那些字符(< > & “”) 3.在JSP中如何读取客户端的请求,如何访问CGI变量,如何确定某个Jsp文件的真实路径。 4.描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。 5.列出Jsp中包含外部文件的方式,两者有何区别。 6.说明Jsp中errorPage的作用,应用范围。 7.介绍在Jsp中如何使用JavaBeans。 8.简单介绍JSP的标记库 9.Jsp和Servlet中的请求转发分别如何实现。 三、J2EE相关知识 1.介绍J2EE、J2SE、J2SE的区别。 2.J2EE是一种技术还是一种平台,他提供了那些技术。 3.什么是Application Server,它有什么功能和优点。

Java面试题大全(答案版)

1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以,但是只能有一个类用public修饰,并且用public修饰的类名与文件名要一致 2、&和&&的区别。 &和&&都可以用作逻辑与; &&还具有短路功能,即如果第一个表达式的结果为false,则不再计算第二个表达式; &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。 3、Java有没有goto? java中的保留字,现在没有在java中使用。 4、在JAVA中,如何跳出当前的多重嵌套循环? break+变量控制与return 5、switch是否能作用在byte(拜特)上,是否能作用在long上,是否能作用在String上? Switch可以作用在int上,而byte可以隐式转换为int 所以能作用在byte上 不能作用在long上,也不能作用在String上 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 1在java中为int数据类型,short+int=int,大类型转为小类型,编译时,会报告需要强制转换类型的错误。s1+=1不会报,因为JVM会对它特殊处理(自动强转) 7、char型变量中能不能存贮一个中文汉字?为什么? 可以,char型变量是用来存储unicode(依妮Q特)编码的,而unicode编码包含了中文,所以是可以保存的 8、编程题: 用最有效率的方法算出2乘以8等於几? 2<<3,表示将2左移3位;一个数左移几位就表示这个数乘以了2的几次方,左移运算,CPU直接支持,所以是最有效率的 9、请设计一个一百亿的计算器 思路:用两个数组分别保存两个操作数,再新建一个数组保存结果。 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 引用变量不能变 11、"=="和equals方法究竟有什么区别? ==和equals方法都可以用来比较两个对象是否是同一个对象。 ==还可以比较两个变量的值是否相等。 equals是Object类中的方法,可以由子类重写此方法,实现内容相等。 12、静态变量和实例变量的区别? 语法上不同: 静态变量前要加static关键字,实例变量不需要 程序运行时不同: 实例变量是属于某个对象的,只有创建了对象,才会为这个对象的实例变量分配空间。静态变量是属于类的,当程序加载了这个类的字节码文件,就会为静态变量分配空间,并且所有对象共享这个变量 13、是否可以从一个static方法内部发出对非static方法的调用? 不可以,非static方法需要与对象关联在一起的,而static方法调用时不需要对象,可以直接调用,也就是说调用static方法时,可能还没有创建任何实例 14、Integer与int的区别 int是java中的8种基本数据类型之一,默认值是0,Integer是int的包装类,默认值是null,即Integer可以表示未赋值和赋值为0 15、(麦死)Math.round(乱的)(11.5)等於多少? Math.round(-11.5)等於多少?

Java经典面试题大全_带答案

Java经典面试题带答案一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code(字节码) C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行(构造器) D.一个class只能定义一个constructor 答案:C 4.提供Java存取数据库能力的包是() A.Java.sql /sql/数据库还有Oracle 也是一种数据库 B.java.awt C.https://www.360docs.net/doc/c55589068.html,ng D.java.swing 答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环

答案:C 7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 答案:A 9.下列哪种说法是正确的() A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法 C.实例方法可直接调用其他类的实例方法 D.实例方法可直接调用本类的类方法 答案:D 二、多项选择题 1.Java程序的种类有() A.类(Class) B.Applet C.Application D.Servlet 2.下列说法正确的有() A.环境变量可在编译sourcecode时指定 B.在编译程序时,所能指定的环境变量不包括class path C.javac一次可同时编译数个Java源文件 D.javac.exe能指定编译结果要置于哪个目录(directory)答案:BCD 3.下列标识符不合法的有() A.new B.$Usdollars C.1234 D.car.taxi 答案:ACD 4.下列说法错误的有() A.数组是一种对象 B.数组属于一种原生类 C.intnumber=[]={31,23,33,43,35,63} D.数组的大小可以任意改变 答案:BCD 5.不能用来修饰interface的有()

java面试题大全(整理版)

2018年(整理版) 1、面向对象的特征有哪些方面? - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 - 继承:继承是从已有类得到继承信息创建新类的过程。提供继承的类叫父类(超类、基类)、得到继承的类叫子类(派生类)。 - 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。 - 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。实现多态需要做两件事:1). 方法重写(子类继承父类并重写父类中的方法);2). 对象造型(用父类型引用引用子类型对象,

这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为) 2、访问修饰符public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? 答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。 4、float f=3.4;是否正确? 答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。

2018年java面试题大全(整理版)

2018年java面试题大全(整理版)

2018年java面试题大全(整理版) 1、面向对象的特征有哪些方面? - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 - 继承:继承是从已有类得到继承信息创建新类的过程。提供继承的类叫父类(超类、基类)、得到继承的类叫子类(派生类)。 - 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。可以说,封装就是隐藏一切可隐藏的东西,

2、访问修饰符public,private,protected,以及不写(默认)时的区别? 修饰符当前类同包子类其他包 public √√√√protected √√√× default √√×× private √××× 3、String 是最基本的数据类型吗? 答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。

4、float f=3.4;是否正确? 答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。 5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗? 答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。

java笔试题大集合及答案Java基础方面

Java基础方面: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域当前类同一package 子孙类其他package public √√√√ protected √√√× friendly √√×× private √××× 不写时默认为friendly 2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注:静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 6、什么时候用assert 答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确

【2020最新Java面试题资料】30个Java经典的集合面试题

1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的版本包含几种集合类:Vector Stack HashTable和Array。 随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,已经经历了很久。它还包括在并发包中,阻塞接口以及它们的实现。 集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类。 (2)随着使用经过严格测试的集合框架类,代码质量会得到提高。 (3)通过使用JDK附带的集合类,可以降低代码维护成本。 (4)复用性和可操作性。 2.集合框架中的泛型有什么优点? 1.Java1.5引入了泛型,所有的集合接口和实现都大量地使用它。 2.泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。 3.这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。 4.泛型也使得代码整洁,我们不需要使用显式转换和instanceOf操作符。 5.它也给运行时带来好处,因为不会产生类型检查的字节码指令。 3.Java集合框架的基础接口有哪些? Collection为集合层级的根接口。一个集合代表一组对象,这些对象即为它的元素。平台不提供这个接口任何直接的实现。 Set是一个不能包含重复元素的集合。这个接口对数学集合抽象进行建模,被用来代表集合,就如一副牌。 List是一个有序集合,可以包含重复元素。你可以通过它的索引来访问任何元素。List更像长度动态变换的数组。 Map是一个将key映射到value的对象.一个Map不能包含重复的key:每个key最多只能映射一个value。

JAVA面试题大全Word版

基础知识: 1.C 或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是https://www.360docs.net/doc/c55589068.html,ng.Thowable的子类。 2. Java的接口和C 的虚类的相同和不同处。 由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是publi c static,所有方法默认情况下是public.一个类可以实现多个接口。 3. 垃圾回收的优点和原理。并考虑2种回收机制。 Java语言中一个显著的特点就是引入了垃圾回收机制,使c 程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。 4. 请说出你所知道的线程同步的方法。 wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

经典java面试题

Java面试经典试题及答案 第一,谈谈final, finally, finalize的区别。 final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract 的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。 finally---在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize---方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //https://www.360docs.net/doc/c55589068.html,/articles/services/view.asp?id=704&page=1 注:静态内部类(Inner Class)意味着 1.创建一个static内部类的对象,不需要一个外部类对象。 2.不能从一个static内部类的一个对象访问一个外部类对象 第四,&和&&的区别。 &是位运算符。&&是布尔逻辑运算符。 第五,HashMap和Hashtable的区别。 都属于Map接口的类,实现了将惟一键映射到特定的值上。 HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 Ha shMap 慢,因为它是同步的。 第六,Collection 和 Collections的区别。 Collections是java.util下的类,它包含有各种有关集合操作的静态方法。 Collection是个java.util下的接口,它是各种集合结构的父接口。 第七,什么时候用assert? 断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它用于调试目的: assert(a > 0); // throws an Assertionerror if a <= 0 断言可以有两种形式: assert Expression1 ; assert Expression1 : Expression2 ;

125条常见的java面试笔试题大汇总

125条常见的java面试笔试题大汇总 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新 类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改 或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 https://www.360docs.net/doc/c55589068.html,ng.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型 的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们 的类型有关。 7、String 和StringBuffer的区别 JAVA平台提供了两个类:String和 StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个 StringBuffer类提供的字符串进行修改。当你知道字

相关主题
相关文档
最新文档