这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《Go 语言编程实战》4.2 分页、过滤、排序与幂等
列表接口是接口设计里最容易被低估的一个。本节把 TaskHub 的任务列表做成可游标翻页、可白名单过滤、可白名单排序的接口,用真实 Postgres 对比 OFFSET 与键集分页在 20 万行下的耗时与扫描行数差距,再用幂等键中间件解决 POST 重试导致重复创建的问题,并给出重放与冲突的实测行为。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
列表接口是接口设计里最容易被低估的一个。本节把 TaskHub 的任务列表做成可游标翻页、可白名单过滤、可白名单排序的接口,用真实 Postgres 对比 OFFSET 与键集分页在 20 万行下的耗时与扫描行数差距,再用幂等键中间件解决 POST 重试导致重复创建的问题,并给出重放与冲突的实测行为。
接口一多,最先失控的不是代码而是 URL 和状态码。本节把 TaskHub 的租户/项目/任务三级资源建模成稳定的 URL 层级,梳理每个方法与状态码的对应关系,用 Go 1.22+ ServeMux 的路径参数承接,并解决多租户下 404 与 403 的取舍、ID 前缀与时间格式等表示层约定,最后用 httptest 把状态码固化成可回归的契约。
系统集成测试深度指南:从测试替身的选择到 Testcontainers 实战,涵盖数据库、Redis、Kafka 集成验证,Spring Boot 测试切片,微服务契约测试与 Pact,以及共享容器性能优化策略。
系统性讲解软件测试工程的核心框架:测试金字塔、各级测试的ROI对比、ISO/IEC 25010质量模型、测试左移与右移策略、静态与动态测试、白盒黑盒灰盒方法论,以及常见的测试反模式。
Playwright 端到端测试深度实战:从架构原理到生产级 CI/CD 集成,涵盖 Page Object Model、登录态管理、Trace Viewer、视觉回归测试,以及与 Selenium/Cypress 的全维度对比。
深入讲解突变测试原理与实战:为什么覆盖率可以作弊、突变类型全览、突变评分计算、mutmut/PIT/StrykerJS 三大工具实战、等价突变处理策略,以及突变测试与覆盖率的互补关系。
测试覆盖率深度解析:行覆盖、分支覆盖、路径覆盖的含义与局限,JaCoCo/Coverage.py 报告解读,增量覆盖率策略,SonarQube 质量门禁配置,以及 CI/CD 中的自动化质量度量体系。
从测试数据管理问题出发,系统讲解 Object Mother、Builder、Fixture、Mock、Contract Testing 到 Testcontainers 的完整链路,涵盖多语言工厂模式、数据库测试策略和环境隔离方案。
性能与负载测试深度指南:Load/Stress/Spike/Soak 四大测试类型,k6 JavaScript 场景编排、Locust Python 协程、JMeter JMX 配置,以及性能基线、回归测试与 CI 集成的生产级实践。
系统对比三大主流单元测试框架 pytest、JUnit 5、Go testing 的深度特性,涵盖 FIRST 原则、AAA 模式、Mock 策略、Table-Driven Tests、Benchmark,以及单元测试粒度、可测性设计和常见反模式。
测试驱动开发 TDD 与行为驱动开发 BDD 深度实战:Red-Green-Refactor 循环、FIRST 原则、Gherkin 语法、Cucumber/pytest-bdd 工具链,以及测试先行的真实案例与反模式规避。
深入 Solidity Gas 优化实战:EIP-1559 计费机制、存储读写成本模型、数据位置选择、状态变量打包、EIP-1167 最小代理,以及 Uniswap 级优化案例与基准对比。
API 测试自动化深度指南:涵盖 REST / GraphQL / gRPC 三种协议的统一测试策略,Postman/Newman/pytest/RestAssured 工具链,OpenAPI 契约测试,以及认证、性能与 CI/CD 集成实践。
本节收束数据访问层剩下的三个难题:表结构怎么改才不锁库、并发写入怎么写才不留半成品、连接池该配多大才不会把数据库压垮。先讲 expand-contract 迁移模式与加列改列的真实锁行为,再讲交互式事务、隔离级别、死锁重试与 outbox,最后给出连接数估算公式、PgBouncer 与预编译语句的冲突,以及慢查询与连接指标的观测手段。
本节换一条与 Prisma 相反的路线:用 TypeScript 文件本身描述表结构,让类型从查询语句推导出来。先安装 drizzle-orm 与 drizzle-kit,用 pgTable 定义表、列、枚举与索引,再讲清 $inferSelect 与 $inferInsert 的差别,随后逐个演示 select、join、where 与关系查询 API 的类型结果,最后给出迁移命令与选型建议。
本节把 Prisma 当作一条从数据库结构到 TypeScript 类型的单向流水线:写出第一个 schema.prisma,逐块拆解 generator、datasource 与 model 的字段类型与常用属性,观察 prisma generate 生成了什么,并说明 select、include 的返回类型如何推导。最后给出常见报错对照与 N+1 规避,读完你能独立设计可演进的数据模型。
实体直接出现在接口层会带来懒加载代理序列化失败、字段泄露与循环引用三类事故。本节给出投影(interface / DTO)的用法与边界、手写转换与 MapStruct 的取舍、Repository 与 Service 的职责划分,以及 readOnly 事务与转换时机的关系。
每个接口都要记日志、查登录,写进 Controller 太啰嗦。本节对比 Filter(Servlet 规范)与 HandlerInterceptor(Spring MVC)的执行时机,用真实日志证明 Filter → Interceptor → Controller 的顺序,演示两种 Filter 注册方式与拦截器路径匹配,并完整实现请求 ID 贯穿与登录校验。
Alembic 1.20.0 实战:从 init 到 env.py 配置、autogenerate 生成迁移、upgrade/downgrade/history/current 全套命令,讲清加列、数据回填与不可逆操作等演进策略,代码在 SQLite 上真跑过。
从 session 生命周期讲起,用实测数据讲清事务边界、连接池参数(pool_size/max_overflow/pool_pre_ping)与 N+1 识别治理;用事件钩子统计 SQL 条数,对比惰性、selectinload、joinedload 的真实数字。