自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 IT日报|2026-11-06:密钥扫描规则更新、AI 代码审查指标、Agent 依赖管理

2026 年 11 月 6 日 IT日报聚焦代码安全、AI 编程与开发协作。GitHub 更新密钥扫描规则,进一步减少云平台凭据检测误报;Copilot 用量指标新增代码审查反馈处理率及遥测完整性信息;Pull Request 概览页面进入公开预览。此外,本文还分析 JetBrains Air 的 Agent 执行隔离,以及 Dependabot 管理 Agent 技能与提示词依赖的技术意义,讨论自动化开发中的权限、审查和版本治理问题。

2026-11-06 16:51:23 25

原创 Spring AI 结构化输出怎么做?从 entity()、JSON Schema 到业务校验与失败重试

Spring AI 如何让大模型稳定返回 Java 对象,而不是难以处理的自然语言文本?本文介绍结构化输出的基本原理,围绕 entity()、泛型类型映射、JSON Schema 和模型原生结构化输出展开,并分析字段缺失、枚举错误、解析失败、重试控制和提示注入等常见问题。结合 Java DTO、业务校验和测试思路,帮助开发者建立更可靠的 AI 数据处理流程。

2026-11-06 16:49:06 145

原创 PostgreSQL 深分页为什么越来越慢?Keyset 游标分页、复合索引与并发一致性实战

PostgreSQL 使用 LIMIT OFFSET 分页时,为什么越往后翻越慢?本文结合订单列表场景,分析深分页的执行代价,介绍 Keyset 游标分页、复合索引、稳定排序和多租户过滤的实现方法,并讨论并发插入、数据删除、游标安全及上一页查询等问题。通过 SQL 示例、执行计划分析和测试思路,帮助开发者选择更合适的分页方案。

2026-11-06 16:26:55 14

原创 IT日报|2026-11-05:Xcode AI 编程集成、CodeQL 安全规则、Agent 权限治理

本期 IT日报整理 Xcode AI 编程集成、CodeQL 2.27.4 安全规则及 SSH 算法兼容性变化,重点分析开发工具升级中的兼容条件、Java 日志注入与路径注入误报,以及自动化安全修复中的隔离执行、Agent 身份授权和漏洞优先级判断。结合实际工程场景,讨论如何通过代码审查、最小权限、回归测试和审计日志控制自动化风险。

2026-11-05 10:50:56 271

原创 Spring AI 2.1 工具调用确认怎么做?从人工审批到幂等恢复的 Agent 安全实战

AI Agent 可以调用删除文件、发送邮件、修改订单等工具,但如何确保高风险操作经过用户批准?本文结合 Spring AI 2.1 的 Tool Call Confirmation 机制,介绍工具调用暂停、人工审批、决策恢复及权限校验的实现思路。进一步分析客户端参数篡改、重复执行、审批超时和服务重启等实际问题,并给出数据库审批记录、业务幂等及安全测试建议,帮助 Java 开发者构建更可靠的 AI Agent。

2026-11-05 08:54:36 699

原创 Spring Boot 定时任务为什么重复执行?从 @Scheduled、多实例部署到幂等治理

Spring Boot 项目部署多个实例后,为什么同一个 @Scheduled 定时任务会重复执行?本文从 Spring 调度机制入手,分析 fixedRate、fixedDelay、Cron 的区别,以及多实例部署、重复注册和业务重试导致的重复执行问题。结合 MySQL 条件更新、任务认领、分布式锁和幂等设计,介绍如何避免订单重复处理,并通过故障测试思路帮助开发者建立可靠的定时任务体系。

2026-11-05 08:50:02 257

原创 IT日报|2026-11-04:Copilot 接入 JetBrains Air、CodeQL 2.27.3、Agent 依赖自动更新

2026年11月4日IT日报聚焦AI编程、代码安全与开发者生态。GitHub Copilot正式接入JetBrains Air,通过ACP支持本地与云端Agent任务;CodeQL 2.27.3增强Python 3.15支持并引入可选AI威胁模型;Dependabot开始支持Agent技能与提示词依赖的版本更新。此外,本文还整理了GitHub认证安全、企业成本管理及Cloudflare最新DDoS趋势,分析这些变化对开发团队的实际影响。

2026-11-04 09:30:45 338

原创 Spring Boot 4 升级为什么卡在 Jackson 3?包名、配置与兼容迁移指南

Spring Boot 4 默认使用 Jackson 3,给 Java 项目的 JSON 序列化和反序列化带来了新的迁移挑战。本文结合 Spring 官方升级指南,详细分析 Jackson 2 与 Jackson 3 的包名、依赖、API 和默认行为差异,介绍 JsonMapper 改造、配置迁移、兼容模式及 JSON 契约测试方法,并提供生产项目的渐进式升级建议,帮助开发者降低 Spring Boot 4 升级风险。

2026-11-04 08:43:29 381

原创 Spring Boot 缓存一致性怎么保证?@Cacheable、@CacheEvict 与事务提交时机实战

Spring Boot 项目中,为什么数据库更新成功后,接口仍然返回旧数据?本文从 Spring Cache 的工作机制入手,结合 @Cacheable、@CacheEvict、Caffeine 和事务同步回调,分析缓存失效时机、事务提交顺序及并发回填等常见问题,并提供代码示例、解决方案和测试思路,帮助开发者设计更可靠的缓存更新机制。

2026-11-04 08:39:26 217

原创 IT日报|2026-11-03:LongCat-2.5 上线、GitHub Actions 安全新规、Node.js 26 进入 LTS

2026年11月3日IT日报:美团LongCat-2.5正式上线,Qwen Code 0.26.6强化多会话和任务状态管理,Google回顾Gemini 4系列新进展。开发生态方面,Node.js 26进入LTS,TornadoVM 8.0发布新编译器;GitHub同时调整Actions安全规则与仓库风险评估能力。精选7条重要技术动态,快速了解AI、开源生态与软件工程领域的最新变化及实际影响。

2026-11-03 11:21:32 432

原创 Spring AI 2.1.0-RC1 发布:Session Memory、工具调用确认有什么变化?Java 项目该升级吗?

Spring AI 2.1.0-RC1 与 2.0.2 同时发布,Java 开发者该选择哪个版本?本文结合 Spring 官方发布说明,解析 Session Memory、工具调用确认、Message Parts 和向量检索的新变化,并通过代码示例介绍这些能力如何应用于 AI Agent 开发。同时对比稳定版与候选版的差异,提供现有 Spring AI 项目的升级建议与检查清单。

2026-11-03 10:02:01 260

原创 Spring Boot 的 @Transactional 为什么会失效?从代理、自调用到异常回滚的排查实战

Spring Boot 开发中,明明添加了 @Transactional,为什么异常发生后数据还是提交了?本文从 Spring 事务代理机制入手,通过 Spring JDBC、H2 和 JUnit 构建可复现的案例,系统分析同类方法调用、异常回滚规则、异常捕获、异步线程、事务传播行为以及多数据源等常见问题,并提供事务日志配置和排查清单,帮助开发者真正理解事务边界,快速定位事务不生效的原因。

2026-11-03 09:49:24 330

原创 AI 多轮对话怎么设计?从消息表、回复版本到上下文路径的完整实践

AI 多轮对话并不是简单地将历史消息拼接后发送给大模型。本文结合 Spring Boot 4、Spring AI、MySQL 和 Vue 3 的实际开发经验,深入分析消息存储、回复版本管理、父子消息关系、递归 CTE 上下文查询、历史分页及上下文长度控制,并介绍历史消息编辑与独立会话分支的设计取舍,分享避免上下文污染的关键实践与常见问题。

2026-10-21 10:41:39 315

原创 Spring Boot 4 + Spring AI + Ollama,聊透一个流式聊天系统的实现

使用 Spring Boot 4 + Spring AI + Ollama 接入大模型并不复杂,但要开发一套真正可用的 AI 聊天系统,还需要解决许多工程问题。本文结合实际开发经验,深入分析基于 Reactor Flux 和 SSE 的流式响应实现,介绍消息持久化、生成状态机、停止生成、异常恢复、心跳检测、并发控制及前端流式解析等关键技术,并探讨数据库事务边界与用户交互体验的设计取舍。通过一次完整的聊天请求,梳理从模型调用到前端展示的技术链路,分享 AI 聊天系统的开发思路与踩坑经验。

2026-10-21 09:28:26 251

原创 告别手动维护 SQL:Spring Boot 4 + MySQL 集成 Flyway 实战

在 Java 项目开发中,手动维护数据库 SQL 经常面临脚本遗漏、重复执行以及多环境表结构不一致等问题。本文结合 Spring Boot 4、MySQL 8.4 和 Flyway,介绍数据库版本迁移的核心原理、Maven 依赖配置、迁移脚本命名规范及自动执行流程,并通过实际建表与字段变更案例,讲解迁移校验、历史记录、失败修复等常见问题,帮助开发者建立可追踪、可维护的数据库变更管理流程。

2026-10-16 11:13:46 337

原创 用了这么多年 Maven,你真的理解 pom.xml 中的 version 吗?

很多 Java 开发者使用 Maven 多年,却很少关注 pom.xml 中的 version。本文从 Maven GAV 坐标出发,介绍 0.1.0-SNAPSHOT 的含义、SNAPSHOT 与正式版本的区别、Maven Version 与 Git Commit、Git Tag 的关系,以及 Maven 多模块项目的版本管理方式,并结合实际开发流程给出简单可执行的版本发布规范。

2026-10-15 14:56:40 344

原创 GitHub 开源许可证怎么选?MIT、Apache、GPL、AGPL 到底有什么区别?

从 GitHub 创建仓库时的 License 选项入手,介绍 Public 与开源的区别,对比 MIT、Apache 2.0、GPL v3、AGPL v3 等常见许可证的商业使用、修改分发和源码公开要求,并结合个人 AI 项目 Qinglan AI,讨论开发者应该如何选择适合自己的开源协议。

2026-10-15 11:21:36 227

原创 已经有了 ChatGPT,为什么我还想开发一个属于自己的 AI?

在 ChatGPT、Claude、Cursor 等 AI 工具日益成熟的今天,为什么还要开发一个属于自己的 AI?作为一名 Java 开发者,我希望通过青岚(Qinglan AI)项目,探索个人 AI 系统的更多可能。它不仅能够自然对话,还能整合分散在不同设备中的代码、文档、笔记等数字资产,逐渐理解个人习惯与需求,成为兼具长期记忆、知识管理和工具调用能力的私人智能助手。本文将分享开发青岚的初衷、对个人第二大脑的思考,以及从零构建私人 AI 系统的探索与实践。

2026-10-15 09:40:48 372

原创 【034】依赖冲突与排除:dependencyManagement

本文聚焦 Java 工程化中最容易踩坑的环节——依赖冲突。从上一篇 Maven 基础走来,你已经掌握了 GAV 坐标、生命周期、多模块结构,能跑通 `mvn clean install`。但真正进入企业级项目,你会发现:明明编译通过,运行时却报 `NoSuchMethodError`、`NoClassDefFoundError`;明明没引入某个 jar,classpath 里却躺着好几个版本;多人协作时,A 同学本地正常,B 同学一跑就崩。这些问题背后,都是依赖冲突在作祟。本文会从依赖传递的机制讲起,让你理

2026-05-08 09:50:54 561

原创 【033】Maven 生命周期与坐标:多模块结构

本文聚焦 Java 工程化的「基础设施」—— Maven。从 P1 阶段走来,你已经掌握了 Java 语言核心、JVM 原理、并发编程,写的代码能跑、能调、能排查。但一旦进入团队协作、依赖管理、多服务开发,靠「手写 javac」和「拖 jar 包」就完全不够用了。Maven 是 Java 世界最主流的构建工具,几乎所有企业项目都在用。本文会从最基础的「坐标」概念讲起,让你理解为什么一个 GAV 能唯一确定一个构件;然后深入 Maven 的三大生命周期,搞清楚 compile、test、package、ins

2026-05-08 09:01:20 718

原创 【032】排查入门:jstack、heap dump、Arthas 初识

本文聚焦 Java 并发编程的「最后一公里」——问题排查与诊断。当你写的代码在测试环境跑得好好的,一到线上就出现各种「疑难杂症」:线程阻塞、内存持续增长、CPU 飙升、响应超时……怎么办?靠猜是不行的,你需要掌握一系列排查工具和方法。本文会从最基础的 jstack 讲起,教你如何分析线程状态和死锁;再介绍 heap dump(堆转储)的获取和分析方法,帮助你定位内存泄漏;最后介绍阿里巴巴开源的诊断神器 Arthas,让你体验「在线调试」的强大能力。读完本文,你将掌握 Java 排查的「三板斧」,面对线上问题

2026-05-07 08:37:28 228

原创 【031】并发设计:幂等、可见性、闭包捕获变量

本文聚焦 Java 并发编程中更高层次的设计问题。到目前为止,我们已经学习了 volatile、synchronized、锁、线程池等基础工具;但在实际项目中,仅仅「会用锁」是不够的——更重要的是「如何设计」一个线程安全的系统。本文会从三个核心话题展开:幂等性设计(如何防止重复提交)、可见性保证(如何在多线程间安全共享数据)、闭包捕获变量(lambda 表达式中的常见陷阱)。这三个话题是面试和实战中的高频考点,也是区分「会写并发代码」和「懂并发设计」的关键。读完本文,你将掌握在真实业务场景中设计线程安全系统

2026-05-07 08:35:53 364

原创 【030】锁升级与 ReentrantLock、读写锁

本文聚焦 Java 并发编程中「锁」这一核心主题。在第 026 篇中,我们已经了解了线程状态和 synchronized 的基础用法;本篇将进一步深入,剖析 synchronized 的锁升级机制(无锁 → 偏向锁 → 轻量级锁 → 重量级锁),并详细介绍 ReentrantLock 的使用方式与适用场景,以及读写锁在读多写少场景下的性能优势。很多同学写并发代码时只知道 synchronized 一把锁走天下,但生产环境中「锁竞争」往往是性能瓶颈的根本原因——理解锁的升级过程、选择合适的锁类型,能让你的代码

2026-05-06 08:42:04 226

原创 【029】线程池:Executor、队列、拒绝策略与事故

本文聚焦 Java 并发编程中最核心也最常用的工具——线程池。在实际项目开发中,线程池几乎无处不在:Web 服务器处理请求、异步任务执行、批量数据处理、定时任务调度……正确使用线程池可以显著提升系统吞吐量和资源利用率;但如果配置不当,则可能导致线程资源耗尽、OOM、任务积压等严重事故。本文会从 Executor 框架的核心接口讲起,深入剖析线程池的工作原理、队列类型、拒绝策略,并通过真实事故案例帮助你建立「配置线程池」的实战能力。读完本文,你将能够根据业务场景合理选择线程池参数,在面试中也能自信地回答「线程

2026-05-06 08:41:14 513

原创 【028】j.u.c:CAS、Atomic*、常见并发集合

Java并发编程利器:j.u.c包核心组件解析 摘要: 本文深入剖析Java并发编程核心工具包java.util.concurrent(j.u.c),重点讲解其三大核心组件:1)基于CAS原理的Atomic原子类族,通过硬件指令实现无锁并发;2)高效并发容器如ConcurrentHashMap和CopyOnWriteArrayList的实现机制;3)阻塞队列BlockingQueue的应用场景。文章首先揭示volatile关键字在原子性操作上的局限,进而对比synchronized、ReentrantLoc

2026-04-28 14:30:00 409

原创 【027】volatile、happens-before 入门

本文聚焦 Java 并发编程中最基础也最容易被忽视的两个概念:`volatile` 关键字与 happens-before 关系。很多同学写业务代码时觉得「不加 volatile 也没事」,但线上环境一旦出现数据不一致、可见性问题,排查起来往往无从下手——因为这类问题具有随机性、难以复现的特点。本文会从 CPU 缓存模型讲起,逐步拆解 volatile 的实现原理、happens-before 的规则体系,以及在 Spring Boot 项目中如何安全地使用它们。读完本文,你将掌握判断「什么时候必须加 vo

2026-04-28 09:30:00 362

原创 【026】线程状态与 synchronized 基础

本文聚焦 Java 并发编程的基础知识,涵盖线程的六种状态(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED)、线程的创建与启动、synchronized 的基本用法与底层原理、锁的升级过程(无锁→偏向锁→轻量级锁→重量级锁),以及常见的使用场景与注意事项。阅读后能理解线程的生命周期,掌握 synchronized 的正确用法,了解锁升级机制,为后续学习更复杂的并发编程打下基础。

2026-04-27 09:05:04 276

原创 【025】类加载:双亲委派与应用隔离

本文聚焦 Java 类加载机制的深入理解,涵盖类加载器的工作原理、双亲委派模型的执行流程、打破双亲委派的场景(JDBC、Tomcat、Spring)、以及常见类加载问题(ClassNotFoundException、NoSuchMethodError、类冲突)的排查与解决。阅读后能深入理解类加载的底层机制,掌握自定义类加载器的使用场景,了解主流框架如何利用类加载器实现隔离与扩展。

2026-04-27 08:57:38 691

原创 【024】JVM 参数入门:堆、栈、元空间与典型模板

本文聚焦 JVM 参数的系统性入门,涵盖内存参数(堆、栈、元空间)、GC 参数(收集器、阈值、线程数)、调试与诊断参数,以及不同场景下的典型配置模板(微服务应用、后台任务、API 接口)。阅读后能掌握常用 JVM 参数的含义与配置方法,了解不同场景下的参数选型策略,能够独立完成基本的 JVM 调优配置。

2026-04-24 08:48:10 262

原创 【023】GC 入门:分代、常见收集器名词、如何读 GC 日志

本文聚焦 Java 垃圾回收(GC)的基础知识,涵盖 JVM 分代模型(新生代、老年代、永久代/元空间)、常见垃圾回收算法(标记-清除、标记-整理、复制)、主流垃圾收集器(Serial、Parallel、CMS、G1、ZGC)的特点与选型,以及如何阅读 GC 日志进行问题排查。阅读后能理解 GC 的工作原理,了解不同收集器的适用场景,掌握通过 GC 日志定位性能问题的方法。

2026-04-24 08:46:04 558

原创 【022】JVM 运行时数据区与对象创建

本文聚焦 JVM 运行时数据区的深入细节与对象的创建流程,涵盖 Class 文件结构、类加载过程(加载→验证→准备→解析→初始化)、对象创建的完整流程(分配内存→初始化→设置对象头→执行构造函数)、对象内存布局(对象头、实例数据、对齐填充),以及常见对象的创建场景与内存分配策略。阅读后能深入理解 Class 文件是如何被加载的,对象在堆中是如何分配的,为后续学习 GC 和调优打下基础。

2026-04-23 08:55:00 942

原创 【021】反射与注解:Spring 里背后的影子

本文聚焦 Java 反射与注解的核心机制,涵盖 Class 对象获取、属性/方法/构造函数反射、注解定义与分类、注解处理器,以及 Spring 中反射与注解的深度应用(IoC、AOP、依赖注入、请求映射)。阅读后能理解反射的工作原理,掌握自定义注解的开发,了解 Spring 框架如何利用反射和注解实现自动化配置,为后续阅读源码和自定义框架打下基础。

2026-04-23 08:46:36 505

原创 【020】Optional、Stream、Lambda:风格与性能注意点

本文聚焦 Java 8 引入的函数式编程特性,涵盖 Optional 的使用场景与陷阱、Stream 的惰性求值与短路操作、Lambda 表达式的性能注意点,以及函数式编程在业务代码中的最佳实践。阅读后能正确使用 Optional 避免空指针,掌握 Stream 的高效用法,避开 Lambda 的性能坑,在业务代码中写出更简洁、更安全的函数式代码。

2026-04-22 15:23:39 530

原创 【019】IO/NIO 概念:Web 开发要掌握到什么程度

本文聚焦 Java IO 与 NIO 的核心概念与区别,涵盖阻塞 IO vs 非阻塞 IO、IO 模型演进(阻塞 → 非阻塞 → 多路复用 → 异步)、ByteBuffer 与 Channel、Selector 多路复用机制,以及 Spring Boot 中文件上传、HTTP 请求响应等常见场景的 IO 操作。阅读后能理解 BIO/NIO/AIO 的区别,掌握 ByteBuffer 的使用,了解 Netty 底层原理,为后续学习响应式编程和中间件打下基础。

2026-04-22 15:19:32 766

原创 【018】异常体系:受检/非受检与业务异常分层

本文聚焦 Java 异常体系在真实项目中的“设计与落地”:受检异常(Checked Exception)与非受检异常(Unchecked Exception)的边界、业务异常分层、Spring Boot 全局异常处理、统一错误码、日志与告警协同、以及联调排障策略。你会拿到一套可复制的异常设计骨架,避免“try-catch 满天飞”“异常吞掉不告警”“错误码混乱难联调”这三类常见事故

2026-04-21 14:42:34 515

原创 【017】泛型与通配符:API 设计里怎么用省心

本文围绕 Java 泛型在真实业务里的“高频、易错、影响大”的点展开:泛型类/方法/接口、`? extends` `? super` 的边界、PECS 原则、类型擦除、反射拿泛型、Spring Boot 中的统一返回体与通用转换器、以及常见事故排查。你会看到很多“能编译但不好用”的反例,并学会把方法签名写得更稳、更易扩展、更少歧义

2026-04-21 14:05:08 481

原创 【016】集合框架总览:List/Set/Map 与线程安全

本文聚焦 Java 集合框架的核心接口与实现类,涵盖 List(ArrayList、LinkedList、Vector)、Set(HashSet、LinkedHashSet、TreeSet)、Map(HashMap、LinkedHashMap、TreeMap、Hashtable、ConcurrentHashMap)的选型原则,以及 Collections 工具类与并发集合的使用场景。阅读后能清晰判断何种业务场景该用哪种集合,了解线程安全集合的选型依据,并在实际开发中写出更高效、更安全的集合操作代码。

2026-04-20 10:24:20 632

原创 【015】String 与字符集:接口里乱码的根源

本文聚焦 Java String 的内部实现、字符集编码原理、UTF-8 与 GBK 的区别,以及 Spring Boot 接口中乱码问题的根因分析与防御手段。阅读后能清晰理解字符集与编码的关系,掌握 Java 内部字符处理机制,以及在前后端联调、数据库交互、文件读写等场景下如何避免乱码。

2026-04-20 10:23:15 465

原创 【014】基本类型与包装类:缓存、相等性、NPE

本文聚焦 Java 基本类型与包装类的区别与联系,涵盖自动装箱拆箱、Integer 缓存池、equals 与 == 的选择场景、null 引发 NPE 的根因与防御手段。阅读后能清晰判断何时用基本类型、何时用包装类,如何安全处理可能为 null 的数值,以及在业务代码里写出更健壮的数值比较逻辑。

2026-04-17 09:37:01 517

原创 【013】Java 内存模型鸟瞰:栈、堆、方法区

本文从 JVM 运行时数据区写起,面向 Java 后端开发:讲清线程私有区域(虚拟机栈、本地方法栈、程序计数器)与共享区域(堆、方法区)的职责;对象在堆上的分配布局(对象头、实例数据、对齐填充);String 常量池与 intern 方法;方法区的演进(永久代 → 元空间);GC 回收的是哪块区域、为什么局部变量不需要手动回收。附内存溢出场景(StackOverflowError、OOM: heap space、OOM: metaspace)与排查命令,为后续深入 JVM 打下基础。

2026-04-17 09:30:18 427

空空如也

空空如也

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

TA关注的人

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