运维/SRE 面试复盘:18 道高频题的知识点拆解(附题库)
整理运维/SRE/DevOps 面试高频考点:Redis 缓存三兄弟、MySQL 索引与隔离级别、Kafka 消息可靠性、Nginx 502/504、ES 深分页、K8s 排障、Linux 性能排查等,每题给出答题要点与排查路径,文末附自用刷题小程序。
一、面试在变,但考点就那些
这两年面运维 / SRE,明显感觉面试官不爱听定义了:不问"什么是 SRE",而是问"你们 SLO 怎么定的、违反了怎么处理";不问"K8s 是什么",而是问"Pod 一直 CrashLoopBackOff 你怎么查"。
下面是我整理的高频题与答题要点,按模块拆开,都是面试里真被问过的。
二、中间件
1. 缓存穿透、击穿、雪崩分别是什么?怎么解决?
- 穿透:查不存在的 key,请求直穿 DB → 布隆过滤器、缓存空值(设短过期)
- 击穿:单个热点 key 过期瞬间大量请求打到 DB → 互斥锁重建、逻辑过期
- 雪崩:大量 key 同时过期 / Redis 挂了 → 过期时间加随机、多级缓存、限流降级、集群高可用
2. Redis 变慢了,你怎么排查?
redis-cli --latency先确认是不是 Redis 本身慢SLOWLOG GET看慢命令:大 key、KEYS/SMEMBERS全量操作- 查 big key(大 key 删除会阻塞)→ 用
unlink异步删 - 看持久化:fork 时的 copy-on-write、AOF rewrite 抖动
- 排除网络与客户端连接池问题
3. MySQL 索引为什么用 B+ 树,不用红黑树或 Hash?
- B+ 树矮胖:非叶子只存键,扇出大,三层撑千万级,磁盘 IO 少
- 叶子节点有序链表:天然支持范围查询与排序
- Hash:单点 O(1),但不支持范围查询和排序,还有哈希冲突 → 只适合等值查询
- 红黑树:树高太高,磁盘 IO 次数多
4. MySQL 四种事务隔离级别?默认哪个?
读未提交(脏读)→ 读已提交(不可重复读)→ 可重复读(幻读)→ 串行化。
InnoDB 默认可重复读,靠 MVCC 快照读 + 间隙锁解决大部分幻读。
5. Kafka 如何保证消息不丢失?
- 生产端:
acks=all,失败重试,不用裸 fire-and-forget - 服务端:
min.insync.replicas=2,副本落后踢出 ISR - 消费端:业务处理完再提交 offset(手动提交),避免"提交了但没处理"
6. 消费堆积上百万条消息,怎么处理?
先定位是消费慢还是生产暴涨。
- 扩容消费者(消费者数 ≤ 分区数,不够先扩分区)
- 查消费逻辑瓶颈:慢 SQL、串行调用、无超时
- 紧急降级:次要业务先停,保主流程
- 事后:加堆积量告警、消费耗时打点
7. Nginx 502 和 504 的区别?
- 502 Bad Gateway:upstream 没接住——后端进程挂了、端口不通 → 看 error.log 里的
connect() failed - 504 Gateway Timeout:连上了但处理超时 → 查后端耗时、
proxy_read_timeout
8. ES 深分页超过 10000 条报错或极慢,怎么解决?
from + size 每个分片都要取大量文档再全局排序,代价随页深指数增长(默认 max_result_window=10000)。
方案:search_after(游标翻页)、scroll(导出场景)、业务上限制浅分页 + 关键词约束。
三、云原生
9. Pod 频繁重启(CrashLoopBackOff),定位步骤?
kubectl logs和kubectl logs -p(看上次容器日志)- 看退出码:137(OOM/被 kill)、1(应用报错)、143(SIGTERM)
kubectl describe pod看 OOMKilled 事件与 limits- 查 liveness 探针是否误杀(超时、路径写错)
- 查依赖:配置、密钥、外部服务
10. 滚动发布流量抖动,怎么优化?
readinessProbe保证只有真就绪的 Pod 才接流量preStop+terminationGracePeriodSeconds优雅停机- 网关连接排空(drain),处理长连接
- 调小
maxUnavailable、调大maxSurge,分批灰度 - PDB 保护最小可用副本
四、Linux 与性能
11. CPU 飙到 100%,完整排查思路?
top 看整体 → top -Hp 找线程 → printf '%x' 转十六进制 → jstack 抓栈(或 perf top 看热点函数)。
分类根因:业务死循环、频繁 GC(jstat -gcutil)、锁竞争、慢查询、软中断。
12. 磁盘满了,删了文件空间没释放,为什么?
文件被进程持有句柄,删除只解除目录引用,inode 仍被占用。
df -h满但du统计对不上 → 可疑lsof | grep deleted找到持有进程- 重启 / reload 该进程(日志类可
kill -USR1让其重开日志文件) - 注意区分
df -h(空间)与df -i(inode)两种"满"
五、SRE / DevOps
13. 告警太多、误报率高,怎么治理?
- 规则瘦身:删僵尸告警(告了没人处理的直接下线)
- 相关性收敛:同根源告警聚合成一条
- 动态阈值:用历史数据校准基线(业务有昼夜波动)
- 分级路由:影响面分级,低级通知、高级电话
- 用数据说话:人均可处理告警数、误报率
14. 线上故障复盘怎么写才有价值?
- 时间线:现象 → 止损动作 → 定位过程 → 根因
- 根因要落到机制:为什么监控没提前发现、为什么变更没拦住
- 行动项到人、到时间,并回写 SOP
- 复盘的目标是改系统,不是找人
六、进阶:开放题怎么答
系统设计类题目(如"设计一套告警降噪系统"“多租户日志检索平台”)的通用框架:
需求与约束(量级 / 成本 / 一致性)
→ 整体架构分层
→ 关键取舍(为什么选 A 不选 B)
→ 瓶颈与扩展
→ 效果度量
面试官想听的是取舍理由,不是堆技术名词。
七、这些题我整理成了一个小程序
上面这些题(以及更多)我整理成了一个小程序「系统运维面试题学习随手记」,295 道题按 8 个模块分类:
中间件 · DevOps · SRE · 云原生 · Linux · AIOps · Shell · 综合开放题
- 题库全部免费,不用登录,打开就能刷,每题都有参考答案(就是上面这种"排查步骤 + 回答结构"的形式)
- 把简历和 JD 粘进去,会出 20 道针对你经历的押题,并给一份适配度分析(哪些 JD 要求你有对应经验、哪些要提前准备说法)
- 还有录像练习:摄像头答题 → 回放 → 按要点自评,练表达(本地处理,不上传)
微信搜索小程序「系统运维面试题学习随手记」即可
题库持续更新,欢迎在评论区补充你被问过的题,我加进去。
你被问过最刁的运维面试题是什么?评论区聊聊。
331



被折叠的 条评论
为什么被折叠?



