news 2026/2/7 11:56:08

面试 Java 基础八股文十问十答第二十期

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面试 Java 基础八股文十问十答第二十期

面试 Java 基础八股文十问十答第二十期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)HashMap 和 ConcurrentHashMap 的区别

  • 线程安全性:HashMap 是非线程安全的,而 ConcurrentHashMap 是线程安全的。
  • 锁机制:HashMap 使用的是悲观锁机制,即在对 HashMap 进行写操作时需要对整个 HashMap 进行加锁;而 ConcurrentHashMap 使用的是分段锁机制,将整个 HashMap 分成多个段,每个段都有自己的锁,不同的线程可以同时操作不同的段,从而提高并发性能。
  • 性能:在高并发的情况下,ConcurrentHashMap 的性能比 HashMap 更好,因为它支持并发读写操作,减少了线程竞争的情况。

2)ConcurrentHashMap 和 Hashtable 的区别?

  • 线程安全性:ConcurrentHashMap 是线程安全的,而 Hashtable 也是线程安全的。
  • 锁机制:ConcurrentHashMap 使用的是分段锁机制,而 Hashtable 使用的是同一把锁,即对整个 Hashtable 进行加锁,导致并发性能较差。
  • Null 值:ConcurrentHashMap 允许键和值都为 null,而 Hashtable 不允许键和值为 null。
  • 迭代器:ConcurrentHashMap 的迭代器是弱一致性的,而 Hashtable 的迭代器是强一致性的。

3)ConcurrentHashMap 底层具体实现知道吗?实现原理是什么?

  • ConcurrentHashMap 的底层数据结构是数组和链表/红黑树的组合,数组的每个元素称为一个桶,每个桶存储一个链表或红黑树,用于解决哈希冲突。
  • ConcurrentHashMap 使用了分段锁机制,将整个数组划分为多个段,每个段都有自己的锁。当进行读写操作时,只需要锁定对应的段,而不需要锁定整个 ConcurrentHashMap,从而提高并发性能。
  • 在读取操作时,不需要加锁,可以并发地进行;在写入操作时,只需要锁定对应的段,而不需要锁定其他段,从而减少了线程竞争的情况。
  • 在 JDK 8 及以上版本,ConcurrentHashMap 进一步引入了红黑树来优化链表,提高查找的效率,从而进一步提升并发性能。

4)Array 和 ArrayList 有何区别?

  • 数据类型:Array 可以存储基本数据类型和对象,而 ArrayList 只能存储对象。
  • 大小可变性:Array 的大小是固定的,一旦创建后不能改变;而 ArrayList 的大小是可变的,可以动态添加或删除元素。
  • 内存占用:Array 在创建时需要指定大小,会占用一定的内存空间;而 ArrayList 可以根据需要动态调整大小,节省内存空间。
  • 随机访问效率:Array 可以通过索引直接访问元素,速度较快;而 ArrayList 需要通过遍历来查找元素,速度较慢。

5)comparable 和 comparator的区别?

  • 接口类型:Comparable 是一个接口,需要实现 Comparable 接口并重写 compareTo 方法;而 Comparator 是一个接口,需要实现 Comparator 接口并重写 compare 方法。
  • 排序方式:Comparable 是内部排序方式,即在对象自身内部实现比较逻辑;而 Comparator 是外部排序方式,即通过外部的比较器来进行排序。
  • 对象类型:Comparable 用于对象自身的默认排序,需要在对象类中实现 Comparable 接口;而 Comparator 可以用于对不同类的对象进行排序,需要通过实现 Comparator 接口来自定义比较逻辑。
  • 使用场景:Comparable 适用于对对象自身进行排序的情况,比如对数字、字符串等对象进行排序;而 Comparator 适用于需要自定义排序规则的情况,比如对对象的某个属性进行排序。

6)Collection 和 Collections 有什么区别?

  • 类型:Collection 是一个接口,定义了一组集合操作的方法;而 Collections 是一个工具类,提供了一些静态方法来操作集合对象。
  • 功能:Collection 定义了集合的基本操作,比如添加、删除、遍历等;而 Collections 提供了一些静态方法,用于对集合进行排序、查找、替换等操作。
  • 集合类型:Collection 是一个接口,有多个实现类,比如 List、Set、Queue 等;而 Collections 是一个工具类,可以操作任意类型的集合对象。
  • 使用方式:Collection 是一个接口,需要通过实现类来创建对象;而 Collections 是一个工具类,直接调用其中的静态方法即可。

7)TreeMap 和 TreeSet 在排序时如何比较元素? Collections 工具类中的 sort()方法如何比较元素?

  • TreeMap 和 TreeSet 使用的是元素的自然顺序或者通过传入的 Comparator 对象来比较元素。在 TreeMap 中,元素需要实现 Comparable 接口或者通过构造方法传入的 Comparator 对象来进行比较。在 TreeSet 中,元素需要实现 Comparable 接口或者通过构造方法传入的 Comparator 对象来进行比较。
  • Collections 工具类中的 sort() 方法使用的是元素的自然顺序或者通过传入的 Comparator 对象来比较元素。在 sort() 方法中,元素需要实现 Comparable 接口或者通过传入的 Comparator 对象来进行比较。

8)CopyOnWriteArrayList 底层原理是什么?

CopyOnWriteArrayList 是一种线程安全的 List 实现,它的底层原理是在写操作时创建一个新的数组,并将原始数组的内容复制到新数组中,然后将新元素添加到新数组中。这样可以避免写操作对读操作的影响,读操作可以在不加锁的情况下并发进行。因为每次写操作都会创建一个新的数组,所以 CopyOnWriteArrayList 的写操作会比较耗费内存和时间,适用于读操作频繁、写操作较少的场景。

9)ConcurrentMarkSweepException 是怎么发生的?

ConcurrentMarkSweepException 是指在进行 Java 堆的垃圾回收时,发生了 Concurrent Mark Sweep (CMS) 垃圾回收器的异常。这种异常通常是由于堆内存不足或者垃圾回收器无法及时回收垃圾导致的。

10)怎么解决 ConcurrentMarkSweepException 的问题?

  • 增加堆内存大小,通过调整 JVM 的堆内存参数(如 -Xmx 和 -Xms)来增加堆内存的大小,从而减少发生内存不足的可能性。
  • 优化代码,减少内存的使用量,比如及时释放不再使用的对象,避免内存泄漏等。
  • 调整垃圾回收器的参数,比如调整 CMS 回收器的线程数、回收阈值等,以提高垃圾回收的效率。
  • 使用其他垃圾回收器,如 G1 垃圾回收器,它在并发标记和清理阶段采用了不同的算法,可以更好地处理大堆和高并发的情况。

前后端项目 Gitee & Github 累计 3000+ Star,10W+浏览量!⭐点赞⭐收藏⭐不迷路!⭐

智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend

智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend

GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 3:00:31

Java基于SSM+JSP的某小区物业管理系统设计与实现

项目说明 随着社会的快速发展和城市化进程的加速,住宅小区作为人们生活的重要场所,其物业管理的重要性日益凸显。传统的小区物业管理方式已经无法满足现代社会的需求,因此,开发一个高效、智能的小区物业管理系统成为了一个必然的趋…

作者头像 李华
网站建设 2026/2/7 3:56:53

Java基于Spring Boot+Vue的仓库管理系统的设计与实现

所需该项目可以在最下面查看联系方式,为防止迷路可以收藏文章,以防后期找不到 项目介绍 在全球化竞争与数字化转型的双重驱动下,仓库作为供应链的核心节点,其管理效率直接影响企业的成本结构、服务质量和市场竞争力。传统的仓库管…

作者头像 李华
网站建设 2026/2/3 19:28:16

Linux网络设备驱动框架深度解析:枚举、注册、挂载全流程

在Linux内核网络子系统中,网络设备驱动是连接硬件与协议栈的核心桥梁。与字符设备、块设备驱动不同,网络设备驱动有其独特的抽象模型和实现逻辑。本文将从核心原理出发,逐步拆解网络设备驱动的枚举、注册、挂载全流程,结合代码示例帮你吃透这一核心技术。 一、核心原理:L…

作者头像 李华
网站建设 2026/2/7 11:42:04

余行补位方法论:构建专精特新企业产业生态领导力的实践体系

余行补位方法论:构建专精特新企业产业生态领导力的实践体系 一、生态领导力的价值重估:从供应商到标准制定者的跃迁 1.1 传统企业价值的四个边界 技术边界:核心技术保护范围决定竞争壁垒 市场边界:目标客户群体限定增长空间 组…

作者头像 李华
网站建设 2026/2/5 18:37:17

基于ESP32的仓库智能防火监测系统

阅读提示 博主是一位拥有多年毕设经验的技术人员,如果本选题不适用于您的专业或者已选题目,我们同样支持按需求定做项目,论文全套!!! 博主介绍 CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者…

作者头像 李华
网站建设 2026/2/3 15:12:42

conda下安装cuda11.8和cudnn

当需要多个cuda版本的时候我们可以将cuda安装到虚拟机里。 conda install -c nvidia cuda-runtime11.8conda install -c nvidia cudnn

作者头像 李华