java技术圈 为您找到相关结果 47

简析hashset的实现原理

hashset底层为hashmap。 源码如下: /** * Constructs a new, empty set; the backing HashMap instance has * default initial capacity (16) and load factor (0.75). */ public HashSet() { map = new HashMap<>(); } 默认 initial capacity(hashmap底层数组大小)为16,load factor 为 0.75 add() 方法 /** * Adds the specified element to this set if it is not already present. * Mo...阅读全文

博文 2019-04-04 09:46:40 www.allocmem.com

自己写LinkedList GoLinkedList

##前言: java GoLinkedList的简易实现,代码中注释比较详尽,通俗易懂,注意事项亦在注解中标明。 ###正文: GoLinkedList.java package com.anteoy.dataStructuresAndAlgorithm.javav2.my; import java.util.Iterator; /** * Created by zhoudazhuang on 17-3-1. * Description: 简易Linkedlist实现 */ public class GoLinkedList implements Iterable{ //当前容量 size private int currentSize; //附加的数据域 用来帮助迭代气检测集合...阅读全文

博文 2019-04-04 09:50:50 www.allocmem.com

简析hashmap的实现原理

提一下哈希表,看下百科: 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。 简单理解:1.通过某种算法(使用key的hash算法),计算出key的磁盘散列值,优点为速度和易用。 2.hashmap底层实现仍为数组(HashMap 底层就是一个数组结构,数组中的每一项又是一个链表。数组每个元素里存的是链表的表头信息,有了表头就可以遍...阅读全文

博文 2019-04-04 09:46:30 www.allocmem.com

自己写GoBinaryHead 二叉堆binaryheap实现优先队列(堆)

##前言: java GoBinaryHead二叉堆binaryheap实现优先队列(堆) 1. 二叉堆是完全二叉树 因为完全二叉数的规律(root始终最小) 用数组实现此数据结构优于链表 2. ,注意在插入和删除时,需要在数组实现的完全二叉树结构代码中,对原有节点数据进行上滤和下滤,插入时,和子树的根节点比较, 只有比子树根节点大才能满足定义, 否则循环交换位置。堆内元素向下移动为 下滤,删除后空余的位置,从上至下找最小儿子节点填充 3. 在printHeap()方法中对数组的遍历使用了去null操作。 4. 代码中已给出比较详尽注释。 ###正文: GoBinaryHeap.java package com.anteoy.dataStructuresAndAlgorithm.javav2...阅读全文

博文 2019-04-04 09:51:22 www.allocmem.com

Golang map 的底层实现

在开发过程中,map是必不可少的数据结构,在Golang中,使用map或多或少会遇到与其他语言不一样的体验,比如访问不存在的元素会返回其类型的空值、map的大小究竟是多少,为什么会报"cannot take the address of"错误,遍历map的随机性等等。 本文希望通过研究map的底层实现,以解答这些疑惑。 基于Golang 1.8.3 1. 数据结构及内存管理 hashmap的定义位于 src/runtime/hashmap.go 中,首先我们看下hashmap和bucket的定义: type hmap struct { count int // 元素的个数 flags uint8 // 状态标志 B uint8 // 可以最多容纳 6.5 * 2 ^ B 个元素,6.5为装载...阅读全文

博文 2019-05-16 09:40:27 简书

解剖Go语言map底层实现

map是Go语言中基础的数据结构,在日常的使用中经常被用到。但是它底层是如何实现的呢? Golang中map的底层实现是一个散列表,因此实现map的过程实际上就是实现散表的过程。在这个散列表中,主要出现的结构体有两个,一个叫hmap(a header for a go map),一个叫bmap(a bucket for a Go map,通常叫其bucket)。这两种结构的样子分别如下所示:hmap: 图中有很多字段,但是便于理解map的架构,你只需要关心的只有一个,就是标红的字段:buckets数组。Golang的map中用于存储的结构是bucket数组。而bucket(即bmap)的结构是怎样的呢? bucket: 相比于hmap,bucket的结构显得简单一些,标红的字段依然是“核心”...阅读全文

博文 2019-05-16 09:39:25 RyuGou的博客

B+树及插入和删除操作详解

本节介绍一种应文件系统所需而生的一种 B-树的变型树——B+树。前面介绍了B-树,B+树其实同B-树有许多相同之处,本节将用B-树同B+树通过对比两者的差异来介绍B+树。 什么是B+树? 一颗 m 阶的 B+树和 m 阶的 B-树的差异在于: 有 n 棵子树的结点中含有 n 个关键字; 在上一节中,在 B-树中的每个结点关键字个数 n 的取值范围为⌈m/2⌉ -1≤n≤m-1,而在 B+树中每个结点中关键字个数 n 的取值范围为:⌈m/2⌉≤n≤m。 所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。 所有的非终端结点(非叶子结点)可以看成是索引部分,结点中仅含有其子树(根结点)中的最大(或最小)关键字。 例如,图 1 中所示...阅读全文

博文 2021-04-09 06:27:02 data.biancheng.net

高性能场景下,HashMap的优化使用建议

最近在技术博客中看到一篇关于 HashMap 的优化使用建议,觉得非常有意思,于是转载该篇博文,和大家一起分享技术。 HashMap 在JDK 7 与 JDK8 下的差别顺便理一下HashMap.get(Object key)的几个关键步骤,作为后面讨论的基础。 1.1 获取key的HashCode并二次加工因为对原Key的hashCode质量没信心,怕会存在大量冲突,HashMap进行了二次加工。 JDK7的做法: h ^= (h >>> 20) ^ (h >>> 12);return h ^ (h >>> 7) ^ (h >>> 4); JDK8 因为对自己改造过的哈希大量冲突时的红黑树有信心,所以简单一些,只是把高16位异或下来。 return h ^ (h >>> 16); 所以即使...阅读全文

博文 2021-04-01 12:33:44 Chares's Blog

操作系统内存管理_黄规速, 逆水行舟,不进则退。

1、 计算机的存储体系 内存是计算机很重要的一个资源,因为程序只有被加载到内存中才可以运行;此外,CPU所需要的指令与数据也都是来自内存的。可以说,内存是影响计算机性能的一个很重要的因素。 在介绍内存管理的细节前,先要了解一下分层存储器体系: 大部分的计算机都有一个存储器层次结构,即少量的非常快速、昂贵、易变的高速缓存(cache);若干兆字节的中等速度、中等价格、易变的主存储器(RAM);数百兆或数千兆的低速、廉价、不易变的磁盘。这些资源的合理使用与否直接关系着系统的效率。 CPU缓存(Cache Memory):是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存 读写速度不匹配的矛盾,因为CPU运算速度要比内...阅读全文

Netty之ChannelPipeline理解二

Netty之ChannelPipeline理解二 ChannelPipeline不是单独存在,它肯定会和Channel、ChannelHandler、ChannelHandlerContext关联在一起,所以有关概念这里一起讲。 参考:https://www.cnblogs.com/qdhxhz/p/10234908.html ChannelPipeline不是单独存在,它肯定会和Channel、ChannelHandler、ChannelHandlerContext关联在一起,所以有关概念这里一起讲。 ChannelHandler 概念 handler.png ChannelHandler下主要是两个子接口 ChannelInboundHandler(入站): 处理输入数据和Channel...阅读全文

博文 2021-08-27 06:22:43 简书

Skip List--跳表(全网最详细的跳表文章没有之一)

登录注册写文章首页下载APPIT技术抽奖Skip List--跳表(全网最详细的跳表文章没有之一)fanrui关注赞赏支持Skip List--跳表(全网最详细的跳表文章没有之一)跳表是一种神奇的数据结构,因为几乎所有版本的大学本科教材上都没有跳表这种数据结构,而且神书《算法导论》、《算法第四版》这两本书中也没有介绍跳表。但是跳表插入、删除、查找元素的时间复杂度跟红黑树都是一样量级的,时间复杂度都是O(logn),而且跳表有一个特性是红黑树无法匹敌的(具体什么特性后面会提到)。所以在工业中,跳表也会经常被用到。废话不多说了,开始今天的跳表学习。 通过本文,你能 get 到以下知识: 什么是跳表? 跳表的查找、插入、删除元素的流程 跳表查找、插入、删除元素的时间复杂度 跳表插入元素时,如何动态...阅读全文

博文 2021-08-17 07:25:32 简书

BAT/ 字节跳动 / 拼多多都在抢的数据产品经理,到底什么来头?

很早期的时候,互联网人口激增带来的巨大流量红利,那时候企业最核心竞争力是什么?就是如何收割流量和如何变现流量,追逐规模效应的模式创新,这个时期是“一快遮百丑”。但当流量红利过去后,效率和效果这个事情就不得不重视起来了,让用户更好的使用你的东西,让你的东西更精准化、让策略方案更具有效率,这样,才能在千千万万的类似企业中生存下去。那么,企业必然需要慢慢地远离“我觉得吧”、“我感觉”、“可能”、“或者”、“按道理应该”等这种词汇,一切回归到数据中去,让你的决策跟着数据走。在这样的大背景下,对于产品经理来说,是风险,也是机会。风险在于,你再也不能完全凭感觉做产品决策了,因为决策失误会导致转化率再次降低、用户流失加快、获客成本升高,甚至影响公司的营收增长,造成资金链断裂。机会在于,企业数据将成为企业的...阅读全文

由阿里巴巴Java开发规约HashMap条目引发的故事-云栖社区

大热的《阿里巴巴Java开发规约》中有提到: 【推荐】集合初始化时,指定集合初始值大小。说明:HashMap使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(16)即可: public HashMap (int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR); } 看到代码规约这一条的时候,我觉得是不是有点太 low 了,身为开发,大家都知道 HashMap 的原理。 什么?这个要通过插件监测?没必要吧,哪个开发不知道默认大小,何时 resize 啊,然后我和孤尽打赌随机咨询几位同学以下几个问题: HashMap 默认bucket数组多大? 如果new HashMap<>(19),bucket数组...阅读全文

博文 2020-07-14 09:57:56 阿里云

图解LinkedHashMap原理

图解LinkedHashMap原理1 前言 LinkedHashMap继承于HashMap,如果对HashMap原理还不清楚的同学,请先看上一篇:图解HashMap原理 2 LinkedHashMap使用与实现 先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟: LinkedHashMap结构.png 2.1 应用场景 HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。 Map hashMap = new HashMap(); hashMap.put("name1", "josan1"); hashMap.put("name...阅读全文

博文 2021-08-20 08:19:33 简书

【Java集合】想成为Java编程高手?先来了解一下List集合的特性和常用方法!

通过前面文章的介绍,相信大家对Java集合框架有了简单的理解,接下来说说集合中最常使用的一个集合类的父类,List 集合。那么,List到底是什么?它有哪些特性?又该如何使用呢?让我们一起来揭开List的神秘面纱。 List,顾名思义,就是列表的意思。在Java中,List是一个接口,它继承了Collection接口,表示一个有序的、可重复的元素集合。下面我们从List 接口的概念、特点和常用方法等方面来介绍List。 ## 一、List 接口介绍 java.util.List 接口,继承自 Collection 接口(可以回看咱们第二篇中的框架体系),List 接口是单列集合的一个重要分支,习惯性地将实现了List 接口的对象称为List集合。 ![image.png](http://st...阅读全文

博文 2023-11-15 17:01:34 YDYXCODE

如此狂妄,自称高性能队列的Disruptor有啥来头? - 博学谷狂野架构师

并发框架Disruptor 1. Disruptor概述 1.1 背景 ​ Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级),基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注,2011年,企业应用软件专家Martin Fowler专门撰写长文介绍。同年它还获得了Oracle官方的Duke大奖。 ​ 目前,包括Apache Storm、Camel、Log4j 2在内的很多知名项目都应用了Disruptor以获取高性能。 ​ 需要特别指出的是,这里所说的队列是系统内部的内存队列,而不是Kafka这样的分布式队列。 有界无锁 高并发队列 1...阅读全文

博文 2023-03-03 02:58:58 博客园

大圣前端啃算法

download: https://caodada.com/7084.html【资源目录】:├──单课01、01-前端为什么要学算法.mp4 22.60M├──单课02、02-一个leetcode题了解算法复杂度.mp4 51.49M├──单课03、通用01-如何把代码提交到github.mp4 34.07M├──单课04、通用02-如何获取github代码权限并且提交pr.mp4 25.13M├──单课05、03-链表和数组.mp4 13.07M├──单课06、04-链表的javascript实现01.mp4 26.12M├──单课07、05-链表的javascript实现-leetcode203题.mp4 21.49M├──单课08、06-链表的javascript实现-leetcode...阅读全文

博文 2023-08-08 08:44:55 caodada

首个“全4K”运动会,上云!

采用“全4K”超高清制作标准的世-界级赛事——成都世界大学生运动会,可以用手机看、用电视看,甚至用VR沉浸式观看,并且既高清又流畅……在“2023数字科技生态大会”上,全新数字化解决方案成果的展示,让人们感受到云网融合发展的新脉动。云网融合已经成为数字信息基础设施的核心特征,并不断丰富和发展。当前,网向云再向人工智能持续演进并深度融合,成为发展方向。在此趋势下,天翼云以高质量云网融合服务向成都大运会转播工作提供赛事公共信号,以及安全、高速的转播服务,为观众打造极-致视听体验,助力成都大运会成为国内大型运动会及世界大学生运动会历史上第一个“全4K”制作的运动会。首-个“全4K”运动会的背后,有天翼云创新技术的支撑与赋能。大运会赛事转播,需要把原始采集的音视频信号远程传输到制作中心,经过二次制作...阅读全文

博文 2023-11-24 16:09:56 Tianyiyun

【Java集合】数据结构与集合的神秘联系,一文读懂!

上篇文章中我们对单列集合中常用的方法和遍历查询。通过本文章为我们解惑,好好的字符串用起来不就行了,为什么要用集合这些工具类?本篇文章将简要介绍数据结构,让读者了解它们在计算机中以何种结构方式存在。那么,什么是数据结构呢?下面我们来详细解释。 ## 数据结构 ### 1.1 数据结构有什么用? 数据结构是计算机存储、组织数据的方式。 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。 ![image.png](http://static.itsharecircle.com/231107/780768685050bf3238e22caee5c12252.png) 数据结构往往同高效的检索算法和索引技术有关。 这句话是啥意思...阅读全文

博文 2023-11-07 14:25:57 YDYXCODE

Java单列集合Set:HashSet与LinkedHashSet详解,为什么它比List接口更严格?

上篇我们介绍了单列集合中常用的list接口,本篇我们来聊聊单列集合中的另外一个重要接口Set集合。 ### 1 Set 介绍 java.util.Set接口和java.util.List接口一样,同样实现了Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。 与List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复,这里的某种规则,我们在后面中给大家揭秘,大家不要着急。 - 无序 - 不可重复 它没有索引,所以不能使用普通for 循环进行遍历。 >Set 集合 遍历元素的方式 迭代器,增强for 来,我们通过案例练习来看看 ``` //创建集合对象 ...阅读全文

博文 2023-11-21 18:17:32 YDYXCODE

[15章]深入学习小程序框架底层原理,培养双线程思维

![1.png](http://static.itsharecircle.com/231218/f3762dc802ff57be143d2b6bfeac0bd1.png) 前端高手特训 从0到1带你手写一个微信小程序底层框架,今天就带着大家从0到深入学习小程序框架底层原理,无论你是一位新手,还是一位有经验的开发者,能够自研一套小程序底层框架,都是你突破技术瓶颈有效途径。 今天就由我带领大家从架构设计 ,原理剖析,再到源码的实现,一步步地实战构建一个完整的微信小程序底层框架,让你深度掌握小程序双线程原理,助力你具备把握最佳机会的能力和提升获取心仪Offer的成功率,成为一个真正有实力的技术人才 。 小程序使用的是Exparser组件模型,Exparser组件模型与Web Components中...阅读全文

博文 2023-12-18 12:12:46 hbanhgbd

双列集合Map不再难懂:轻松掌握这些知识点!

## 1 概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,学号与学生等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map接口。 Map 接口下的集合与Collection 接口下的集合,他们的存储形式有所不同,如下图: ![image.png](http://static.itsharecircle.com/231205/ebb5393154fd764d6d07353910a6296c.png) Collection 集合,元素是独立的,存储的元素是一个一个的存储。Map中的集合,元素是成对出现。每个元素由键与值两部分组成,通过键可以找到所对应的值。所以我们前面所说 Collection是单列集...阅读全文

博文 2023-12-05 10:47:07 YDYXCODE

Java集合:双列集合HashMap的概念、特点及使用

HashMap是Java中的一个集合类,它实现了Map接口,提供了一种存储键值对的方式。你可以把它想象成一个没有固定大小和形状的储物柜,你可以随时往里面放东西,也可以随时取出东西。而且,这个储物柜还有一个神奇的功能,那就是无论你放进去的是什么,取出来的总是你放进去的那个。 上篇文章讲了Map接口的概念,以及Map接口中的常用方法和对Map集合的遍历,本篇文章我们将继续介绍另一个十分重要的双列集合—HashMap。 ## HashMap 概念 HashMap集合是Map接口的一个实现类,它用于存储键值映射关系,该集合的键和值允许为空,但键不能重复,且集合中的元素是无序的。 #### 特点 HashMap底层是由哈希表结构组成的,其实就是“数组+链表”的组合体,数组是HashMap的主体结构,链...阅读全文

博文 2023-12-12 10:40:31 YDYXCODE

利用 Arthas 精准定位 Java 应用 CPU 负载过高问题_arthas cpuusage

Arthas 官方社区正在举行征文活动,参加即有奖品拿哦~点击投稿 作者 | 张云翔 最近我们线上有个应用服务器有点上头,CPU总能跑到99%,我寻思着它流量也不大啊,为啥能把自己整这么累?于是我登上这台服务器,看看它到底在干啥! 以前碰到类似问题,可能会考虑使用 top -Hp 加 jstack 命令去排查,虽然能大致定位到问题范围,但有效信息还是太少了,多数时候还是要靠猜。今天向大家推荐一款更高效更精准的工具:Arthas!Arthas 是 Alibaba 开源的 Java 诊断工具,能够帮助我们快速定位线上问题。基本的安装使用可以参考官方文档:https://alibaba.github.io/arthas 这次我们利用它来排查 CPU 负载高的问题。CPU 负载过高一般是某个或某几个...阅读全文

博文 2024-03-13 11:20:01 CSDN博客

nvme磁盘故障注入方法

本文分享自天翼云开发者社区《nvme磁盘故障注入方法》,作者:曹****飞在存储系统中,磁盘的故障是很可能出现的问题。存储软件的设计需要对故障进行处理,提高系统的健壮性。然而磁盘的故障是不可控的,当我们想测试软件故障处理的分支时,不是很方便。用软件模拟的方法能覆盖的场景比较少,而且和实际故障的差距会比较大。因此,如果能让故障下沉到磁盘,尽可能的靠近磁盘,才能构造出尽可能真实的故障场景。本文针对nvme磁盘,在磁盘驱动这一层调研了几种可以注入磁盘故障的方法。1. write uncorrectable通过向nvme控制器发送write uncor命令,标记指定的LBA范围为invalid,当读到这个LBA范围时,ctrl会返回Unrecovered Read Error错误。可以用于模拟读的m...阅读全文

博文 2024-08-09 16:16:35 Tianyiyun

redis渐进式rehash

本文分享自天翼云开发者社区《redis渐进式rehash》,作者:l****nRedis是k-v型数据库,其内部设计了一种dict类型的数据结构用来存储键值结构。dict 通常的存储结构是 Key-Value 形式的,通过 Hash 函数对 key 求 Hash 值来确定 Value 的位置,因此也叫 Hash 表,是一种用来解决算法中查找问题的数据结构,默认的算法复杂度接近 O(1)。使用哈希表总是会遇到哈希碰撞问题,dict使用拉链法将发生碰撞的元素组成链表,挂在发生碰撞的桶下,但是随着存储元素的不断增加,碰撞发生的几率也不断增大,一个桶下链接的链表长度越来越长,定位一个key的时间复杂度就无法保证了,redis作为内存数据库,本身追求的是更高的处理性能,线性增加的耗时无疑是不能接受的,...阅读全文

博文 2024-08-02 16:55:12 Tianyiyun

Redis 数据结构的底层实现 (二) dict skiplist intset - 茶饭不撕

一、REDIS_INCODING_HT (dict字典,hashtable) dict是一个用于维护key和value映射关系的数据结构。redis的一个database中所有的key到value的映射,就是使用一个dict来维护的。不过,他在redis被使用的地方还很多,比如,一个redis hash结构,当它的field较多的时候,便会采用dict来存储。再比如,redis配合使用dict和skiplist来共同维护一个zset。 在redis中,dict也是一个基于哈希表的算法。和传统的哈希算法类似,它采用某个哈希函数从key计算得到哈希表中的位置,用拉链发解决冲突,并在元素数量超过装载因子的时候rehash。redis的hash表最显著的一个特点,就在于它哈希表的重哈希,采用了一种增...阅读全文

博文 2024-08-02 10:37:22 博客园

「完结18章」C++大型流媒体项目-从底层到应用层千万级直播系统实战

「完结18章」C++大型流媒体项目-从底层到应用层千万级直播系统实战​获课:「完结18章」C++大型流媒体项目-从底层到应用层千万级直播系统实战获取ZY↑↑方打开链接↑↑C++通用基础函数库实现构建一个C++通用基础函数库是一个有助于提高代码复用性和开发效率的好方法。这个库可以包含一系列常用的数据结构、算法以及工具函数,以支持各种编程任务。以下是一些建议的模块和它们可能包含的功能:1. 数据结构智能指针:尽管C++11已经引入了std::shared_ptr, std::unique_ptr等,但你可以实现自己的版本来学习内存管理。容器类:如链表、栈、队列、哈希表等,这些可以基于STL(标准模板库)进行扩展或自定义实现。2. 算法排序算法:实现快速排序、归并排序、堆排序等多种排序算法,并考虑...阅读全文

博文 2024-12-22 15:31:51 khujnk

C/C++从0到1系统精讲 项目开发综合基础课-完结分享

C/C++从0到1系统精讲 项目开发综合基础课-完结分享获课:C/C++从0到1系统精讲 项目开发综合基础课-完结分享获取ZY↑↑方打开链接↑↑在C++项目开发中,数据结构是构建高效、可维护代码的基础。掌握常见的数据结构及其应用场景,能够帮助你设计出更优化的解决方案。以下是对C++中几种常用数据结构的系统讲解,包括它们的基本概念、实现方法以及在项目开发中的应用。1. 数组(Array)基本概念:数组是一种线性数据结构,用于存储相同类型的元素集合。所有元素在内存中是连续存储的,通过索引进行访问。示例代码:cpp深色版本#include int main() { int arr[5] = {1, 2, 3, 4, 5}; for (int i = 0; i < 5; ++i)...阅读全文

博文 2025-02-10 20:49:24 qqww

王争的算法训练营(最新第5期)

​获课:weiranit.fun/5069/获取ZY↑↑方打开链接↑↑课程内容3基础数据结构和算法:涵盖复杂度分析、数组、链表、栈、队列、递归、分治、排序、二分查找、哈希表、二叉树、堆、字符串匹配等基础知识讲解。题型套路与技巧:针对刷题和大厂算法面试,总结了各种题型、套路和解题技巧,还包含 200 道 LeetCode 真题的详细讲解。课程示例第一周:有复杂度分析、纯编程题和找规律题的课程,以及相应的配套习题课和直播写代码课程。第五周:包括递归和分治、排序的基础知识和题型套路讲解,还有配套习题和直播习题课。第十周:讲解 DFS&BFS 的基础知识和题型套路、海量数据处理,同样设有配套习题和相关直播课程。教学优势1严谨的教学体系:课程内容系统全面,从基础到进阶逐步深入,涵盖算法基础知识、数据结...阅读全文

HashMap红黑树拆分后的两个链表

在 HashMap 的树化与反树化过程中,“两个链表”具体指以下两种结构: ### **1. 原红黑树拆分后的两个链表** 当 HashMap 发生扩容(resize)时,原有的红黑树会根据新的哈希值分布被拆分为 **两个独立的链表**: • **高位链表**(hi-head):哈希值与新数组容量按位与后非零的节点; • **低位链表**(lo-head):哈希值与新数组容量按位与后为零的节点。 ### **2. 拆分后的处理逻辑** HashMap 会分别检查这两个链表的长度: 1. **长度 ≤6**:将链表退化为普通链表(`Node` 结构),取消树化; 2. **长度 >6**:重新将链表转换为红黑树(`TreeNode` 结构),保持高效查询性能。 --- ### **技术细节与设...阅读全文

博文 2025-03-18 21:32:46 zhidiantech

朋友圈与并查集

--- ### **用朋友圈案例详解并查集** #### **场景设定** - **人物信息**: - 张三(25岁) - 李四(30岁) - 王五(28岁) - 赵六(22岁) - 孙七(35岁) - **初始状态**:每个人都是独立的朋友圈 --- ### **Java代码实现** #### **1. 定义Person类** ```java class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } // 重写equals和hashCode,用于正确识别对象 @Override public boolean equals(Obj...阅读全文

博文 2025-03-08 19:06:15 zhidiantech

王道2024C++训练营62期|价值2万

xia载ke:97it.top/14282/ 引言 链表(Linked List)是一种常见的数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的引用。与数组不同,链表的元素不是在内存中连续存储的,而是通过节点间的链接关系实现。链表具有动态大小的特点,适用于数据结构中需要频繁进行插入和删除操作的场景。 链表的插入操作是链表操作中最常见也是最基础的操作之一。通过链表的插入操作,我们能够将新元素有效地加入链表的任意位置。链表的插入方式包括在链表的头部、尾部以及中间位置插入元素,每种插入方式具有不同的操作步骤和复杂度。 本文将深入探讨链表的插入操作,分析不同插入方式的实现方法、性能特点及应用场景,并讨论在实际开发中如何优化链表插入操作。 一、链表的基本结构与类型 链表由一系列节点组...阅读全文

博文 2025-03-12 17:08:27 92834L

Java高频数据结构与工具类深度解析

--- # Java高频数据结构与工具类深度解析 Java作为企业级开发的核心语言,其丰富的数据结构和工具类为开发者提供了强大的底层支持。本文将系统性地解析Java开发中最常用的数据结构及其核心操作,并深入探讨工具类的典型应用场景,帮助开发者构建扎实的算法基础。 --- ## 一、基础数据结构体系 ### 1. 数组与多维数组 **核心特性**:内存连续存储、随机访问O(1) **典型操作**: ```java // 一维数组操作 int[] arr = new int[5]; // 初始化 arr[0] = 10; // 赋值 int len = arr.length; // 获取长度 Arrays.sort(arr); // 快速排序 // 二维数组遍历 int[][] matrix =...阅读全文

博文 2025-03-08 19:24:28 zhidiantech

王争的算法训练营

​获课:weiranit.fun/5069/获取ZY↑↑方打开链接↑↑王争的算法训练营是一个致力于帮助编程爱好者提升算法能力的在线学习平台,以下是其相关介绍3:讲师背景王争是前 Google 工程师,现任某金融公司资深系统架构师、核心业务接口平台负责人。他从读研时就开始钻研算法,有着丰富的实战经验,在架构设计、产品管理、团队带领和创业等方面也颇有建树。课程亮点系统化学习:课程内容涵盖算法基础知识、数据结构、算法设计技巧、面试技巧等多个方面,帮助学员构建完整的算法知识体系。课程采用循序渐进的方式,从易到难,让学员在短时间内掌握核心算法。实战导向:注重实战训练,课程中包含大量经典案例和实战项目,覆盖数据分析、机器学习、网络编程等多个领域。项目难度从基础到高级逐步提升,选取 LeetCode、Ha...阅读全文

Java修改list对象的引用

在 Java 中遍历 `List` 时,直接通过 `for` 循环的临时变量赋值无法覆盖原对象,必须使用 `set()` 方法,这与其底层实现和变量作用域机制密切相关。以下是具体原因和示例说明: --- ### **一、变量作用域与引用传递** 1. **临时变量的局限性** 在 `for` 循环中,无论是增强型 `for` 循环还是普通 `for` 循环,临时变量(如 `Object obj`)**仅持有原对象的引用副本**。直接修改该变量仅会改变副本的指向,而不会影响原列表中的对象引用。 ```java List list = new ArrayList<>(); list.add(new Object()); // 增强型 for 循环(无效) for ...阅读全文

博文 2025-03-18 14:05:16 zhidiantech

学习互联网Java工程师面试突击三季全

学习互联网Java工程师面试突击三季全​获课♥》789it.top/4324/获取ZY↑↑方打开链接↑↑ 提升竞争力:互联网Java工程师面试突击三季实战技巧为了在互联网公司的Java工程师面试中脱颖而出,不仅需要扎实的Java基础,还需要灵活运用技术栈的知识。以下是针对Java工程师面试的三季实战技巧,帮助你在面试中展示出色的技术水平和综合能力。第一季:基础知识扎实,深入掌握Java基础语法与核心知识熟悉Java基本语法:数据类型、运算符、流程控制、数组等。面向对象:理解类、对象、继承、多态、封装和抽象等概念,能够在面试中举出实际例子。集合框架:熟悉ArrayList、HashMap、TreeMap、Set、Queue等常用集合类,掌握它们的时间复杂度及使用场景。Java并发编程:掌握线程...阅读全文

博文 2025-03-26 12:57:36 ghfjhk

王争的算法训练营(最新第5期)

​获课:weiranit.fun/5069/获取ZY↑↑方打开链接↑↑课程内容3基础数据结构和算法:涵盖复杂度分析、数组、链表、栈、队列、递归、分治、排序、二分查找、哈希表、二叉树、堆、字符串匹配等基础知识讲解。题型套路与技巧:针对刷题和大厂算法面试,总结了各种题型、套路和解题技巧,还包含 200 道 LeetCode 真题的详细讲解。课程示例第一周:有复杂度分析、纯编程题和找规律题的课程,以及相应的配套习题课和直播写代码课程。第五周:包括递归和分治、排序的基础知识和题型套路讲解,还有配套习题和直播习题课。第十周:讲解 DFS&BFS 的基础知识和题型套路、海量数据处理,同样设有配套习题和相关直播课程。教学优势1严谨的教学体系:课程内容系统全面,从基础到进阶逐步深入,涵盖算法基础知识、数据结...阅读全文

Java 8 ConcurrentHashMap 多线程并发扩容实现详解

### Java 8 `ConcurrentHashMap` 多线程并发扩容实现详解 --- #### **一、扩容触发条件** 1. **元素数量阈值** 当哈希表元素数量超过 `容量 × 负载因子`(默认负载因子为 0.75)时触发扩容。 2. **链表长度限制** 若链表长度超过 8 且数组容量 ≥64,链表会转换为红黑树;若扩容后哈希冲突减少,可能触发树退化为链表。 --- #### **二、扩容核心流程** 1. **初始化新数组** • 创建新数组,容量为旧数组的 2 倍。 • 通过 `sizeCtl` 标记扩容状态(负数表示正在扩容)。 2. **任务分配与多线程协作** • **步长划分**:将旧数组划分为多个连续区间(每个线程默认处理 16 个桶)。 • **线程协助机制*...阅读全文

博文 2025-03-19 11:13:48 zhidiantech

select 和 poll 为什么需要拷贝fd?

在Linux中,`select`、`poll`和`epoll`都是I/O多路复用的机制,用于同时监控多个文件描述符(fd)的状态。它们在处理文件描述符集合时的数据拷贝行为有显著差异,直接影响性能。 --- ### **1. `select` 和 `poll` 为什么需要拷贝fd?** #### **(1) 设计原理** - **`select`**: 每次调用时,用户需要将**所有待监控的fd集合(`fd_set`)从用户空间拷贝到内核空间**,内核遍历这些fd的状态后,再**将结果拷贝回用户空间**。 - **示例**: ```c fd_set read_fds; FD_ZERO(&read_fds); FD_SET(fd1, &read_fds); FD_SET(fd2, &read_f...阅读全文

博文 2025-03-28 00:00:13 dalang

CLH队列与普通队列的核心区别

CLH队列(Craig, Landin, and Hagersten Locks)是Java中AQS(AbstractQueuedSynchronizer)框架用于管理线程同步的双向队列,而普通队列(如FIFO队列)是基础数据结构。两者的核心差异体现在以下方面: --- #### **1. 设计目标与适用场景** | **维度** | **CLH队列** | **普通队列** | |------------------|-----------------------------------------------------------------------------|------------------------------------------------------------...阅读全文

博文 2025-03-19 20:50:09 dalang

高性能环形队列Disruptor

你的观察非常敏锐!确实,**链表实现的队列(如 `LinkedList`)不需要像数组队列那样处理数据搬移问题**,但这并不代表环形队列(通常基于数组实现)没有独特的优势。两者的核心区别在于 **底层数据结构的选择**,而不同数据结构在不同场景下的性能、内存占用、访问效率等差异显著。下面通过几个关键点详细对比: --- ### **1. 内存占用与碎片** - **链表队列(如 `LinkedList`)**: - 每个节点需要存储 **数据 + 两个指针(前驱和后继)**,在 Java 中每个 `Node` 对象至少占用 **24字节(对象头12B + 数据引用4B + 前后指针各4B)**,实际内存开销远大于数据本身。 - 频繁的节点创建/删除会导致 **内存碎片**,增加垃圾回收(GC...阅读全文

博文 2025-04-08 16:08:37 dalang

TS 从入门到深度掌握,晋级TypeScript高手

获课♥》789it.top/177/数据结构、算法原理与复杂度分析详解一、数据结构数组特点:数组长度是固定的,存储的元素数据类型是一致的,拥有下标索引,方便通过索引获取对应位置上的元素值。操作:访问、插入、删除、遍历等。应用场景:适用于需要频繁访问元素的场景,如实现查找表。链表特点:由多个节点组成,每个节点包含数据域和指针域(指向下一个节点的指针)。链表分为单向链表、双向链表和循环链表等。操作:节点的插入、删除、遍历等。应用场景:适用于需要频繁插入和删除元素的场景,如实现队列、栈等。栈特点:后进先出(LIFO)的数据结构,只允许在一端(栈顶)进行插入和删除操作。操作:入栈(push)、出栈(pop)、查看栈顶元素(peek)等。应用场景:适用于需要逆序处理元素的场景,如表达式求值、括号匹配等...阅读全文

为什么jdk1.7的HashMap会产生死循环? - 夏威夷8080

前言 JDK1.7中的HashMap在多线程情况下扩容可能会导致死循环。本文就这个问题进行讲解。 扩容死循环 这里回顾一下HashMap1.7扩容的过程,在扩容过程中,单链表的表现,相关的代码如下: Jdk1.7:void resize(int newCapacity) { Entry[] oldTable = table; int oldCapacity = oldTable.length; //如果旧容量已经达到了最大,将阈值设置为最大值,与1.8相同 if (oldCapacity == MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE; return; } //创建新哈希表 Entry[] newTable = new Entry[n...阅读全文

博文 2025-03-19 11:54:46 博客园

大厂学院SVIP十门合集|完结无秘

获课♥》789it.top/2884/数据结构与算法:构建高效程序的基石一、数据结构与算法的核心关系数据结构与算法是计算机科学中不可分割的孪生概念,它们共同构成了编写高效程序的基础框架。数据结构关注数据的组织、管理和存储格式,而算法则定义了操作这些数据以解决问题的明确步骤。二者的关系可以概括为:数据结构是算法的物质基础:良好的数据结构设计能够为算法提供高效的操作接口算法是数据结构的灵魂:数据结构的选择往往取决于需要在其上执行的算法效率的共生关系:优秀的数据结构可以降低算法复杂度,而巧妙的算法可以弥补数据结构的不足二、基础数据结构体系线性数据结构数组(Array):连续内存存储随机访问O(1)复杂度固定大小(静态数组)或可变大小(动态数组)链表(Linked List):节点通过指针连接单链表...阅读全文

博文 2025-04-07 13:11:16 sdsz

基于C Plus Plus的数据结构与算法课程 首套C++完美结合的数据结构与算法

获课♥》789it.top/14147/C++与数据结构:构建高性能应用程序的基础C++作为高性能编程语言的优势C++因其独特的特性成为构建高性能应用程序的首选语言:零成本抽象:高级特性如类、模板几乎不带来运行时开销内存控制:直接内存访问和精细的内存管理能力多范式支持:支持面向对象、泛型和过程式编程硬件访问:内联汇编和与C的兼容性允许底层硬件操作标准库丰富:提供STL等高效的数据结构和算法实现基础数据结构及其C++实现数组与向量cpp复制下载// 原始数组 int arr[5] = {1, 2, 3, 4, 5}; // std::array (C++11) std::array stdArr = {1, 2, 3, 4, 5}; // std::vector (动态数组) ...阅读全文

点击关注“有赞coder”获取更多技术干货哦~作者:张云翔团队:安全技术最近我们线上有个应用服务器有点上头,CPU总能跑到99%,我寻思着它流量也不大啊,为啥能把自己整这么累?于是我登上这台服务器,看看它到底在干啥!以前碰到类似问题,可能会考虑使用top -Hp 加 jstack命令去排查,虽然能大致定位到问题范围,但有效信息还是太少了,多数时候还是要靠猜。今天向大家推荐一款更高效更精准的工具:Arthas!Arthas 是Alibaba开源的Java诊断工具,能够帮助我们快速定位线上问题。基本的安装使用可以参考官方文档:https://alibaba.github.io/arthas 这次我们利用它来排查CPU负载高的问题。CPU负载过高一般是某个或某几个线程有问题,所以我们尝试使用第一个...阅读全文

博文 2024-03-13 11:14:54 mp.weixin.qq.com