神经蛙

RSS: https://hexo.sjava.cn/rss.xml
分享科技与生活

Java 从入门到精通(十八):工程化与性能调优实战——构建、测试、日志与诊断工具箱

这是「Java 从入门到精通」系列的第 18 篇,也是收官篇。写到这里,语法、集合、并发、JVM 这些”知识点”其实都只是入场券——真正决定一个工程师上限的,是他能不能把代码 稳定地、可复现地、可观测地 交付出去。本篇按”构建 → 规范 → 测试 → 日志 → 调优 → 收官”的顺序,讲清工具背后的原理,而不是给你一份工具清单。建议配合前面的篇章一起读:知道了 HashMap 怎么扩容,才知道为什...
评论点赞收藏刚刚

Java 从入门到精通(十七):Java 8~21 新特性全景——Lambda、Stream、Record 与虚拟线程

本文是「Java 从入门到精通」系列的第 17 篇,假定你已经掌握集合框架、泛型、异常与并发基础(对应本系列第(七)(十二)(十三)篇)。全文代码以 JDK 21 为准,涉及预览特性的部分会用 --enable-preview 标注。阅读建议:Lambda 与 Stream 两章请务必动手跑一遍代码,尤其是 peek 不执行、流一次性消费、 toMap 键冲突这三个坑,只有亲眼见过异常栈才会真正记...
评论点赞收藏刚刚

Java 从入门到精通(十六):JVM 垃圾回收与线上调优——GC 收集器、参数与 OOM 排查

本文默认读者已掌握 Java 基础与多线程,JVM 以 HotSpot 为主,JDK 横跨 8 / 11 / 17 / 21,会明确标注版本差异——尤其是 GC 日志格式(JDK 9 前后完全两套)与默认收集器的变更。建议边读边跑第五节的日志实验与第七节的 CPU 飙高实验:调优从来不是背参数,而是”看到数据—提出假设—小步验证”的闭环。 一、GC 到底要解决什么问题 1.1 为什么不是引用计数 ...
评论点赞收藏刚刚

Java 从入门到精通(十五):JVM 内存结构与类加载机制——从双亲委派到对象布局

本篇属于 进阶向硬核内容。文中所有代码均在 JDK 17(HotSpot 64-Bit Server VM) 上验证过,涉及 JDK 8 / 11 / 21 差异的地方会单独标注。想真正吃透,请把示例代码敲一遍,尤其是对象布局与自定义类加载器那两段。 写在前面:为什么要学这一块 很多同学写 Java 三五年,对 JVM 的认知停留在「堆放对象、栈放局部变量、方法区放类信息」。这三句话没错,但粗到无...
评论点赞收藏刚刚

Java 从入门到精通(十四):线程池与异步编程——ThreadPoolExecutor、CompletableFuture 与 ForkJoin

本文默认读者已掌握线程基础与 synchronized / volatile (可参考本系列第十二篇)。JDK 以 8/11 为主,第八节虚拟线程需 JDK 21+。文中源码片段是对 OpenJDK 真实实现的简化改写:保留了位运算、CAS、锁与循环的关键结构,删掉了异常分支与注释噪音,便于阅读但不建议直接拷贝编译。所有 Demo 均可 javac 运行,建议把第三节的位运算实验与第六节的聚合 D...
评论点赞收藏刚刚

Java 从入门到精通(十三):JUC 核心工具——AQS、Lock、原子类与并发容器

本文默认读者已掌握线程生命周期、JMM 与 synchronized / volatile (系列第十二篇),JDK 以 8 为主,涉及 9 之后的变化(Unsafe 迁往 VarHandle)会单独标注。AQS 一节最硬,建议按”state 是什么 → 队列怎么排 → 线程怎么睡 → 谁把它叫醒”四步推演,读完再回头看 ReentrantLock、CountDownLatch、Semaphore...
评论点赞收藏刚刚

Java 从入门到精通(十二):并发编程基础——线程、JMM、synchronized 与 volatile

本文默认读者已掌握 Java 基础语法与集合框架,JDK 以 8 为主,同时标注 JDK 15 之后偏向锁被废弃带来的变化。文中代码均可直接运行,建议边读边跑,尤其是第三节 i++ 复现实验与第七节死锁实验——只有亲眼看到”结果不等于 20000”和”jstack 打印出 deadlock”,抽象的内存模型概念才会落地。 一、为什么要并发:从摩尔定律失效说起 过去二十年程序员享受过一段”免费的午餐...
评论点赞收藏刚刚

Java 从入门到精通(十一):反射、注解与动态代理——框架底层的三块基石

本篇属于「知其然更知其所以然」的一章。反射、注解、动态代理这三样东西,日常写业务代码几乎碰不到,但只要你点开 Spring 的 AutowiredAnnotationBeanPostProcessor 、MyBatis 的 MapperProxy 、Jackson 的 BeanDeserializer,就会发现它们无处不在。理解这三块基石,你读框架源码时就不会再迷路,也能在真正需要”通用能力”的场...
评论点赞收藏刚刚

Java 从入门到精通(九):集合框架(下)——Map 家族与 HashMap 源码剖析

上一篇我们把 List 与 Set 的底层结构、扩容机制、fail-fast 迭代器讲透了。本篇进入 Map 家族——这是 Java 面试中出现频率最高、源码最值得逐行精读的一块。全文代码均在 JDK 8 与 JDK 17 上实测通过,涉及版本差异的地方会明确标注。 建议把文中的源码片段对照你本地 rt.jar / 里的 java.util.HashMap 一起读,尤其是 putVal 、 res...
评论点赞收藏刚刚

Java 从入门到精通(七):泛型与类型系统——通配符、类型擦除与 PECS 原则

大部分人写泛型只停留在 List 这一层,一旦 IDE 报出 capture of? 、 name clash:... have the same erasure 、 unchecked cast 就只能靠试。本文的目标是把这层窗户纸彻底捅破:擦除到底发生在哪一步、擦完之后字节码里还剩下什么、 桥接方法是谁塞进去的、为什么 List 读得写不得。读完你应该能徒手画出泛型在编译期与运行期之间的那道分...
评论点赞收藏刚刚

登录芦苇

登录后关注作者、收藏内容和参与讨论。