Java

浏览该分类下的所有文章

Math.abs()竟然返回了负数?

Math.abs() 在普通数值上返回非负,但对 int 最小值 Integer.MIN_VALUE 会返回自身负数。原因是 int 采用补码表示,-Integer.MIN_VALUE 超出范围导致溢出,结果仍为 ‑2³¹。JDK 源码注释已说明这是规范行为。使用时应先判断该极值或转为 long、BigInteger,或使用 Math.addExact、Math.multiplyExact 等安全方法,并在单元测试中覆盖边界值。理解整数溢出是防止此类陷阱的关键。

打牌记账-使用手册

打牌记账是一款基于浏览器的实时多人记账工具,支持麻将、斗地主等棋牌玩法。用户可无需注册、直接输入昵称创建或加入最高8人的加密房间,系统自动同步、计算盈亏并提供一键结算、历史记录、二维码/链接邀请等功能。界面包括创建房间、加入房间、记账操作、昵称修改、房间结算及“我加入的房间”列表,支持手机、平板、电脑跨平台使用。应用采用 BCrypt 加密保护密码,具备高并发、低延迟的性能优化,并提供常见问题解答以帮助用户快速上手。

打牌记账-技术文档

本项目针对多人打牌记账难点,开发了基于 Spring Boot 的 Web 实时记账小程序,实现房间实时同步、最多 8 人协作、数据持久化和跨平台访问。技术选型包括 Spring Boot、MyBatis‑Plus、MySQL、WebSocket、Thymeleaf 等。系统采用三层架构,使用 UUID 生成 8 位房间码、乐观锁控制人数、BCrypt 加密密码,并提供房间、用户、记账等核心业务模块。

个人博客的代码块折叠/展开功能

随着技术文章代码示例日益冗长,阅读体验受限,作者实现了零依赖、智能折叠的代码块组件。核心采用 CSS max‑height 过渡实现平滑动画,结合实际渲染的字体尺寸、行高和内边距精确计算折叠阈值,仅对超长代码启用。组件提供语言自动识别、复制按钮、ARIA 可访问属性以及响应式触摸优化。性能测试显示首屏加载下降 11%、交互延迟降 28%、代码占比减半,移动端阅读完成率提升 40%。文中还总结了主题兼容、动画防抖、触控尺寸等实现挑战及对应方案,并给出渐进增强、性能优先、无障碍设计等最佳实践,提出虚拟滚动、状态持久化和结构化折叠等后续优化方向。

博客实战:如何实现精准的“邮件直达评论”深层链接功能

本文介绍在 Spring Boot + Thymeleaf 项目中实现高精度评论深层链接的完整方案。通过后端递归计算目标评论的顶级父 ID(Thread ID),在邮件链接中携带 commentId 和 threadId,并保留锚点作降级;前端脚本解析参数,判断评论是否被折叠,自动展开父级、轮询 AJAX 加载、双重滚动修正图片加载导致的偏移,并以 Teal 呼吸灯动画高亮目标。该实现解决了定位失效、隐藏内容和视觉反馈弱等痛点,提升了用户在邮件通知中快速定位回复的体验。

留言板表情系统技术实现:从代码输入到直观显示的演进

本文记录了博客留言板表情系统的技术演进:从最初的[:表情名:]文本编码因记忆成本高、交互不直观而体验差,重构为“所见即所得”。采用 contenteditable 替代 textarea 实现图片即时插入,并通过实时双向同步将图片转回代码存入后端;页面加载时解析代码转为 <img>。动态生成表情面板,精确在光标位置插入,兼容回复框及移动端响应式布局与触摸事件。加入懒加载、输入防抖等性能优化,对比数据表明表情使用率、用户满意度显著提升。

Spring Boot IOC架构落地与最佳实践

Spring Boot IOC是微服务松耦合的基石,文章先阐述容器层次、启动流程及 Bean 的完整生命周期,推荐构造器注入并结合 @Profile、@Conditional 实现环境化配置。进一步解析单例、原型、请求等多种作用域及线程安全设计,展示工厂模式在多实现支付服务中的使用。最后介绍延迟加载、循环依赖处理及监控、健康检查等生产实践,提供落地指南与最佳实践。

Spring Boot AOP架构落地与最佳实践

Spring Boot AOP通过切面把日志、性能监控、权限校验等横切关注点模块化,提升代码可维护性。文章先介绍 AOP 基础概念及 Spring Boot 的自动配置方式,随后给出日志、性能、授权等实战切面实现示例,并演示自定义注解、ThreadLocal、CGLIB 代理等技术细节。最佳实践包括按功能划分切面目录、使用 @Order 控制执行顺序、优化切点表达式、防止性能损耗以及统一异常处理和缓存切面。最后结合分布式链路追踪和异步执行,提供在生产环境中落地 AOP 的完整方案。

从A标签跳转后JS失效?我踩过的坑和填坑方法

在博客列表页通过普通 `<a>` 跳转到文章详情时,页面加载正常但灯箱、复制按钮等 JS 功能失效,刷新或直接访问 URL 则一切正常。原因是浏览器在普通跳转时可能复用旧的 JS 环境或缓存页面,导致新页面的脚本未完整重新执行。临时解决办法是给链接加 `target="_self"`,强制完整加载;更根本的做法是改进 JS 初始化时机:在 `DOMContentLoaded`、`load`、`pageshow` 等事件中检查关键元素是否已出现,必要时使用 `setTimeout` 或 `Promise` 等方式等待后再调用 `initLightbox、initCopyButton` 等函数;文中还提供了基于 `PageManager` 的完整初始化管理器,能够在页面恢复、前进/后退等场景下安全重置并逐个等待所需元素。经验教训包括:不要盲目信任 `DOMContentLoaded`,要防御性地检查 DOM,了解浏览器缓存机制,并可考虑使用 `MutationObserver` 监听 DOM 变化。

OpenCodeAI 从入门到精通:全方位终端AI编程助手指南

OpenCodeAI 是面向终端的 AI 编程助手,采用本地客户端 + 云端模型服务的混合架构,能够读取、修改项目文件并在安全沙箱中执行操作,实现 AI 结对编程。文中详述了跨 macOS、Windows、Linux 的安装方法(Homebrew、Scoop、脚本、包管理器等),以及桌面版的图形化特性。随后提供 API 密钥获取、环境变量或配置文件安全存储的最佳实践,并给出国内模型(智谱 GLM、DeepSeek)以及多模型并存的配置示例。项目初始化通过 `opencode init` 自动生成上下文、忽略文件和模型偏好。核心功能以 Plan 模式为例,展示 AI 分析代码、制定实现计划、用户审查后执行的完整工作流,帮助完成如邮箱验证等复杂任务。全文覆盖概念、架构、安装、配置、使用全链路,帮助开发者快速上手并在命令行中高效利用 AI 编程。

深入解析CompletableFuture的设计哲学与实践

本文系统阐述了 Java 8 中 CompletableFuture 的设计哲学与实现细节。首先说明它受函数式编程和 Promise 思想驱动,提供链式、流式 API(thenApply、thenCompose 等)以实现回调与组合。随后解析内部状态机(INCOMPLETE、NORMAL、EXCEPTIONAL)和基于 Treiber 栈的依赖管理,揭示完成、异常传播的核心实现。接着通过电商订单处理案例演示并行检查、价格计算、库存扣减等业务的完整异步流水线,涵盖 thenCombine、allOf、异常处理、超时控制等实用技巧。最后列举条件执行、重试、超时降级等高级模式,展示 CompletableFuture 在高性能、可维护异步服务中的广泛应用。

Java7/8 中的 HashMap 和 ConcurrentHashMap 源码解析

文章系统地解析了 Java7/8 中 HashMap 与 ConcurrentHashMap 的实现细节。HashMap 采用数组+单向链表结构,容量始终为 2ⁿ,使用 loadFactor 与 threshold 控制扩容;put 时先计算 hash、定位桶、遍历链表去重,必要时双倍扩容并重新分配节点;get 通过相同的 hash 与 index 直接查找链表。ConcurrentHashMap 在此基础上引入 Segment(分段锁)实现并发,默认 16 段,每段内部类似 HashMap 并保持线程安全,初始化时将整体容量划分给各段,put 通过高位 hash 确定段并在对应 Segment 加锁后操作。全文重点说明了数组初始化、索引计算、节点插入、扩容机制以及并发控制的实现原理。