自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 Java集合-06-ConcurrentHashMap源码(上):JDK8结构、CAS与synchronized定位

1. JDK8 CHM 怎么保证线程安全?CAS:用于无竞争场景,如桶为空时的节点插入、sizeCtl 的修改、计数的更新。:用于有竞争场景,锁住桶头节点,保护链表或红黑树的插入操作。volatile:保证。

2026-10-23 14:07:01 390

原创 Java集合-05-HashMap源码(下):resize、树化阈值与线程安全定位

可以看到,链表长度达到 8 的概率已经极低,此时树化是合理的。从泊松分布的角度看,0.75 的加载因子使得链表长度达到 8 的概率极低(约千万分之六),从而在绝大多数情况下避免树化,保持链表的高效性。这三个问题看似独立,实则环环相扣——扩容决定了哈希表的性能上限,树化决定了冲突链表的退化边界,线程安全则决定了并发场景下的使用方式。HashMap 的注释中给出了详细说明:在理想随机哈希下,桶中元素个数服从泊松分布,当加载因子为 0.75 时,链表长度达到 8 的概率约为千万分之六,非常低。

2026-10-14 09:25:32 238

原创 Java集合-04-HashMap源码(上):put/get、哈希扰动与寻址定位

底层结构:JDK 8 的 HashMap 是数组 + 链表 + 红黑树,数组是主体,链表和红黑树解决哈希冲突。哈希扰动,让高 16 位参与低位计算,降低冲突概率。寻址定位等价于取模,但位运算更快,前提是容量必须是 2 的幂。put 流程:桶为空直接新建 Node;桶不为空先比 hash 再比 key,链表尾插,树节点走 putTreeVal;size 超过 threshold 触发扩容。get 流程。

2026-09-30 15:56:46 345

原创 Java集合-03-LinkedList源码:Node结构、双向链表与Deque定位

中间插入方面,两者都是 O(n),但代价不同。这里的 node(index) 就是 O(n) 的遍历,所以中间插入的总成本是 O(n),而不是 O(1)。插入后 Node1 的 next 指向 newNode,newNode 的 next 指向 Node2,Node2 的 prev 指向 newNode,newNode 的 prev 指向 Node1。unlink 删除中间节点:把前驱节点的 next 直接指向后继节点,把后继节点的 prev 直接指向前驱节点,然后清空被删节点的三个字段。

2026-09-30 15:47:33 198

原创 Java集合-02-ArrayList源码:扩容、System.arraycopy 与 fail-fast

操作时间复杂度说明get(index)O(1)数组按下标随机访问O(1)数组按下标赋值add(e) 尾部追加O(1) 摊还扩容时 O(n),但均摊 O(1)O(n)需要挪动元素O(n)需要挪动元素O(n)先遍历查找再挪位O(n)线性遍历适用场景:频繁按下标查询、尾部增删、元素数量可预估的场景。不适用场景:频繁在中间插入/删除、需要频繁按值查找的场景(此时应考虑 LinkedList 或 HashMap)。

2026-09-29 17:30:39 192

原创 Java集合-01-整体体系与选型指南

fail-safe 指迭代时基于原集合的拷贝进行遍历,修改原集合不影响迭代,不会抛异常,但迭代器看不到最新修改,ConcurrentHashMap、CopyOnWriteArrayList 属于此类。ConcurrentHashMap(JDK 8)采用 CAS + synchronized,锁粒度细化到单个桶(bin),读操作基本无锁,写操作只锁冲突的桶,并发性能远优于 Hashtable。同时,红黑树节点占用空间约为链表节点的两倍,树化本身有成本,所以只在链表过长时才值得转换,避免空间浪费。

2026-09-29 09:54:23 415

原创 SpringBoot 中 SpEL 表达式引擎实战:原理与选型指南

SpEL 是 Spring 框架提供的表达式语言,全称 Spring Expression Language。它诞生于 Spring 3.0,设计目标是提供一种在运行时求值的、类型安全的表达式语言,用于支持 Spring 中的配置注入、条件判断、方法调用等场景。SpEL 的语法与 Java 语言高度相似,学习成本低,同时支持丰富的功能特性。// 表达式调用。

2026-09-28 17:33:37 416

原创 Sharding 分库分表实战:从基础原理到配置落地

分库分表是应对海量数据和高并发场景的重要技术手段,但引入它也会带来路由、事务、查询和运维层面的额外复杂度。本文从基础概念出发,梳理了常见分片策略,并通过 ShardingSphere-JDBC 的完整配置示例展示了从依赖引入到代码落地的全过程。在实际项目中,建议先评估数据量和访问模式,确认单库确实无法满足需求后再引入分库分表,同时做好分片键设计和扩展规划,才能让这套方案真正发挥价值。

2026-09-28 16:53:46 620

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除