DevOps 面试考察的是你能否可靠地交付软件:代码如何从笔记本走到生产环境,你如何判断它是否健康,以及出问题时你该怎么办。下面是 20 道面试题及参考答案,从基础概念到决定大多数面试成败的场景题都有。文中出现的命令都是标准命令,你可以在对应工具的官方文档中查到。
基础概念
1. 什么是 DevOps?
DevOps 是一种工作方式,它把开发和运维结合在一起,让软件的构建、测试、发布和运行都走同一套共享流程。目标是发布更快、更安全,出问题时恢复更迅速。它本质上是一种文化,也是一套实践方法,工具只是辅助,而不只是一个职位名称。
2. 持续集成、持续交付和持续部署有什么区别?
| 实践 | 含义 |
|---|---|
| 持续集成 | 开发者频繁合并小改动,每次合并都会触发自动构建和测试 |
| 持续交付 | 每个通过流水线的改动都已具备发布条件,由人来决定何时发布 |
| 持续部署 | 每个通过流水线的改动都会自动发布到生产环境 |
3. 软件交付的关键指标有哪些?
DORA 研究项目提出的四个指标被广泛采用:部署频率、变更前置时间、变更失败率和故障恢复时间。前两个衡量速度,后两个衡量稳定性。好的回答会说明你要同时跟踪这四个指标,这样才不会为了提升速度而牺牲稳定性。
4. 一条好的 CI 流水线是什么样的?
- 检出代码并恢复缓存的依赖。
- 构建。
- 先跑快速测试(单元测试),再跑较慢的测试。
- 运行静态检查,比如 lint 和依赖漏洞扫描。
- 只构建一次制品(容器镜像或软件包),并用提交号打标签。
- 发布该制品,并让同一个制品依次经过所有环境。
核心思路是只构建一次、逐级晋升同一个制品,这样你测试的就是你上线的。
版本控制与发布
5. 你们如何做分支和发布?
常见的有两种做法。主干开发(trunk-based development)会频繁把小改动合并到主分支,用功能开关隐藏未完成的工作。GitFlow 这类基于分支的工作流则用长期存在的分支来做发布。主干开发通常更适合持续交付,因为合并的改动小且频繁。
6. 什么是蓝绿部署和金丝雀发布?
| 策略 | 工作方式 | 回滚 |
|---|---|---|
| 蓝绿 | 两套完全相同的环境。部署到空闲的那套,测试通过后切换流量 | 把流量切回去 |
| 金丝雀 | 把一小部分流量发给新版本,观察指标,再逐步增加 | 把流量占比降回零 |
| 滚动 | 每次替换几个实例 | 向前继续或反向回滚 |
蓝绿部署需要额外的容量成本。金丝雀发布需要完善的指标,因为你是根据数据来做决策的。
7. 什么是功能开关,为什么要用它?
功能开关是配置里的一个开关,不用部署就能打开或关闭某个功能。它把部署代码和发布功能分开,让你能先在小范围用户中测试,出问题时也能快速关掉。代价是旧开关会越积越多,所以功能稳定后要及时清理。
8. 如何安全地回滚?
保留上一个版本的制品,让部署可重复执行,并让数据库变更向后兼容,这样旧版本仍能配合新表结构正常工作。忽略数据库的回滚方案根本不算方案。对于高风险变更,如果回滚会丢数据,那就宁可向前修复。
基础设施与容器
9. 什么是基础设施即代码?
用受版本控制的文件来定义服务器、网络和权限,而不是在控制台里点来点去。它让环境可重复、可审查、易于重建。常用工具包括 Terraform、Pulumi,以及各云厂商自带的模板。参见我们的 Terraform 面试题。
10. 容器和虚拟机有什么区别?
虚拟机在虚拟化硬件之上包含一整套客户操作系统。容器共享宿主机内核,只打包应用及其依赖,因此启动更快、占用内存更少。容器的隔离性不如虚拟机。
11. 一个好的 Dockerfile 应该包含什么?
使用小而具体的基础镜像;合理安排层的顺序,把最不常变动的层放在前面(以利用构建缓存);先复制依赖文件并安装,再复制源代码;以非 root 用户运行;不要把密钥打进镜像里。多阶段构建可以把构建工具挡在最终镜像之外。
12. 为什么要用 Kubernetes?
它能把容器调度到多台机器上,重启失败的容器,对它们进行扩缩容,并处理滚动更新和服务发现。它也带来了大量复杂性,所以一个好的回答会说明什么情况下你不会用它,比如一个几台服务器就能装下的小应用,或者一个托管平台。参见我们的 Kubernetes 面试题。
13. 你如何管理密钥?
绝不把它们放进源代码管理或镜像里。使用密钥管理服务或平台的密钥存储,给每个服务最小必要的访问权限,定期轮换密钥,并避免把它们打印到日志里。说明如果某个密钥泄露了你会怎么做:吊销它、轮换它,并检查日志看它是否被使用过。
可靠性与运维
14. 监控、日志和链路追踪分别是什么?
| 信号 | 告诉你什么 |
|---|---|
| 指标 | 系统随时间运行得如何,比如错误率和延迟 |
| 日志 | 某个具体事件中发生了什么 |
| 链路追踪 | 一个请求如何流经多个服务 |
要针对用户能感受到的症状(比如错误和响应缓慢)告警,而不是更多针对原因(比如某台机器 CPU 过高)。
15. 什么是 SLI、SLO 和 SLA?
服务等级指标是一种度量,比如成功请求所占的比例。服务等级目标是它的目标值,比如 30 天内达到 99.9%。服务等级协议是对客户的承诺,未达成时往往会有后果。100% 与 SLO 之间的差距就是错误预算:你留给风险和变更的空间。
16. 一个生产服务变慢了。你会怎么做?
- 通过仪表盘和错误率,确认这是不是真的、影响了谁。
- 检查最近有什么变动:一次部署、一次配置更改、一次流量激增。
- 缩小范围:某个具体的端点、区域或依赖。
- 查看资源(CPU、内存、连接数)以及下游服务。
- 如果最近的某次变更是可能的原因,先回滚它,事后再调查。
- 在处理过程中同步进展。
面试官在听的是一个冷静、有条理的方法,以及先缓解问题、再找根因。
17. 什么是无指责事后复盘?
事故之后写的一份书面回顾,聚焦于系统和流程如何让这次故障得以发生,而不是谁犯了错。它涵盖时间线、影响、原因,以及有负责人、可落地的后续行动。重点是学习,并让同样的故障更难再次发生。
18. 水平扩缩容和垂直扩缩容有什么区别?
垂直扩缩容给一台机器更多资源。水平扩缩容增加更多机器。垂直扩缩容简单,但有上限,且存在单点故障。水平扩缩容能扩展得更远,也能承受一台机器的损失,但需要无状态服务或共享状态。
实践
19. 你如何保护流水线?
限制谁能修改流水线、谁能部署到生产环境。扫描依赖和镜像中的已知漏洞,对制品进行签名和验证,让凭据保持短时效且权限受限,并把对流水线文件的改动当作代码一样审查。拥有宽泛权限的构建代理是攻击者最喜欢的目标。
20. 讲一次出错的部署。
这是技术面试里的行为类问题。讲一个简短的故事:改了什么,你怎么发现的,你首先做了什么(通常是缓解,往往是回滚),你发现了什么,以及事后你改了什么让它不会重演。面试官看重的是无指责的措辞和具体的后续行动。
如何准备
- 搭建一条端到端的小型流水线:代码仓库、构建、测试运行、容器化,以及部署到一个你能访问的环境。
- 准备好讲述你亲身经历过的一次故障或失败的发布。
- 把“服务变慢”这个问题的回答大声练习,直到它能变成一份冷静、有条理的清单。
- 在 CI、容器、基础设施即代码和监控等每个领域,深入掌握一个工具,而不是罗列一长串名字。
相关练习,请参阅我们的指南:AWS 面试问题、Terraform 面试问题、Kubernetes 面试问题和计算机网络面试问题。
大声练习,用自己的话表达。事后的文字记录能看出你在哪里啰嗦或跑题了。在任何实时面试或评估中,请遵守雇主关于 AI 工具的规定。
用 YesToTheOffer 练习你的回答
大声排练,获得基于你自己简历生成的答案,并在之后回顾你的文字记录。30 分钟免费,无需订阅。



