你可曾想过:当你在终端里敲下 java,在 main 方法真正运行之前,JVM 为了“创造一个可运行你的程序的宇宙”,到底经历了哪些步骤?从参数校验、系统资源探测,到选择垃圾回收器,再到类的加载、链接与初始化,这些看不见的过程决定了应用的启动体验与后续性能。本文用一个极简的 HelloWorld 贯
你是否也遇到过这样的时刻:只是想发个 HTTP 请求,却被连接管理、重定向、超时与线程阻塞折腾得不亦乐乎?那就试试 Java 11 正式标准化了全新的 HttpClient,原生支持 HTTP/2、异步与 WebSocket,极大简化了客户端网络编程。 1. 概览 本文将介绍 Java 11 对全新
构建数据库写程序避免不了使用日期和时间,对于数据库来说,有多种日期时间字段可供选择,如 timestamp 和 datetime 以及使用 int 来存储 unix timestamp。 不仅新手,包括一些有经验的程序员还是比较迷茫,究竟我该用哪种类型来存储日期时间呢? 那我们就一步一步来分析他们的
最近,一股「请愿风」席卷了 Reddit 和 X 的技术圈。Spring 框架的布道师 Josh Long、Kotlin 核心开发者等业界大佬纷纷发声,公开呼吁 Java 加速引入各种「现代化」特性。 有意思的是,这些被热切期待的「未来特性」,在 Scala 中早已是十几年前就实现的标准功能。
ThreadLocal是什么 ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。 下图为ThreadLocal的内部结构图
在一些需要高质量文本转语音(TTS)的场景中(比如:有声书配音、播客等)。之前介绍的EdgeTTS方案可能效果没有那么好。此时就比较推荐使用 MiniMax、CosyVoice这些提供的音色,这些音色的效果会更加拟人、逼真,接近真人发音。这里依然通过 UnifiedTTS 的统一接口来对接,这样我们
本文聚焦 Java 25 中已永久化的 6 个特性:紧凑源文件与实例 main 方法、灵活的构造器主体、Scoped Values、模块导入声明、AOT 命令行易用性与方法剖析、分代 Shenandoah。通过简明说明与示例代码,帮助你快速把握其设计意图与落地用法。 1. 紧凑源文件与实例 main
我在生产环境里不小心把 userName 写成了 usrNme,结果我们的 API 响应时间居然缩短了 47 毫秒。起初我以为只是巧合。后来我在 50 个不同的变量上系统化测试,这个模式反复出现:刻意拼错的变量名,持续优于正确拼写的变量名。 没错,你没看错。代码写得更“糟”,JVM 跑得更快。 经过
1. 概述 本文快速介绍如何在序列化 Java 类时配置 Jackson 忽略为 null 的字段。 如果想进一步学习 Jackson 2 的更多用法,可以参考主教程。 2. 在类上忽略空字段 Jackson 允许我们在类级别控制这一行为: @JsonInclude(Include.NON_NULL
“如果你一直拖着过去不放,就无法向前进步。”这正是我在代码审查时对团队说的话。然而,每次我打开一个拉取请求时,我仍然看到过时的Java特性、坏习惯和应该在几年前就被淘汰的编码习惯。所以,如果你今天在使用Java,无论你是初级、中级还是高级开发者,这篇文章都适合你 🫵…