最近开始整理运维方向的面试题,我原本以为所谓“运维八股”大概就是:

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/CDGit、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 是什么?

uptimetop 会看到:

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. killkill -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
数据库端口
防火墙
应用配置

这时候“八股”就不再是孤立知识点了。

它们开始变成真正的排障工具。

更多推荐