READ · UNDERSTAND · TRANSFER
阅读理解,按需巩固
先沿着原理、问答和迁移案例阅读。需要检查理解时,再切换巩固练习或展开个人记录。
核心知识 · 代码变更与验收证据绑定
先理解核心原理
先备概念:Git 差异、测试基线、构建与依赖
代码交付的证据必须绑定实际提交及环境。验收目标由任务和受保护约束确定,Agent 不能通过删测试、隐藏失败或复用旧结果让变更看似完成。
先把任务变成可检查差异
修复空密码登录不能只说“提升安全”,应说明空密码被拒、正常登录仍成功、接口兼容与无意外依赖变更。读取仓库约定、调用链和既有测试,独立工作区生成最小差异;仓库中的文档也可能是外部输入,不应自行授予部署凭证。
基线与变更成对比较
原仓库测试失败时,在相同环境对基线提交与候选提交运行相关检查,区分预先存在、环境变化和新增失败。不能简单宣布“本来就坏”或大范围修改无关组件。已有失败会限制结论,新增任务仍要有针对性的验收。
绿灯绑定版本
修改文件、依赖锁或运行参数后,旧测试报告不再证明新状态。交付应包含提交摘要、命令、环境、真实结果与未覆盖范围,提交 PR 后仍由授权流程决定合并。以下示例是教学任务,没有修改或测试新的 Java 系统。
回到问题:怎样回答?
从可验收的小任务开始,读取仓库约定、调用关系和现有测试,在独立工作区生成最小变更。模型负责提出修改,运行时负责权限、预算、测试和产物审查。交付包含差异、检查结果、未解决风险和复现步骤;自动提交 PR 不等于自动合并。对数据库迁移、公共接口和外部依赖设置明确的审批边界。
实现与取舍
明确任务合同
以“修复重复扣减库存”为例,先要求失败复现、目标行为、允许修改范围和兼容性条件。构建代码索引或按需搜索入口、调用方、事务边界与测试,不把整个仓库盲目塞进上下文。记录基线测试状态,避免把原本就失败的测试误认成新回归,也避免将测试本身改到不再检查原问题。
工具与环境
每任务独立分支或工作区,执行环境不挂生产凭证,依赖下载和网络受控。工具包括读取、搜索、编辑、构建、测试与差异检查,权限不默认包含部署和合并。大型 Maven 或 Gradle 工程可先运行相关模块测试,再按变更范围扩大;测试选择需解释覆盖理由,不能只挑容易通过的命令。
完成标准与失败恢复
验收不仅看编译通过,还看回归测试、公共 API 兼容、SQL 迁移、异常路径和并发行为。把命令、退出码、环境版本和关键输出作为证据保存。多轮修复受预算限制;恢复时保留代码变更与已跑检查的关联哈希,代码变了就不能复用旧测试通过状态。
PR 交付与负责人判断
PR 描述问题、最终行为、测试和局限,提供最小复现与回滚考虑。评审者应能从差异看出为什么有效。技术负责人会追问 Agent 如何发现事务缺陷、如何保护不可修改接口、如何避免删除测试“解决失败”,而不是只要求演示一次自动写代码。
工程推演
- 场景
- 面试假设:Java 库存服务偶发重复扣减,希望 Agent 自动修复并开 PR。
- 设计决策
- 用复现测试定位幂等和事务边界,在独立环境做最小改动。
- 验证目标
- PR 含能失败于旧代码、通过于新代码的回归与差异说明。
- 适用边界
- 自动检查不能覆盖全部业务语义,合并责任需要明确。
连续追问与解答
沿着问题的前提和约束继续向下读。先理解参考解答,再尝试收起答案,用自己的话解释因果和取舍。
第 1 层Agent 把失败测试删除了算完成吗?
任务完成需要保护验收标准不被执行者改写。
参考解答
不算。先检查被删除测试是否保护任务目标或公共行为,禁止用移除断言换绿灯。若需求确实变更,可在明确新契约下更新测试并说明旧断言为何不再适用,仍新增有效覆盖;删除结果不能冒充修复实现。
沿着这个回答继续深入
第 2 层Agent 说测试已过时,并把预期改成新行为,如何判断?
父问禁止删除验收,子问增加保留测试但修改预期的绕过。
参考解答
回到任务与公共契约,检查需求是否授权改变行为以及调用方依赖。不能仅因候选实现产生新输出就改预期;用独立验收样例或人工审查确认新行为正确。测试代码也是交付差异,必须审阅其目的与覆盖。
沿着这个回答继续深入
第 3 层测试与实现都由同一模型生成,怎样减少共同误解?
父问需独立判定新行为,继续追问实现和测试共同误读需求。
参考解答
依据独立任务约束设计反例,保留既有公共行为测试,由另一轮审查或人工核对关键断言;必要时用参考实现或业务事实检查。多模型本身不保证独立,关键是检验来源不同且覆盖错误路径。
第 1 层已有测试失败怎么区分回归?
老系统常有失败,需有公平的前后对照。
参考解答
锁定同样环境与依赖,对基线和候选提交复跑,按测试和错误类型分类。基线也失败只能说明该失败未因候选首次出现,不证明候选没有其他回归;不稳定测试需重复诊断或保留未知,报告可验证范围。
第 1 层修改后能复用之前的测试结果吗?
验收发生在某一版本,后续修改可能使证据失效。
参考解答
不能直接复用。只有报告绑定的代码、依赖、配置和环境仍一致时,才说明那份检查支持哪些事实。修改后运行受影响的检查,复杂依赖变动需扩大范围;注明未重新跑的项,不把历史绿灯标成当前通过。
举一反三:条件变了,怎样推导?
先找出改变的条件,再判断原方案中哪些前提仍成立。下面的案例是教学推演,便于将原理迁移到新问题。
任务新增数据库迁移
改变的条件:差异从方法修复扩到持久数据结构。
延伸问题:普通单元测试通过足够吗?
推导与参考解答
需额外验证迁移顺序、旧数据、兼容读写与恢复方案,明确审批和实际运行范围。独立测试数据库可模拟升级,未在生产验证就不能声称生产迁移安全;交付迁移风险而不是自动执行。
保持不变的原理:证据要覆盖实际变更契约,绑定版本和环境。
未提供可运行测试环境
改变的条件:代码审查可做,动态结果缺失。
延伸问题:能交 PR 吗?
推导与参考解答
可在授权范围交付可审阅差异、静态检查及未运行项,提供复现命令和所需环境。不能编造通过日志;对高风险修改先限制交付阶段并说明需补的验收。没有执行证据不等于所有静态判断无价值。
保持不变的原理:结论不得超过真实检查范围。
易错点
- 给 Agent 生产与合并全权限
- 编译通过即验收
- 让模型自己声明测试通过
参考资料
依据公开技术资料设计;参考资料支持技术机制,场景与评分标准为本站设计,不代表某公司面试原题。 新增问答与迁移案例用于原理讲解,来源核查与案例运行验证分别记录。
检查自己理解到哪一步
读完后可以对照这些标准解释原理、边界和取舍。掌握程度由你自评;需要进一步验证时,再完成下方小任务。
- 基础达标
- 提出隔离工作区、测试和人工评审。
- 中高级信号
- 把验收、基线失败和证据绑定到代码版本。
- 资深信号
- 能解释事务并发反例、测试选择与自动化边界。
巩固练习 按需完成 · 建议 15 分钟
给 Java 重复扣减问题设计任务合同、工具权限、失败复现与 PR 验收。
展开验收要求与检查点
- 旧代码上可复现失败
- 新测试不能被删除规避
- 未授权部署不会发生
重点检查
- 任务可验收且变更范围受控
- 测试证据绑定代码版本
- PR 与合并部署边界清晰