这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《AI Agent 工程实战》17.1 流水线:lint/test/评测/构建串联
本节把 ResearchCopilot 的 CI 串成一条分阶段流水线:静态检查 → 单元测试 → 评测质量门 → 构建镜像,按「快先跑、贵后跑」排序。真跑 compileall、pytest、评测夹具回放与 docker build,打印每段真实退出码,给出一键脚本与 GitHub Actions 形态。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
本节把 ResearchCopilot 的 CI 串成一条分阶段流水线:静态检查 → 单元测试 → 评测质量门 → 构建镜像,按「快先跑、贵后跑」排序。真跑 compileall、pytest、评测夹具回放与 docker build,打印每段真实退出码,给出一键脚本与 GitHub Actions 形态。
把图书借阅服务构建、打包并运行起来:给出 mvn clean package 的完整流程与真实构建输出,讲清本地运行的三种方式(java -jar、mvn spring-boot:run、IDE),用 curl 走通从建书、查书、借书、还书到分页查询的完整业务闭环,运行测试套件,分析打包体积与启动时间,最后给出实战卷与高级卷的学习路径和一份全书自查清单。
按 18.1 的设计逐层实现图书借阅服务:实体与 Repository(派生查询与 @Query)、Service 事务边界与业务校验、Controller 参数校验与统一响应、全局异常处理,并给出多环境配置组织、Flyway 迁移脚本、实现顺序与每步验证方法,以及三类常见实现偏差。
用一个「图书借阅管理服务」把前 17 章串成完整项目:梳理增删改查、借阅归还、分页查询的用例,设计实体关系、Controller/Service/Repository/DTO 分层与依赖方向,给出接口清单、数据库表结构、Flyway 迁移脚本、错误码与统一响应结构,并列出技术选型与对应章节。
集成测试启动完整 Spring 容器,验证跨层协作。本节讲清 @SpringBootTest 的 webEnvironment 四个取值、4.x 下 TestRestTemplate 需显式开启、上下文缓存与 @DirtiesContext、测试数据隔离的三种策略,并用 Testcontainers 2.0 接入真实数据库,最后给出三层测试的选择速查表。
切片测试只加载需要的那一层,比集成测试快得多。本节用 @WebMvcTest 测 Controller、@DataJpaTest 测 Repository、@JsonTest 测序列化,讲清 4.x 必须显式加 @AutoConfigureMockMvc、用 @MockitoBean 取代旧注解,并给出 3.x 到 4.x 的迁移对照表与新增的 RestTestClient 用法。
单元测试是测试金字塔的底座,也是唯一不需要启动 Spring 容器的测试。本节讲清 JUnit 5 的核心注解与断言,重点演示 Mockito 的 @Mock、when、verify 与 ArgumentCaptor,并说明 4.x 下用 @ExtendWith(MockitoExtension.class) 集成 Mockito 的正确方式,最后为图书服务写出一组单元测试。
《Go 语言编程实战》全书导航页:说明本书与卷一《Go 语言编程入门》的分工、读者画像与前置知识、三条学习路径与五个部分之间的依赖关系,并按五个部分列出 18 章 54 节的完整章节索引,另含贯穿项目 TaskHub 从单模块到集群部署的推进路线与常见问题速查表,方便读者按需定位、跳读与随时查阅全书。
全书的最后一步是把 TaskHub 真正推到用户面前并让它长期变好。本节给出上线 Go/No-Go 清单、观测三支柱的接线,并用本机真跑的一段中间件演示:1000 次请求中注入 10 个错误,实测 1001 个请求、10 个错误、可用性 99.001%,据此判定错误预算是否耗尽;最后用「假设-实验-度量-决策」闭环收束全卷 18 章。
「高可用」不能靠假设,只能靠演练验证。本节真的把 TaskHub 的依赖停掉、注入延迟、再恢复,用真实数据检验它的失败行为:docker stop 掉 Postgres 后 30 次查询全部快速失败(1~3ms,无挂起),恢复后 30/30 成功;代码注入 2 秒延迟后 200/200 请求在 500ms 超时处被截断,P99 从 6ms 升到 508ms。
上线前的最后一道算术题是「这台机器到底能扛多少」。本节用本机真实的基准数据(M1 Pro 上 536.6 ns/op、1 alloc/op,并发 8 路 135.7 ns/op)做架构复盘与容量规划:从实测吞吐推算单副本容量,用安全系数与依赖瓶颈算出需要的副本数,并给出成本与冗余的权衡表。
日志的价值不在数量而在质量。本节讲清该记什么、不该记什么(密码、令牌、身份证、完整卡号绝不上日志,并给出脱敏示例),如何为事件选对级别,为什么用参数化写法记录异常才不会丢堆栈,占位符 {} 的延迟求值与 isDebugEnabled 的真正用途,异步日志的收益与丢日志风险,并附一份可直接落地的日志规范 checklist。
本附录把 Go 学习与实战中最常见的错误按「报错原文 → 原因 → 修法」整理:declared and not used、类型不匹配、nil map 写入、切片别名、goroutine 泄漏、context deadline exceeded、module path 不匹配、missing go.sum entry、import cycle 与中文乱码,每条都给出最小复现代码与修法。
本附录整理 go 命令与工具链的用法:build/run/test/vet/fmt/mod/get/work/generate/doc/env 各子命令、GOTOOLCHAIN 多版本、GOOS/GOARCH/CGO_ENABLED/GOFLAGS/GOPROXY 等环境变量,以及 -ldflags/-gcflags/-race/-cover 等构建标志,命令与输出均在 go1.27.0 实测。
本附录按「想做什么 → 用哪个包哪个函数」整理 Go 标准库常用 API:strings、strconv、bytes、time、encoding/json、os、io、fmt、errors、slices、maps、cmp、sync、context、net/http 与 log/slog,函数签名均用 go doc 在本机 go1.27.0 上核实,并配可运行的最小示例。
本附录把全书用到的 Go 语法与惯用法压缩成一组速查表:类型与零值、变量与常量、控制流、函数与 defer、切片与 map、字符串与 rune、结构体与方法、接口、错误处理、泛型与并发原语,每段片段都按「想做什么 → 怎么写」组织,并在 go1.27.0 上实测输出。
文本日志检索困难,本节把图书服务日志改成结构化 JSON:用 logback-spring.xml 配合 logstash-logback-encoder 输出字段化日志,讲清 MDC 用法与线程池不传递的陷阱及 TaskDecorator 解法,用 Filter 把请求 ID 写进 MDC 串联一次请求,并对比 logback-spring.xml 与 logback.xml 的差别。
《Go 语言编程入门》全书导航页:说明本书定位、读者画像与前置知识、三条学习路径与六个部分之间的依赖关系,并按六个部分列出 18 章 54 节的完整章节索引,另含序、前言、附录 A–D 与常见问题速查表,方便读者按需定位、跳读与随时查阅全书。
《Go 语言编程入门》的序。从 Go 今天在语言生态中的位置谈起,说明站内既有的 Go 专题做的是「单点深挖」、这本书补的是「从零到能干活」的递进路径,并交代本书的三个刻意取舍、对「Go 啰嗦」等常见误解的回应,以及不同起点的读者该从哪一章进入这趟旅程。
《Go 语言编程入门》前言:说明本书的目标读者与前置知识、六部分 18 章的结构分工、每一节的组织方式、代码与工具链约定、Go 1.27 的版本基线与三种阅读路径,并给出各部分的学习时长估算,以及发现疏漏时该如何提交勘误与反馈意见,方便你快速建立对全书的整体预期。