2021年应届生与中高级程序员常见Java面试题

Posted 训练营资料福利官

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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包中。
  • 排序逻辑必须在我们要对其对象进行排序的同一类中。
  • 它提供了一个单独的排序序列。
  • 实际的班级已更改。

比较器

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

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

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

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

回答:

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

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

问题10: 定义EnumSet。

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

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

答: 方法是:

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

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

回答:

队列

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

双端队列

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

问题13:区分hashmap和hashtable。

回答:

哈希图

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

哈希表

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

问题14: 定义迭代器。

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

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

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

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

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

白嫖海量Java面试题,文档,视频:(三千道面试题,上百G最新视频,各类干货文章)

中高级程序员的一些常见面试问题

问题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。

白嫖海量Java面试题,文档,视频:(三千道面试题,上百G最新视频,各类干货文章)

 

 

 

以上是关于2021年应届生与中高级程序员常见Java面试题的主要内容,如果未能解决你的问题,请参考以下文章

2021年Java大厂面试,挑战大厂重燃激情!

2021即将毕业的Java应届生,面试需要掌握哪些技能,才能收割大厂offer(干货满满,建议收藏!)

Java高级程序员(5年左右)面试的题目集

2022年Java秋招面试,程序员求职必看的Dubbo面试题

应届生面试Java相关岗位可能会被问到哪些技术问题

备战金九银十!阿里大牛手码2021年全套Java高级面试题限时开源!