Ohhnews

分类导航

InfoQ Java

HubSpot推出Sidekick:采用多模型AI实现代码审查效率提升

核心技术突破 HubSpot工程师团队开发了名为Sidekick的内部AI代码审查系统。该系统利用大语言模型对代码变更请求(Pull Requests)进行分析,并引入辅助判别代理(Judge Agent)对反馈结果进行二次筛选。 效率与应用成果 通过该系统的部署,HubSpot将代码审查的首次反馈时间缩短了约90%。目前,该工具已广泛应用于公司内部数以万计的代码审查任务中,并获得了工程团队的高度认可,拥有高达80%的工程师采纳率。
#hubspot#人工智能#代码审查#自动化工具#软件工程
$ more
Baeldung

Java中的TOON格式介绍:优化大语言模型的数据传输

TOON 格式概述 TOON (Token-Oriented Object Notation) 是一种旨在减少大语言模型 (LLM) 输入 Token 消耗的紧凑型数据格式。与 JSON 相比,TOON 通过缩进、去标签化以及针对集合数据的表格化布局,显著降低了语法带来的 Token 开销。在处理同构对象列表时,TOON 仅需定义一次表头,从而在保持 JSON 表达能力的同时实现高达 30%-44% 的 Token 节省。 Java 实践与集成 目前 Java 生态中主要提供 JToon 和 json-io 两个库来支持 TOON 格式。其中,json-io 因其成熟度和对 Java 8+ 的广泛支持成为理想选择。开发者可以通过简单的 API 调用将 Java 对象序列化为 TOON 格式,并利用 Spring AI 提供的转换器自动优化工具调用结果的输出,从而在不改变业务逻辑的前提下提升 LLM 交互效率。 应用场景建议 TOON 并非 JSON 的完全替代品,其核心价值在于 LLM 交互、RAG 载荷及数据分析等对 Token 成本敏感的场景。对于通用的 REST API 或需要严格 Schema 校验的系统,JSON 依然是首选标准。
#toon格式#java#大语言模型#数据序列化#token优化
$ more
Baeldung

MyBatis-Flex 开发指南

MyBatis-Flex 简介 本文介绍了 MyBatis-Flex 在 MyBatis 生态系统中的应用,它提供了一种更便捷的数据访问编程模型。通过构建一个 Spring Boot 4 示例项目,展示了从环境配置、实体类定义、Mapper 映射到基础 CRUD 操作、条件查询及分页处理的全流程。 核心要点 项目配置:结合 Spring Boot 4 和 H2 内存数据库,展示了如何快速搭建 MyBatis-Flex 开发环境。 数据访问:通过继承 BaseMapper 接口,开发者可以轻松实现标准的数据增删改查功能。 QueryWrapper 使用:介绍了如何利用 QueryWrapper 进行灵活的条件筛选、排序以及构建动态查询。 高效分页:展示了如何通过内置的分页功能,在获取数据记录的同时获取分页元数据。 MyBatis-Flex 通过简化的 API 设计,有效降低了数据库操作的复杂性,是构建现代 Java 应用的有力工具。
#mybatis-flex#java#spring boot#数据持久化#数据库开发
$ more
Jetbrains Blog

Google Summer of Code 2026正式启动:Kotlin基金会诚邀开发者参与

Kotlin基金会宣布正式加入Google Summer of Code (GSoC) 2026项目。该活动旨在为学生及开源贡献者提供机会,在资深工程师的指导下参与Kotlin生态系统的实际开发工作。本年度提供的项目涵盖了编译器模糊测试、Swift与Kotlin互操作性、WebAssembly尾递归优化以及Kotlin教育现状调研等领域。申请截止日期为2026年3月31日。此外,非学生身份的开发者可通过Kotlin生态系统导师计划参与相关开源建设。
#kotlin#开源项目#编程教育#软件开发#人才培养
$ more
foojay

Leyden项目如何提升Java性能:AOT缓存实践指南

本文是关于OpenJDK Leyden项目提升Java应用性能系列文章的第二篇,重点介绍了如何使用AOT(提前编译)缓存技术来优化应用的启动速度和预热时间。 核心内容 AOT缓存的使用流程:介绍了两种配置方式,包括两步法(训练与组装同步进行)和三步法(训练与组装分离,适用于资源受限环境)。 训练策略建议:推荐采用金丝雀部署或重放生产请求的方式进行训练,强调训练环境需与生产环境保持硬件、操作系统及JVM参数的一致性。 性能实测分析:通过重型数学计算和REST API应用测试,展示了AOT缓存对缩短首响应时间、降低预热阶段抖动(Jitter)的显著效果。 实践价值:尽管目前JDK 25/26版本仍处于持续演进中,但实验表明AOT缓存已能有效减少JVM运行时的初始化开销,建议开发者尽早尝试以参与项目反馈。
#java#leyden#aot缓存#性能优化#openjdk
$ more
InfoQ Java

Java 26 正式发布:带来语言创新、库改进及性能安全提升

Oracle 正式发布了 Java 26 编程语言及虚拟机版本。作为 JDK 25 之后的首个非长期支持(non-LTS)版本,Java 26 包含 10 项 JDK 增强提案(JEP),其中 5 项处于预览或孵化阶段。此次更新重点关注 Java 类库的优化、语言特性的创新,以及系统整体性能与安全性的提升。
#java#编程语言#软件开发#jdk#技术更新
$ more
Jetbrains Blog

CloudBees 与 TeamCity 对比:Jenkins 之上的企业级 CI/CD 解决方案

核心对比 随着企业规模扩大,Jenkins 的灵活性常演变为维护插件、调试流水线及协调升级的运维负担。本文深入对比了两种解决方案: 1. CloudBees CI CloudBees 基于 Jenkins 构建,通过增加企业级治理、集中化管理和商业支持,为希望保留现有 Jenkins 资产并提升可控性的组织提供平滑升级路径。 2. JetBrains TeamCity TeamCity 采用内置功能优先的架构,减少对外部插件的依赖。它通过 Kotlin DSL 进行流水线建模,提供更强的预测性和一致性,旨在降低长期运维开销。 主要差异 架构模式:CloudBees 延续 Jenkins 的插件生态与复杂性;TeamCity 则提供一站式原生集成平台。 流水线管理:CloudBees 使用 Jenkinsfile(Groovy),TeamCity 采用 build chains 与 Kotlin DSL,后者在类型安全和 IDE 支持上更具优势。 维护成本:CloudBees 需要管理插件兼容性,而 TeamCity 通过减少移动部件显著降低了环境漂移带来的运维风险。 决策建议 若企业深度绑定 Jenkins 生态且需要高度定制化,CloudBees 是理想选择。 若企业旨在减少运维负担、寻求更标准化且易于维护的 CI/CD 平台,TeamCity 更具优势。
#ci/cd#软件开发#自动化运维#jenkins#devops
$ more
Spring Blog

Spring Integration 7.1.0-M3 版本正式发布

Spring Integration 团队正式发布了 7.1.0-M3 版本,同时推出了包含缺陷修复及依赖升级的 7.0.4 和 6.5.8 版本。7.1.0-M3 版本的核心更新包括:SFTP 元数据键调整为使用完整远程文件路径,MQTTv5 消息驱动通道适配器增强了对共享订阅主题模式的支持,以及 HeaderEnricher API 的空值处理改进。目前项目正向 4 月份的候选发布版(Release Candidate 1)迈进,官方建议开发者查阅迁移指南以了解潜在的破坏性变更。
#spring integration#java#软件开发#消息驱动#中间件
$ more
Spring Blog

使用 Spring AI 与 MCP Apps 构建交互式 AI 界面

核心概念 本文介绍了如何利用 Spring AI 2.0.0-M3 及模型上下文协议(MCP)中的 MCP Apps 功能,在聊天界面中嵌入丰富的图形用户界面(UI)。通过将 HTML、JavaScript 和 CSS 封装在 MCP 服务器中,开发者可以打破传统文本对话的限制,实现更直观的交互体验,如在聊天窗口内直接操作地图或交互式组件。 开发要点 环境准备:使用 Spring Initializr 初始化项目,确保依赖包含 Spring MVC 和 MCP Server,并将版本升级至 2.0.0-M3。 定义 UI:创建一个 HTML 文件,利用 ext-apps.ts 模块与 AI 主机进行 JSON-RPC 通信,并通过 updateModelContext 方法将 UI 交互结果同步至聊天上下文。 服务器实现:在 Spring 服务类中使用 @McpResource 注解提供 UI 资源,并使用 @McpTool 注解定义触发 UI 的工具,同时配置 MetaProvider 以满足内容安全策略(CSP)。 运行与集成:通过 Streamable HTTP 协议启动服务,并在支持的客户端(如 Claude Desktop)中配置代理,即可在对话中调用并渲染交互式组件。
#spring ai#mcp#人工智能#用户界面#开发指南
$ more
Jetbrains Blog

JetBrains IDE插件开发:如何避免后台线程中的不可取消读取操作导致UI冻结

核心问题 在JetBrains IDE插件开发中,UI冻结不仅是由事件分发线程(EDT)上的繁重工作引起的,后台线程中长时间运行且不可取消的读取操作(Read Action)也是主要诱因。这些操作会阻塞写操作(如PSI更改、模型更新),导致UI界面无响应。 原理分析 IntelliJ平台使用读写锁机制,写操作必须等待所有读取锁释放。由于非取消读取操作无法被中断,一旦耗时过长,整个平台会被迫等待,导致用户感知到的UI卡顿。 解决方案 避免在后台线程的长任务中使用 ReadAction.compute 等不可取消的API。 使用可取消的读取操作,如 Kotlin 协程中的 readAction 或 Java 中的 ReadAction.nonBlocking。 定期调用 ProgressManager.checkCanceled() 检查任务是否应取消。 确保代码逻辑是幂等的,以便在被中断后安全重试。 JetBrains建议开发者检查插件代码,将阻塞式读取转换为非阻塞式,以提升IDE的整体性能与响应速度。
#jetbrains#ide插件开发#性能优化#ui冻结#多线程
$ more