【建议收藏】2021年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:区分迭代器和枚举。

回答:

迭代器

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

枚举

  • 它只能遍历旧元素。
  • 它比Iterator更快。
  • 它只能traverse对集合执行操作。
  • 这不是一种快速失效的方法。

问题5: LinkedList和ArrayList有什么区别?

回答:

数组列表

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

链表

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

问题6: 解释Queue接口的poll()和remove()方法之间的区别。

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

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

回答:

可比

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

比较器

  • 它提供了compare()一种对元素进行排序的方法。
  • 它存在于java.util包中。
  • 排序逻辑必须在不同的类中,以便根据对象的不同属性编写不同的排序。
  • 它提供了多个排序序列。
  • 实际的类别未更改。

问题8: 就计算机内存而言,什么是堆栈?

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

问题9: 列出Map的集合视图。

回答:

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

键集视图: 地图中包含的键集。

值集视图:地图中包含的值的集合。此集合不是集合,因为多个键可以映射到相同的值。

条目集视图:映射中包含的一组键值对。Map接口提供了一个称为Map.Entry的小型嵌套接口,该接口是此Set中元素的类型。

问题10: 定义EnumSet。

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

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

答: 方法是:

Collections.synchronizedList(list);

Collections.synchronizedMap(map);

Collections.synchronizedSet(set);

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

回答:

队列

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

双端队列

  • 也称为双端队列。
  • 队列中的元素是从任一端添加的,并且可以从两端添加和删除。
  • 更通用。

问题13:区分hashmap和hashtable。

回答:

hashmap

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

hashtable

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

问题14: 定义迭代器。

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

问题15: 什么是NavigableMap?

答: 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运算符。

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

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

答: 如果将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。

 

最后


如果你想要学习Java的话,我给你分享一些Java的学习资料,你不用浪费时间到处搜了,从Java入门到精通的资料我都给你整理好了,这些资料都是我做Java这几年整理的Java最新学习路线,Java笔试题,Java面试题,Java零基础到精通视频课程,Java开发工具,Java练手项目,Java电子书,Java学习笔记,PDF文档教程,Java程序员面经,Java求职简历模板等,这些资料对你接下来学习Java一定会带来非常大的帮助,每个Java初学者都必备,请你进我的Java技术qq交流群自行下载,所有资料都在群文件里,进去要跟大家多交流学习哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值