2026 运维面试八股文到底有哪些?Linux、网络、Docker、K8s、Nginx、监控 40 道高频题整理
最近开始整理运维方向的面试题,我原本以为所谓“运维八股”大概就是:
Linux 常用命令
TCP 三次握手
Nginx
MySQL
结果翻了一圈公开面经以后,发现现在的运维、DevOps、SRE 面试已经比这个宽很多了。
经常能看到:
Linux
网络
Nginx
Docker
Kubernetes
Prometheus
Grafana
CI/CD
MySQL
Redis
Shell / Python
故障排查
项目经历
甚至一些偏运维开发、云原生的岗位,还会顺带问:
MCP
RAG
AI 自动化
所以这篇不打算做一份“几百道题目但看完什么都记不住”的题库。
我更想先整理一份:
如果准备运维 / DevOps / SRE 面试,最先应该会回答哪些问题?
每个问题都给一个适合面试时开口的回答框架。
一、先说结论:现在运维面试到底在考什么?
我把它大致分成 9 块:
| 模块 | 常见考察内容 |
|---|---|
| Linux | 文件、权限、进程、CPU、内存、磁盘、systemd、日志 |
| 网络 | TCP、DNS、ARP、路由、端口、HTTP |
| Nginx | 反向代理、负载均衡、502/504、日志 |
| Docker | 镜像、容器、Dockerfile、网络、存储、隔离 |
| Kubernetes | 组件、Pod、Deployment、Service、调度、探针、排障 |
| 监控 | Prometheus、Grafana、Alertmanager、指标 |
| CI/CD | Git、Jenkins、流水线、发布、回滚 |
| 数据库/缓存 | MySQL、Redis 基础与常见故障 |
| 场景题 | CPU 高、磁盘满、网站慢、Pod 起不来、DNS 不通 |
如果是普通运维实习/校招:
Linux + 网络 + Nginx
通常是基本盘。
如果岗位开始写:
DevOps
SRE
云原生
运维开发
那么:
Docker + K8s + Prometheus + CI/CD
重要性会明显上升。
第一部分:Linux 八股
1. Linux 中如何查看 CPU、内存和磁盘?
这是最基础的一题。
CPU:
top
ps aux
mpstat
内存:
free -h
磁盘容量:
df -hT
目录占用:
du -sh /var/*
块设备:
lsblk
面试不要只回答命令。
最好加一句:
df看文件系统整体使用率,du用来找目录和文件到底是谁占空间,两者解决的问题不一样。
2. free -h 里面 free 很少,是不是说明内存不够?
不一定。
Linux 会尽量利用空闲内存作为:
page cache
buffer/cache
所以:
free
很少并不代表系统马上 OOM。
排查时更应该关注:
available
swap
进程 RSS
持续的内存变化
可以说:
Linux 会把暂时不用的内存用于缓存,提高 I/O 效率;真正判断还能不能分配内存,更关注 available,而不是只盯 free。
3. Load Average 是什么?
uptime 或 top 会看到:
load average: 0.30, 0.50, 0.60
分别表示过去:
1 分钟
5 分钟
15 分钟
的平均系统负载。
在 Linux 中,Load Average 主要统计:
可运行任务
+
不可中断睡眠任务
所以它不是单纯的:
CPU 使用率
例如大量进程卡在磁盘 I/O,也可能导致 Load 很高。
面试里可以补一句:
看 Load 要结合 CPU 核数、CPU 使用率和 I/O 一起判断。
4. 一个进程 CPU 占用 100%,你怎么排查?
第一步先确认是谁:
top
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
拿到 PID 后继续:
ps -fp PID
看进程属于哪个程序。
再根据程序类型继续:
应用日志
线程
系统调用
I/O
业务流量
Java 可以进一步:
top -H
jstack
如果怀疑系统调用:
strace
面试回答的重点应该是:
先定位进程,再定位线程或具体业务,不是看到 CPU 高就直接 kill -9。
5. kill 和 kill -9 有什么区别?
普通:
kill PID
默认发送:
SIGTERM
进程有机会:
保存数据
关闭文件
释放资源
正常退出
而:
kill -9 PID
发送:
SIGKILL
进程无法捕获或忽略,会被内核直接终止。
所以:
kill -9应该作为最后手段,而不是第一选择。
6. 什么是僵尸进程?
子进程已经退出,但父进程没有读取它的退出状态。
这时子进程会留下一个进程表项:
Zombie
在:
ps
中常看到:
Z
<defunct>
僵尸进程本身不继续执行代码,但会占用 PID 和进程表资源。
真正要处理的是:
找父进程为什么没有正确
wait()回收子进程。
7. 软链接和硬链接有什么区别?
软链接:
ln -s source link
可以理解成:
一个路径快捷方式
它有自己的 inode,指向另一个路径。
原文件删除后,软链接可能失效。
硬链接:
ln source link
和原文件:
指向同一个 inode
删除其中一个名字,文件数据并不会立即消失,只要还有硬链接存在。
常见限制:
硬链接通常不能跨文件系统
通常不能给目录创建普通硬链接
8. chmod 755 是什么意思?
Linux 权限:
r = 4
w = 2
x = 1
所以:
7 = rwx
5 = r-x
5 = r-x
于是:
chmod 755 file
代表:
owner:rwx
group:r-x
others:r-x
不要只会背 777。
面试官很可能继续问:
生产环境为什么不建议随便 chmod 777?
因为它会扩大权限范围,违背最小权限原则。
9. df 显示磁盘满了,但 du 找不到那么大的文件,为什么?
这是非常经典的场景题。
一个常见原因:
文件已经被删除,但仍然被某个进程打开。
此时:
目录里看不到文件
所以 du 不统计。
但是进程的文件描述符还占着空间,文件系统并没有真正释放。
可以检查:
lsof +L1
或者:
lsof | grep deleted
然后确认对应进程。
10. 磁盘还有容量,却提示 No space left on device,可能是什么?
除了块空间耗尽,还有一个常见原因:
inode 用完
查看:
df -i
大量:
几百万个小文件
可能导致 inode 先耗尽。
所以磁盘满排查至少要看:
df -h
df -i
第二部分:网络八股
11. TCP 为什么需要三次握手?
过程:
Client Server
SYN
---------------------->
SYN + ACK
<----------------------
ACK
---------------------->
核心目的:
确认双方发送能力
确认双方接收能力
同步初始序列号
建立可靠连接状态
为什么不是两次?
因为两次无法让服务端确认:
客户端确实收到了自己的 SYN+ACK,双向通信能力都已经确认。
12. TCP 四次挥手为什么通常是四次?
TCP 是全双工。
关闭一边的发送能力,并不代表另一边也立即没有数据要发。
因此:
FIN
ACK
FIN
ACK
通常分开完成。
中间的:
ACK
和:
FIN
有时也可能合并,因此抓包不一定永远严格看到四个独立报文。
13. TIME_WAIT 和 CLOSE_WAIT 有什么区别?
TIME_WAIT:
通常出现在主动关闭连接的一方
作用包括:
确保最后 ACK 有机会重传
避免旧连接报文影响后续相同四元组连接
CLOSE_WAIT:
出现在被动关闭的一方
说明:
对端已经发 FIN,但本地应用还没有调用 close() 完成关闭。
如果大量 CLOSE_WAIT:
通常优先怀疑应用没有正确释放 socket。
14. Ping 通服务器,能说明 443 端口一定通吗?
不能。
Ping 使用:
ICMP
HTTPS 通常使用:
TCP 443
ICMP 通,不代表:
防火墙允许 TCP 443
服务监听 443
应用工作正常
验证端口可以:
nc -vz server 443
或者:
curl -v https://server
Linux 还可以:
ss -lntp
确认服务是否监听。
15. DNS 解析过程怎么讲?
以访问:
www.example.com
为例。
本机通常先检查:
本地缓存
hosts
本地解析器配置
没有结果后向配置的递归 DNS Resolver 查询。
Resolver 可能依次询问:
Root
↓
TLD
↓
Authoritative DNS
最终得到:
A / AAAA 等记录
并返回客户端。
面试经常继续问:
DNS 默认主要使用哪个端口?
常见:
UDP 53
TCP 53
16. ARP 是干什么的?
在 IPv4 同一二层网络中,ARP 用来完成:
IP 地址
↓
MAC 地址
的映射。
主机要向同网段目标发送以太网帧时,需要先知道目标 MAC。
如果目标在其他网段:
主机不是 ARP 远端主机,而是 ARP 默认网关的 MAC。
这是很常见的追问。
17. 一台 Linux 服务器访问不了公网,你怎么排查?
可以按层次说:
1. ip -br link
网卡是否 UP
2. ip -br addr
IP 和掩码是否正确
3. ip route
默认路由
4. ping 网关
本地到网关
5. ping 公网 IP
三层公网连通
6. DNS
getent / dig / resolv.conf
7. ss / nc / curl
应用端口
8. tcpdump
必要时抓包
这类题最重要的不是命令数量。
而是:
有层次地缩小故障范围。
第三部分:Nginx 八股
18. 什么是正向代理和反向代理?
正向代理:
Client
↓
Proxy
↓
Internet
客户端知道代理的存在。
代理代表:
客户端
访问外部资源。
反向代理:
Client
↓
Nginx
↓
Backend Servers
客户端只知道 Nginx,不一定知道真正后端服务器。
Nginx 代表:
服务器端
接收请求。
19. Nginx 常见负载均衡方式有哪些?
常见:
轮询
权重
ip_hash
least_conn
hash
例如:
upstream backend {
server 10.0.0.1 weight=3;
server 10.0.0.2 weight=1;
}
权重大的一台会承担更多请求。
20. Nginx 502 和 504 有什么区别?
502 Bad Gateway 常见:
Nginx 无法正确从 upstream 获取有效响应
例如:
后端进程没启动
Connection refused
Unix Socket 错误
上游异常断开
504 Gateway Timeout 常见:
Nginx 等待 upstream 响应超时
例如:
后端处理太慢
数据库慢
网络延迟
upstream timeout
所以:
502 更像“上游连接/响应异常”
504 更像“等太久”
21. Nginx 出问题你先看哪里?
通常:
nginx -t
先检查配置。
再看:
access.log
error.log
然后:
进程
端口
upstream
网络
例如:
ps -ef | grep nginx
ss -lntp
curl -v
第四部分:Docker 八股
22. Docker Image 和 Container 有什么区别?
Image:
容器运行的只读模板。
Container:
Image 创建出来的运行实例。
关系:
Image
│
├── Container A
├── Container B
└── Container C
23. Docker 容器为什么比较轻量?
因为 Linux 容器不像传统虚拟机那样为每个实例运行完整 Guest OS。
Docker 使用 Linux 内核能力,例如:
Namespaces
Cgroups
Capabilities
其中:
Namespace
主要负责隔离
Cgroup
主要负责资源限制和统计
Docker 官方安全文档也把 namespaces 和 cgroups 作为容器隔离的重要基础。
24. Dockerfile 中 COPY 和 ADD 有什么区别?
两者都可以把文件加入 Image。
一般建议:
单纯复制本地文件优先使用 COPY。
ADD 还具有额外行为,例如:
部分归档文件自动解压
URL 等扩展能力(具体行为取决于用法)
面试回答不要说:
ADD 永远比 COPY 高级。
反而:
功能越简单明确,Dockerfile 越容易维护。
25. CMD 和 ENTRYPOINT 有什么区别?
两者都与容器默认启动命令有关。
可以粗略理解:
ENTRYPOINT
更像固定主程序
CMD
更像默认命令或默认参数
例如 ENTRYPOINT 指定:
python
CMD 指定:
app.py
最终可以组合运行。
面试中重点说清:
docker run后面的参数对 CMD 和 ENTRYPOINT 的覆盖行为不同。
26. 为什么 Dockerfile 要做多阶段构建?
例如编译 Go:
Stage 1
使用 Go 编译环境
↓
生成二进制
Stage 2
只复制最终二进制
↓
运行
好处:
减少最终镜像体积
减少构建工具进入生产镜像
降低攻击面
提高分发效率
近期运维开发面试中 Dockerfile 优化和多阶段构建都属于很典型的追问。
27. Volume 和 Bind Mount 有什么区别?
Bind Mount:
宿主机具体目录
↓
挂载进 Container
例如:
/data/mysql
Volume:
由 Docker 管理的数据卷
生命周期可以与 Container 分离。
需要持久化的数据:
数据库
上传文件
业务数据
不应该只放在 Container 可写层里。
28. 怎么查看正在运行和全部 Docker Container?
运行中:
docker ps
全部:
docker ps -a
日志:
docker logs <container>
进入:
docker exec -it <container> /bin/sh
这是非常常见的实习岗基础题。
第五部分:Kubernetes 八股
29. Kubernetes 核心组件有哪些?
Kubernetes 集群分:
Control Plane
+
Worker Node
控制平面主要:
kube-apiserver
etcd
kube-scheduler
kube-controller-manager
Node 主要:
kubelet
container runtime
kube-proxy(在部分网络实现中使用)
回答时最好不要只背名字。
一句话职责:
API Server:统一 API 入口
etcd:保存集群状态
Scheduler:给 Pod 选 Node
Controller Manager:运行各种控制循环
kubelet:保证 Node 上 Pod 正常运行
Container Runtime:真正运行容器
Kubernetes 官方当前组件文档也是按照 Control Plane 和 Node 组件来组织这些职责。
30. Pod 为什么不是 Container?
Pod 是 Kubernetes 中的基本工作单元。
一个 Pod 可以包含:
一个或多个 Container
同一个 Pod 内 Container 可以共享:
网络命名空间
部分存储
生命周期关系
大部分简单场景:
一个 Pod
+
一个主要业务 Container
31. Deployment、StatefulSet、DaemonSet 有什么区别?
Deployment:
典型无状态应用
Web
API
强调:
副本
滚动更新
回滚
StatefulSet:
适合:
有稳定身份、稳定存储需求的有状态应用
DaemonSet:
希望每个 Node 或指定 Node 都运行一个 Pod。
例如:
日志 Agent
监控 Agent
网络组件
32. Service 是干什么的?
Pod:
会创建
会销毁
IP 可能变化
Service 给一组 Pod 提供:
稳定访问入口
通常通过:
Label Selector
选择后端 Pod。
常见类型:
ClusterIP
NodePort
LoadBalancer
33. K8s 中 liveness、readiness、startup probe 区别?
livenessProbe:
判断 Container 是否已经异常,需要重启。
readinessProbe:
判断 Pod 当前是否可以接收业务流量。
startupProbe:
给启动很慢的应用更长启动时间,启动探针成功前避免 liveness/readiness 过早干预。
可以记:
startup:
启动完成了吗?
readiness:
现在能接流量吗?
liveness:
还活着吗?
34. Pod 一直 CrashLoopBackOff 怎么排查?
先:
kubectl describe pod <pod>
看:
Events
退出原因
探针
挂载
调度
再:
kubectl logs <pod>
如果反复重启:
kubectl logs <pod> --previous
常见原因:
应用启动报错
配置错误
环境变量缺少
端口冲突
依赖服务不可达
探针失败
OOMKilled
文件挂载问题
这比只回答:
重启 Pod
要好得多。
35. Pod 一直 Pending 怎么排查?
Pending 通常说明:
Pod 还没有成功进入运行阶段。
检查:
kubectl describe pod
重点看 Events。
常见:
CPU / Memory 不足
Node Selector 不匹配
Affinity
Taint / Toleration
PVC 未绑定
Scheduler 无法找到合适 Node
36. K8s 的核心思想是什么?
我认为最值得讲的是:
Desired State(期望状态)+ Reconciliation(协调)。
例如:
Deployment replicas = 3
用户声明:
我希望一直有 3 个 Pod。
实际只剩两个时:
Controller 会推动集群补回 3 个。
这比单纯背:
K8s 是容器编排系统
更能体现理解。
第六部分:监控八股
37. Prometheus 是什么?为什么适合监控 K8s?
Prometheus 是:
Metrics 监控和告警系统
它把指标保存成:
Time Series
并通过:
Metric Name
+
Labels
描述数据。
Prometheus 常见采用:
Pull
模式定期抓取 HTTP Metrics Endpoint。
云原生环境里:
Pod
Service
Node
变化很频繁。
Prometheus 的:
Label
Service Discovery
模型比较适合这种动态环境。
38. Prometheus、Grafana、Alertmanager 分别干什么?
Prometheus:
采集
存储
查询 Metrics
Grafana:
可视化 Dashboard
Alertmanager:
接收 Prometheus 告警
分组
抑制
静默
发送通知
Prometheus 官方也把告警拆成:
Prometheus Alert Rule
↓
Alertmanager
↓
Notification
39. 如果让你监控 100 台 Linux 服务器,你怎么设计?
可以回答:
每台服务器部署 Node Exporter
↓
Prometheus 统一 Scrape
↓
Grafana 展示
↓
Alert Rules
↓
Alertmanager 告警
关键指标:
CPU
Load
Memory
Disk
inode
Network
Filesystem
Process / Service
再进一步:
服务发现
标签分组
高可用
长期存储
第七部分:CI/CD 八股
40. Jenkins 从代码提交到发布,大致经历什么?
一个常见流水线:
Developer Push
↓
Git Repository
↓
Jenkins Trigger
↓
Checkout
↓
Build
↓
Test
↓
Build Image
↓
Push Registry
↓
Deploy
↓
Health Check
↓
Success / Rollback
回答时不要只说:
Jenkins 自动发布。
最好说清:
代码怎么触发
怎么构建
怎么测试
产物放哪里
怎么部署
失败怎么回滚
近期运维实习面经里,Jenkins 从拉代码到编译、发布的完整流程就是直接被问到的题目。
第八部分:数据库和缓存,至少要准备这些
虽然不是 DBA,但运维面试很容易带一点。
MySQL
至少知道:
慢查询怎么开
EXPLAIN 是什么
索引为什么能加速
主从复制大概原理
备份与恢复
连接数满怎么排
遇到:
MySQL 突然变慢怎么办?
回答思路:
服务器 CPU / Memory / IO
↓
连接数
↓
慢查询
↓
锁等待
↓
执行计划
↓
索引
↓
磁盘和网络
Redis
至少知道:
Redis 为什么快
RDB
AOF
缓存穿透
缓存击穿
缓存雪崩
内存淘汰
主从 / Sentinel / Cluster 基础
不一定每个普通运维岗都会深入,但项目里写了 Redis,基本就可能被追问。
第九部分:真正拉开差距的是“场景题”
背完上面 40 道,只能算有底。
真正面试很容易变成:
那如果真的出问题呢?
下面这些建议一定自己练一遍。
场景 1:服务器 CPU 突然 100%
思路:
top
↓
找到进程
↓
ps
↓
线程 / 日志
↓
系统调用 / I/O
↓
业务流量
场景 2:磁盘 100%
df -h
↓
df -i
↓
du
↓
大文件
↓
lsof deleted
↓
日志 / Docker / 数据库
场景 3:网站打不开
DNS
↓
Ping / Route
↓
TCP 80/443
↓
Nginx
↓
Upstream
↓
应用
↓
数据库
场景 4:Nginx 502
Nginx error.log
↓
Backend 进程
↓
Backend Port
↓
Network
↓
Upstream 配置
场景 5:Docker Container 启动了但网页打不开
docker ps
↓
docker logs
↓
Container 内服务是否监听
↓
-p 端口映射
↓
Host ss
↓
Firewall
↓
curl
场景 6:K8s Pod 起不来
先别背结论。
直接:
kubectl get pod
↓
kubectl describe pod
↓
Events
↓
kubectl logs
↓
资源 / 配置 / 镜像 / Probe / Volume / Network
场景 7:域名打不开,但 IP 可以访问
这个其实已经把范围缩得非常小:
IP 通
+
Domain 不通
优先检查:
DNS
例如:
cat /etc/resolv.conf
getent hosts
dig
nslookup
十、2026 年我会额外留意的一块:AI + 运维自动化
这部分暂时还不是所有普通运维岗的必考。
但如果岗位写:
运维开发
SRE
AI Infra
智能运维
AIOps
我会开始准备:
LLM 是什么
Agent 是什么
MCP 是什么
RAG 是什么
AI 怎么接监控系统
AI 怎么调用运维工具
自动修复为什么必须做权限控制
因为真正的趋势并不是:
AI 替代所有运维。
而更像:
监控
日志
CMDB
Shell
K8s API
网络设备 API
+
AI Agent
逐渐结合。
所以这块目前可以作为:
加分项,而不是先替代 Linux、网络和 Docker/K8s 基础。
十一、面试八股到底应该怎么背?
我以前觉得:
题目
↓
背标准答案
就行。
但运维面试非常容易追问。
例如:
什么是 Docker Volume?
你回答:
用于数据持久化。
下一句可能就是:
那你项目里数据库数据怎么挂的?
再下一句:
Container 删除以后数据还在吗?
再下一句:
Bind Mount 和 Volume 怎么选?
所以更好的学习方法是:
概念
↓
命令
↓
实际使用
↓
故障
↓
排查
例如 Docker:
Image / Container
↓
docker run
↓
自己跑 Nginx
↓
故意配错端口
↓
自己查
这样面试时不容易只剩一句教科书定义。
十二、如果只有两周准备运维面试,我会这么安排
第一优先级:
Linux
+
网络
+
真实故障排查
第二优先级:
Docker
+
Nginx
第三优先级:
Kubernetes
+
Prometheus
第四优先级:
Jenkins / Git
MySQL / Redis
Shell / Python
最后再根据目标岗位补:
云平台
Ansible
Terraform
安全
AI / MCP
十三、最后整理一份“看到就应该会答”的清单
如果下面这些问题里有一半完全不知道怎么开口,说明还值得继续补基础:
1. CPU 高怎么排?
2. 内存怎么看?
3. Load Average 是什么?
4. df 和 du 有什么区别?
5. inode 用完是什么现象?
6. 僵尸进程是什么?
7. kill 和 kill -9 区别?
8. chmod 755 什么意思?
9. TCP 三次握手?
10. TIME_WAIT / CLOSE_WAIT?
11. DNS 解析过程?
12. Ping 通为什么不代表 443 通?
13. ARP 做什么?
14. Linux 服务器不能上网怎么查?
15. Nginx 正反向代理?
16. 502 / 504 区别?
17. Nginx 怎么做负载均衡?
18. Docker Image / Container?
19. Namespace / Cgroup?
20. Volume / Bind Mount?
21. Dockerfile 怎么优化?
22. Kubernetes 有哪些组件?
23. Pod 是什么?
24. Deployment / StatefulSet / DaemonSet?
25. Service 是什么?
26. 三种 Probe?
27. CrashLoopBackOff 怎么查?
28. Pending 怎么查?
29. Prometheus 做什么?
30. Grafana 做什么?
31. Alertmanager 做什么?
32. Jenkins 流水线怎么走?
33. MySQL 变慢怎么查?
34. Redis RDB / AOF?
35. 网站打不开怎么查?
36. 磁盘满怎么查?
37. Docker 网页打不开怎么查?
38. K8s Pod 起不来怎么查?
39. 100 台服务器怎么监控?
40. 项目里你真正解决过什么故障?
其中最后一道:
“你真正解决过什么故障?”
我觉得甚至比前面 39 道都重要。
因为八股只能证明:
你学过。
而一个能讲清:
现象
→ 分析
→ 命令
→ 根因
→ 解决
→ 复盘
的故障案例,才更能证明:
你真的做过。
写在最后
运维的面试范围确实很杂。
Linux、网络、Nginx、Docker、K8s、监控、数据库,感觉每一个方向都能继续问几十道题。
但真正准备的时候没必要一口气背 500 题。
我现在反而觉得先把:
Linux
网络
Docker
K8s
故障排查
这几条主线搭起来最重要。
因为很多题最后其实会串到一起。
比如:
K8s Pod 访问数据库失败。
背后可能同时涉及:
K8s
DNS
TCP
路由
Service
数据库端口
防火墙
应用配置
这时候“八股”就不再是孤立知识点了。
它们开始变成真正的排障工具。
更多推荐
所有评论(0)