资讯动态

运维面试题库解析:Linux/Docker/K8s高频考点与答题思路

发布时间:2026/10/16 16:03:59 来源:尧图企业网站定制
简介运维工程师面试题PDF围绕Linux、Shell、Python、MySQL、Docker、Kubernetes与网络等运维核心领域整理高频考点适合正在准备运维岗位面试的求职者也便于在职人员随时查漏补缺。资源为单个PDF文件890KB左右内容精炼便于打印或离线学习。目前已有674人学习下载。PDF内按模块展开Linux部分覆盖进程查看、nginx进程统计、du与df区别、根分区满排查、find命令及日志打包Shell部分包括变量含义、批量创建用户、IP在线检测、URL可用性检查等脚本问题Python部分总结特点、数据类型、深浅拷贝、内置函数、常用模块和生成器迭代器MySQL部分梳理删除语句区别、char与varchar、主从原理、引擎对比、事务隔离级别及优化备份Docker和Kubernetes部分涉及基础命令、Dockerfile指令、组件角色、Pod健康监测和数据持久化方式网络部分则包含OSI七层模型、TCP/UDP对比、三次握手四次挥手、HTTP状态码与请求方法。整体覆盖面广、问题典型可帮助读者构建运维知识框架快速定位薄弱环节。1. 运维面试题不是背答案这份 Linux/SQL/容器/Docker/K8s 题库把现场答题思路也讲透了运维岗位的面试和开发岗不一样面试官很少问「你做过什么项目」更多是丢给你一个真实场景根分区满了怎么排查、nginx 并发上不去怎么定位、主从延迟了先看哪条命令。这份运维面试题资源覆盖 Linux、Shell、Python、MySQL、Docker、K8s、网络七个方向几乎每个题都带答案和命令实例适合准备一至三年经验运维岗位的求职者也适合刚带团队的运维负责人拿来做内部摸底。我拆完这份题库最大的感受是它不只是在列考点而是把「这道题现场该怎么答、答到什么深度算过关」也一起写清楚了比刷 LeetCode 式的零散题目实用得多。2. Linux 与 Shell 现场题先会看进程和磁盘再谈写脚本2.1 进程查看与 nginx 进程统计ps 组合拳怎么打题库里第一道题就是查看进程、统计 nginx 进程数、如果是 root 用户打印第一列和最后一列。这题看着基础但能区分出是背过命令还是真处理过问题。常见做法是分三步拆解先看进程再过滤再统计ps -ef | grep nginx ps -ef | grep nginx | grep -v grep | wc -l ps -ef | grep nginx | grep -v grep | awk {if($1 root) print $1,$NF}第一行是常规操作把 nginx 相关进程列出来第二行用grep -v grep把 grep 自身进程去掉再用wc -l统计数量这一步是为了避免把执行命令的进程也算进去第三行用awk做条件判断当第一列是 root 时打印用户名和最后一列。这里的$NF是 awk 内置变量表示当前行的最后一个字段对 ps 输出来说就是进程对应的命令路径或参数能直观看出 master 和 worker 进程分别在哪。面试时这题有个容易被追问的细节统计 nginx 进程数为什么要过滤 grep因为ps -ef | grep nginx这条命令执行时grep 本身也会作为一个进程出现在结果里不过滤会把结果多算一个。同样的坑在 crontab 脚本里也会遇到很多人写巡检脚本统计进程数量时忘了过滤导致告警阈值永远差一个数。2.2 du 与 df 的区别及根分区满排查先 df 定位再 du 收缩这道题是运维面试的高频题也是实际故障处理的标准流程。我一般建议按「先整体后局部」的思路答df 看的是文件系统整体使用情况du 看的是目录实际占用大小。根分区满了先 df -h 确认是哪个分区满了再 du -sh 逐层往下找大目录顺序是du -sh /*看根下哪个目录占用最多然后继续深入du -sh /var/*一层层定位到具体文件。df -h du -sh /* 2/dev/null | sort -hr | head -20 du -sh /var/* 2/dev/null | sort -hr | head -20 du -sh /var/log 2/dev/null这里有个实操细节du 在大目录上跑得很慢尤其是 /proc、/sys 这类虚拟文件系统目录所以加上2/dev/null把权限报错和不可访问目录的报错丢掉再用sort -hr按人类可读大小排序取前 20 行能快速锁定目标。还有一层隐含考点是du 和 df 结果不一致是正常的因为 df 统计的是文件系统块分配情况已删除但未释放空间的文件、日志文件被进程持续写入的情况都会导致 df 显示的占用大于 du 统计的目录大小。这题能答到这一层面试官基本就会点头了。2.3 查找文件与定时归档find 加 xargs 的边界在哪查找 /var/log 下以 .log 结尾的文件再找 7 天前的文件打包移动到 /tmp这道题考的是 find 条件组合和 xargs 传参。题库里给的标准答案是一行命令但实战中 xargs 有坑。find /var/log -name *.log -type f find /var/log -type f -mtime 7 | xargs tar -zcvf log_$(date %F).tar.gz mv log_$(date %F).tar.gz /tmp第一条命令不复杂-name指定文件名匹配-type f限定普通文件避免匹配到目录名。第二条命令里-mtime 7表示修改时间在 7 天前的文件xargs把 find 输出逐批传给 tar。这里最容易翻车的是文件名含空格的情况xargs 默认按空格切分文件名一含空格就拆成多个参数tar 会提示文件不存在或漏打包。稳妥的做法是用find ... -print0 | xargs -0 tar ...或者直接用 tar 的-T参数配合find ... filelist读文件列表。如果面试官追问把这两种方案说清楚说明你真的处理过带空格的文件名。2.4 Shell 特殊变量与批量创建用户$* 和 $ 的区别是拿分点Shell 部分第一题直接列出$# $ $$ $* $? $0六个变量问含义$* 和 $ 在双引号包裹下的区别是重点$*会把所有参数当成一个整体字符串$会把参数逐个展开。这题能答出来不难但批量创建用户的脚本更需要思路for i in $(seq 1 10) do useradd user$i echo 123456 | passwd --stdin user$i done这个脚本用seq 1 10生成序号循环创建 user1 到 user10密码统一设成 123456。passwd --stdin是从标准输入读取密码适合脚本里批量设置。生产环境里一般不建议这么干密码策略和复杂度校验会被绕过但作为面试题重点是把循环、变量拼接、管道传参这几个点讲清楚。追问通常是如果用户已存在怎么办加个判断id user$i检查用户是否存在存在就跳过或改密码不存在才创建。#!/bin/bash for ip in $(seq 1 255) do ping -c 1 -W 1 192.168.1.$ip /dev/null 21 if [ $? -eq 0 ]; then echo 192.168.1.$ip UP else echo 192.168.1.$ip DOWN fi done这是判断某个网段在线 IP 的脚本ping 加了-W 1把超时时间设成 1 秒避免每个 IP 等太久。$?拿上一条命令的退出码0 表示 ping 通。这个脚本在大网段下效率不高逐个 ping 255 个 IP 要几分钟进阶方案是并发 ping 或使用 fping但面试阶段把串行版本讲清楚就够了能在答案最后提一句「生产环境我会用 fping 或 xargs -P 并发」基本是加分项。3. Python 面试题数据类型、拷贝与生成器的回答层次3.1 数据类型与常用方法别只背方法名要说出场景Python 部分的第一类题是数据类型及特性。题库列了数字、字符串、列表、元组、字典、集合六类区分的核心是可变与不可变数字、字符串、元组是不可变类型列表、字典、集合是可变类型。面试时这道题的回答节奏一般是先分类再各举两三个常用方法最后落到「因为不可变所以可以哈希、可作字典键」这类推导上。字符串的 replace、strip、split、upper、lower列表的 append、pop、insert、count字典的 keys、values、items、update这些方法名不难记难的是说清楚它们返回新对象还是原地修改。字符串方法基本都返回新字符串原字符串不变列表的 append、pop 是原地操作字典的 update 也是原地合并。有一个区分技巧可变类型的方法大多是原地修改不可变类型的方法大多返回新对象记住这个原则即使遇到不熟的方法也能推断行为。3.2 深拷贝与浅拷贝从嵌套列表讲起比背定义有用深拷贝和浅拷贝的区别几乎每次面试都会问。单纯背「浅拷贝复制引用、深拷贝复制对象本身」很容易在追问下沉掉我建议用一个嵌套列表的实例来讲import copy a [[1, 2], [3, 4]] b copy.copy(a) # 浅拷贝外层是新列表内层仍是同一批子列表 c copy.deepcopy(a) # 深拷贝内外层全部复制 b[0].append(99) print(a) # [[1, 2, 99], [3, 4]] print(c) # [[1, 2], [3, 4]]浅拷贝只复制最外层容器内层元素还是原对象的引用所以改 b 的子列表a 跟着变深拷贝递归复制所有层级c 和 a 完全独立。回答时把这个例子演示一遍比干巴巴说定义效果好得多。容易被继续追问的是切片是什么拷贝列表的a[:]是浅拷贝只复制外层内层嵌套列表仍是共享的。字典的.copy()方法同理。3.3 生成器、迭代器与可迭代对象应用场景比概念更重要这题的标准答案是可迭代对象是实现了__iter__方法的对象迭代器是同时实现了__iter__和__next__方法的对象生成器是含 yield 的函数或生成器表达式。但面试官更想听到的是应用场景生成器为什么能省内存因为它是边循环边计算不一次性把所有元素载入内存适合处理大文件、大数据集。题库里提到的两种生成器写法都要能讲# 生成器表达式把列表推导式的 [] 换成 () gen (x * x for x in range(10)) # yield 关键字定义的生成器函数 def countdown(n): while n 0: yield n n - 1 for num in countdown(5): print(num)用生成器处理日志文件的常见场景是一个几个 GB 的 access.log用普通列表读取会占满内存用生成器逐行 yield内存占用恒定。这个场景几乎是送分题答出来基本能证明你写过大文件处理脚本。九九乘法表、阶乘这类编程题考的是基础语法熟练度没什么技巧多练两层嵌套循环和递归写法即可。4. MySQL 高频题事务、隔离级别与主从复制一次讲透4.1 delete、drop、truncate 的区别从语系和可回滚性切入MySQL 的第一道高频题就是三者区别。删数据是运维日常操作但很多人没想过三者在「能不能回滚、要不要 commit、释放不释放空间」上的差异。我习惯按三个维度列语言类型、删除内容和速度。delete 属于 DML 语言只删除数据不删除表结构需要事务管理commit 之后才能生效可以配合 where 条件删部分记录删错了没 commit 还能 rollback 后悔。truncate 和 drop 属于 DDL 语言操作立刻生效不可回滚。truncate 删除所有记录但保留表结构自增 ID 会重置drop 直接把表结构和数据一起删掉释放空间。删除速度上drop 大于 truncate 大于 delete。使用场合也要说彻底不要这张表用 drop要保留表结构但清空数据用 truncate只想删部分数据用 delete 加 where。面试时能把「delete 是逐行删、truncate 是重建表」这一点说出来会显得理解更深。4.2 varchar 和 char 的区别长度存储和查询效率的权衡char 列长度固定范围 0 到 255不足长度会用空格补齐varchar 列长度可变范围 0 到 65535按实际内容存储额外记录长度信息。实际业务中性别、状态、手机号这类长度固定的字段适合 char因为存储结构固定、查询更快描述、备注、URL 这类长度不定的字段用 varchar。面试追问点通常是varchar(50) 里的 50 是字符还是字节MySQL 中 varchar 的单位是字符但要注意 utf8mb4 字符集下一个中文占 3 到 4 个字节如果字段要存中文长度规划要根据最大字符数来设而不是按字节数。4.3 事务与隔离级别ACID 四问连招怎么破事务这题的范围可以很大面试官可能从「什么是事务」一路追问到「MVCC 原理」。题库里的考察点是 ACID 特性和四种隔离级别先把这两层吃透。事务是一组 SQL 语句的逻辑单元要么全部执行成功要么全部回滚。ACID 四个特性原子性是不可分割一致性是事务让数据库从一种正确状态到另一种正确状态隔离性是事务提交前不把改动暴露给其他事务持久性是提交后改动永久保存。四种隔离级别由低到高是读未提交允许脏读读已提交只能读到已提交数据但不可重复读可重复读保证事务内多次读结果一致串行化完全隔离但性能最差。MySQL InnoDB 默认是可重复读Oracle 默认是读已提交。回答时加一句「可重复读通过 MVCC 多版本并发控制实现读不加锁写加行锁」如果能顺着说出隔离级别解决的问题——脏读、不可重复读、幻读整个回答就完整了。4.4 主从复制原理与延迟排查把 binlog 到 relay log 的链路说清主从复制是 MySQL 面试必问题题里给了清晰的知识点主库开 binlog从库 IO 线程拉取主库 binlog 写入自己的 relay logSQL 线程再读 relay log 回放到本地。查看主从状态用show slave status重点看Slave_IO_Running和Slave_SQL_Running是否都是 Yes。主从延迟的主因要能列出来慢 SQL 太多、从库硬件差、从库数量过多、网络延迟、大事务。每种原因对应的排查思路也要能说慢 SQL 用show processlist看当前执行语句从库硬件差升级配置从库太多考虑级联复制架构网络延迟用ping或tcping验证 RTT。回答时如果能举一个实际场景比如「某次大表 DDL 导致从库延迟几分钟我通过show slave status看到Seconds_Behind_Master飙高查 processlist 发现是 ALTER TABLE 重建表导致的」说服力会强很多。MySQL 优化类题如 explain、慢查询日志、索引设计题库里已经列了方法和方向面试时按「开启慢查询日志定位 - explain 分析执行计划 - 针对性加索引或改写 SQL」三步答。5. 容器与编排高频考点Docker 命令和 K8s 组件的回答框架5.1 Docker 镜像、容器与基础命令从抽象概念落到具体命令Docker 部分的考察分两层概念层是镜像和容器的关系、容器与虚拟机的区别命令层是常用命令、端口映射和挂载。镜像可以理解成容器的模板或源代码Dockerfile 构建出镜像镜像 run 成容器。容器是镜像的运行实例包含应用程序和全部依赖共享宿主内核。有个容易混淆的点是容器状态。题库列的四种状态是运行、已暂停、重新启动、已退出对应命令分别是 start、pause、restart、stop。docker ps 只能看到运行中的容器加 -a 才能看到所有容器。面试时把状态与命令的对应关系说清楚比背 ps 输出更有说服力。常用命令的范围我在每次面试模拟时会按「镜像管理、容器生命周期、网络、数据卷、日志」五类来枚举关键命令run、exec、ps、images、inspect、logs、build、commit、push、pull、save、load、export、import、cp、rm、rmi 都在覆盖范围内。启动 nginx 容器并随机端口映射加挂载目录这道题命令本身不复杂但每个参数都要能解释docker run -d -P --name nginx-test \ -v /home/nginx/html:/usr/share/nginx/html \ nginx-d后台运行-P随机映射容器端口到宿主机端口--name给容器命名-v把宿主机 /home/nginx/html 挂载到容器内的 nginx 默认 HTML 目录。这里有个隐蔽考点-P大写是随机映射-p小写是手动指定端口映射面试答错大小写很拉分。挂载目录的好处是改宿主机文件就能实时生效到容器内页面不必进入容器改文件。5.2 Dockerfile 常用指令与 COPY/ADD 区别构建镜像的拿分点Dockerfile 指令考察点相对固定FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、WORKDIR、ENTRYPOINT 是出现频率最高的几个。每个指令要能说清执行时机FROM 指定基础镜像RUN 在构建镜像时执行命令CMD 和 ENTRYPOINT 在容器启动时执行EXPOSE 声明容器监听端口ENV 设置环境变量。RUN 和 CMD 的区别经常被追问RUN 是构建阶段执行的CMD 是容器启动时执行的默认命令。COPY 和 ADD 的区别是 Dockerfile 考察里最常追问的点。COPY 只能从构建上下文复制文件或目录到镜像里ADD 除了复制功能还支持从 URL 拉取文件、自动解压本地 tar 包。早期很多实践用 ADD 做解压但官方推荐优先用 COPY因为 ADD 的自动解压和远程拉取行为有时不可预期。我一般建议单纯复制文件用 COPY需要自动解压本地压缩包时才用 ADD。5.3 K8s 组件与对象master/node 分工、etcd 角色、健康检查机制K8s 题目是这份题库里信息量最大的部分。先明确一个基础关系Kubernetes 是容器编排平台Docker 是容器运行时之一K8s 负责容器的调度、编排、扩缩容和自愈Docker 只负责单机容器运行。面试被问到「K8s 与 Docker 什么关系」先划清这一层就不会跑偏。master 跑 apiserver、controller-manager、scheduler 三个核心组件node 跑 kubelet、kube-proxy以及容器运行时。etcd 的作用是存储集群所有状态数据包括节点信息、Pod 定义、配置等是整个集群的元数据库。K8s 常见对象要能枚举Pod、Deployment、StatefulSet、DaemonSet、Service、ConfigMap、Secret、Volume、Namespace。考察频率最高的是 Deployment、StatefulSet、DaemonSet 三者的适用场景对比。Deployment 适合无状态应用滚动更新和扩缩容是它的强项StatefulSet 适合有状态应用比如 MySQL 主从、Redis 集群它保证 Pod 的稳定标识和顺序启动DaemonSet 适合每个节点必须跑一个的组件比如日志收集器、监控 agent。创建 Pod 的流程是 K8s 面试的经典流程图背诵题用户通过 kubectl 或 API 提交 Pod 定义到 apiserverapiserver 写入 etcdscheduler 监听并调度到合适的 nodekubelet 通过容器运行时启动 Podkube-proxy 维护网络规则。整个链路能按 apiserver - etcd - scheduler - kubelet 的顺序说下来就算过关。健康检查机制这个考点回答起来要强调三个探针livenessProbe 判断容器是否存活、readinessProbe 判断容器是否就绪可接收流量、startupProbe 处理启动慢的应用。数据持久化的方式包括 emptyDir、hostPath、PV/PVC、StorageClass、ConfigMap 和 Secret 挂载等其中 PV/PVC 是生产环境用的主流方案。5.4 避坑记录容器与 K8s 面试和实操的七个翻车点从多年面试和被面试的经验看容器和 K8s 部分的坑最密集几乎每个考点都有对应翻车案例挑出现频率最高的几条现象1docker run 挂载目录后浏览器 403 或 404。原因挂载目录里没放 index.html或宿主机目录权限不足nginx 容器内 worker 进程读不了。解决先在宿主机确认挂载目录存在且有 index.html再docker exec进容器看 /usr/share/nginx/html 目录内容和权限。现象2docker exec 进容器执行命令报 exec: executable file not found。原因容器内没有宿主机上安装的工具比如宿主机有 vim容器里是最小化镜像没有 vim。解决用docker exec执行镜像内存在的命令比如sh -c或cat必要时先 apt/yum 安装。现象3docker save 保存的镜像 load 后没有了版本标签。原因save 导出时只用容器 ID 没带版本 tag。解决save 前先 docker tag 补全版本号导出时写全镜像名:版本号。现象4kubectl get pods 看到 CrashLoopBackOff反复重启。原因应用启动时依赖的环境变量、配置文件或数据库连接没就绪。解决看kubectl logs定位具体错误用 readinessProbe 延后流量配置 initContainer 做前置依赖检查。现象5Pod 一直 Pending 不调度。原因资源不足或节点有 taint。解决kubectl describe pod查看事件看是 CPU/内存请求超了可用资源还是有 node selector 不匹配或 taint 没容忍。现象6Service 创建后 Pod 间访问超时。原因Service 的 selector 与 Pod 标签不匹配或 kube-proxy 的 ipvs 模式有问题。解决kubectl get svc -o yaml核对 selectorkubectl get endpoints看是否有对应 Podendpoints 存在才说明 Service 找到了目标。现象7K8s 面试被问 etcd 时只答「存配置」。原因理解过于表面。解决深一层说 etcd 用 Raft 保证一致性存储集群的期望状态和实际状态所有 apiserver 的读写都经过它etcd 挂了集群就只读不可写了。这几条经验我自己就踩过至少一半尤其是第1条挂载目录权限问题几乎所有新手都会遇到面试时主动说出来反而会加分——面试官知道你是真做过不是背的。6. 网络题与答题方法论OSI、TCP 状态和 HTTP 状态码的串联记忆法网络部分是面试的必考调剂题难度不大但覆盖面广。备考时要把握一个核心网络题的重点不是概念本身而是用协议、端口、状态码串联起故障排查的线索。比如线上服务变慢了从 TCP 连接状态能看出是等待超时还是连接被拒从 HTTP 状态码能判断是后端服务问题还是网关问题。这才是面试官想听到的。先过一遍基础题的回答框架。OSI 七层模型按物理层、数据链路层、网络层、传输层、会话层、表示层、应用层来记用一句话归纳各层职责物理层传比特流、数据链路层传帧、网络层传包并路由寻址、传输层提供端到端通信、会话层管理连接、表示层做数据格式转换、应用层对用户提供服务。记忆口诀可以自己编一句顺口溜比如「物数网传会表应」。TCP 和 UDP 的区别从连接性、可靠性、传输方式和应用场景四个维度答TCP 面向连接、可靠、字节流适合文件传输、网页访问、数据库连接UDP 无连接、不可靠、数据报适合直播、DNS 查询、游戏实时通信。TCP 三次握手答「SYN - SYNACK - ACK」四次挥手答「FIN - ACK - FIN - ACK」我说的每步都要配合状态变化来讲从 SYN_SENT 到 ESTABLISHED 到 FIN_WAIT 到 TIME_WAIT能画出来最好。HTTP 常见状态码用区间来记2xx 成功3xx 重定向4xx 客户端错误5xx 服务端错误。高频的具体码200 成功、301 永久重定向、302 临时重定向、403 禁止访问、404 找不到资源、500 服务器内部错误、502 网关错误、503 服务不可用、504 网关超时。面试时结合场景说出「从状态码反推故障位置」比背数字强404 是后端应用层问题502 是后端服务挂了或未启动504 是后端响应超时但服务还活着。HTTP 请求方法里 GET、POST、PUT、DELETE 是基础HEAD、OPTIONS、PATCH 也要知道用途。最后这个部分我通常会给面试者一条进阶建议回答网络题时把「知识块」串成「排查链路」。比如状态码 502 可以从 nginx 日志查到 upstream 报错然后查后端进程是否存活、端口是否监听、防火墙是否拦截一条链路走下来既展示了知识面又体现了解决问题的思路。从第一次准备运维面试到现在批量筛候选人我复盘过几十份题库这份是唯一把「背答案价值」降得比较低的知识覆盖全、答案有真实命令、每个考点都能延伸出实操场景。从那以后我每次模拟面试都用它出题而且一定会从题库里挑两三道题让人现场写命令而不是只让背概念——因为运维岗最终拼的是手指头和脑子之间的反应速度。希望这份题库能帮你把高频考点过一遍也把你自己的实战经验补齐进去面试时才有得讲、讲得深。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑