Java面试的主要问题


Java中的集合 在Java中,Collection是一个框架,提供了用于存储和操作对象组的体系结构。“集合框架”已在JDK 1.2中定义,并且其中包含所有集合类和接口。Java Collection类的两个主要接口是Collection接口(java.util.Collection)和Map接口(java.util.Map)。Java Collections可以对数据执行所有操作,例如搜索,排序,插入,操作等。Java Collection Framework提供了诸如Set,List,Queue,Deque之类的接口,以及诸如ArrayList,Vector,LinkedList,HashSet,PriorityQueue,TreeSet和LinkedHashSet之类的类。

需要单独的收集框架 如果我们不使用收集框架,则对Java对象进行分组的标准方法是数组,向量或哈希表。所有这些都没有通用接口。它们的所有实现都是独立定义的,它们之间没有关联。因此,很难记住存在于不同类中的所有不同方法,语法和构造函数。

例如,要在Vector中添加元素,我们要使用addElement()函数,而要在Hashtable中添加元素,我们要使用put()函数。

收集框架的优势 减少编程工作量: 程序员可以将更多的精力放在集合的最佳使用上,而不是集中在集合的设计上。这有助于实现抽象。 提高程序速度: 集合提供数据结构的高性能实现,从而提高了性能。

由于Java是一种广泛使用的编程语言,因此许多大小型组织都在使用Java作为其产品的基础。因此,准备一些基本的和高级的Java问题以应对面试。

在这里,让我们看一下有关Java的最常见问题。

新生应试的一些常见问题 问题1: Java中的框架是什么?

答: 框架是一组类和接口,它们提供了现成的体系结构。最佳的面向对象设计始终包括带有类集合的框架,以使所有类都执行相同类型的任务。

问题2:使用Java定义集合框架。

答: Java Collections Framework是接口和类的集合,这些接口和类有助于有效地存储和处理数据。Java Collection Framework提供了诸如Set,List,Queue,Deque之类的接口,以及诸如ArrayList,Vector,LinkedList,HashSet,PriorityQueue,TreeSet和LinkedHashSet之类的类。

问题3:在Java集合框架中区分ArrayList和Vector。

回答:

数组列表

它不同步。 可以将其大小增加到数组大小的50% 它不是线程安全的。 它不是遗留类。 向量:

已同步。 可以通过将其大小增加一倍来增加其大小。 这是线程安全的。 这是一个遗留类。 问题4:区分迭代器和枚举。

回答:

Iterator

它可以遍历遗留元素和非遗留元素。 它比枚举慢。 它可以remove在遍历集合时执行操作。 它是快速失败的。

Enumeration

它只能遍历旧元素。 它比Iterator更快。 它只能traverse对集合执行操作。 这不是一种快速失败的方法。 问题5: LinkedList和ArrayList有什么区别?

回答:

ArrayList

此类实现列表接口。 此类使用动态数组存储元素。 插入和删除操作在最佳情况下为O(1),在最坏情况下为O(n)。搜寻操作(即访问特定索引的元素)需要O(1)时间。 ArrayList在存储和访问数据方面效果更好。

LinkedList

此类同时实现列表接口和双端队列接口。 此类使用双向链接列表来存储元素。 插入和删除操作可提供O(1)性能。搜寻操作(即访问特定索引的元素)需要O(n)时间。 LinkedList在处理存储的数据时效果更好。 问题6: 解释Queue接口的poll()和remove()方法之间的区别。

答: 这两种方法返回并删除队列的开头。仅当队列为空时,它们的行为有所不同。remove()引发异常,而poll()对于空队列返回null。

问题7: 区分可比和比较器。

回答:

Comparable

它提供compareTo()了对元素进行排序的方法。 它存在于java.lang包中。 排序逻辑必须在我们要对其对象进行排序的同一类中。 它提供了一个单独的排序序列。 实际的班级已更改。

Comparator

它提供了compare()一种对元素进行排序的方法。 它存在于java.util包中。 排序逻辑必须在不同的类中,以便根据对象的不同属性编写不同的排序。 它提供了多个排序序列。 实际的类别未更改。 问题8: 就计算机内存而言,什么是堆栈?

答:堆栈是计算机内存的一个特殊区域,用于存储由函数创建的临时变量。在堆栈中,在运行时声明,存储和初始化变量。

问题9: 列出地图界面的集合视图。

回答:

集合视图方法允许通过以下三种方式将地图视为集合:

键集视图: 地图中包含的键集。 值集视图:地图中包含的值的集合。此集合不是集合,因为多个键可以映射到相同的值。 条目集视图:映射中包含的一组键值对。Map接口提供了一个称为Map.Entry的小型嵌套接口,该接口是此Set中元素的类型。 问题10: 定义EnumSet。

答: 这是一个Set实现,可以与枚举类型一起使用。所有元素必须来自显式或隐式指定的一种枚举类型。它不同步。不允许使用NULL键。

问题11: 使集合具有线程安全性的方法有哪些?

答: 方法是:

Collections.synchronizedList(list); Collections.synchronizedMap(map); Collections.synchronizedSet(set);

问题12: 区分队列和双端队列。

回答:

Queue

也称为单端队列。 队列中的元素是从一端添加或删除的。 通用性较差。

Deque

也称为双端队列。 队列中的元素是从任一端添加的,并且可以从两端添加和删除。 更通用。 问题13:区分hashmap和hashtable。

回答:

Hashmap

非同步,不是线程安全的。 继承AbstractMap类。 允许一个空键和多个空值。 被迭代器遍历。

Hashtable

同步,线程安全。 继承Dictionary类。 不允许使用任何null键或空值。 被枚举器和迭代器遍历。 问题14: 定义迭代器。

答: 该Iterator()是提供了一些方法来遍历集合的接口。它提供了一种使用集合的元素进行遍历并实现迭代器设计模式的通用方法。

问题15: 什么是可导航地图?

答: NavigableMap接口是Java Collection Framework的成员,属于java.util包。它是SortedMap的子接口,可提供便捷的导航方法,例如LowerKey,floorKey,ceilingKey和HigherKey。它还有助于从现有地图创建子地图。

问题16: 什么是peek()队列接口?

答: Peek()返回队列的开头。它不会删除任何元素。当队列为空时,它返回null。

经验丰富的程序员的一些常见面试问题 问题1:什么是CopyOnWriteArrayList?

答: 此类位于java.util.concurrent包中,并且实现列表接口。它制作了基础ArrayList的克隆副本,以实现所有操作和修改。它是故障安全的,并且在迭代过程中永远不会抛出ConcurrentModificationException。

问题2: 什么时候发生ConcurrentModificationException?

答: java。实用程序。ConcurrentModificationException在数据收集被积极使用时试图对其进行修改时发生,例如当我们迭代的内容被修改时。

问题3: 为什么ConcurrentHashmap比Hash表或同步映射更好?

答: ConcurrentHashMap可以在并发多线程环境中安全使用。它的性能比问题中提到的两个要好,因为ConcurrentHashMap的只有一部分被锁定了,这与Hashtable和SynchronizedMap不同,后者的全部都被锁定了。

问题4:向钻石操作员解释。

答: Diamond运算符可帮助编译器收集通用类的类型参数。在Java SE中,开发人员可以将参数化的构造函数替换为空的参数集(<>),称为菱形运算符。

问题5: 在定制类中使用自定义对象作为键时需要做什么?

答: 如果将Map中的任何自定义对象用作键,则需要重写equals()和hashCode()方法。另一方面,如果要将自定义对象存储在已排序的Collection中,则还需要确保您的equals()方法与compareTo()method一致。

问题6: 说明迭代器与集合。

答: 迭代器只能使用来移动和访问下一个元素,next()或使用来删除一个元素remove()。收集,但是,可以添加的元素,迭代,取下一个元素,并使用清除整个结构add(),iterator(),remove(),和clear()分别。也有一些布尔方法。迭代器比集合更快,因为与它关联的操作更少。

问题7: 使用HashSet的某些功能。

答: HashSet实现Set接口。基础数据结构是哈希表。允许使用null元素,不允许使用重复元素。根据对象的哈希码插入对象。

问题8: 解释故障快速和故障安全之间的区别。

回答:

快速失败

使用原始集合进行遍历。 迭代时无法修改集合。 可以抛出ConcurrentModificationException。 故障安全

使用原始集合的副本进行遍历。 可以在迭代时修改集合。 不抛出任何异常。

问题9: 区分ArrayBlockingQueue和LinkedBlockingQueue。

回答:

ArrayBlockingQueue

有界阻塞队列将元素存储在数组中。 更高的吞吐量。 使用单锁双重条件算法。 LinkedBlockingQueue

基于链接的节点的有界绑定队列(可选)。 较低的吞吐量。 使用两锁队列算法。

问题10: TreeMap如何在Java中工作?您希望使用哪种数据结构:HashMap或TreeMap?

答: TreeMap是基于Red-Black树的NavigableMap实现。它使用Red-Black树算法对TreeMap对象键进行排序。我们根据我们的要求进行选择。TreeMap被排序,而HashMap则更快。因此,如果我们希望元素排序,则使用TreeMap,否则使用HashMap。


原文链接:https://codingdict.com/