题目重点:从一次提交解释构建、测试、产物、环境与发布,回答实践追问。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 讨论通用流水线,不假定特定云或工具。实践叙述使用真实项目证据。
解题路线
- CI 检查提交能否构建并通过必要验证;CD 把同一个已验证产物送往目标环境。构建一次、记录版本和依赖,比每个环境重新拼装更容易审计。
- 门禁按风险设置:静态检查、单元、协议/迁移集成、安全和预览。不可让全套慢测试掩盖快速反馈,也不为了速度跳过关键数据迁移。
- 部署分离代码、配置与秘密;权限最小化,日志不泄露凭证,环境差异通过配置合同与冒烟验证发现。
- 灰度逐步扩大流量,看业务失败率和尾延迟,设停止阈值。回滚二进制不保证回滚数据库,向后兼容迁移与 feature flag 需要提前设计。
手动走一遍
schema 先加可空新列,旧应用仍能运行;新应用双读/迁移后,再在后续版本收紧约束。发布失败时用产物 ID 回退,核对错误率恢复,保留失败证据,而非只说按钮显示成功。
规模与取舍
吞吐受最长门禁、资源并发和排队影响。报告提交到反馈、部署频率、失败率与恢复时间,避免只追求次数。
易错点与追问
容易失分的边界
- 每次发布重新构建不同字节。
- 回滚忽略数据兼容。
- 只描述工具名没有质量门禁。
继续深挖
- 如何签名与追踪产物?
- 灰度如何防止样本过少得出错误结论?
