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

news2024/5/20 5:09:44

面试 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.coloradmin.cn/o/1651658.html

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

相关文章

Py脚本_文件分类

最近发现通过Edge和chrome或者其他浏览器下载的文件都存放在一个地方就很繁琐,于是翻找以前的脚本来归纳这些文件,虽然有IDM下载独有会自动分类,但是相信很多同学都在一个文件里找文件,这次就写个Py脚本来实现这个功能。 # -*- c…

git bash退出vim编译模式

解决方法: 1.按esc键(回到命令模式) 此时是没有分号让我们在后面输入命令的 2.按shift键: 3.再输入:wq,并按enter键 此时我们发现又回到git bash窗口 希望对大家有所帮助!

配置好Maven后本地仓库不自动加载以及创建Maven报错的解决方法

先退出到全局模式再点击All Settings 点击maven 修改Maven home path修改了这个local不同步 点击Flie中的Module 然后选择maven 点击next设置需要存放的位置以及组名 然后报错 报错误的原因是因为maven版本太高和与你使用的IDEA版本不兼容 将maven的版本改为3.6并修改环境变量 …

销毁机密文件你还在用删的吗?文件粉碎了解一下哈!(附自制工具下载)

网管小贾 / sysadm.cc 窗外淅淅沥沥,陶克龙回到闷热的办公室,一屁股坐到了椅子上。 一大早他就接到了组织的秘密联络,他的身份已经暴露,需要尽快撤离。 此时的陶克龙大脑飞快地运转着,他需要从纷繁复杂的思绪中抽丝剥…

对于习惯使用ftp传输的企业,如何寻找最佳的替代方案?

FTP协议广泛应用各行业的文件传输场景中,对于很多企业而言,由于FTP应用获取门槛低、使用普遍,因此,有较为稳定的FTP使用习惯,但即便如此,也不得不面对,FTP应用存在着严重缺陷: 传输效…

AnaTraf:一款功能强大的网络流量分析工具,助您实现高效网络管理

在当下迅速发展的网络时代,网络流量分析已经成为网络管理和维护的关键环节。 AnaTraf网络流量分析仪:全面把控网络状况 AnaTraf 是一款高性能的实时网络流量分析工具,能够帮助您全面了解网络状况,提高网络运维效率。其主要功能包括: 全流量回溯分析&am…

node报错——解决Error: error:0308010C:digital envelope routines::unsupported——亲测可用

今天在打包vue2项目时,遇到一个报错: 最关键的代码如下: Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:80:19)百度后发现是node版本的问题。 在昨天我确实操作了一下node&…

终于找到微信聊天记录SQLite数据库文件解密方法了,一起来看看吧!

https://github.com/xuchengsheng/ 获取当前登录微信的微信昵称、账号、手机号、邮箱、秘钥、微信Id、文件夹路径 将微信PC的多个聊天记录数据库合并为单一数据库文件 支持微信聊天对话窗口(文本消息,引用消息,图片消息,表情消息…

亚马逊最新的 Echo Show 5 和 Show 8

爆爆!亚马逊最新智能显示器终于来了!Show 8可是一个功能超强的小工具,既能当数码相框、智能家居控制器和闹钟,还能控制您家中的几乎所有设备!8英寸的显示屏让您流媒体和视频通话体验更加流畅! 如果您不需要…

Java并发编程: Synchronized锁升级

文章目录 一、jdk8 markword实现表二、使用工具来查看锁升级 一、jdk8 markword实现表 new -> 偏向锁 -> 轻量级锁(自旋锁、自适应自旋锁)-> 重量级锁: 偏向锁和轻量级锁都是用户空间完成的。重量级锁是需要向内核申请的。 synchr…

第五十一周:文献阅读+CNN-LSTM-AM

目录 摘要 Abstract 文献阅读:基于CNN-LSTM-AM时空深度学习模型的城市供水预测 现存问题 提出方法 创新点 方法论 CNN-LSTM-AM模型 研究实验 数据集 预处理 评估指标 实验过程 合格性验证 模型实现 总结 摘要 本周阅读的文献《Urban Water Supply …

Unity WebGL过曝问题的解决策略

文章目录 一些可能的解决策略1. **调整曝光设置**:2. **使用Lerp或其他颜色混合技巧**:3. **HDR与色调映射**:4. **检查光源强度和范围**:5. **材质和纹理设置**:6. **使用Platform-specific Settings**:7.…

已解决ERROR: Could not find a version that satisfies the requirement 亲测有效!!!

已解决ERROR: Could not find a version that satisfies the requirement 亲测有效!!! 亲测有效 报错问题解决思路解决方法 报错问题 当你尝试使用pip安装某个Python包时,遇到了以下错误: ERROR: Could not find a v…

css: hover 划过显示/隐藏 div 样式

1. 图例: 划过用display: block;和 display: none; 显示div和隐藏div div: <div class="sectorBox"> <div v-for="(item, index) in sectorList" :key="index" class="sill"> <div class="si…

【uniapp】阿里云OSS上传 [视频上传]

引用uniapp插件市场的插件,使用的是视频上传 &#xff08;阿里云 oss上传&#xff09; 我只使用了H5和App端&#xff0c;需要后端配置跨域 yk-authpup详情请参考 》》【用户告知权限申请的目的】 【插件市场】阿里云存储OSS前端直接上传(全端通用) - 前端JASON <template>…

链表的回文结构(详解)

链表的回文结构&#xff08;详解&#xff09; 题目&#xff1a; 链表的回文结构 对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。 给定一个链表的头指针A&#xff0c;请返回一个bool值&#xff0c;代表…

机试:字符串相关简单问题

字符移动问题 这道题的描述是这样的&#xff1a;输入一个字符串&#xff0c;将其中的数字字符移动到非数字字符之后&#xff0c;并保持数字字符和非数字字符输入时的顺序。例如&#xff1a;输入字符串“ab4f35gr#a6”,输出为“abfgr#a4356”。 以下使我试着敲的代码&#xff…

GPS与精致农业 无人机应用 农业遥感 农业类

全球定位系统是美国国防部主要为满足军事部门对海上、陆地和空中设施进行高精度导航和定位的要求而建立的。GPS系统最基本的特点是以“多星、高轨、高频、测量-测距”为体制&#xff0c;以高精度的原子钟为核心。GPS作为新一代卫星导航与定位系统&#xff0c;不仅具有全球性、全…

命名空间、C++的输入输出、缺省参数(默认参数)、函数重载

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

【Leetcode每日一题】 穷举vs暴搜vs深搜vs回溯vs剪枝_全排列 - 子集(解法2)(难度⭐⭐)(72)

1. 题目解析 题目链接&#xff1a;78. 子集 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 为了生成一个给定数组 nums 的所有子集&#xff0c;我们可以利用一种称为回溯&#xff08;backtracking&#xff09;的算法…