☰
运维开发笔试题全解析:从Linux到Python自动化
2026/10/23 14:40:07 网站建设 项目流程

开始前先说个背景:运维开发工程师,这几年在游戏行业校招里一直是香饽饽。搜狐畅游2019年校招笔试题,我当年拿到手的时候,第一感觉是:题目看着不吓人,但覆盖面特别广,Linux、网络、Python、数据库、场景设计一锅端,而且越做越能察觉到出题人在试探你的自动化思维和业务理解能力。这篇文章就把这套典型笔试的考点拆开揉碎,从答题者的视角讲讲每类题背后想考什么、怎么准备最稳,也顺便聊聊这类笔试题对后续面试和实际工作的参考意义。不管是准备校招的应届生,还是想转岗运维开发的老人,都能从里面找到能直接用的东西。

1. 笔试整体设计与考察逻辑

1.1 游戏公司为什么专门考运维开发

很多同学第一次看到“运维开发工程师”这个岗位名会愣一下:运维就运维,为什么后面还要挂“开发”两个字?这个岗位在游戏公司里其实非常具体——运营的游戏区服动辄几十上百组,服务器数量多、变更频繁、监控告警、日志采集、发布排期,全部靠手工敲命令根本不现实,所以必须有人把这些重复性工作做成平台、做成工具。这个角色既要懂系统、网络、数据库这些运维基本功,又要能写代码把流程自动化,这就是“运维开发”的由来。

搜狐畅游这种体量的游戏公司,业务特点决定了它对运维开发有明确要求:游戏版本更新频繁,合服、开服、滚服是日常操作;线上流量有明显波峰波谷,节假日活动期间短时压力极大;玩家数据分散在多个数据库实例里,出了问题要能快速定位。这些场景决定了笔试不会只考死记硬背的命令参数,而是考你能不能理解业务,能不能用代码和脚本解决问题。

我后来也参与过类似规模的校招笔试命题,出题人脑子里其实就一条逻辑线:先确认你有没有基础功底,再确认你有没有开发能力,最后看你面对真实运维场景时有没有解决问题的思路。所以整套卷子并不是为了难倒你,而是想通过有限的时间,快速判断一个人能不能在入职后独立上手。这也解释了为什么题目看起来杂,但每道题背后都有明确的考察目标。

1.2 考点分布与题型拆解

从这类笔试的常见安排来看,考点分布大概有这样一个规律:Linux 基础占两到三成,网络基础占一成半左右,Python 和 Shell 脚本能力能占到三成以上,数据库和中间件基础知识占一到两成,最后一定有一道开放性的场景设计题。选择题、简答题、编程题、设计题四种形式基本都会出现,选择题考广度,简答题考理解深度,编程题考代码熟练度,设计题考系统思维。

这里我先给一个大概的题型和占比参考,方便你做复习规划:

考察模块常见题型大致占比核心目标
Linux 基础与命令选择、简答20% - 25%排查问题的基本能力
网络协议与排障选择、简答10% - 15%理解连接与故障链路
Python / Shell 编程编程题30% - 35%自动化落地能力
数据库与中间件简答、选择10% - 15%数据存储与缓存意识
监控、发布等场景设计题10% - 15%全局架构与运维思维

时间分配上我的建议是:选择题遇到没把握的不要死磕,先标记,整个选择题区块控制在25到30分钟之间;简答题分点作答,每题控制在10分钟以内;编程题是分值大户,建议留出充足时间先写思路再写代码,别一上来就翻小抄式地硬写;最后那道场景设计题一定要写满,哪怕方案不是最优,也要让阅卷人看到你有完整的思考过程。时间管理本身就是这类笔试考察的一部分,一个能在有限时间内合理分配精力的人,通常也是工作中更靠谱的人。

2. 操作系统与网络基础的关键考点

2.1 Linux 高频命令与系统排查思路

Linux 命令这块,笔试很少直接考“top 用来看什么”,更多是给一个故障场景,让你选排查命令。比如“一台服务器 CPU 负载飙升到 20,你第一步怎么做”,这种题表面上考命令,实际上考排查思路。正确的顺序一般是:先用 top 看进程级别的 CPU 占用,再配合 ps 看具体进程启动时间、运行状态,必要时用 strace 追踪系统调用。top 的交互命令也要熟,按 P 按 CPU 排序、按 M 按内存排序、按 C 显示完整命令行,这些细节都会在场景题里派上用场。

内存和磁盘的排查也经常出现。free -h 看内存总量和缓存占比,注意区分真正的内存瓶颈和 page cache 占用——后者通常是正常的文件缓存,可回收,不要误判;df -h 看分区使用率,df -i 看 inode 是否耗尽,这是经常被忽略的坑,文件没删多少但 df 报满,很多时候是 inode 用完了。再往下就是 iostat,重点是 %util 和 await,如果 %util 很高但 await 还好,说明设备利用率充分;如果 await 很高但 %util 不高,可能是有 IO 队列竞争或者磁盘本身有问题。

这里给你一个排查负载高问题的标准路径:先 top 看 CPU,再看 load average,然后区分是 CPU 密集还是 IO 密集。CPU 密集就看哪个进程占资源,IO 密集就用 iostat 看磁盘状态,同时用 vmstat 看 r 列(运行队列)和 b 列(不可中断睡眠进程)。我在实际操作中发现,很多新手一看到 load 高就慌,其实只要按这个链路拆下去,十分钟内基本能定位到根因。笔试里如果遇到这种场景题,把你脑海中完整的排查链路写出来,哪怕不完美也比只写一两条命令强得多。

2.2 网络协议、连接状态与常见故障

网络这块,TCP 连接状态是笔试和面试都绕不开的点。TIME_WAIT 应该是出镜率最高的词,比如“线上大量 TIME_WAIT 怎么办”。先说原理:主动关闭连接的一方在收到对方的 FIN 后,会进入 TIME_WAIT 状态,并等待 2MSL(Maximum Segment Lifetime)超时后才会完全释放连接。这个机制是为了保证最后一个 ACK 能可靠到达对方,同时让旧连接的报文在网络中彻底消失,避免污染新连接。大量 TIME_WAIT 本身不一定代表系统有问题,关键看端口资源有没有耗尽,如果客户端端口不够用了,才会表现成连接建立失败。

针对 TIME_WAIT 的处理,我建议先做合理调优再考虑绕过。内核参数方面,可以调整 net.ipv4.tcp_fin_timeout 缩短 FIN-WAIT-2 的等待时间,也可以让长连接复用,但我不建议直接粗暴开启某些快速回收参数,因为可能带来报文乱序识别问题,尤其在 NAT 环境下容易误伤正常连接。更稳的方案是改应用层:连接池复用、减少频繁的短连接、使用 HTTP 长连接,这些都是治本的办法。笔试和面试里,你能把“为什么会有 TIME_WAIT”“什么时候才需要担心”“治本方案是什么”一条线说清楚,已经很加分了。

端口连通性排查也是网络部分的常客。我给你一个通用排查链路:先 ping 看网络层通不通,再 telnet 或 nc 看端口通不通,然后 curl 或查看应用日志看服务本身有没有正常响应。很多同学一个问题直接拿 curl 去试,如果应用层没起来,curl 报错也无法判断是网络问题还是服务问题。正确做法是逐层排查,每一层都有明确的结论。比如 curl 超时,先 telnet 一下端口,如果端口是通的,说明 TCP 层面没问题,问题出在 HTTP 响应慢,这时候再考虑是应用处理慢还是后端依赖慢。笔试里的网络题,这种分层排查的思路比单纯背命令值钱得多。

3. 编程能力与自动化脚本考点

3.1 Python 编程题的典型解法

Python 编程题通常都不会太难,重点集中在文件读取、日志分析、字符串处理、基本数据结构这几个方向。有一类非常经典的题:给一个 Nginx 访问日志文件,统计访问次数最多的 IP 前十个。这题在考试里出现频率极高,因为它能一次性验证 Python 基础、文件操作和数据聚合能力。

我给出一个参考答案,你可以对照着自己的写法看差距:

from collections import Counter ip_counter = Counter() with open('/var/log/nginx/access.log', 'r') as f: for line in f: # 按空格切分,访问日志第一列是 IP ip = line.split(' ', 1)[0] ip_counter[ip] += 1 # 取出访问次数最多的 10 个 IP top10 = ip_counter.most_common(10) for ip, count in top10: print(ip, count)

这段代码里有几个细节值得注意。第一,用 with 打开文件,文件用完之后自动关闭,不会出现句柄泄漏;第二,用 for line in f 而不是先 f.readlines() 后遍历,前者是逐行读取,文件很大时内存占用恒定,后者会一次性加载全部内容到内存,日志量大的时候直接打爆;第三,用 Counter 类干计数和排序的活,比手写字典再排序优雅得多。这些细节在阅卷时都是加分项,说明你有真实的大数据处理意识,而不是只会写练习题。

如果题目要求更高一点,让你处理一个超大文件,比如几个 GB 级别的日志,这时候逐行扫描虽然能跑,但速度可能不够理想。更进阶的做法是用生成器分批处理,配合多进程或者 awk 先做预聚合。笔试时如果遇到这种题,我建议在代码里先用注释写出你的思路,比如“先分片读取,再按 IP 哈希分发到多个 worker 进程聚合,最后合并结果”,即使不写完整代码,阅卷人也能看出你有性能意识。毕竟笔试时间有限,把思路写清楚比盲目敲出一堆跑不起来的代码更有意义。

3.2 Shell 脚本与文本处理三剑客

Shell 脚本同样是运维开发的基本功。笔试中常见的 Shell 题包括写一个清理过期日志的脚本、写一个批量修改配置文件的脚本、用 awk 从某个命令输出里提取指定字段等。grep、sed、awk 这“三剑客”一定要熟练到条件反射级别。grep 负责行匹配过滤,sed 负责行内替换编辑,awk 负责字段提取和格式化输出。这三者的分工,基本覆盖了文本处理里 90% 的需求。

以清理日志脚本为例,很多服务会按天分目录存放日志,比如 /data/logs/app/2025-01-01.log,需求是删除 7 天前的日志文件。我见过不少人第一反应就是写一堆循环加判断,实际上 find 一行就能搞定:

#!/bin/bash BASE_DIR="/data/logs/app" KEEP_DAYS=7 find "$BASE_DIR" -name "*.log" -type f -mtime +$KEEP_DAYS -exec rm {} \;

这段脚本的关键知识点在 find 的参数:-type f 限定只删除文件,避免误删目录;-mtime +7 表示修改时间在 7 天之前;-exec rm {} ; 是对匹配到的每个文件执行删除。有些同学会问为什么不用管 crontab,实际上生产环境中这个脚本就是配合 crontab 每天跑一次的,一般会在凌晨低峰期执行。笔试如果只让你写脚本,你就把脚本本身写清楚;如果还问你怎么定时执行,那就补一句 crontab -e 加上“0 3 * * * /opt/scripts/clean_logs.sh 2>&1”这种定时配置。

这里有一个我在实际生产环境中踩过的坑:用 find 删除文件千万不要用 rm -rf 直接拼接路径,因为如果路径变量读出来是空的,整条命令就变成了“rm -rf /”,后果不堪设想。安全做法是先用 find 列出匹配到的文件确认一遍再删,或者用 -exec 时严格限定路径和文件名条件。另外,脚本里建议加上 set -u 防止未定义变量,加 set -e 或对关键命令做返回值判断。笔试时写上这些防御性写法,马上就能拉开和大多数考生的差距。我甚至在批改卷子的时候遇到过,脚本逻辑完全正确的一个人,因为没考虑变量为空的问题,被我在评语里点名提醒。这些小细节,平时多注意,考试不吃亏。

4. 数据库与中间件基础考点

4.1 MySQL 索引与慢查询优化

游戏公司的业务天生依赖数据库,所以 MySQL 在运维开发笔试里几乎是必考的。考点集中在索引原理、慢查询分析、基本优化手段上。关于索引,我建议一定先把原理理解透:MySQL 的 InnoDB 引擎底层是 B+ 树结构,索引就是一颗排好序的树,通过它能够快速定位到目标数据,避免全表扫描。但是索引不是越多越好,每多一个索引,写入和更新都要同步维护,反而拖慢写性能。

笔试里常见的索引题是:一张玩家信息表,有 player_id、server_id、level、login_time 等字段,查询条件经常是“WHERE server_id = ? AND player_id = ?”,问你索引怎么建。这种题考察的是“最左前缀原则”,也就是联合索引里,查询条件必须从最左侧的字段开始匹配,索引才会生效。所以索引应该建在 (server_id, player_id) 上,而不是反过来,因为反过来 player_id 单独过滤性虽然强,但无法满足 server_id 作为第一个查询条件的场景。当然,具体还要看哪个字段枚举值更少、哪个更常用,笔试里把最左前缀原则写清楚,再结合实际查询条件给出建议,基本就能拿高分。

慢查询这块,运维开发工程师至少要知道怎么定位慢 SQL。第一步是确保慢查询日志打开并设置合理阈值,在 MySQL 配置中有两个关键参数:slow_query_log 设为 ON 开启日志,long_query_time 设置为 1 秒(线上我一般建议 1 到 2 秒,太短会把日志刷爆,太长又发现不了问题)。然后定期用 mysqldumpslow 工具汇总慢查询日志,找出那些累计执行次数多、总耗时长的 SQL。定位到之后,用 EXPLAIN 查看执行计划,重点看 type 列是不是 ALL(全表扫描)、key 列有没有用上索引、rows 列预估扫描了多少行。这三个字段几乎是慢查询分析的“三板斧”,笔试和面试都会问到。

4.2 Redis 与消息队列的基本认知

中间件部分,Redis 是出镜率最高的。Redis 的核心考点是缓存穿透、缓存击穿、缓存雪崩,以及常用的数据结构。缓存穿透指查询一个必然不存在的数据,请求直接打到数据库;缓存的 key 都没对应,但 database 也没有,于是缓存形同虚设,大量请求穿透到数据库。解决方案是布隆过滤器前置过滤,或者把空值也缓存起来,设置较短过期时间。缓存雪崩指大量 key 在同一时间失效,导致请求全部落到数据库上,解决思路是把过期时间分散,加随机值。缓存击穿指一个热 key 在失效瞬间有大量并发请求同时打过来,这时候可以用互斥锁或逻辑过期来解决。

数据结构方面,游戏排行榜是一个经典场景:玩家积分实时变化,需要快速获取前 100 名。这种需求用 Sorted Set(有序集合)就非常合适,key 是排行榜名称,member 是玩家 ID,score 是积分。ZADD 更新积分,ZREVRANGE 取分数从高到低的排行榜,ZSCORE 查单个人分数,复杂度都是 log(N),性能很好。这个问题几乎是游戏公司笔试里的常客,我强烈建议你背熟这几个命令,并理解为什么用 Sorted Set 而不是 List 或者普通 Set。

消息队列在运维开发里更多是作为应用架构的组件出现。考题一般会问“为什么需要消息队列”,答案核心是解耦、削峰、异步。游戏服务器在高并发活动时,玩家行为日志、跨服消息等如果全部同步处理,后端压力会非常大,引入消息队列可以先写队列再消费,让系统平滑扛住峰值。笔试遇到这种题,把“削峰填谷、异步解耦”这八个字展开,再结合一个具体业务场景说明,就够了。至于 RocketMQ、Kafka、RabbitMQ 各自的优劣,属于进阶内容,有时间可以了解,但不是笔试重点。

5. 运维开发场景实操:从笔试到落地

5.1 监控告警系统设计

笔试最后一道场景设计题,通常会给一个业务场景,让你设计一套监控告警系统,或者设计一个自动化发布流程。这种题没有唯一标准答案,考察的是全局架构能力。以监控系统为例,我建议你按“采集 - 存储 - 展示 - 告警”四个层次来回答,这是最不容易漏点、也最容易让阅卷人捕捉到你的结构感的方式。

第一层是数据采集。需要明确采集哪些指标,一般分三类:机器指标如 CPU、内存、磁盘、网络流量,业务指标如每分钟请求量、错误率、响应时间 P99,日志指标如错误日志条数、慢查询条数。采集周期也要注意,机器指标一般 15 到 30 秒一次,业务指标根据重要程度可以做到秒级。这里可以列一个表格帮助表达:

指标类型典型指标采集周期告警示例
机器指标CPU、内存、磁盘、IO15 - 30sCPU 持续 5 分钟超过 85%
业务指标QPS、错误率、响应时间5 - 10s错误率超过 1% 持续 2 分钟
日志指标ERROR 日志数、慢查询数1minERROR 日志数突增 3 倍

第二层是存储。时序数据要选择合适的时序数据库,像 Prometheus 搭配 Thanos 或 VictoriaMetrics。这一层重点说明数据保留策略,比如原始数据保留 15 天、降精度数据保留 6 个月,避免存储无限增长。

第三层是展示。Grafana 是常规选择,需要规划好面板结构,不能所有指标堆在一个大屏上,而是按业务维度分面板,比如“游戏服状态总览”“数据库性能”“网络层状态”。展示层有一个容易被忽略的点:指标要有对比视图,比如今天的数据跟昨天同时段对比、跟上周同时段对比,这样异常更容易暴露出来。

第四层是告警。告警要分级,比如 P0 表示核心功能不可用,需要立即通知接入电话;P1 表示服务质量下降,告警到值班群;P2 表示资源趋势性紧张,记录到日报即可。关键一点是告警一定要避免“狼来了”效应,阈值设得太敏感受众会麻木,设得太松又起不到预警作用。我在实际设计告警阈值时的经验是,先观察一周基线数据,再基于波动幅度设定阈值,并且每条告警都要有对应的处理预案。笔试时你把“分级”和“避免告警疲劳”这两点写出来,阅卷人基本能判断出你有实战经验。

5.2 自动化发布与故障排查

自动化发布流程是另一个高频设计题。游戏公司上线新版本非常频繁,如果每次靠手动登录所有机器传包、重启进程,效率低且容易出错。所以设计题一般会让你描述一个完整的发布流程。我建议分成前置检查、构建打包、分发部署、验证回滚四个阶段来答。

前置检查阶段要做的是确认代码分支和版本号正确,跑一遍自动化测试,检查服务器磁盘空间和端口占用,避免发到一半发现空间不够。构建打包阶段,如果是 Python 项目可能就是安装依赖打 tar 包,如果是 C++ 游戏服务端则是编译并收集产物。分发部署阶段,可以设计先发布一台灰度服务器,确认启动日志无异常再批量推送;批量推送时最好分批进行,比如一次 20 台,观察监控指标稳定后再推下一批,避免一次推完导致问题面过大。验证阶段除了检查进程存活和端口监听,还要看关键业务指标,比如客户端心跳数、登录成功率。回滚策略也必须提前想好,最常见的就是保留上一版本的完整目录,发布失败时快速切换软链接回滚。

故障排查题在笔试里更多以简答题或者选择题出现,但设计题里也会要求你附带说明某种故障的处理思路。比如线上出现大量 502 错误,怎么排查?正确链路是:先确认是网关问题还是后端服务问题。看 Nginx 错误日志,确认后端连接被拒还是超时;再 telnet 后端服务端口,确认端口有没有监听;接着看后端进程 CPU 和内存,用 top 看是否资源耗尽;最后看数据库连接池是否被打满。排查的过程中,每一步都要有结论,排查完要有恢复动作,比如临时扩容、重启故障节点、限流保护。这种分步排查的描述方式,在笔试里特别能拿分,因为它展示的不只是知识点,而是解决问题的能力。

6. 笔试实战经验与常见陷阱

6.1 答题顺序与时间管理

这类笔试的时间通常是 90 到 120 分钟,题量不算小,如果没有章法很容易在选择题上耗太久,导致后面大片空白。我建议拿到卷子先花两三分钟完整浏览一遍,对难度和分值心里有数。然后做题顺序坚持“先易后难、先分多后分少”的原则:选择题虽然多但分值小,40 道选择题做 25 分钟左右就该收手,遇到犹豫的直接标记跳过;简答题控制在 35 分钟内,每道题先列点再展开;编程题哪怕只写核心函数也要写,注意先写思路注释再码代码,不会的题目把算法过程描述清楚也能拿到部分分;最后的设计题至少留 20 分钟,这种题分值高、能写的内容多,千万不要留白。

时间分配上还可以用一个小技巧:每做完一个板块,在草稿纸上记录一下实际用时,超时太多就强制收尾。我当年考试的时候就是这样做的,选择题有一道网络题拿不准,果断放弃后把时间留给了后面的 Shell 脚本题,最后那道脚本题拿了满分,弥补了前面的小失误。笔试考的是综合得分率,不是单题正确率,这个思路一定要建立起来。另外,编程题如果环境允许,先本地跑一遍再提交,很多笔试题的代码要在浏览器里现场运行,语法错误都能立刻发现,这时候多花一分钟检查代码规范,比多写一行注释更值得。

6.2 阅卷视角:面试官看重什么

这里我从阅卷人的角度给你交个底。批改这类笔试题的时候,我最先看的是编程题。代码逻辑是不是完整、有没有考虑空值和异常分支、变量命名是否清晰、有没有关键注释,这些都能在几十秒内看个大概。很多人容易犯的毛病是,题目要求统计日志中访问量前 10 的 IP,代码只写了统计没有排序输出,或者输出了但没限制前 10,这些都是扣分点。另一个常见问题是只写了主流程,完全没有异常处理,比如打开文件可能会失败、字段可能格式不对,这些边界条件是阅卷人非常关注的,因为运维开发工程师写出的脚本是要在真实服务器上长期跑的,不可能永远拿到格式完美的数据。

简答题里,我比较反感只写结论不写理由的答案。比如问“为什么用缓存”,只写“为了性能”跟没答一样;但如果能写出“降低数据库压力、减少响应时间、扛住峰值流量”,再补一句“同时要注意缓存一致性问题”,那这个答案的层次就完全不同了。我建议你答题时分点,每一点都是“现象 + 原因 + 解决思路”的完整结构,这样阅卷人一眼能看到你的逻辑链。

最后是设计题。设计题没有标准答案,但阅卷人很容易看出一个人是真做过还是背模板。真做过的人会在方案里自然地提到灰度发布、回滚策略、告警阈值、指标对比这些细节;背模板的人只会写“高可用、扩展性、稳定性”这些无效词汇。所以我给备考同学的建议是,考前至少亲手搭一套简单的监控系统或者自动化部署脚本,哪怕是测试环境,也能帮你在答题时写出有血有肉的方案。

6.3 一次完整的备考路线参考

说到备考,我结合自己带新人和参与校招的经验,给出一套三个月左右的路线参考,适合笔试前系统准备。第一个月主攻基础:Linux 命令每天练一小时,重点把 top、free、df、netstat、ss、lsof、grep、sed、awk 这九个命令用熟,能用它们完成日常的进程查看、端口排查、日志提取;同时每天刷 20 道 Python 基础题,从列表、字典、字符串到文件操作、异常处理,把基本功打好。第三个月开始加强度:每天至少写两个小脚本,比如清理临时文件、批量重命名、自动备份,同时做几套真题和模拟题,总结错题和高频考点,把之前的基础知识串联起来。

第二个月进入经验积累阶段:主要可以看《鸟哥的 Linux 私房菜》基础篇、Python 相关的核心编程,配合 “高性能 MySQL” 理解索引和查询优化。同时可以开始接触真实运维场景,找一台云服务器把日志采集、进程守护、定时任务、简单监控手动搭一遍。这个阶段你会发现,很多笔试里的题目,在真实环境里操作一遍之后,印象会深很多,比如你在服务器上真的经历过一次磁盘满、TCP 连接数过多的问题,以后再遇到相关题目时不需要死记硬背。

三个月下来,你不仅能应付这类笔试题,日常工作中很多基础问题也能独立处理了。备考的核心从来不是刷题库,而是建立“看到问题 - 定位原因 - 用代码或命令解决”这个闭环。笔试只是这个能力的一小次检验,真正让你走得远的,是养成的工程习惯。

写在最后

这些年看过的校招笔试和面试有不少,个人最大的体会是:运维开发工程师的笔试题,变化不大,但要求越来越高。2019 年那会儿会写 Python 脚本就算亮点,现在很多应届生已经能交出带单元测试的完整工具代码了。基本功永远是最值钱的,Linux、网络、数据库、脚本这四板斧,走到哪里都不过时。如果你现在还在准备笔试题,建议别只盯着一两套卷子刷,而是把每个考点背后“为什么这样考”想明白。我面试过不少笔试高分但一问项目就露馅的候选人,也见过笔试马马虎虎但聊到真实故障能滔滔不绝的选手,后者在实际工作中往往走得更远。祝愿你在秋招季能碰到一套让自己答得痛快的题,也早点找到适合自己成长节奏的团队。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询