自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring系列05:Bean 作用域

选错本质就是选错「实例存活边界」,prototype 忘清理、singleton 误当每次新,是两个最高频的事故源。

2026-11-07 07:01:59 215

原创 Spring系列04:依赖注入

A 的构造器要一个「完整的 B」才能建出来,B 的构造器要一个「完整的 A」才能建出来。右边是字段注入:纵向四步(new 空壳 → 暴露早期引用 → 对方拿到同一对象 → 填充完成),绿色勾表示启动成功,但底部红字提醒「对象短暂是半成品」。(查阅时文档版本 7.0.10,2026-10)撰写,核心概念均对照官方文档提炼,正文关键处标注了对应官方小节。左边是构造器注入:A、B 两条红色「要完整对象」的箭头互相指,中间直接红叉——启动期失败,把循环依赖这口锅在编译部署阶段就端到你面前。

2026-11-06 08:04:45 168

原创 Spring系列03:Bean 的三种注册方式

写 Spring 的人,几乎天天在「把一个对象交给容器」。@Service标一下、配置类里@Bean写一个、或者丢一堆方法——但它们本质不是一回事。很多开发者能把三种写法都写出来,一被问「@Bean放在@Component和里到底差在哪」「为什么有的@Bean互相调用拿的是同一个实例、有的却 new 了好几个」,就卡壳了。这一篇把三种注册方式的身世、边界,以及那个最容易被忽略的 full/lite 玄机一次讲透。方式一:组件扫描( Stereotype +——类上贴注解,容器扫包自动认。@Bean方法。

2026-11-05 08:11:30 202

原创 Spring系列02:BeanFactory 与 ApplicationContext

ApplicationContext 确实实现了它,但它属于官方的 Environment 抽象章节,不在「Additional Capabilities」这一节的标准清单里。多数人的回答停在「ApplicationContext 更高级、功能更多」,再往下问「多在哪」「为什么 Boot 默认用它」「两者启动行为有啥不同」,就开始含糊。官方文档若改版,以官网最新版为准。,只负责「管理 bean」这一件事——bean 的定义、实例化、装配、生命周期,它全包了。前者是「能用」,后者才是「好用且省心」。

2026-11-04 08:21:03 196

原创 Spring系列01:IoC 与 DI 到底解决了什么

(查阅时文档版本 7.0.10,2026-10)撰写,核心概念均对照官方文档提炼,正文关键处标注了对应官方小节(文末汇总链接)。IoC 是思想,DI(Dependency Injection,依赖注入)是它的落地方式之一。一句话收束:IoC 把「怎么造对象」这件脏活接走了,让你把精力放在**「做什么」**而不是「怎么造」。天然只有全参构造器——用 record 表达不可变协作对象时,构造器注入是唯一选项,这也是官方推荐在语言层面的一种呼应。,千个用例秒级跑完;控制反转反转的不是技术,是「谁说了算」这件事。

2026-11-03 08:08:10 242

原创 11-从 JDK 8 迁移到 JDK 25 / 26 实战:风险评估与落地清单

—Boot 2.7 撑不到 JDK 17+,而 Boot 3+ 又要 JDK 17。所以老项目的第一步通常是「先升框架到 3.x」,再升 JDK。站稳 25 之后,再单独跑一轮 26 的冒烟,验证 HTTP/3、AOT 缓存这类新能力。:绝大多数情况是老版本 Netty、Kryo、Hadoop、Cassandra、某些缓存框架在用。——前四条在 26 上已经不是"警告"而是"可能直接启动失败 / 运行抛异常"。、ZGC / G1 的新版本优化、AOT 缓存。(堆外,JDK 22 JEP 454 转正)。

2026-11-02 08:15:48 140

原创 10-JDK 24 到 27 新特性全解:启动提速、后量子加密与「默认即更快」

这一篇把 24、25、26、27 四版的关键特性一次讲清,并给出「你现在该用哪个版本」的明确建议。

2026-11-01 13:10:11 110

原创 09-JDK 22/23 最新进展:Stream 收集器与作用域值最亮眼

实现。

2026-10-31 07:42:18 169

原创 08-JDK 21 虚拟线程正式发布:并发写法彻底变了

JDK 21 是继 17 之后的第三个新制度 LTS,也是"现代 Java 真正成熟"的里程碑。它把酝酿了四年的,配合分代 ZGC、分代 Shenandoah、密钥增强、序列集合(SequencedCollection)等,一口气补齐了并发、内存、集合三大短板。如果说 JDK 8 定义了"现代写法",那 JDK 21 定义了"现代并发"。这一篇是重点:讲清虚拟线程转正后的正式写法、它到底改写了什么、以及同版其他关键特性。读完你会明白为什么说"21 之后,并发代码可以重写一遍"。

2026-10-30 08:14:50 170

原创 07-JDK 18/19 虚拟线程来袭:并发编程要变天了

如果说现代 Java 有一件"等了二十年"的事,那就是。从 JDK 1.0 起,Java 的线程就直接映射操作系统线程(1:1 模型),一个线程要占 1MB 栈、创建贵、调度重,高并发只能靠线程池"省着用"。JDK 19 预览的**虚拟线程(Virtual Threads)**打破了这个天花板——它是 Project Loom 的结晶,让"百万级并发"变得像写同步代码一样简单。这一篇讲虚拟线程是什么、为什么快、预览期怎么用,以及它如何改变你写并发的方式。

2026-10-29 08:13:57 167

原创 06-JDK 17 正式转正:为什么它是下一个长期支持经典

如果要在现代 Java 里选一个"像 JDK 8 一样值得长期托付"的版本,答案多半是。它是继 11 之后的第二个新制度 LTS,把前面四五年间的预览特性一口气转正,又补齐了模式匹配、密封类、强封装,还带来了性能上的分代 ZGC。这一篇系统性讲清楚:JDK 17 到底"正式"了什么,凭什么成为企业升级的首选。

2026-10-28 08:09:44 142

原创 05-JDK 14/15 记录类与密封类:样板代码再见

Java 被吐槽最多的两件事:一是"写个数据类要 30 行 getter/setter/equals/hashCode/toString",二是"想限制谁能继承某个类却做不到"。JDK 14/15 用两个预览特性正面回应——。它们一个让数据载体极简,一个让继承关系可控,是通往 JDK 17 正式现代化的关键拼图。

2026-10-27 08:10:09 223

原创 04-JDK 12/13 文本块与 switch 表达式:代码清爽了

JDK 12、13 都是非 LTS 版本(半年寿命),但它们孵化的两个特性——**文本块(Text Blocks)**和——实在太香,以至于后面转正时几乎人人都在用。这一篇提前把它们讲透,免得你看到别人代码里的"""和->一脸懵。

2026-10-26 07:43:05 153

原创 03-JDK 10/11 局部变量推断与 LTS:var 到底该怎么用

JDK 9 之后,Oracle 改了发布节奏:从"几年一个大版本"变成"每半年一个功能版"(3 月、9 月各一版)。于是 JDK 10(2018-03)、JDK 11(2018-09)紧跟着来。这两版单体特性不多,但有两个影响深远的东西:var,以及——后者直接决定了你公司"升到哪、停在哪"。

2026-10-24 10:59:18 147

原创 02-JDK 9 模块化与 JShell:项目结构将彻底改变

JDK 8 把写法范式定下来了,JDK 9 干的是另一件大事——。这是 Java 历史上改动最底层的一次发布(连 JDK 内部都拆成了几十个模块),也带来了程序员能直接玩的两个甜点:JShell 和一堆语法糖。这一篇讲清楚三件事:模块化(JPMS)到底改了什么、为什么它"叫好不叫座"、以及 JShell 和那些小特性怎么帮你提效。

2026-10-23 07:31:06 45

原创 01-JDK 8 划时代特性全景:Lambda、Stream、Optional 一次讲透

如果说 Java 历史上哪一次发布真正"脱胎换骨",绝大多数老程序员的答案会毫不犹豫:JDK 8。2014 年发布的它,至今仍是无数生产系统的默认版本,生命周期长到连后面的 JDK 21 都喊它"前辈"。为什么一个 2014 年的版本能活到今天还不过时?因为它一口气把函数式编程、现代集合操作、更安全的空值处理、全新的时间 API 全部塞了进来,等于给 Java 换了发动机。这篇文章把 JDK 8 那些"用了就回不去"的特性一次讲透,帮你建立对现代 Java 的整体认知。

2026-10-22 07:37:37 102

原创 12-集合避坑 12 条:性能调优与那些年踩过的雷

集合避坑 12 条:① 预设容量(HashMap 用 size/0.75+1);② 正确实现不可变 key 的 equals/hashCode;③ 遍历删除用迭代器/removeIf;④ 别把 subList/keySet 当独立集合;⑤ 按随机读/去重/排序/并发选对结构;⑥ 并行流收集到线程安全容器;⑦ 高并发计数用 LongAdder;⑧ 避免 Integer 装箱与 == 比较;⑨ CHM 的 size 弱一致、无 TTL;⑩ 大遍历别塞同步重 IO。

2026-10-21 08:09:42 147

原创 11-Collections 和 Arrays:这两个工具类 90% 的人只用过一半

管 Collection:sort、shuffle、binarySearch(先排序!)、singleton/empty/unmodifiable(不可变/视图)、synchronizedXxx(保守同步)、max/min/frequency 等。Arrays管数组:sort/parallelSort、copyOf/copyOfRange、toString/deepToString、equals/deepEquals、asList(定长!)、setAll。新代码不可变集合优先,要可变别忘包。

2026-10-20 08:11:04 175

原创 10-并发容器全景图:除了 ConcurrentHashMap 还有这些得会

并发容器全家福:CopyOnWriteArrayList/Set(读多写少、写时复制)、ConcurrentLinkedQueue(无锁 CAS 队列)、ConcurrentHashMap(并发 Map 标杆)、ConcurrentSkipListMap/Set(并发有序、跳表)、各 BlockingQueue(阻塞传递)。记住"弱一致迭代、size 不精确、CAS/写时复制/跳表"三条主线,按"读写比例、是否需要排序、是否跨线程"三问选型,就能在并发集合里不踩坑。

2026-10-19 08:08:56 195

原创 09-队列全家桶一次认全:ArrayDeque、PriorityQueue 与阻塞队列

ArrayDeque(数组双端,栈/队列首选,取代 LinkedList 和 Stack)、(堆,按优先级出)。的put/take阻塞语义是生产者-消费者的骨架,(有界)、(高吞吐,记得限容)、DelayQueue(定时/优先级)、(零缓冲)按需选型。FIFO 用双端队列,按权出队用优先队列,跨线程传递用阻塞队列。

2026-10-16 08:18:58 209

原创 08-并发 Map 的进化史:ConcurrentHashMap 怎么又安全又高效

ConcurrentHashMap 用"CAS 无锁试探 + synchronized 锁单个桶头"把并发粒度细化到桶,读几乎无锁、写互不阻塞;分段 CounterCell 做弱一致计数,多线程协助扩容避免搬家卡顿;JDK 8 相比 JDK 7 的 Segment 分段锁,粒度更细、并发更高、内存更省。它不允许 null、迭代弱一致,是并发键值存储的现代标配,彻底淘汰了 Hashtable 和 synchronizedMap。

2026-10-15 08:17:10 125

原创 07-HashSet 为什么能去重?原来底层是个 Map

Set 家族没有自己的存储,全是"借" Map:HashSet 包 HashMap、LinkedHashSet 包 LinkedHashMap、TreeSet 包 TreeMap,元素作 key、统一用占位 value。去重本质是 HashMap 的 key 不可重复,前提是正确实现 equals/hashCode 且 key 不可变。按"只去重 / 去重+保序 / 去重+排序"三档选 HashSet / LinkedHashSet / TreeSet。

2026-10-14 08:05:01 180

原创 06-有序 Map 怎么选?LinkedHashMap 与 TreeMap 的差与用

LinkedHashMap 在 HashMap 之上挂双向链表,保插入/访问序(accessOrder=true 可做 LRU);TreeMap 用红黑树,保 key 排序并支持范围/邻近查询。要快且有序选前者,要排序和区间查询选后者,通用存储还是 HashMap。记住"LinkedHashMap 管时间线、TreeMap 管大小序"就不会选错。

2026-10-13 07:15:50 134

原创 05-HashMap 为什么必问?从数组+链表到红黑树一眼看穿

HashMap 底层是"数组桶 + 链表/红黑树":扰动哈希用高位降冲突,2 的幂容量换取模,尾插法规避成环,扩容用高低位拆分 O(1) 重分配,负载因子 0.75 与阈值 8/6 是空间与性能的工业级权衡。它非线程安全,并发请用 ConcurrentHashMap。把数组、链表、树、扩容四个机制串起来,HashMap 就不再是黑盒。

2026-10-12 08:17:33 188

原创 04-List 到底该用哪个?ArrayList、LinkedList、Vector、CopyOnWriteArrayList 选型实战

四选一不靠背诵靠场景:单线程无脑 ArrayList(预设容量);读多写少并发选 CopyOnWriteArrayList;需要手动控锁用 synchronizedList;Vector 已淘汰别碰;栈/队列请用 ArrayDeque。锁的粒度、读写比例、内存开销,才是选型的三个真正旋钮。

2026-10-11 08:43:30 256

原创 03-LinkedList 真的慢吗?聊聊双向链表与队列/栈实现

LinkedList 底层是双向链表:头尾增删 O(1)、无扩容、内存开销更大、缓存不友好。它"慢"特指随机下标访问(O(n))和错误遍历方式;用迭代器或只操作两端时并不慢,还实现了 Deque 可当队列/栈。但现代 JVM 下,双端队列首选ArrayDeque,随机访问首选ArrayList,LinkedList 的出场机会越来越少——理解它,更多是为了吃透链表/数组的本质权衡。

2026-10-10 08:12:41 170

原创 02-ArrayList 扩容机制:为什么是 10 → 15 → 22 这样长?

ArrayList 底层是"会自己长大的 Object 数组",默认空构造懒到首次 add 才给 10,满了就 1.5 倍扩容(10→15→22→33…)并整体拷贝。随机读 O(1) 是它的最大优势,中间增删 O(n) 是代价。大量数据务必预设容量,别碰 subList 的视图陷阱,多线程换 CopyOnWriteArrayList。把扩容这条线吃透,List 家族就通了一半。

2026-10-09 08:08:23 130

原创 01-Java 集合框架全景:从 Collection 到 Map 一张关系网理清

集合框架 = 两大根(Collection / Map)+ 三层结构(接口 / 抽象类 / 实现)+ 一套统一迭代器。记住"List 有序可重复、Set 不可重复、Map 是键值对且不属于 Collection",再配合复杂度速查表,你就拿到了整个框架的地图。后续源码篇都是在给这张地图填充细节。

2026-10-08 07:47:45 182

原创 13-AQS 到底是怎么扛住半个 concurrent 包的

AQS 核心原理

2026-10-02 10:53:32 161

原创 12-并发编程 8 大坑,每一个都让线上崩过

并发编程避坑

2026-09-29 07:16:35 146

原创 11-Fork/Join 与工作窃取:并行流为什么能跑满 CPU,又有哪些坑

Fork/Join 与并行流

2026-09-25 05:23:07 90

原创 10-除了 ConcurrentHashMap,这些并发容器和阻塞队列也该会

并发容器与阻塞队列

2026-09-24 08:05:32 150

原创 09-CompletableFuture 把异步代码写成了同步,编排不再回调地狱

CompletableFuture异步编排链

2026-09-23 08:10:04 171

原创 08-线程池怎么配才不 OOM?核心线程数公式、拒绝策略与死锁定位

线程池调优

2026-09-22 08:08:34 120

原创 07-ThreadPoolExecutor 七大参数,少一个都翻车

线程池核心

2026-09-21 08:03:19 188

原创 06-wait/notify 总死锁?聊聊线程协作的正确姿势与同步器全家桶

线程间通信

2026-09-20 08:10:38 207

原创 05-AtomicInteger 凭什么无锁还线程安全?CAS、ABA 与 LongAdder

Java原子类与 CAS

2026-09-19 07:26:35 155

原创 04-synchronized 背后的锁升级,看完不再背八股

锁机制深度

2026-09-18 08:09:23 151

原创 03-synchronized 和 volatile 到底怎么选?从 JMM 讲透可见性、原子性与有序性

线程安全与可见性

2026-09-17 08:09:06 189

原创 02-Thread、Runnable 还是 Callable?线程创建的 4 种姿势与生命周期

线程创建与生命周期

2026-09-16 08:08:34 270

空空如也

空空如也

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

TA关注的人

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