news 2026/4/23 18:52:02

面试 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/4/23 13:13:14

Java基于Spring Boot+Vue的旅游信息管理平台的设计与实现

所需该项目可以在最下面查看联系方式,为防止迷路可以收藏文章,以防后期找不到 项目介绍 随着人们生活水平的提高,旅游成为大众休闲娱乐的重要方式,旅游行业蓬勃发展。据统计,近年来国内旅游人次持续攀升,…

作者头像 李华
网站建设 2026/4/23 12:32:01

牛牛大逃杀V1.0,打造最纯粹的数字货币逃生赛

当高频竞技碰上DeFi经济模型,如何用 Unity PHP 支撑起几十万级并发的“数字逃生”? > 本文将深度拆解《牛牛大逃杀》底层的 3倍收益激活逻辑 与 Swoole 高性能长连接网关,揭秘如何通过“待激活资产”机制,构建一个让二级市场疯…

作者头像 李华
网站建设 2026/4/23 15:47:18

2026最新conda镜像源

设置miniconda镜像源vim ~/.condarc//替换下面的源channels:- defaults show_channel_urls: true default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.c…

作者头像 李华
网站建设 2026/4/23 10:11:07

光学工程师就业方向推荐

先给结论:优先选车载/AR光学、半导体光刻光学、硅光/光子集成,这三个方向当前需求旺、薪资高、成长空间大。入门先做成像光学设计攒工程经验,再转高端赛道更稳。下面按方向讲清工作内容、适合人群与推荐理由,最后给选择建议。一、…

作者头像 李华
网站建设 2026/4/23 10:09:57

Java基于Spring Boot+Vue的走散儿童救助信息管理系统的设计与实现

所需该项目可以在最下面查看联系方式,为防止迷路可以收藏文章,以防后期找不到 这里写目录标题项目介绍系统实现截图技术栈介绍Spring Boot与Vue结合使用的优势Spring Boot的优点Vue的优点Spring Boot 框架结构解析Vue介绍系统执行流程Java语言介绍系统测…

作者头像 李华