TIP这篇不是背题清单,而是一次完整面试模拟的复盘记录:一个真实的运维求职者(Linux + K8S + Ceph + 云平台背景),面向「灾备运维工程师」岗位,被连续追问了几十轮,中间大量回答被纠正、被追问、被推翻。
我把整个过程重新整理成题库形式。每一题都按 面试官怎么问 → 容易踩的坑 → 面试版标准回答 → 加分点 四段式展开。你可以当面试题刷,也可以当排障手册查。
为什么值得写一篇面试宝典
运维面试有个很尴尬的特点:它考的不是你会不会,而是你在压力下能不能把思路讲清楚。
同样一个人,平时能处理的问题,一到面试就变成这样——
“呃,如果服务器变慢,首先我应该……嗯,先看 CPU、内存、磁盘 IO,然后……就是,相应的……”
技术是对的,但听起来像没做过。
而面试官真正在听的东西只有三件:
- 你有没有排查顺序(而不是想到哪说到哪)
- 你会不会先定位再动手(而不是上来就重启、扩容、改配置)
- 你能不能说出为什么(而不是背了一堆命令不知道用在哪个环节)
下面所有题目,都围绕这三件事展开。
一、面试前的准备
1.1 先判断这个岗位该不该投
投递前先做匹配度评估,别海投。以「灾备运维工程师」岗位为例,招聘要求与一份典型运维简历(3 年经验,Linux + 云平台 + K8S + Ceph)的匹配情况大致是这样:
| 招聘要求 | 对口的经历 | 匹配度 |
|---|---|---|
| 数据备份规划、实施 | Ceph 存储、数据恢复计划经验 | ★★★★☆ |
| 灾备平台运维 | 数据灾备、完整性校验经验 | ★★★★☆ |
| 数据恢复演练 | 简历中写了恢复计划 | ★★★★☆ |
| 运维文档、报表 | 运维报告、巡检文档 | ★★★★★ |
| 服务器、存储、网络维护 | 服务器、交换机、路由、Ceph | ★★★★★ |
| 信息安全 | 系统安全策略、监控 | ★★★★☆ |
| 客户技术支持 | 客户系统对接经验 | ★★★★☆ |
| 商业备份软件经验 | 简历未体现 | ★★☆☆☆ |
结论是 70%~80%,可以投。
NOTE关键判断方法:短板只有一项(商业备份软件),而这项恰好是「可培养」的;优势项有六项,且都是「需要时间积累」的。这种情况下对方如果主动联系你,说明他们看中的正是你的存储与基础设施底子。
反过来,如果岗位要求「精通 Veeam / NetBackup / 爱数,5 年以上专业灾备经验」,那就不要硬投——面试会被单点打穿。
可以主动问对方一句,既专业又能提前摸清重点:
“请问目前使用的是哪种灾备平台或备份软件?我之前主要接触的是存储、数据恢复和云平台运维,希望提前了解一下技术栈。“
1.2 自我介绍:一段话讲完,不要背简历
面试官让你自我介绍时,他要的不是你的履历朗读,而是你把自己和这个岗位连起来的能力。
WARNING常见扣分点:“我对技术差就主要……”——这是语音输入把”技术栈”识别错了。面试时口语化可以,但专业名词必须说准。“技术栈”说成”技术差”,面试官会直接怀疑你的专业度。
一段可用的完整话术(约 400 字,语速正常约 2 分钟):
您好,我之前主要从事云平台和运维相关工作,目前有 3 年以上运维经验,比较擅长 Linux 服务器、Kubernetes、Docker、Ceph 存储、云平台以及监控和故障排查;在国家电网营销 2.0 项目中,我主要负责阿里云平台的部署和运维,包括云服务器、云存储、Zabbix 监控、安全策略、系统故障处理、巡检脚本以及运维报告等工作,能够保障系统 7×24 小时稳定运行;另外在慧存智视项目中,我实际参与过 etcd、Kubernetes、Ceph 集群的部署和运维,负责 Ceph 存储集群的管理、扩容和变更,同时参与数据灾备、数据完整性校验以及数据恢复计划的制定和执行,这部分经历与贵司灾备运维岗位的数据备份、存储管理、恢复演练和平台稳定性保障有比较直接的匹配;虽然我之前没有长期使用某一种专业商业备份软件,但我对 Linux、服务器、存储、网络、容器以及数据恢复都有实际操作经验,而且有比较完整的运维基础,所以如果岗位主要涉及备份平台运维、存储管理、数据恢复和客户技术支持,我认为自己能够比较快地上手;如果有机会加入,我也希望能够在现有云平台、存储和运维经验的基础上进一步深入灾备领域,把数据备份、恢复演练、故障处理和灾备体系建设做得更加专业。
这段话的结构值得拆解一下:
① 年限与擅长领域(定位)② 项目一:云平台运维(证明工程能力)③ 项目二:存储与灾备(对准目标岗位)④ 主动交代短板 + 转化(诚实,但给出替代优势)⑤ 表态(学习意愿 + 发展方向)第 ④ 步是大多数人不敢做但最加分的一步——主动承认短板,同时立刻给出替代优势。
1.3 薪资话术
岗位区间 11–14K,期望值报 12K 左右,留出谈判空间:
“结合岗位职责和我的工作经验,我目前的期望薪资是 12K 左右,具体也可以结合岗位的实际工作内容、福利以及公司的薪资结构再沟通。“
二、Linux 排障篇
这是整场面试被追问最密集的模块。九道题基本覆盖了日常运维的高频故障。
TIP这一篇有个贯穿始终的核心思路,先记住它再看题:
现象 → 定位 → 数据 → 原因 → 优化
而不是”我猜是 XX 问题”。面试官最反感的回答模板就是:一听到现象,直接跳到原因。
2.1 服务器变慢,但 CPU、内存都正常
面试官问法:服务器响应变慢,你看了监控,CPU 和内存都正常,下一步怎么查?
常见踩坑:把 CPU、内存、磁盘、网络、监控工具全列一遍,看起来很全面,但没有重点。既然 CPU 和内存已经正常,就不该在这两点上停留。
面试版回答:
“如果服务器变慢,我首先会通过监控系统确认当前服务器整体状态,然后查看 CPU、内存、磁盘 I/O 和网络情况。如果 CPU 和内存正常,我会重点排查磁盘 I/O、进程状态以及网络延迟。比如使用 top 查看进程资源占用,free 查看内存情况,iostat 查看磁盘 I/O,vmstat 查看系统整体负载,ss 或 netstat 查看网络连接情况,同时结合业务日志判断是否存在接口响应慢或者服务异常。”
关键命令:
top # CPU / 进程free -h # 内存,重点看 swap 是否被使用iostat -x 1 # 磁盘 I/O,重点看 %util / awaitvmstat 1 # 系统整体负载ss -antp # TCP 连接(比 netstat 新)加分点:不要只看系统资源,补一句业务视角——
“如果系统资源没有明显异常,我会进一步查看业务服务日志,例如接口响应时间、数据库连接情况,以及是否存在大量请求堆积。“
2.2 磁盘 %util 长时间接近 100%
面试官问法:iostat -x 发现磁盘 %util 长时间接近 100%,但 CPU 和内存正常,什么原因?下一步?
CAUTION这道题有个硬知识错误必须先纠正:
%util不会大于 100%,最大就是接近 100%。说”磁盘占用大于 100%“会直接暴露你不熟这个指标。
常见踩坑:看到磁盘高,第一反应是”去找大文件删掉 / 移走”。这是处理措施,不是排查。面试官会认为你”看到磁盘高就开始删文件”。
面试版回答:
“如果发现磁盘 I/O 长时间较高,但是 CPU 和内存正常,我会优先判断是哪一个进程产生大量磁盘读写。首先使用 iostat 查看磁盘整体情况,然后通过 iotop 或 pidstat 查看具体进程的 I/O 使用情况,再结合业务日志判断是否存在异常任务,比如日志大量写入、数据库大量查询、定时任务执行或者磁盘空间不足等问题。”
排查顺序:
iostat -x 1 # ① 确认磁盘状态:%util / await / avgqu-sziotop # ② 找到占 I/O 的进程pidstat -d 1 # ② 替代方案df -h # ③ 看磁盘空间df -i # ③ 看 inode 是否耗尽(容易被忽略)du -sh /* # ④ 找大文件find / -size +1G # ④ 替代方案iostat -x 关键字段:
| 字段 | 含义 |
|---|---|
%util | 设备繁忙程度,接近 100% 表示几乎一直忙 |
await | I/O 平均等待时间(毫秒),高说明排队严重 |
avgqu-sz | 平均请求队列长度 |
2.3 Java 服务大量写磁盘,但线上核心业务不能重启
这道题考的是生产意识,不是技术。
面试官问法:iotop 发现是某个 Java 应用一直在大量写磁盘,但这个服务是线上核心业务,不能直接重启。你怎么处理?
常见踩坑:张口就是”先扩容磁盘”。会被立刻追问:
“为什么要扩容?如果是程序异常日志刷盘,扩容能解决根因吗?”
面试版回答:
“如果发现核心 Java 服务大量写磁盘,我不会直接重启服务。首先确认产生大量 I/O 的具体原因,通过 iotop、lsof 等工具确认写入来源。如果是异常日志或者程序异常,需要限制影响范围并联系开发处理;如果是正常业务增长导致容量不足,可以进行磁盘扩容。同时会做好监控和后续优化,避免问题重复发生。”
三步走:
iotop # 第一步:定位是谁在写lsof -p <java_pid> # 第一步:看它打开了哪些文件(日志?临时文件?业务数据?)第二步 降低业务风险(不 kill 进程):
- 限制日志级别
- 临时清理无用日志
- 调整 logrotate 轮转
- 限制异常请求
- 联系开发确认程序行为
第三步 扩容是措施之一,但要放在后面,且必须配一句话:
“如果确认是业务正常增长导致存储空间不足,可以临时扩容磁盘或者增加存储容量,保证业务稳定。但同时还需要从应用层分析为什么产生大量写入,避免问题再次发生。”
NOTE你在回答里说的”线上业务不能直接重启,要先保证业务稳定性”——这个意识是对的,要在面试里主动说出来。很多候选人上来就是
kill+ 重启。
2.4 MySQL 查询突然变慢,但服务器资源正常
面试官问法:业务反馈 MySQL 查询突然变慢,但服务器 CPU、内存、磁盘都正常。你怎么排查?
常见踩坑:直接跳到”缓存穿透""改 SQL”。这是开发视角,不是运维视角。面试官想听的是:你有没有先确认问题出在哪。
面试版回答:
“如果服务器资源正常,但是 MySQL 查询变慢,我会先确认是数据库整体变慢,还是某些 SQL 变慢。首先查看 MySQL 当前连接数、慢查询日志以及运行状态,然后分析是否存在慢 SQL、锁等待、事务阻塞等问题。如果发现具体 SQL 存在问题,再结合执行计划进行优化,例如增加索引、调整 SQL 语句。如果业务存在缓存,也会检查缓存命中率和缓存异常情况。”
排查流程:
-- 1. 看当前连接与状态show processlist;-- 关注:大量 Sleep / Waiting / Locked-- "Waiting for table lock" 说明可能存在锁
-- 2. 看慢查询配置show variables like '%slow%';
-- 3. 分析 SQLexplain select * from user where name='xxx';-- 关注:是否走索引 / 是否全表扫描 / 扫描行数
-- 4. 检查锁和事务show engine innodb status;-- 关注:死锁 / 长事务缓存问题要放在最后说,而不是开头:
请求 → 缓存未命中 → 大量访问 MySQL → 数据库压力增加WARNING有个细节容易被追问:不要说”通过表连接形式修改 SQL”。 因为 JOIN 不一定比多次查询慢,SQL 优化不等于改连接方式。 应该说:“根据执行计划判断是否需要优化索引、SQL 写法或者表结构。”
追问预警:面试官很可能接着问——
“你执行
show processlist以后,发现有一个 SQL 已经运行了 2 个小时,而且状态是Waiting for table metadata lock。你认为是什么问题?你会怎么处理?”
这个状态说明有未提交的事务持有元数据锁(DDL 或长事务),后续 DDL/查询被阻塞。方向是找出持锁事务并评估是否可以 kill。
2.5 服务每天凌晨自动停止,白天正常
面试官问法:某服务经常凌晨自动停止,白天一直正常,怎么排查?
这道题的关键在**“定时性”**三个字。
TIP现象是”固定在某个时间发生” → 第一反应必须是定时因素,而不是程序 bug。
常见踩坑:语音输入把 crontab 说成了 “current type”。口语里这两个音接近,但面试时说错会显得没实际操作过。这个词必须说准。
面试版回答:
“如果一个服务每天凌晨自动停止,我首先会确认服务停止的具体时间点,然后查看该时间段的服务日志和系统日志,确认是服务自身异常退出,还是被外部操作影响。因为问题固定发生在凌晨,我会重点检查 crontab、systemd timer 等定时任务,确认是否存在自动停止、重启或者维护脚本。同时查看服务当前状态、进程状态以及系统是否发生过重启。如果排除定时任务和系统问题,再进一步分析应用自身日志和依赖服务。”
排查命令:
systemctl status 服务名 # ① 服务是否真的停止ps -ef | grep 服务名 # ① 是进程退出还是端口不监听journalctl -u 服务名 --since "02:00" # ② 看凌晨那个时间点crontab -l # ③ 定时任务(重点)ls /etc/cron.* # ③ 系统级定时任务last # ④ 系统是否重启过dmesg | grep -i oom # ④ 是否 OOMtail -f app.log # ⑤ 应用自身日志凌晨特有的诱因(说出来很加分):
- 备份任务
- 日志切割(logrotate)
- 数据同步
它们会导致:内存不足 OOM、磁盘满、I/O 阻塞。
追问预警:
“你发现凌晨 2 点系统没有重启,crontab 也没有相关任务,你下一步查什么?”
方向转向:① systemd 是否被停止 / 是否配置了自动 restart;② 服务日志 journalctl -u;③ 资源问题(OOM Killer、磁盘满、文件句柄耗尽)。
2.6 设计磁盘空间告警脚本
面试官问法:要求每天凌晨执行一次脚本,磁盘使用率超过 80% 时告警,你怎么设计?
这道题的加分点全在细节里。
✅ 双阈值设计(百分比 + 剩余容量)——这是成熟方案
为什么?只看百分比会误判:
小盘:10G 磁盘,80% = 用了 8G → 可能真的危险大盘:10TB 磁盘,80% = 用了 8TB → 还剩 2TB,其实很安全所以生产上常见做法是:
使用率 > 80% 或者 剩余空间 < 10G → 触发告警✅ 排除特殊挂载点
df -P | grep -vE "tmpfs|devtmpfs"/proc、/sys、/dev 这些虚拟文件系统不该监控。
✅ 脚本里不要用 df -h
-h 是人类可读格式(80G),脚本处理百分比不方便。应该用:
df -P # 或 df -kdf -P | awk '{print $5}' # 直接拿到 80%面试版回答:
“如果设计磁盘空间自动告警,我会先通过 Shell 脚本调用 df 获取磁盘使用率,并设置合理阈值,例如使用率超过 80% 或者剩余空间低于指定容量时触发告警。同时排除临时文件系统和不需要监控的挂载点。脚本完成后通过 crontab 定时执行,比如每天凌晨检查一次,超过阈值后通过邮件、钉钉或者接入现有监控平台发送告警。对于多服务器环境,会考虑使用 Zabbix 或 Prometheus 统一管理。“
2.7 告警脚本的周期问题(经典追问题)
面试官问法:你的脚本每天凌晨 0 点检查一次,但有一天凌晨 2 点磁盘就满了,业务受影响。这个方案有什么问题?怎么优化?
这道题考的是你能不能发现自己方案的缺陷。
问题本质:检查周期太长,属于被动轮询,无法及时发现突发情况。
面试版回答:
“这个方案的问题在于检查周期太长,属于被动轮询,无法及时发现突发情况。如果是生产环境,我不会只依赖每天一次的 crontab 检查,而会接入实时监控系统,例如 Zabbix、Prometheus 等,通过 agent 或 exporter 持续采集磁盘使用率,并设置告警规则。当磁盘使用率超过阈值时,及时通过邮件、钉钉、企业微信等方式通知运维人员。”
三个优化方向:
# 1. 降低检测周期*/5 * * * * /usr/local/bin/check_disk.sh # 每 5 分钟# 2. 接入实时监控服务器 → 监控 Agent → Zabbix / Prometheus → AlertManager → 邮件 / 钉钉# 3. 增加自动处理日志自动切割(logrotate)清理历史日志临时扩容磁盘自动创建工单表达细节:把”钉钉、信息、邮件”说成——
“告警通知可以通过邮件、短信、钉钉机器人或者企业微信机器人发送。”
追问预警:
“为什么不用自己写脚本,而用 Prometheus?”
“单台服务器可以使用 Shell + crontab 实现简单检查,但是如果是多台服务器环境,我会更倾向于接入 Prometheus、Zabbix 等监控平台,通过统一指标采集和告警规则管理。”
这个回答比”我写个脚本”高一个级别——它体现了规模意识。
2.8 ping 通,但业务不通
面试官问法:两台服务器之间网络不通,但都能 ping 通对方。什么原因?怎么排查?
核心知识点:
IMPORTANTping 通只能证明 ICMP 协议可达,不代表业务端口正常。
服务器A --ping--> 服务器B ✅ 正常(三层通)服务器A --访问8080--> 服务器B ❌ 失败(四层/七层问题)面试版回答:
“如果两台服务器之间 ping 正常,但是业务不通,说明三层网络连通性基本正常。我会进一步检查业务使用的端口和服务状态。首先确认服务是否正常监听,比如使用
ss -lntp查看端口监听情况,然后使用telnet或nc测试端口连通性。如果端口不通,再检查防火墙、安全策略、iptables 规则以及服务日志。”
排查命令:
ss -lntp | grep 8080 # ① 目标机是否监听
nc -zv 服务器IP 8080 # ② 客户端测端口telnet 服务器IP 8080 # ② 替代
systemctl status firewalld # ③ 防火墙firewall-cmd --list-all # ③ 规则iptables -L -n # ③ 替代
tail -f application.log # ④ 应用自身NOTE表达纠正:不要说”会话层、应用层出现问题”。 Linux 网络排障一般不严格按 OSI 七层讲,应该说: “三层连通,但是四层端口或者七层应用存在问题。” 这更贴近实际运维。
2.9 Java 进程在,但端口没监听 / 127.0.0.1 访问不了
这两个问题经常连着问,本质是一条链路。
场景 A:Java 进程还在运行,但 8080 端口没监听
IMPORTANT核心认知:Java 进程存在 ≠ Java 应用正常提供服务。
可能原因:
- 应用启动过程中异常,但 JVM 进程还没退出
- 应用监听的端口根本不是 8080
- 配置文件修改导致端口变化
- Spring Boot 启动失败
- 绑定地址错误(只监听 localhost)
- 应用内部线程异常
面试版回答:
“如果发现 Java 进程存在,但是 8080 端口没有监听,我首先确认 Java 进程具体启动参数和运行状态,然后检查端口监听情况,确认应用是否真的绑定了 8080 端口。之后查看应用日志,重点关注启动过程是否出现异常,例如端口绑定失败、配置错误或者依赖服务连接失败。”
ps -ef | grep java # ① 进程与启动参数jps -l # ① 替代ss -lntp | grep 8080 # ② 端口监听tail -f catalina.out # ④ 应用日志journalctl -u xxx.service # ④ 替代注意 ps -ef | grep java 的输出里如果看到 -Dserver.port=9090,就说明程序根本没监听 8080。
这条排查链在 Linux 运维面试里非常加分:
进程存在? → 监听端口存在? → 端口绑定地址正确? → 应用日志是否异常? → 依赖服务是否正常?场景 B:监听在 127.0.0.1:8080,外部访问不了
核心知识点:127.0.0.1 是回环地址,只允许本机访问,不接受外部网络连接。
127.0.0.1:8080 → 只有本机程序能连0.0.0.0:8080 → 监听所有网卡,外部可访问面试版回答:
“如果 Java 应用监听在 127.0.0.1:8080,说明应用只绑定了本机回环地址,所以其他服务器无法访问。首先我会确认应用当前监听地址,通过配置文件或者启动参数检查 bind address 配置。如果业务需要被外部访问,需要将监听地址修改为 0.0.0.0 或服务器实际网卡 IP,然后重启应用使配置生效,同时确认防火墙和安全策略允许 8080 端口访问。”
Spring Boot 的配置方式:
server: address: 0.0.0.0 port: 8080java -jar app.jar --server.address=0.0.0.0TIP满分加分点:不要说”改完就好了”,补一句安全意识——
“修改前需要确认这个服务是否应该对外暴露,如果只是内部服务,绑定 127.0.0.1 可能是安全设计,不应该盲目修改。”
这一句话能把你从”会改配置”拉到”有生产判断力”。
三、监控选型篇
3.1 Zabbix 还是 Prometheus
面试官问法:让你选择一个监控系统监控 Linux 服务器,你怎么选?两者有什么区别?
CAUTION最常见的扣分点:说”Prometheus 比 Zabbix 方案更加成熟”。 这句话会被立刻追问——两者定位不同,不存在谁更成熟。这句话暴露的是你在用”感觉”选型,而不是用”场景”选型。
面试版回答:
“Zabbix 和 Prometheus 都可以用于监控 Linux 服务器,但是两者设计理念不同。Zabbix 更偏传统基础设施监控,通过 Agent 主动采集或者 SNMP 等方式监控服务器、网络设备等;Prometheus 更偏云原生监控,通过 Exporter 暴露指标,再由 Prometheus 主动拉取数据,比较适合 Kubernetes、容器环境。”
具体一点:
“如果是传统 Linux 服务器监控,我会考虑使用 Zabbix。Zabbix 通过 Server、Agent 架构,可以采集服务器 CPU、内存、磁盘、网络等基础指标,同时支持告警和图形化展示。如果是 Kubernetes 或云原生环境,我会更倾向 Prometheus,因为它基于指标采集模型,通过 Exporter 收集各种服务指标,并且可以结合 Grafana 做可视化和 AlertManager 做告警。”
对比表:
| Zabbix | Prometheus | |
|---|---|---|
| 架构 | Server + Agent | Server + Exporter |
| 数据采集 | Agent 主动上报 / 多种方式 | Prometheus 主动 Pull |
| 适合场景 | 服务器、网络设备、传统 IT | Kubernetes、微服务 |
| 数据模型 | 监控项(Item) | 时间序列指标(Metric) |
| 可视化 | 自带 | 常结合 Grafana |
Prometheus 的链路要能画出来:
Linux服务器 |node_exporter |Prometheus |Grafana |AlertManager |邮件 / 钉钉NOTE细节纠正:不要说”把 Prometheus Agent 装到机器上”。 Prometheus 不装 Agent,它装的是 Exporter(如 node_exporter),由 Prometheus 主动去拉取。用词不准会被追问。
本篇小结
Linux 排障这一块,面试官真正考察的是三件事:有没有排查顺序、会不会先定位再动手、能不能说出为什么。把上面 9 个场景套进「现象 → 定位 → 数据 → 原因 → 优化」这个框架,比背一百条命令管用。
TIP这是「运维工程师面试宝典」系列的第一篇。 下一篇:(二)Kubernetes 排障与面试表达 第三篇:(三)Ceph 存储、灾备与数据恢复
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时






