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

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

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

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

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

1)TreeMap 有了解过吗?

  • TreeMap 是基于红黑树(Red-Black tree)实现的,它是有序的 Map,可以根据键的自然顺序或者自定义的比较器对键进行排序。
  • TreeMap 中的键值对是按照键的顺序排列的,这使得 TreeMap 在范围查询和按顺序遍历键值对时具有很高的效率。
  • 注意,TreeMap 不允许键为 null,并且对键的排序是基于键的自然顺序或者比较器的,而不是插入顺序。

2)IdentityHashMap 有了解过吗?

  • IdentityHashMap 是一种特殊的 Map,它使用引用相等性(reference-equality)而不是对象相等性(object-equality)来比较键。
  • 在 IdentityHashMap 中,当且仅当两个键是同一个对象(即引用相等)时,它们才被认为是相等的。
  • 这使得 IdentityHashMap 在需要使用引用相等性的场景下非常有用,例如需要保留对象之间的原始引用关系时。

3)WeakHashMap 有了解过吗?

  • WeakHashMap 是一种弱引用(weak reference)实现的 Map,它的键被保存在弱引用中,这意味着如果键不再被其他对象引用,则可以被垃圾回收器回收。
  • 当键被垃圾回收器回收时,与该键相关联的值也会被移除,这样可以避免内存泄漏。
  • WeakHashMap 主要用于缓存和对象关联性映射等场景,在需要动态管理缓存内容或者避免内存泄漏时非常有用。

4)ConcurrentHashMap 1.7 和 1.8 的区别:

在 Java 7 中,ConcurrentHashMap 的实现采用了分段锁机制,即将整个 Map 分成多个段(Segment),每个段都拥有自己的锁。这种设计在高并发情况下可以提高并发性能,因为不同的线程可以同时访问不同的段,从而减少了锁的竞争。

而在 Java 8 中,ConcurrentHashMap 的实现引入了 CAS(Compare and Swap)操作和 synchronized 实现的方法,用以替代分段锁机制。这种设计使得 ConcurrentHashMap 在高并发情况下表现更好,因为它可以利用更细粒度的锁粒度,减少了锁的竞争。

5)ConcurrentHashMap#get 需要加锁吗?

ConcurrentHashMap 的 get 操作不需要加锁。因为 ConcurrentHashMap 使用了并发安全的数据结构和算法来实现,其中包括使用 volatile 变量和 CAS 操作来确保数据的一致性,所以 get 操作是线程安全的,不需要额外的加锁操作。

6)为什么 ConcurrentHashMap 不支持 key 或者 value 为 null ?

ConcurrentHashMap 不支持 key 或者 value 为 null 是为了避免出现歧义和不确定性。在 ConcurrentHashMap 中,null 通常被用作特殊值来表示键或值不存在。如果允许键或值为 null,那么在查询时无法确定是键或值本身为 null 还是表示键或值不存在。为了保持数据结构的一致性和操作的可预测性,ConcurrentHashMap 不支持 key 或者 value 为 null。

7)Copy-On-Write:

Copy-On-Write 是一种并发编程中的策略,它用于处理读写冲突。当有写操作发生时,Copy-On-Write 策略不会直接在原始数据上进行修改,而是先复制一份原始数据,然后在副本上进行修改,最后再将副本的引用指向修改后的数据。这样做的好处是读操作可以并发进行,不会被写操作所影响,从而提高了读操作的性能。Copy-On-Write 主要应用于需要频繁读取但很少修改的情况,比如事件监听器列表。

8)ConcurrentModificationException:

ConcurrentModificationException 是 Java 集合框架中常见的异常之一,通常在使用迭代器遍历集合时出现。这个错误的主要原因是在迭代过程中,集合的结构发生了改变(比如添加或删除元素),导致迭代器检测到集合被并发修改而抛出异常。

这种异常的出现通常是由于多个线程并发地修改了集合,而不是使用线程安全的集合类。解决这个问题的方法之一是使用线程安全的集合类,如 ConcurrentHashMap,或者在迭代过程中使用同步措施来防止并发修改。

9)ConcurrentHashMap 的 put 过程:

ConcurrentHashMap 的 put 方法主要包括以下几个步骤:

  1. 计算键的哈希值。
  2. 根据哈希值定位到相应的段(Segment)。
  3. 在段内部进行插入操作,可能涉及到扩容或者链表转换为红黑树等操作。
  4. 如果需要,更新计数器以及执行相关的并发控制操作。

ConcurrentHashMap 的 put 方法是线程安全的,多个线程可以同时进行插入操作而不会发生数据不一致或者丢失的情况。

10)fail-fast 机制的作用:

fail-fast 是一种迭代器的工作方式,在迭代器遍历集合时,如果集合的结构发生了改变,迭代器会立即抛出 ConcurrentModificationException 异常,以避免在并发修改的情况下导致不确定的行为。这种机制的作用是尽早检测到并发修改,防止其对其他线程造成影响,并提高了程序的健壮性。fail-fast 机制是 Java 集合框架中的一种常见实现方式,用于保证迭代器的安全性和一致性。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 1300+ Star,2 W+ 访问!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/7883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

knife4j-openapi3 使用笔记

knife4j官方文档:https://doc.xiaominfo.com/docs/quick-start/start-knife4j-version 增强模式文档:https://doc.xiaominfo.com/docs/features/enhance 1.用法 (1)控制层 Tag(name “用户信息管理”) Tag(name "用户信…

代码随想录第四十六天|单词拆分

题目链接:. - 力扣(LeetCode)

STM32F4xx开发学习_SysTick

SysTick系统定时器 SysTick属于CM4内核外设,有关寄存器的定义和部分库函数都在core_cm4.h这个头文件中实现,可用于操作系统,提供必要的时钟节拍 SysTick简介 SysTick是一个 24 位向下定时器,属于CM4内核中的一个外设,…

无卤素产品是什么?有什么作用?

无卤素产品,即在生产过程中完全不使用卤素元素——氟、氯、溴、碘等——的产品。 卤素元素,虽然在电子设备、材料等领域应用广泛,却也可能潜藏危害。其阻燃剂,一旦在产品生命周期结束后释放,将对土壤和水体造成污染&a…

Python-100-Days: Day11 Files and Exception

1.读取csv文件 读取文本文件时,需要在使用open函数时指定好带路径的文件名(可以使用相对路径或绝对路径)并将文件模式设置为r(如果不指定,默认值也是r),然后通过encoding参数指定编码&#xf…

MyBatis入门例子

1、建立与数据库对应的POJO类 2、建立mybatis的配置文件 修改后如下: 3、创建POJO对象和Mysql数据的表之间的映射配置 4、建一个测试方法 实现从数据库中取数一条数据,封装成User对象返回 注意点: 这点,大家应该不陌生了&#x…

照片太大上传不了怎么缩小?教你几招压缩图片

在日常的工作和学习中,我们经常要用到一些图片文件,储存的图片多了之后,会对我们的电脑或者手机有影响,需要我们使用图片处理工具来压缩图片大小,那么有没有比较简单的图片压缩的方法呢?试试今天分享的几个…

【管理咨询宝藏94】某国际咨询公司供应链财务数字化转型方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏94】某国际咨询公司供应链&财务数字化转型方案 【格式】PDF版本 【关键词】国际咨询公司、制造型企业转型、数字化转型 【核心观点】 - 172…

VS2019编译 Qt5.15.12 和 Qt6.5.3

参考链接: Windows平台编译Qt5.15.12、6.5.3过程记录_qt 5.15 版本-CSDN博客 软件环境准备 Windows:MSDN系统库-致力于原版windows生态服务 Visual Studio 2022:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux cmake&am…

synchronized与volatile关键字

1.synchronized的特性 1.1互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到 同一个对象 synchronized 就会阻塞等待. 进入 synchronized 修饰的代码块, 相当于 加锁 退出 synchronized 修饰的代码块, 相当于 解锁 syn…

3行代码,实现一个取色器

前言 今天发现了一个很好玩的 API ——EyeDropper。 EyeDropper API 提供了一种创建拾色器工具的机制。使用该工具,用户可以从屏幕上取样颜色,包括浏览器窗口之外的区域。 这是 MDN 上对它的介绍,可以取包括浏览器窗口之外的区域。我们一起看看是怎么个事 什么是取色器 取…

611. 有效三角形的个数(双指针)

文章目录 前言一、题目解析二、代码原理1.暴力解法2.双指针优化 三、代码编写总结 前言 在本篇文章中,我们将会带着大家解决一下611. 有效三角形的个数这道题目,本道题木将会用双指针的方法解决。 一、题目解析 给定一个包含非负整数的数组 nums &…

关于Oracle 23ai 你要知道的几件事情

1.版本生命周期 23ai发布后的Oracle版本生命周期图,可以看到23ai是长期支持版本可以到2032年。 引申 Oracle版本分为两类 Innovation Release--创新版本,一般提供至少两年技术支持 Long Term Release --长期支持版本,一般提供5年premier和…

酸奶(科普)

酸奶(yogurt)是一种酸甜口味的牛奶饮品,是以牛奶为原料,经过巴氏杀菌后再向牛奶中添加有益菌(发酵剂),经发酵后,再冷却灌装的一种牛奶制品。市场上酸奶制品多以凝固型、搅拌型和添加…

开启智能新纪元:揭秘现代化仓储物流园区的数字孪生魅力

在数字化浪潮的推动下,物流行业正迎来前所未有的变革,现代化仓储物流园区数字孪生系统正以其独特的魅力引领着物流行业迈向更加智能、高效的新时代。 图源:山海鲸可视化 一、数字孪生:物流行业的“虚拟镜像” 数字孪生技术作为工…

C++细节,可能存在的隐患,面试题03

文章目录 11. C编译过程12. const vs #define12.1. 全局const vs 局部const 13. C内存分区14. C变量作用域14.1. 常量 vs 全局变量 vs 静态变量 15. C类型转换16. 函数指针17. 悬空指针 vs 野指针18. 为什么使用空指针,建议使用nullptr而不是NULL? 11. C…

JAVA面试常见面试问题01

1、队列系列 1.1、选型 ActiveMq ⼩规模场景,有较低概率丢失消息,官方社区维护少 RabbitMq ⼩规模场景,吞吐量⽐较低,消息积累会严重影响性能 RocketMQ ⼩规模场景,官⽅⽂档和周边⽣态还不够成熟 Kafka 大规模场景…

STM32——基础篇

技术笔记! 一、初识STM32 1.1 ARM内核系列 A 系列:Application缩写。高性能应用,比如:手机、电脑、电视等。 R 系列:Real-time缩写。实时性强,汽车电子、军工、无线基带等。 M 系列:Microcont…

MCU做死循环时,到底应该用for(;;) 还是wihile(1)

MCU做死循环时 for while stm32中老工程师用forfor while背景for版本while版本正方观点:哪有好的编译器:反方观点:这种代码过时了工程师实地测试:和编译器和优化有关 建议还是用for参考 stm32中老工程师用for /* Start scheduler …

linux中相关压缩文件的便捷方式

1.压缩解压缩命令 tar命令 tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。 一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成xxx.tar.gz(或称为xxx.tgz)的文件 常…