2026/4/18 9:18:01
网站建设
项目流程
建网站的软件优帮云,广州网站seo推广,人事外包公司,语言做网站面试 Java 基础八股文十问十答第二十期 作者#xff1a;程序员小白条#xff0c;个人博客 相信看了本文后#xff0c;对你的面试是有一定帮助的#xff01;关注专栏后就能收到持续更新#xff01;
⭐点赞⭐收藏⭐不迷路#xff01;⭐
1#xff09;HashMap 和 Concurre…面试 Java 基础八股文十问十答第二十期作者程序员小白条个人博客相信看了本文后对你的面试是有一定帮助的关注专栏后就能收到持续更新⭐点赞⭐收藏⭐不迷路⭐1HashMap 和 ConcurrentHashMap 的区别线程安全性HashMap 是非线程安全的而 ConcurrentHashMap 是线程安全的。锁机制HashMap 使用的是悲观锁机制即在对 HashMap 进行写操作时需要对整个 HashMap 进行加锁而 ConcurrentHashMap 使用的是分段锁机制将整个 HashMap 分成多个段每个段都有自己的锁不同的线程可以同时操作不同的段从而提高并发性能。性能在高并发的情况下ConcurrentHashMap 的性能比 HashMap 更好因为它支持并发读写操作减少了线程竞争的情况。2ConcurrentHashMap 和 Hashtable 的区别线程安全性ConcurrentHashMap 是线程安全的而 Hashtable 也是线程安全的。锁机制ConcurrentHashMap 使用的是分段锁机制而 Hashtable 使用的是同一把锁即对整个 Hashtable 进行加锁导致并发性能较差。Null 值ConcurrentHashMap 允许键和值都为 null而 Hashtable 不允许键和值为 null。迭代器ConcurrentHashMap 的迭代器是弱一致性的而 Hashtable 的迭代器是强一致性的。3ConcurrentHashMap 底层具体实现知道吗实现原理是什么ConcurrentHashMap 的底层数据结构是数组和链表/红黑树的组合数组的每个元素称为一个桶每个桶存储一个链表或红黑树用于解决哈希冲突。ConcurrentHashMap 使用了分段锁机制将整个数组划分为多个段每个段都有自己的锁。当进行读写操作时只需要锁定对应的段而不需要锁定整个 ConcurrentHashMap从而提高并发性能。在读取操作时不需要加锁可以并发地进行在写入操作时只需要锁定对应的段而不需要锁定其他段从而减少了线程竞争的情况。在 JDK 8 及以上版本ConcurrentHashMap 进一步引入了红黑树来优化链表提高查找的效率从而进一步提升并发性能。4Array 和 ArrayList 有何区别数据类型Array 可以存储基本数据类型和对象而 ArrayList 只能存储对象。大小可变性Array 的大小是固定的一旦创建后不能改变而 ArrayList 的大小是可变的可以动态添加或删除元素。内存占用Array 在创建时需要指定大小会占用一定的内存空间而 ArrayList 可以根据需要动态调整大小节省内存空间。随机访问效率Array 可以通过索引直接访问元素速度较快而 ArrayList 需要通过遍历来查找元素速度较慢。5comparable 和 comparator的区别接口类型Comparable 是一个接口需要实现 Comparable 接口并重写 compareTo 方法而 Comparator 是一个接口需要实现 Comparator 接口并重写 compare 方法。排序方式Comparable 是内部排序方式即在对象自身内部实现比较逻辑而 Comparator 是外部排序方式即通过外部的比较器来进行排序。对象类型Comparable 用于对象自身的默认排序需要在对象类中实现 Comparable 接口而 Comparator 可以用于对不同类的对象进行排序需要通过实现 Comparator 接口来自定义比较逻辑。使用场景Comparable 适用于对对象自身进行排序的情况比如对数字、字符串等对象进行排序而 Comparator 适用于需要自定义排序规则的情况比如对对象的某个属性进行排序。6Collection 和 Collections 有什么区别类型Collection 是一个接口定义了一组集合操作的方法而 Collections 是一个工具类提供了一些静态方法来操作集合对象。功能Collection 定义了集合的基本操作比如添加、删除、遍历等而 Collections 提供了一些静态方法用于对集合进行排序、查找、替换等操作。集合类型Collection 是一个接口有多个实现类比如 List、Set、Queue 等而 Collections 是一个工具类可以操作任意类型的集合对象。使用方式Collection 是一个接口需要通过实现类来创建对象而 Collections 是一个工具类直接调用其中的静态方法即可。7TreeMap 和 TreeSet 在排序时如何比较元素 Collections 工具类中的 sort()方法如何比较元素TreeMap 和 TreeSet 使用的是元素的自然顺序或者通过传入的 Comparator 对象来比较元素。在 TreeMap 中元素需要实现 Comparable 接口或者通过构造方法传入的 Comparator 对象来进行比较。在 TreeSet 中元素需要实现 Comparable 接口或者通过构造方法传入的 Comparator 对象来进行比较。Collections 工具类中的 sort() 方法使用的是元素的自然顺序或者通过传入的 Comparator 对象来比较元素。在 sort() 方法中元素需要实现 Comparable 接口或者通过传入的 Comparator 对象来进行比较。8CopyOnWriteArrayList 底层原理是什么CopyOnWriteArrayList 是一种线程安全的 List 实现它的底层原理是在写操作时创建一个新的数组并将原始数组的内容复制到新数组中然后将新元素添加到新数组中。这样可以避免写操作对读操作的影响读操作可以在不加锁的情况下并发进行。因为每次写操作都会创建一个新的数组所以 CopyOnWriteArrayList 的写操作会比较耗费内存和时间适用于读操作频繁、写操作较少的场景。9ConcurrentMarkSweepException 是怎么发生的ConcurrentMarkSweepException 是指在进行 Java 堆的垃圾回收时发生了 Concurrent Mark Sweep (CMS) 垃圾回收器的异常。这种异常通常是由于堆内存不足或者垃圾回收器无法及时回收垃圾导致的。10怎么解决 ConcurrentMarkSweepException 的问题增加堆内存大小通过调整 JVM 的堆内存参数如 -Xmx 和 -Xms来增加堆内存的大小从而减少发生内存不足的可能性。优化代码减少内存的使用量比如及时释放不再使用的对象避免内存泄漏等。调整垃圾回收器的参数比如调整 CMS 回收器的线程数、回收阈值等以提高垃圾回收的效率。使用其他垃圾回收器如 G1 垃圾回收器它在并发标记和清理阶段采用了不同的算法可以更好地处理大堆和高并发的情况。前后端项目 Gitee Github 累计 3000 Star10W浏览量⭐点赞⭐收藏⭐不迷路⭐智能 AI 旅游推荐平台https://github.com/luoye6/vue3_tourism_frontend智能 AI 校园二手交易平台https://github.com/luoye6/vue3_trade_frontendGPT 智能图书馆https://github.com/luoye6/Vue_BookManageSystem