运维岗位竞争激烈,如何从众多候选人中脱颖而出?本文基于我多年招聘运维工程师的经验,从简历优化、技术准备、面试技巧、谈薪策略四个维度,系统讲解如何拿到心仪的 Offer。同时附上 50 道高频面试题,帮你全面备战。

一、运维岗位现状

行业趋势

  • DevOps 化:传统运维向 SRE/DevOps 转型,要求更高
  • 云原生:K8s、Docker 几乎成为必备技能
  • 自动化:会写代码(Python/Go)成为硬指标
  • 薪资水平:一线城市 1-3 年 15-30K,3-5 年 25-50K,5+ 年 50K+

主流岗位分类

岗位核心职责技术栈
系统运维服务器管理、监控、故障处理Linux、Shell、Zabbix
应用运维部署、调优、发布Nginx、Tomcat、Jenkins
DBA数据库管理、优化、备份MySQL、Redis、MongoDB
SRE可靠性工程、容量规划K8s、Prometheus、Go
DevOpsCI/CD、自动化、平台建设Jenkins/GitLab CI、Terraform
云运维阿里云/AWS/腾讯云云产品、IaC、计费优化

二、简历优化

1. 简历结构

1
2
3
4
5
6
7
个人信息 (姓名/电话/邮箱/GitHub)
求职意向
技术栈 (按熟练度排序)
工作经历 (STAR 法则)
项目经历 (重点!)
教育背景
自我评价 (可选)

2. 项目经历写法(STAR 法则)

错误示范:

负责公司服务器运维工作,部署过多个项目。

正确示范:

【千万级 PV 网站稳定性建设】

  • 背景(S):公司业务从日均 50 万 PV 增长到 2000 万 PV,旧架构频繁宕机
  • 任务(T):主导稳定性改造,目标可用性 99.95%
  • 行动(A):重构为 K8s 微服务架构,引入 Prometheus 监控体系,建立故障应急流程
  • 结果(R):可用性提升至 99.98%,故障恢复时间从 30 分钟降至 5 分钟,运维成本降低 40%

3. 量化你的成果

  • 维护多少台服务器
  • 提升了多少性能(具体数字)
  • 处理过哪些重大故障
  • 写过哪些自动化工具(用户量、节省工时)

4. 简历排版

  • 1 页足够(2 页封顶),简洁明了
  • PDF 格式,不要用 Word(排版容易乱)
  • 文件名命名:姓名_岗位_工作年限.pdf,如 张三_运维工程师_3年.pdf

三、技术准备

核心知识图谱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
运维工程师技能树
├── Linux 基础
│ ├── 文件系统、权限、用户管理
│ ├── 进程管理、服务管理
│ ├── 网络配置、iptables
│ └── Shell 脚本
├── Web 服务
│ ├── Nginx/Apache 配置与优化
│ ├── Tomcat/Jetty
│ └── 反向代理、负载均衡
├── 数据库
│ ├── MySQL 主从复制、读写分离
│ ├── 索引优化、慢查询分析
│ ├── Redis 数据结构、持久化
│ └── MongoDB 集群
├── 监控
│ ├── Zabbix / Prometheus + Grafana
│ ├── 日志系统 ELK
│ └── 告警分级
├── 自动化
│ ├── Shell/Python 脚本
│ ├── Ansible/SaltStack
│ └── Jenkins/GitLab CI
├── 容器与编排
│ ├── Docker 原理与使用
│ ├── Kubernetes 核心组件
│ └── Helm、Operator
├── 网络
│ ├── TCP/IP 协议栈
│ ├── DNS、HTTP、HTTPS
│ └── 常见网络故障排查
└── 安全
├── 防火墙、入侵检测
├── 漏洞扫描、应急响应
└── 数据加密、备份恢复

四、高频面试题(50 道)

Linux 基础(15 题)

1. 怎么看一个进程占用 CPU 高?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. top 找出 PID
top

# 2. ps 看详细信息
ps -ef | grep <PID>

# 3. 看线程
top -H -p <PID>

# 4. 看调用栈
jstack <PID> | grep <thread_id>

# 5. perf / strace 跟踪系统调用
perf top -p <PID>
strace -p <PID>

2. CPU 负载很高但使用率低是怎么回事?

  • 大量 IO 等待(wa 高):磁盘或网络瓶颈
  • 大量僵尸进程:父进程没回收
  • 大量不可中断睡眠进程(D 状态):通常在等 IO

3. 如何查看 Linux 系统的内存使用情况?

1
2
3
free -h              # 总览
cat /proc/meminfo # 详细信息
vmstat 1 # 实时统计

注意区分 可用内存(available)空闲内存(free),available 包含可回收的缓存,真正可用。

4. swap 是什么?什么时候用?

Swap 是磁盘上的交换分区,当物理内存不足时,内核会把不活跃的内存页换出到 swap。长期使用 swap 说明内存不够

5. 如何排查磁盘 IO 高?

1
2
iostat -xz 1        # 看 %util 和 await
iotop # 看哪个进程在大量 IO

6. 服务器无法 SSH 怎么排查?

  • 控制台/VNC 登录
  • 检查 SSH 服务状态:systemctl status sshd
  • 查看日志:tail -f /var/log/secure
  • 检查磁盘是否满:df -h
  • 检查防火墙:iptables -L

7. Linux 启动过程?

1
BIOS → MBR/UEFI → GRUB → 内核 → init/systemd → 运行级别 → 用户登录

8. inode 满了怎么办?

1
2
3
4
5
# 查看 inode 使用
df -i

# 找小文件多的目录
for i in /*; do echo $i; find $i | wc -l; done

通常是日志或邮件临时文件过多。

9. 软链接和硬链接的区别?

  • 硬链接:指向 inode,不能跨文件系统,删除源文件不影响
  • 软链接:指向路径,相当于快捷方式,删除源文件失效

10. 进程、线程、协程的区别?

  • 进程:资源分配的最小单位
  • 线程:CPU 调度的最小单位,共享进程资源
  • 协程:用户态的轻量级线程,Go 语言的 goroutine 就是协程

11. Linux 怎么查看端口监听?

1
2
ss -tulnp
netstat -tulnp # 旧版命令

12. OOM Killer 是什么?

当系统内存耗尽时,内核会杀掉一些进程释放内存,这个机制叫 OOM Killer。可以通过 dmesg | grep -i oom 查看。

13. Linux 怎么监控网络流量?

1
2
3
iftop -i eth0       # 实时流量
nethogs # 按进程统计
sar -n DEV 1 # 历史数据

14. 怎么排查 CPU 飙高的 Java 应用?

1
2
3
4
5
6
7
8
9
10
# 1. 找 PID
top

# 2. 看哪个线程高
top -H -p <PID>

# 3. jstack 导出线程栈
jstack <PID> > thread.txt

# 4. 把线程 ID 转 16 进制,在 thread.txt 里搜

15. 怎么优化 Linux 内核参数?

1
2
3
4
5
6
# /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
fs.file-max = 2097152

网络基础(10 题)

16. TCP 三次握手?

1
2
3
Client → SYN → Server
Client ← SYN+ACK ← Server
Client → ACK → Server

17. TCP 四次挥手?

1
2
3
4
Client → FIN → Server
Client ← ACK ← Server
Server → FIN → Client
Client → ACK → Server

18. TIME_WAIT 状态是什么?为什么?

主动关闭方收到对方的 FIN 后进入 TIME_WAIT,等待 2MSL(通常 2 分钟)确保最后的 ACK 对方能收到,以及让旧连接的包在网络中消失。大量 TIME_WAIT 是正常现象,如果是大量 CLOSE_WAIT 才需要警惕。

19. HTTP 和 HTTPS 的区别?

  • HTTPS = HTTP + TLS 加密
  • HTTPS 需要 CA 证书
  • HTTPS 默认 443 端口,HTTP 是 80

20. HTTP 常见状态码?

  • 2xx:成功(200 OK、204 No Content)
  • 3xx:重定向(301 永久、302 临时、304 缓存)
  • 4xx:客户端错误(400、401、403、404)
  • 5xx:服务端错误(500、502、503、504)

21. DNS 解析过程?

1
浏览器缓存 → 系统缓存 → hosts 文件 → 本地 DNS 服务器 → 根域名服务器 → 顶级域 → 权威域

22. CDN 的工作原理?

  • 回源:用户请求 → 边缘节点 → 源站
  • 缓存:边缘节点缓存静态资源,过期才回源
  • 调度:DNS 或 HTTP 302 把用户引导到最近的节点

23. OSI 七层模型?

1
应用层 → 表示层 → 会话层 → 传输层 → 网络层 → 数据链路层 → 物理层

实际用的是 TCP/IP 四层:应用层、传输层、网络层、网络接口层。

24. TCP 和 UDP 的区别?

  • TCP:面向连接、可靠、有序、重传 → 文件传输、HTTP
  • UDP:无连接、不可靠、快 → DNS、视频直播、游戏

25. 502 和 504 的区别?

  • 502 Bad Gateway:后端服务没响应(连接被拒)
  • 504 Gateway Timeout:后端响应超时

数据库(10 题)

26. MySQL 主从复制原理?

1
Master 写入 binlog → Slave IO thread 拉取 → 中继日志 relay log → Slave SQL thread 重放

27. MySQL 索引原理?B+ 树?

  • InnoDB 使用 B+ 树索引
  • B+ 树非叶子节点只存索引,叶子节点存数据
  • 叶子节点之间用链表连接,适合范围查询

28. 慢查询怎么优化?

  1. EXPLAIN 看执行计划
  2. 看是否走索引(type 列)
  3. 加合适索引
  4. 避免 SELECT *
  5. 避免在索引列上做函数运算
  6. 分页优化(延迟关联)

29. MySQL 事务隔离级别?

  • 读未提交:脏读
  • 读已提交(RC):不可重复读
  • 可重复读(RR,InnoDB 默认):幻读(用 MVCC + 间隙锁解决)
  • 串行化:性能差

30. MySQL 锁类型?

  • 行锁:锁定单行(InnoDB)
  • 间隙锁:锁定范围
  • 表锁:锁定整张表(MyISAM 默认)
  • 意向锁:表级,表明事务要加行锁

31. Redis 数据结构?

  • String、Hash、List、Set、ZSet、BitMap、HyperLogLog、GEO、Stream

32. Redis 持久化?

  • RDB:快照,定时全量
  • AOF:追加日志,增量
  • 混合模式(RDB+AOF):Redis 4.0+

33. Redis 缓存穿透、击穿、雪崩?

  • 穿透:查不存在的 key → 布隆过滤器
  • 击穿:热点 key 过期 → 互斥锁、永不过期
  • 雪崩:大量 key 同时过期 → 错峰过期、多级缓存

34. Redis 集群方案?

  • 主从复制:读写分离
  • 哨兵模式:自动故障转移
  • Cluster:16384 槽分片,水平扩展

35. 一条 SQL 查询慢的原因?

  • 没走索引
  • 表数据量太大
  • 锁等待
  • 网络问题
  • 服务器负载高

容器与 K8s(10 题)

36. Docker 镜像分层原理?

镜像由只读层组成,容器在最上层加可写层。Copy-on-Write 机制,只有修改文件时才复制。

37. Docker 网络模式?

  • bridge:默认,NAT 转换
  • host:共用宿主机网络
  • none:无网络
  • container:共享其他容器网络
  • 自定义网络:bridge + DNS

38. K8s 核心组件?

1
2
3
4
5
6
7
8
9
10
11
控制平面:
- kube-apiserver:API 入口
- etcd:存储
- kube-scheduler:调度
- kube-controller-manager:控制器
- cloud-controller-manager:云厂商集成

数据平面:
- kubelet:节点代理
- kube-proxy:网络代理
- 容器运行时(containerd/CRI-O)

39. Pod 是什么?

K8s 调度的最小单位,包含一个或多个共享网络和存储的容器。

40. Deployment、StatefulSet、DaemonSet 的区别?

  • Deployment:无状态应用
  • StatefulSet:有状态应用(数据库)
  • DaemonSet:每个节点都跑一个(日志收集)

41. K8s Service 类型?

  • ClusterIP:集群内部访问
  • NodePort:节点端口暴露
  • LoadBalancer:云厂商负载均衡
  • Ingress:七层路由

42. Helm 是什么?

K8s 包管理工具,Chart 是模板,Values 是参数,Release 是实例。

43. ConfigMap 和 Secret 的区别?

  • ConfigMap 存普通配置
  • Secret 存敏感信息(Base64 编码,不是加密)

44. K8s 如何实现高可用?

  • 控制平面多副本(至少 3 个 etcd)
  • 节点多 AZ 部署
  • Pod 多副本 + 反亲和性
  • PodDisruptionBudget

45. K8s 自动扩缩容?

  • HPA:Horizontal Pod Autoscaler,基于 CPU/内存/自定义指标
  • VPA:Vertical Pod Autoscaler,垂直扩缩
  • CA:Cluster Autoscaler,节点级扩缩

综合(5 题)

46. 网站打开慢怎么排查?

1
用户端 → 网络 → CDN → 负载均衡 → Web 服务器 → 应用服务器 → 数据库

按链路顺序排查:

  1. 多个地点测试,确认是全局还是局部
  2. ping / traceroute 看网络
  3. CDN 是否命中
  4. Web 服务器负载(topiostat)
  5. 应用日志、慢接口
  6. 数据库慢查询

47. 一次完整的故障处理流程?

  1. 响应:5 分钟内响应
  2. 止损:重启、回滚、限流、降级
  3. 定位:日志、监控、链路追踪
  4. 修复:根因解决
  5. 复盘:故障报告、改进措施

48. 如何设计监控告警体系?

  • 黄金指标:Latency、Traffic、Errors、Saturation
  • 业务指标:订单量、支付成功率
  • 分级:P0/P1/P2/P3
  • 告警收敛:合并、抑制、静默

49. 自动化运维怎么实现?

  • CMDB:配置管理数据库
  • Ansible:批量执行
  • Jenkins/GitLab CI:持续集成
  • Terraform:基础设施即代码

50. 谈谈你对 SRE 的理解?

SRE = Site Reliability Engineering,用软件工程的方法解决运维问题。核心:

  • SLO/SLI/SLA 体系
  • 错误预算(Error Budget)
  • 故障演练(Chaos Engineering)
  • Toil 减少(自动化一切重复劳动)

五、面试技巧

1. 自我介绍(2-3 分钟)

模板:

1
2
3
4
5
6
7
8
9
您好,我叫 XX,有 X 年运维经验。

【上一家公司】负责 XX 业务,主导/参与了 XX 项目(STAR 简述)。

【技术栈】熟悉 Linux/Shell/Python/K8s/Prometheus 等。

【优势】擅长故障排查、自动化开发、K8s 容器化。

【期待】希望加入贵公司,在 XX 方向深耕。

2. 项目讲解

准备 2-3 个能体现能力的项目:

  • 难度高、规模大
  • 有量化成果
  • 你在其中起关键作用

3. 反问环节(必问)

不要问薪资(那是 HR 阶段)。

推荐问题:

  • 团队规模和分工
  • 技术栈和挑战
  • 运维自动化程度
  • 加班情况(礼貌地问)

4. 软技能

  • 沟通:把技术讲清楚,不要装
  • 学习能力:展现对新技术的热情
  • 稳定性:频繁跳槽是大忌

六、谈薪策略

1. 了解市场行情

  • 拉勾、BOSS 直聘搜同岗位
  • 看准网、职友集看公司薪资范围
  • 脉脉、知乎问同行

2. 报价技巧

  • 不要先报价:先问对方薪资范围
  • 给范围而不是具体数字:期望 25-30K
  • 不要说死:留谈判空间
  • 包装自己:项目成果量化、提升了多少

3. 福利别忽视

  • 加班费、调休
  • 年终奖(几个月)
  • 股票/期权
  • 培训预算
  • 远程/弹性工作

七、offer 选择

评估维度

维度权重评估
薪资25%base + 绩效 + 股票
技术成长25%技术栈、挑战
团队20%领导、氛围
公司15%行业、稳定性
工作强度15%加班、通勤

慎入坑

  • 面试造火箭,入职拧螺丝
  • 频繁 996 但薪资不高
  • 团队氛围差(打听在职员工)
  • 公司即将裁员(查新闻)

八、总结

找工作是双向选择。准备充分才能拿到心仪的 offer。

学习建议:

  1. 系统复习:按知识图谱逐项梳理
  2. 刷题:LeetCode 至少 100 题
  3. 项目梳理:每个项目能用 STAR 法则讲清楚
  4. 模拟面试:找朋友或同行互问
  5. 保持状态:多投多面,面试能力也要练

最后:运维是个越老越吃香的岗位,前提是你一直在成长。学习 + 实战 + 复盘,三年后你会感谢现在努力的自己。