文章目录

  • 一、前言🚀🚀🚀
  • 二、Java 基础面试题:☀️☀️☀️
      • 1、说说 Java 中 HashMap 的原理?
      • 2、HashMap 的扩容机制?
      • 3、为什么 Java 中 HashMap 的默认负载因子是 0.75?
      • 4、JDK 1.8 对 HashMap 除了红黑树还进行了哪些改动?
      • 5、Java 中 ConcurrentHashMap 1.7 和 1.8 之间有哪些区别?
      • 6、数组和链表在 Java 中的区别是什么?
  • 后序还在更新中~~~
  • 三、总结:🍓🍓🍓


一、前言🚀🚀🚀

在这里插入图片描述

☀️
你每一天的努力会在未来的某一个点交汇成宏伟的画面。


本文简介:本人是大二软件工程专业,java后端方向,学习路线:java基础->JDBC->Maven->MyBatis->SSM,通过做笔记分享到博客上的形式,激励自己学习,同时方便复习。由于水平为入门级别,如有错误,希望大佬们评论或私信斧正 Thanks♪(・ω・))ノ



二、Java 基础面试题:☀️☀️☀️

1、说说 Java 中 HashMap 的原理?

  HashMap 是基于哈希表的数据结构,用于存储键值对(key-value)。其核心是将键的哈希值映射到数组索引位置,通过数组 + 链表(在 Java 8 及之后是数组 + 链表 + 红黑树)来处理哈希冲突。
  HashMap 使用键的 hashCode() 方法计算哈希值,并通过 indexFor 方法(JDK 1.7 及之后版本移除了这个方法,直接使用 (n - 1) & hash)确定元素在数组中的存储位置。哈希值是经过一定扰动处理的,防止哈希值分布不均匀,从而减少冲突。
HashMap 的默认初始容量为 16,负载因子为 0.75。也就是说,当存储的元素数量超过 16 × 0.75 = 12 个时,HashMap 会触发扩容操作,容量x2并重新分配元素位置。这种扩容是比较耗时的操作,频繁扩容会影响性能。

2、HashMap 的扩容机制?

  HashMap 的默认初始容量为 16,负载因子为 0.75。也就是说,当存储的元素数量超过 16 × 0.75 = 12 个时,HashMap 会触发扩容操作,容量x2并重新分配元素位置。
  扩容时,Hashmap需要重新计算所有元素的哈希值,并将它们重新分配到新的哈希桶中,这个过程称为rehashing。每个元素的存储位置会根据新容量的大小重新计算哈希值,并移动到新的数组中。
  这种扩容是比较耗时的操作,频繁扩容会影响性能。

3、为什么 Java 中 HashMap 的默认负载因子是 0.75?

  是为了在时间复杂度和空间复杂度之间取得一个合理的平衡,负载因子为 0.75 时,避免过多扩容的同时,也保证了不会出现过多的哈希冲突,
  确保查找和插入操作的效率,维持良好的性能表现。

4、JDK 1.8 对 HashMap 除了红黑树还进行了哪些改动?

  改进了哈希函数的计算:JDK 1.8 中优化了哈希函数,使得哈希值的分布更加均匀,减少了哈希冲突的发生,通过在生成哈希值时使用“扰动函数”,确保哈希值的高低位都能参与到桶的选择中。
  扩容机制优化:JDK 1.8 改进了扩容时的元素迁移机制。在扩容过程中不再对每个元素重新计算哈希值,而是根据原数组长度的高位来判断元素是留在原位置,还是迁移到新数组中的新位置。这一改动减少了不必要的计算,提升了扩容效率。
  头插法变为尾插法:头插法的好处就是插入的时候不需要遍历链表,直接替换成头结点,但是缺点是扩容的时候会逆序,而逆序在多线程操作下可能会出现环,产生死循环,于是改为尾插法。

5、Java 中 ConcurrentHashMap 1.7 和 1.8 之间有哪些区别?

  JDK 1.7 ConcurrentHashMap 采用的是分段锁,即每个 Segment 是独立的,可以并发访问不同的 Segment,默认是 16 个 Segment,所以最多有 16 个线程可以并发执行。
  而 JDK 1.8 移除了 Segment,锁的粒度变得更加细化,锁只在链表或红黑树的节点级别上进行。通过 CAS 进行插入操作,只有在更新链表或红黑树时才使用 synchronized,并且只锁住链表或树的头节点,进一步减少了锁的竞争,并发度大大增加。
并且 JDK 1.7 ConcurrentHashMap 只使用了数组 + 链表的结构,而 JDK 1.8 和 HashMap一样引入了红黑树。
  除此之外,还有扩容的区别以及 size 方法的计算也不一样。

6、数组和链表在 Java 中的区别是什么?

  1、数组是内存中连续的空间,而链表可以不连续
  2、数组长度固定,如果需要扩展数组,需要重新开辟一片空间使用。而链表可以直接用指针指向不同的地址,扩展方便。
  3、在读取多的场景下适合用数组,数组可以直接用下标访问,而在插入和删除操作多的场景下适合用链表4、链表需要额外的空间存储指针,占用的空间会比数组更多。

  
  
  
  
    
  
  
  
  

后序还在更新中~~~

Alt

三、总结:🍓🍓🍓

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
Alt

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

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

相关文章

如何创建并使用极狐GitLab 部署令牌?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 部署令牌 (BASIC ALL) 您可以使用部署令牌来启用部署任务的身份验证,而与用户账户无关。在大多数情况下&#xf…

OpenGl ES 3.0 笔记一:初步概念

🎯 整体比喻:开一场 3D 打印画展! 想象你在做一件事情:「拿设计图,把它画在一张纸上」。 这整个流程就好像 GPU 在渲染一幅画。 而下面这几个阶段,就是这场「画展」里每个具体的人或机器要做的事情&#x…

人类社会的第四阶段

本书的主旨是探讨一场新的权力革命,它将以20世纪民族国家的毁灭为代价, 解放出个体。创新,以前所未有的方式改变了暴力的逻辑,并且正在革新未来的 边界。如果我们的推论是正确的,你们正站在一场有史以来最宏大的革命的…

位置差在坐标系间的相互转换

1 NED转经纬高 (n 系下的北向、东向和垂向位置差异(单位 m)转化为纬度、经度和高程分量的差异) 2 基站坐标转换 纬度、经度、高程 到 ECEF %纬度、经度、高程 到 ECEF clc; clear; glvs; addpath(genpath(E:\GNSSINS\ACES)…

WPF定义扩展属性和依赖属性

WPF扩展属性与依赖属性详解 一、依赖属性(Dependency Property)详解 1. 什么是依赖属性? 依赖属性是WPF框架的核心特性之一,它允许属性值依赖于: 父元素的属性值(继承)样式和模板动画数据绑定资源查找2. 依赖属性的特点 ​​属性值继承​​:子元素可以继承父元素的属性…

边缘函数:全栈开发的最后1毫秒性能革命

一、边缘计算的时空折叠术 1. 传统CDN vs. 智能边缘网络 全球电商平台实测数据: 场景云端处理延迟边缘处理延迟转化率提升搜索建议320ms8ms18%个性化推荐450ms12ms27%实时库存检查680ms9ms42%欺诈检测920ms15ms63% 二、边缘全栈架构的量子纠缠 1. 代码的时空分布…

Codeforces Round 1021 (Div. 2) D. Baggage Claim(建图)

每周五篇博客:(4/5) https://codeforces.com/contest/2098/problem/D 题意 每个机场都有一个行李索赔区,巴尔贝索沃机场也不例外。在某个时候,Sheremetyevo的一位管理员提出了一个不寻常的想法:将行李索…

LLM(大语言模型)技术的最新进展可总结

截至2025年4月26日,LLM(大语言模型)技术的最新进展可总结为以下关键方向: 1. 架构创新与性能突破 多模态能力深化:GPT-4o等模型通过统一架构支持文本、图像、音频和视频的跨模态推理,显著提升复杂场景下的…

黑马点评redis改 part 6

GEO数据结构 GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有: GEOADD:添加一个地理空间信息,包含&a…

Spring_MVC 中的 JSON 数据处理与 REST 风格开发

Spring_MVC 中的 JSON 数据处理与 REST 风格开发 一、JSON 格式参数 1. 格式布置 依赖导入 为了处理 JSON 数据&#xff0c;需要在项目中引入 Jackson 库&#xff0c;它是 Spring_MVC 默认使用的 JSON 处理工具。 <dependency><groupId>com.fasterxml.jackson…

蓝桥杯 8. 移动距离

移动距离 原题目链接 题目描述 X 星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。楼房的编号为 1, 2, 3, ⋯⋯。 当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。 例如&#xff0c;当小区排号宽度为 6 时&#xff0c;排列如下&#xff1a; 1 2 …

第11章 安全网络架构和组件(一)

11.1 OSI 模型 协议可通过网络在计算机之间进行通信。 协议是一组规则和限制&#xff0c;用于定义数据如何通过网络介质&#xff08;如双绞线、无线传输等&#xff09;进行传输。 国际标准化组织(ISO)在20世纪70年代晚期开发了开放系统互连(OSI)参考模型。 11.1.1 OSI模型的…

文献分享:一种四价双特异性抗体的功能性和IgG样稳定性、药理学和可开发特性研究

背景 双特异性抗体&#xff08;bsAb&#xff09;是一种有前途的药物形式&#xff0c;能够同时结合相同或不同抗原上的两个不同表位。迄今为止&#xff0c;已有14个双特异性抗体药物获得上市批准&#xff0c;尽管取得了这些成功并且迄今为止设计了多种形式&#xff0c;但具有高…

英文中数字读法规则

以下是英文中数字读法的详细规则&#xff0c;涵盖基本数字、大数字、小数、分数、序数词及特殊场景&#xff08;如电话号码、年份、金额等&#xff09;&#xff1a; 一、基本数字&#xff08;0-10&#xff09; 数字基数词&#xff08;Cardinal&#xff09;序数词&#xff08;O…

32BIT的SPI主机控制

SPI传输位数可参数化配置。 SPI_MASTER: timescale 1ns / 1ps module SPI_Master #(parameter CLK_FREQ 50,parameter SPI_CLK 1000,parameter CPOL 0,parameter CPHA 0 )(input clk,input rst_n,input WrRdReq, //读/写数据请求output …

vue响应式原理——vue2和vue3的响应式实现区别

Vue的核心功能点之一是响应式&#xff1a;Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 DOM。 简单的来说就是&#xff0c;页面的渲染效果会随着数据变化而变化&#xff0c;不用我们去手动操作DOM树进行数据变化后的渲染。为了实现这一目的&#xff0c;我们最简…

Kaamel白皮书:2025版COPPA落地实操指南

COPPA简介 《儿童在线隐私保护法案》&#xff08;COPPA&#xff09;于1998年在美国颁布&#xff0c;其最初的动因源于人们日益增长的对互联网上收集儿童个人信息的担忧。为了响应这一问题&#xff0c;联邦贸易委员会&#xff08;FTC&#xff09;被授权制定并执行相关法规。COP…

测试基础笔记第十四天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、字符串1.字符串2.字符串切片3.查找find&#xff08;&#xff09;4.去除两端空白字符 strip5.字符串转换大小写 lower、upper5.拆分 split()6.字符串的其他常见方…

什么是Lua模块?你会如何使用NGINX的Lua模块来定制请求处理流程?

大家好&#xff0c;我是锋哥。今天分享关于【什么是Lua模块&#xff1f;你会如何使用NGINX的Lua模块来定制请求处理流程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是Lua模块&#xff1f;你会如何使用NGINX的Lua模块来定制请求处理流程&#xff1f; 1000道 互联…

ubuntu扩展逻辑卷并调整文件系统大小步骤

安装好ubuntu如果没有调整磁盘空间,一般默认给你100G的空间,在用完时再调整也还来得及,下面是 ubuntu扩展逻辑卷并调整文件系统大小步骤&#xff1a; 1. 扩展逻辑卷 运行以下命令来扩展逻辑卷 /dev/ubuntu-vg/ubuntu-lv&#xff0c;使其使用卷组中所有未分配的空间&#xff…