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

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

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

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

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

1)多线程场景下如何使用 ArrayList?

  • ArrayList 不是线程安全的,多个线程同时对其进行读写操作可能会导致数据不一致或其他异常。
  • 如果需要在多线程环境中使用 ArrayList,可以考虑使用线程安全的集合类,如 CopyOnWriteArrayList 或通过使用同步机制来保证线程安全。
  • 如果多个线程需要同时读取 ArrayList,可以使用不可变的方式来保证线程安全,例如将 ArrayList 声明为 final 或使用 Collections.unmodifiableList() 方法返回一个只读的 List。

2)为什么 ArrayList 的 elementData 加上 transient 修饰?

ArrayList 的 elementData 字段加上 transient 修饰是为了在序列化过程中排除该字段。transient 关键字表示该字段不会被序列化,这是因为 ArrayList 的序列化过程是通过对数组元素进行逐个序列化来实现的,而不是对整个数组进行序列化。因此,为了避免重复序列化数组元素,elementData 字段被标记为 transient

3)List 和 Set 的区别

  • List 是有序的集合,可以存储重复的元素,可以通过索引访问元素。常见的 List 实现类有 ArrayList 和 LinkedList。
  • Set 是无序的集合,不能存储重复的元素,不支持通过索引访问元素。常见的 Set 实现类有 HashSet 和 TreeSet。
  • List 允许元素的插入和删除操作,可以通过索引来操作元素。Set 不允许重复元素的存在,插入重复元素会被忽略。
  • List 的遍历顺序是按照元素的插入顺序,而 Set 的遍历顺序是不确定的。
  • List 和 Set 都是接口,可以根据具体的需求选择使用哪个接口及其实现类。

总结来说,List 适合需要按照顺序存储元素并且需要频繁访问元素的场景,而 Set 适合需要去重并且不关心元素的顺序的场景。

4)说一下 HashSet 的实现原理?

  • HashSet 是基于 HashMap 实现的,底层使用 HashMap 存储元素。
  • HashSet 中的元素被存储在 HashMap 的 key 中,而 value 则被设置为一个固定的常量 Object。
  • 当向 HashSet 中添加元素时,实际上是将元素作为 key 存储到 HashMap 中,而 value 则是一个固定的常量 Object。
  • HashSet 利用 HashMap 的 key 的唯一性来保证元素的唯一性。

5)HashSet如何检查重复?HashSet是如何保证数据不可重复的?

HashSet 检查重复的方式是通过 HashMap 的 key 的唯一性来实现的。当向 HashSet 中添加元素时,HashSet 会将元素作为 HashMap 的 key 存储,而 value 则是一个固定的常量 Object。由于 HashMap 的 key 是唯一的,所以当尝试向 HashSet 中添加重复的元素时,新元素的 key 会与已存在的 key 相同,导致添加操作失败,从而保证了 HashSet 中不会存在重复的元素。

6)HashSet与HashMap的区别

  • 存储方式:HashSet 是基于 HashMap 实现的,底层使用 HashMap 存储元素。
  • 元素类型:HashSet 存储的是不重复的元素,而 HashMap 存储的是键值对(key-value)。
  • 元素顺序:HashSet 是无序的,元素的顺序是不确定的;而 HashMap 是无序的,元素的顺序是由键的哈希值决定的。
  • 元素访问:HashSet 不支持通过索引访问元素;而 HashMap 可以通过键来访问对应的值。
  • 重复元素:HashSet 不允许重复元素的存在,添加重复元素会被忽略;而 HashMap 允许键的重复,但不允许值的重复。
  • 性能:HashSet 的性能略低于 HashMap,因为 HashSet 需要通过哈希计算来确定元素的存储位置,而 HashMap 需要同时存储键和值。

综上所述,HashSet 和 HashMap 在存储方式、元素类型、元素顺序、元素访问、重复元素和性能等方面存在一些区别。选择使用哪个取决于具体的需求和使用场景。

7)BlockingQueue是什么?

BlockingQueue是Java中的一个接口,它表示一个支持线程安全的、有限容量的队列。它定义了一组用于添加、移除、查询元素的方法,以及阻塞等待队列操作的方法。BlockingQueue通常用于多线程环境下的生产者-消费者模型,其中生产者线程将元素放入队列,消费者线程从队列中取出元素进行处理。BlockingQueue提供了一种线程安全的方式来实现线程间的数据传输和同步。

8)说一下 HashMap 的实现原理?

HashMap 是 Java 中常用的数据结构之一,它是基于哈希表实现的。HashMap 通过将键值对存储在一个数组中,并使用键的哈希值来确定存储位置,从而实现快速的插入、删除和查找操作。HashMap 的实现原理如下:

  • HashMap 使用数组和链表(或红黑树)的组合来存储键值对。
  • 当向 HashMap 中插入键值对时,首先根据键的哈希值计算出在数组中的存储位置,如果该位置为空,则直接插入;如果该位置已经存在元素,则通过比较键的哈希值和键的相等性来判断是否为相同的键,如果是相同的键,则更新对应的值;如果是不同的键,则将该键值对添加到链表(或红黑树)的末尾。
  • 当从 HashMap 中获取值时,根据键的哈希值计算出在数组中的存储位置,然后遍历链表(或红黑树)进行比较,找到对应的键值对并返回值。
  • 当从 HashMap 中删除键值对时,根据键的哈希值计算出在数组中的存储位置,然后遍历链表(或红黑树)进行比较,找到对应的键值对并删除。

9)HashMap在JDK1.7和JDK1.8中有哪些不同? HashMap的底层实现

在 JDK 1.7 和 JDK 1.8 中,HashMap 的实现有以下不同之处:

  • JDK 1.7 中的 HashMap 使用数组和链表的组合来存储键值对,当链表长度超过一定阈值时,会将链表转换为红黑树,以提高查找效率。而 JDK 1.8 中引入了红黑树的新实现,即链表长度超过一定阈值时,会进行树化操作,使得整个查找过程更加高效。
  • JDK 1.8 中的 HashMap 在处理哈希冲突时使用了一种新的方式,即通过计算键的哈希值和数组长度的按位与操作来确定存储位置,而不是传统的取模操作,这样可以更快地计算出存储位置。
  • JDK 1.8 中的 HashMap 在扩容时使用了一种新的方式,即将原来的数组分成两个部分,分别处理原数组中的元素和新增元素,减少了元素的复制次数,提高了扩容的效率。

10)HashMap的put方法的具体流程?

HashMap 的 put 方法的具体流程如下:

  • 首先,根据键的哈希值计算出在数组中的存储位置。
  • 如果该位置为空,则直接将键值对插入到该位置。
  • 如果该位置已经存在元素,则遍历链表(或红黑树)进行比较,找到对应的键值对。
  • 如果找到了相同的键,则更新对应的值。
  • 如果找到了不同的键,则将该键值对添加到链表(或红黑树)的末尾。
  • 如果链表(或红黑树)的长度超过一定阈值,进行相应的转换操作(链表转换为红黑树,或红黑树转换为链表)。
  • 如果数组的使用空间超过了负载因子(默认为 0.75)乘以数组长度的阈值,进行扩容操作,将原来的数组扩大一倍,并重新计算存储位置。

通过以上流程,HashMap 的 put 方法可以实现将键值对添加到 HashMap 中,并根据键的哈希值进行查找和更新操作。

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

前后端总计已经 800+ Star,1.5W+ 访问!

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

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

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

相关文章

聊聊车载以太网PMA测试解决方案

自2013年起,车载以太网技术日益成熟,在电子电气系统中应用越来越广泛,因此逐渐有很多主机厂和供应商加入到车载以太网技术的开发应用中,同时对传输速率的要求逐步提高,产生了传输速率更高的车载以太网技术,…

排序算法练习——实现合并区间:给定一组区间,将所有重叠的区间合并为一个区间

要实现合并区间,你可以按照区间的起始位置对区间进行排序,然后依次遍历区间,将重叠的区间合并。以下是实现的示例代码: def merge_intervals(intervals):if not intervals:return []# 按照区间的起始位置进行排序intervals.sort(…

低代码开发平台开源:依靠科技力量实现数字化转型!

在竞争激烈的当今社会,数字化转型、流程化办公等字眼早已充斥在我们的职场生活中。虽然如此,但是我们依然要面临着这样一个现实问题:很多中小企业发展面临着资源有限、技术储备不足、人才短缺的现实问题,进入流程化办公困境依然明…

Linux东方通下载及使用

解压文件 mkdir /usr/local/java 加压包拖进去 vi /etc/profile 复制路径修改路径 export JAVA_HOME/usr/local/java/jdk1.8.0_151 export CLASSPATH.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export PATH$PATH:${JAVA_HOME}/bin 进入…

Day41:WEB攻防-ASP应用HTTP.SYS短文件文件解析Access注入数据库泄漏

目录 ASP-默认安装-MDB数据库泄漏下载 ASP-中间件-CVE&短文件&解析&写权限 HTTP.SYS(CVE-2015-1635)主要用作蓝屏破坏,跟权限不挂钩 IIS短文件(iis全版本都可能有这个问题) IIS文件解析 IIS写权限 ASP-SQL注入-SQLMAP使用…

C语言实现射击小游戏

以下是一个简单的C语言射击小游戏的实现示例。这个游戏中&#xff0c;玩家控制一个飞船&#xff0c;敌方飞船会随机出现并向玩家移动。如果玩家的飞船与敌方飞船相撞&#xff0c;玩家就失去一条生命&#xff0c;代码如下&#xff1a; #include <stdio.h> #include <s…

1.1-编程语言是什么

编程语言是什么 正式学习 Python 之前&#xff0c;我们有必要先搞清楚【编程语言】这个概念。 在我们很小的时候&#xff0c;父母就教我们开口说话&#xff0c;也教我们如何理解别人讲话的意思。经过长时间的熏陶和自我学习&#xff0c;我们在不知不觉中学会了说话&#xff0…

软件推荐 篇三十七:安卓软件推荐IP Tools「IP工具」:全面解析网络状态与管理的必备神器

引言&#xff1a; 随着互联网的普及&#xff0c;网络已经成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;我们都需要通过网络来进行各种操作。然而&#xff0c;网络问题的出现往往会给我们带来诸多困扰。为了更好地管理和优化网络&#xff0c;我们…

SunFMEA冠翔(台山)工业FMEA培训会圆满结束

近日&#xff0c;SunFMEA软件成功在冠翔&#xff08;台山&#xff09;工业有限公司举办了为期三天的FMEA软件系统培训&#xff0c;通过重要知识讲解、现场答疑、演练互动、软件实操等环节&#xff0c;把培训氛围推向高潮。 ​ 此次培训分为DFMEA与PFMEA两部分&#xff0c;按照七…

LiveGBS流媒体平台GB/T28181常见问题-如何订阅设备状态在线离线状态redis订阅设备或是通道状态subscribe device操作及示例

LiveGBS如何订阅设备状态在线离线状态redis订阅设备或是通道状态subscribe device操作及示例 1、如何监听设备状态2、device订阅2.1、设备上线消息2.2、设备离线消息2.2、通道上线消息2.2、通道离线消息 3、订阅示例3.1、连接REDIS3.2、订阅device示例3.3、设备上线示例3.3.1、…

Oracle数据库进行sql优化的思路和方法

1. 查询语句优化 精简SQL: 避免使用 SELECT *&#xff0c;只选择需要的列&#xff0c;减少数据传输量。避免NOT IN 和 NOT EXISTS: 当可行时&#xff0c;改用 LEFT JOIN 或其他形式的查询&#xff0c;因为NOT IN和NOT EXISTS往往导致全表扫描或较差的执行计划。避免在WHERE子句…

binary.write 和 binary.read

golang中encoding/binary包 1、golang包中的binary包是什么&#xff1f; 2、binary为我们开发者提供了哪些内容&#xff1f;以及怎么使用&#xff1f; 3、编解码有哪几种方法&#xff1f; 转化成二进制格式与原本数据转字符串相比会更节省空间 一、golang包中的binary包是什…

用DevOpsGPT 5分钟开发一个网页小游戏

前言&#xff1a; 今天教大家如何制作一个简易的网页小游戏&#xff0c;步骤很简单&#xff0c;我们只需要用到一个智能开发软件&#xff0c;即可自动帮助我们完成开发。话不多说&#xff0c;接下来&#xff0c;我们直接上教程&#xff01; ​ 官网&#xff1a;KUAFUAI - AI 驱…

ESP32通过USB/UART/ble/其他协议OTA报错解决

1、乐鑫官方例程 ESP32的OTA 例程是基于HTTP接口&#xff0c;需要连接WIFI和HTTP服务器&#xff0c;使用上不是很灵活&#xff0c;根据ESP32 idf component OTA相关API接口&#xff0c;理论上可以通过任何通信方式和协议进行升级&#xff0c;只要保证文件传输准确、flash空间足…

基于Matlab的视频人体动作识别,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

智过网:一级建造师必须两年考过吗?有效期多久?

在建筑行业&#xff0c;一级建造师的职业资格证书是众多从业者追求的目标。然而&#xff0c;获得这一证书并非易事&#xff0c;它要求考生不仅具备扎实的专业知识&#xff0c;还需要在限定的时间内完成所有科目的考试。那么&#xff0c;一级建造师是否必须在两年内考完所有科目…

Guided Filter算法详解

论文地址 代码实现 def Guidedfilter(im,p,r,eps):mean_I cv2.boxFilter(im,cv2.CV_64F,(r,r));mean_p cv2.boxFilter(p, cv2.CV_64F,(r,r));mean_Ip cv2.boxFilter(im*p,cv2.CV_64F,(r,r));cov_Ip mean_Ip - mean_I*mean_p;# cov(x, y) E[XY] - E[X]E[Y]mean_II cv2.…

MySQL系统参数配置实战:生产环境优化

引言&#xff1a; MySQL作为广泛应用的关系型数据库&#xff0c;其系统参数配置直接影响着数据库的性能、稳定性以及资源利用率。本文旨在深入探讨MySQL的核心系统参数&#xff0c;并提供一份面向生产环境的配置建议&#xff0c;以帮助运维人员更好地优化数据库性能&#xff0…

harmonyos:Socket连接

场景介绍 应用通过Socket进行数据传输&#xff0c;支持TCP和UDP两种协议。 接口说明 Socket连接主要由socket模块提供。具体接口说明如下表。 接口名 功能描述 constructUDPSocketInstance() 创建一个UDPSocket对象。 constructTCPSocketInstance() 创建一个TCPSocket对…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(文本滑动选择器弹窗)

根据指定的选择范围创建文本选择器&#xff0c;展示在弹窗上。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 本模块功能依赖UI的执行上下文&#xff0c;不可在UI上下文不明确的地方使用&#xf…