java八股!1
集合
目录
- 集合
- java中存在哪些集合?底层实现逻辑?
- 哪些集合是线程安全的?
- 集合的对比:
- hash冲突如何解决
- hashmap为什么线程不安全,如何实现安全?
- hashmap中循环链表的产生
- hashmap底层实现原理和扩容机制
- map的遍历方式
java中存在哪些集合?底层实现逻辑?
哪些集合是线程安全的?
hashtable(不常用,低并发下性能较差,因为put和get操作都需要同步),concurrenthashmap,基于分段锁实现,将数据结构分段,不同线程可以同时对不同段读写,提高并发度。
集合的对比:
一律从底层实现(数组,动态数组,双向链表,红黑树),线程安全(vector,hashtable,concurrenthashmap是线程安全的),迭代方式,元素类型(基本元素or对象,可否存null,是否重复,是键值对还是单一元素),
hashmap与hashtable
hashmap与hashset(map存储键值对,set存储单一键值,set可以放一个null,map的key和value都可为null,性能方面由于set只存值,性能相比map较好)
arraylist与linkedlist
arraylist与arraydeque
hashmap与concurrenthashmap区别(线程安全,concurrent通过分段锁实现,高并发和低并发下二者有不同性能,hashmap在并发下只能通过外部同步的方法实现同步,collections.synchronizedmap()方法。。以及迭代时是否需要加锁)
hash冲突如何解决
先说明hash冲突的发生原因,hash表的实现是由数据经过hash函数运算得到的位置进行存储,但hash表的位置是有限的,计算的数据是无限的,总会出现不同组数据经过计算得到相同hash值的情况,就叫hash冲突。
解决方法:
开放寻址:根据冲突后的地址向前寻找一个空闲的位置进行存储
链式寻址:把存在hash冲突的位置按单向链表的形式存储
再hash法:再使用另一个hash函数对这个key进行运算,直到不再发生冲突。此方法会对性能有影响,可能会增加计算时间。
建立公共溢出区:把hash表分为基本表和溢出表,有冲突的值一律放到溢出表的部分
hashmap为什么线程不安全,如何实现安全?
并发修改,可能一个线程进行写操作,另一个线程读操作的时候可能会读取到不一致的数据导致抛出异常。
操作不是原子的,比如查找某个key是否存在的操作,多个线程可能会产生竞态条件。
实现安全,通过collections.concurrentsynchronizedMap(),创建一个线程安全的hashmap,使put和get操作实现同步
或使用concurrentHashmap
或显示地使用锁
hashmap中循环链表的产生
jdk1.7中是使用头插法给table扩容的,在多线程的情况下容易导致线程1还在处理节点,线程2已经逆序扩好容了,此时会产生循环链表的情况
hashmap底层实现原理和扩容机制
哈希表里的每个元素都是一个node类(基于map.entry的实现),node对象包含key,value,hash值,next节点存储下一个节点位置,所以只需要记录每个hash的第一个node就可以遍历到整个map中的node
map的遍历方式
forEach+getkey()/values()一次性取出所有key或者value遍历
forEach+entrySet,将键值对存入set遍历
使用interator+entrySet()结合,优点是每一步循环都可控,循环过程中可以改变集合的长度(forEach循环中不可以改变)
使用stream流+lambda表达式
相关文章:
java八股!1
集合 目录 集合java中存在哪些集合?底层实现逻辑?哪些集合是线程安全的?集合的对比:hash冲突如何解决hashmap为什么线程不安全,如何实现安全?hashmap中循环链表的产生hashmap底层实现原理和扩容机制map的遍…...

【学术会议征稿】2024年智能驾驶与智慧交通国际学术会议(IDST 2024)
2024年智能驾驶与智慧交通国际学术会议(IDST 2024) 2024 International Conference on Intelligent Driving and Smart Transportation 智能驾驶和智慧交通利用新兴技术,使城市出行更加方便、更具成本效益且更安全。在此背景下,由中南大学主办的2024年…...

2024最全网络安全工程师面试题(附答案)
🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 2024年过去了一大半,先来灵魂三连问,年初定的目标完成多少了?薪资涨了吗?女朋友找到了吗? 一、网络…...
828华为云征文| 华为云 Flexus X 实例:引领云计算新时代的柔性算力先锋
828华为云征文| 华为云 Flexus X 实例:引领云计算新时代的柔性算力先锋 1. 推出背景 在数字经济快速发展的当下,数字化转型已成为企业发展的必然趋势。然而,中小企业在数字化转型过程中面临着诸多困境。据《2024 年中小企业数字化转型白皮书…...

何时何地,你需要提示工程、函数调用、RAG还是微调大模型?
介绍 在快速发展的生成式人工智能领域,某些流行术语已变得司空见惯:“提示工程”、“函数调用”、“RAG”和“微调”,你应该也经常遇到这些术语,但你是否能够理清这些概念之间的关系?这些其实都是一些大模型的应用策略…...

three.js线框模式
背景 设计师希望弄一个模型的这个效果: 但是,我使用three.js提供的EdgesGeometry死活只能做到下面这种: 后来才知道three.js只支持画三角面,四边形面并不支持,这是由更底层的webGL决定的。 但是在查找资料的过程中&…...

VScode 的简单使用
目录 1. VScode 的使用 1.1 常用插件 1.2 常用快捷键 1. VScode 的使用 1.1 常用插件 1.2 常用快捷键 也可以“ CTRLD ”;使用“CTRL滚轮”即可; ctrl /-,是用来展开/收起代码的; 比如:js 的多行注释是 shiftalt…...

五星级可视化页面(07):城市交通方向,城市畅通的保障。
城市交通方面的可视化大屏,一方面用户可以通过五星级可视化页面快速了解城市交通方向,实时掌握交通状况,选择最佳出行方案,提高出行效率,另一方面也有助于城市交通管理部门进行交通流量调度和管理。 本期发布一些经典…...

贪心+构造,1924A - Did We Get Everything Covered?
目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1924A - Did We Get Everything Covered? 二、解题报告 1、思路分析 我…...

麦汁煮沸工艺
麦汁煮沸是啤酒酿造中至关重要的工艺环节之一,直接影响啤酒的风味。今天,天泰邀您一起深入探讨这一关键的酿造技术。 煮沸麦汁 在煮沸麦汁时,时间和温度控制至关重要。通常,麦汁煮沸持续 40 到 50 分钟,具体时间取决于…...

企业级WEB应用服务器---TOMACT
一、WEB技术介绍 1.1 Http和B/S结构 操作系统一般都有子进程系统,使用多进程就可以充分利用硬件资源,提高效率。在前面的学习中我们了解到进程中可以有多个线程,且每一个线程都可以被CPU调度执行,这样就可以让程序并行执行。一台…...

前端:JavaScript中的this
前端:JavaScript中的this 1. this的指向2. 指定this的值3. 手写call方法4. 手写apply方法5. 手写bind方法 1. this的指向 在非严格模式下,总是指向一个对象;在严格模式下可以是任意值。 开启严格模式,如果是为整个脚本开启&#…...

Zynq7020 SDK 初学篇(5)- 中断
1.开发背景 基于上一个篇章 GPIO 使用,引入中断的使用。 2.开发需求 PS 和 PL 按键输入中断,并输出对应的日志打印 3.开发环境 Zynq7020 Vivado2017.4 4.实现步骤 4.1 设计配置 PL Key0 56 PS key0 12 PS key1 11 4.2 代码编写 GPIO 配置 #if…...

如何清缓存
谷歌浏览器: ctrlshiftR 360安全浏览器如下图 1、点击右上角三横杠-点击“设置” 2、进入设置后-点击“安全设置”-点击“清理上网痕迹设置” 3、时间范围选全部-只勾选浏览器缓存的临时文件,其他的别勾选 4、点击“立即清除”...

《计算机算法设计与分析》笔记
第一章 算法概述 1.1算法性质: 输入、输出、确定性、有限性 1.2时间复杂度 上界记号O:如果存在正的常数C和自然数N0,使得当N≧N0时有f(N)≦Cg(N),则f(N)有上界函数g(N),记为f(N) O(g(N))。 同阶记号θ:…...

智能指针怎么就智能了?
在C中,内存泄漏是一个不太容易发现但又有一定影响的问题,而且在引入了异常的机制之后,代码的走向就更加不可控,更容易发生内存泄露。【补充:内存泄露(Memory Leak)指的是在程序运行期间…...

mysql 限制用户登录次数超过3次就 锁定账户在一段时间内不运行操作
这里是引用 主要实现步骤: 1.目测安装的mysql版本得是5.7.40往上,因为我的版本是5.7.14发现里面没有控制等下限制这个插件,插件具体的查看是在你安装目录下的lib/pugin下面 比如我的:C:\zz\ProgramFiles\MySQL\MySQL Server 5.7\l…...
深度学习中的常用线性代数知识汇总——第二篇:行列式、逆矩阵、特征值与特征向量
文章目录 0. 前言1. 行列式1.1 行列式的定义1.2 行列式的计算方法1.3 行列式的性质1.4 行列式在深度学习中的应用 2. 逆矩阵2.1 逆矩阵的定义2.2 逆矩阵的计算方法2.3 逆矩阵的性质2.4 逆矩阵在深度学习中的应用 3. 特征值与特征向量3.1 特征值与特征向量的定义3.2 特征值和特征…...

《MaPLe: Multi-modal Prompt Learning》中文校对版
系列论文研读目录 文章目录 系列论文研读目录题目:《Maple:多模态提示学习》摘要1.简介2.相关工作视觉语言模型:提示学习:视觉语言模型中的提示学习: 3.方法3.1.回看CLIP编码图像:编码文本:Zero…...

MFC修改控件ID的详细说明
控件的ID可以在该对话框的.rc中修改 首先需要开启资源视图 然后在资源视图中打开该对话框 选中某个控件,就可以在属性面板中修改ID了 在此处修改ID后,对应Resource.h中也会发生变化 若在.rc中创建了一个控件时,Resource.h中会生成一个对应…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...