DevOps 工程师初面实战题目(中小团队)
侧重:有开发背景 + 从 0 到 1 搭建 + 中小规模实战
一、CI/CD 流水线
1. 从 0 搭建 CI/CD,你会怎么做?
回答要点:
- 流程:代码提交 → 构建 → 测试 → 打包 → 部署测试 → 部署生产
- 工具选型:小团队用 GitHub Actions / GitLab CI(免运维),自建用 Jenkins
- 关键点:产物打 tag、环境隔离、一键回滚、构建通知
2. CI/CD 踩过什么坑?
回答要点:
- 构建慢 → 缓存依赖(Maven、node_modules)
- 并发冲突 → 工作空间隔离
- 密钥泄露 → 用 CI 变量,不写代码里
- 发布卡住 → 超时机制 + 通知
3. 怎么实现发布不停机?
回答要点:
- Nginx 负载 + 滚动发布:摘一台 → 部署 → 挂回 → 下一台
- 双目录切换:v1/v2 交替,软链接秒切
- Docker:新容器起来再停旧的
二、Linux 服务器
4. 新服务器到手,做哪些初始化?
回答要点:
- 基础:主机名、时区、国内源
- 安全:禁 root SSH、密钥登录、防火墙
- 软件:Docker、Git、监控 Agent
- 磁盘:数据盘挂载、日志目录规划
- 最好写成脚本/Ansible,可复用
5. CPU/内存/磁盘告警怎么排查?
| 回答要点: | 告警 | 命令 | 常见原因 |
|---|---|---|---|
| CPU 高 | top、htop | 死循环、GC 频繁 | |
| 内存高 | free、ps aux | 内存泄漏、缓存没释放 | |
| 磁盘满 | df、du | 日志没清理 | |
| IO 高 | iotop | 大量写日志、慢查询 |
6. 日志撑爆磁盘怎么处理?
回答要点:
- 紧急:
> xxx.log清空(不能直接 rm,进程还在写) - 长期:logrotate 日志切割、应用配置大小限制、定时清理脚本
三、Docker 部署
7. Docker 常用操作?
回答要点:
- 查看:
docker ps、docker logs、docker stats - 进入:
docker exec -it xxx bash - 清理:
docker system prune - 更新:pull 新镜像 → 停旧容器 → 起新容器
8. Dockerfile 怎么优化?
回答要点:
- 多阶段构建:编译和运行分离,减小体积
- 基础镜像:用 slim/alpine 版本
- 层缓存:不变的放前面(依赖安装)
- 不用 latest:打明确的版本 tag
9. docker-compose 怎么用?
回答要点:
- 多服务编排:app + redis + mysql 一个文件搞定
- 常用:
up -d启动、logs -f看日志、pull && up -d更新 - 配置:端口、环境变量、依赖顺序、restart 策略
四、Nginx
10. Nginx 常用配置?
回答要点:
- 反向代理:proxy_pass + header 透传
- 负载均衡:upstream + weight 权重
- 静态资源:root + expires 缓存
- HTTPS:证书配置、强制跳转
11. 502/504 怎么排查?
| 回答要点: | 错误 | 含义 | 排查 |
|---|---|---|---|
| 502 | 后端没响应 | 服务挂了、端口没起来 | |
| 504 | 后端超时 | 接口慢、超时配置短 |
- 排查:看 error.log → 检查进程/端口 → curl 后端测试
- 解决:重启服务、调大 proxy_timeout
五、监控告警
12. 中小团队监控怎么搭?
回答要点:
- 轻量方案:Prometheus + Grafana + AlertManager
- 更轻量:云厂商自带监控(阿里云/腾讯云)
- 必监控:CPU、内存、磁盘、进程存活、接口 RT、错误率
13. 告警太多怎么治理?
回答要点:
- 分级:P0 立即处理、P1 一小时内、P2 当天
- 收敛:同类合并、恢复通知
- 定期 Review:删无用告警、调阈值
六、自动化脚本
14. 写过哪些自动化脚本?
回答要点:
- 一键部署脚本(拉镜像 → 停旧 → 起新)
- 日志清理脚本
- 数据库备份脚本
- 巡检脚本(磁盘、证书过期)
- 批量操作(重启、更新配置)
15. Shell 脚本注意事项?
回答要点:
set -e出错退出- 变量加引号防空格
- 幂等设计(重复执行不出错)
- 关键步骤打日志
- 错误处理(
|| true或 trap)
七、故障处理
16. 服务挂了怎么排查?
回答要点:
- 快速确认:进程在不在、端口在不在、能不能 curl 通
- 看日志:应用日志、系统日志(dmesg)
- 常见原因:OOM 被 kill、线程卡死、连接池满、依赖挂了
- 原则:先止血(重启/回滚)再查根因
17. 发布出问题怎么回滚?
回答要点:
- Docker:启动旧版本镜像
- 传统部署:软链接切回旧版本
- 关键:每次发布打 tag、回滚脚本提前备好、数据库变更要兼容
八、综合
18. 有开发背景做 DevOps 的优势?
回答要点:
- 能看懂代码,沟通顺畅
- 写脚本/工具效率高
- 排查问题能深入代码层面
- 理解架构,部署方案更合理
19. 怎么推动手动部署转自动化?
回答要点:
- 先解决痛点:最常出错的环节先自动化
- 循序渐进:手动 → 脚本 → 流水线
- 收益可见:部署从 30 分钟 → 5 分钟
- 降低门槛:写文档、界面化操作
面试加分项
- 有从 0 搭建过完整环境的经验
- 能说出踩过的坑和解决方案
- 不只会用工具,还能写脚本
- 有成本意识
- 做事有文档习惯