每年秋招季,总有一批准备投运维岗的同学跑来问我:网易的运维笔试到底考什么?这个问题我在2018年也问过自己。那份"网易2018校园招聘运维工程师(有道)笔试卷",我至今还留着电子版,偶尔翻出来看,依然觉得它是一份很有代表性的考卷——它考的不光是知识点,更多是你在真实运维场景里有没有解决问题的直觉。
这篇文章不是让你背答案的。我会把这份试卷背后的出题逻辑拆开,从Linux基础、网络排查、数据库中间件、脚本自动化到场景设计题,逐层讲清楚每一类题为什么这么出、你怎么答才能踩到分。无论你是准备校招的应届生,还是想转行运维的社招候选人,这篇文章都能帮你少走弯路。哪怕你不考网易,这套拆解方法同样适用于其他大厂的运维笔试。
1. 网易有道运维笔试的命题风格与岗位画像
1.1 为什么笔试前要先搞清楚"有道"在做什么
网易有道是网易旗下的教育科技公司,做词典、翻译、在线教育等产品。运维工程师在这里要扛的是教育业务的稳定性——几百万人同时查词、看课、提交作业,服务不能挂,数据不能丢。所以笔试的题目设置会明显偏向Web服务运维、数据库和缓存的高可用、以及自动化效率提升,而不是纯粹考硬件或网络底层。
这和网易其他部门(比如游戏运维)有区别。游戏的运维笔试会偏向服务器集群、容灾、DDoS防护;有道的产品以API服务为主,所以更关注服务链路的稳定性和响应速度。你拿到试卷后,第一件事不是急着做题,而是先想:这个岗位的日常痛点是什么?题目八九不离十都在围着这些痛点转。
1.2 试卷的典型模块与分值分布
根据这份笔试卷的回忆整理,整体结构大致分五个模块:
| 模块 | 考察方向 | 题量占比 | 难度 |
|---|---|---|---|
| Linux基础与命令 | 文件管理、权限、进程、系统状态 | 20% | 低 |
| 网络与系统服务 | TCP/IP、DNS、HTTP、Nginx | 25% | 中 |
| 数据库与缓存 | MySQL、Redis | 20% | 中 |
| Shell/Python脚本 | 日志分析、文本处理、自动化 | 20% | 中高 |
| 场景设计题 | 架构、监控、故障排查思路 | 15% | 高 |
这个比例说明一个很重要的信号:这道题不追求把你考倒,而是要看你在各个基础层面是否均衡。均衡比偏科重要。很多人Linux命令背得滚瓜烂熟,但一问Nginx负载均衡算法就卡壳,这种人在笔试里很容易被筛掉,因为运维本身就是个知识面要求很杂的岗位。
1.3 笔试的核心考察逻辑:排障思维大于死记硬背
我见过太多人准备笔试是抱着命令手册背,结果一上考场就懵。因为网易的考题不直接问"ls有哪些参数",而是给你一个具体场景:服务器负载突然飙高,你怎么排查?这时候你要写出的是排查路径——先看load average,再用top看CPU和内存,再用iostat看磁盘IO,然后结合dmesg看有没有OOM,最后定位到具体进程。
这种答题方式考察的不是知识点本身,而是知识点的串联能力。你在平时练习时就要有意识地把零散命令组合成一套排查流程,形成肌肉记忆。笔试和面试不同,面试官不在你对面,你只能靠文字把思路完整表达出来,所以答题的结构化程度直接决定你的分数。
2. Linux基础与常用命令:送分题背后的隐藏要求
2.1 高频考点:不只是"会敲",要懂"为什么"
Linux基础题是整份试卷里最友好的部分,但也是最容易丢分的部分,因为很多人只背命令不背原理。比如试卷里出现过一道题:如何查看某个端口是否被占用?大部分人能写出netstat -tlnp | grep 8080或lsof -i:8080,但你要能解释清楚-t、-l、-n、-p各自是什么意思,并且补充一句"生产环境推荐用ss替代netstat,因为ss在连接数多的时候性能更好"。这一句话就能拉开差距。
再比如进程管理。题目问"如何找到CPU占用最高的进程",很多人直接写top。但更好的回答是先写top -o %CPU按CPU排序,再用ps -eo pid,ppid,%cpu,%mem,comm --sort=-%cpu | head精确输出关键字段,外加一句"如果进程瞬时飙高又降下来,要用top -d 1多采样几次,避免误判"。这种细节才是考官想看到的。
2.2 文件系统与权限:经典坑位回顾
有道笔试卷在文件系统这块考察的是实际排障能力。题目大概是这样:磁盘空间满了,df -h显示/分区使用率100%,但你du -sh /*加起来的实际占用远小于分区总大小,这个现象说明什么?怎么解决?
这道题的正确答案是:有文件被进程删除但仍然占着空间,lsof | grep deleted找到对应进程,重启进程或让进程释放文件句柄。这个知识点在真实运维中几乎每周都会碰到,尤其是日志文件被rm但服务进程没重启的情况。笔试考这个,说明出题人很清楚一线运维的日常工作。
权限题也要注意。除了基础的chmod 755、chown user:group file之外,有道卷子还考过SUID和SGID。题目问:/usr/bin/passwd为什么普通用户也能执行?答案就是文件上有SUID位,执行时以文件属主(root)身份运行。你要能写出来怎么设置:chmod u+s /path/to/file,并说明SUID的危险性——如果在一个普通用户可写的文件上设置SUID,等于给该用户提权,这是安全审计的重点检查项。
2.3 系统状态查看:别只记top,要能讲清指标含义
系统负载类题目几乎必考。load average三个数字分别代表什么?很多人能背出"1分钟、5分钟、15分钟的平均负载",但题目如果深入问"load average 等于 CPU 核数代表什么",就有人卡住了。正确的理解是:load average 是运行队列中平均活跃进程数,包含正在运行的进程和等待CPU的进程,不等于CPU使用率。当 load 长期大于 CPU 核数,说明系统过载,有进程在排队等待。
还有个常考点是内存。free -h输出中,available和free的区别是什么?简单说,free是真正没被用的物理内存,available是估计的可用于新进程的内存(包含可回收的缓存)。真实场景里,Linux 会把空闲内存用作 page cache 来加速文件读写,所以free很小不代表内存不足,要看available。这个细节在笔试中写出来,会让人觉得你真的管过服务器,而不是只刷过面试题。
3. 网络与系统服务:从TCP握手到Nginx配置
3.1 TCP/IP 基础题:三次握手和四次挥手的进阶答法
有道笔试卷里网络部分的第一道题通常是TCP三次握手,但问法有套路。它不会直接问"三次握手的过程是什么",而是问"为什么是三次,不是两次?"——这就要你答出ISN同步和防止历史重复连接初始化。如果你能进一步解释 SYN Flood 的原理(攻击者发送大量SYN但不完成握手,服务端半连接队列被打满),以及 Linux 下的应对参数(net.ipv4.tcp_max_syn_backlog、tcp_syncookies),这道题的层次就完全不一样了。
四次挥手也有进阶考点。TIME_WAIT 状态是运维笔试题的最爱:为什么主动关闭方要停留在 TIME_WAIT 状态 2MSL?答案有两个要点:一是保证最后一个 ACK 能让对方收到,如果丢了对端会重发 FIN;二是让旧连接的报文在网络中自然消失,防止影响新连接。再往下就要说生产环境大量 TIME_WAIT 的优化手段——调整net.ipv4.tcp_tw_reuse(注意,tcp_tw_recycle在NAT环境下有坑,别乱开)、减小tcp_fin_timeout,或者让应用主动做连接复用。能写到这层,说明你真的调过线上问题。
3.2 DNS 和 HTTP 状态码:看似简单,处处有坑
DNS 的考点集中在解析流程。题目会给你一个域名,让你描述从浏览器输入 URL 到拿到 IP 的完整过程:浏览器缓存、系统 hosts 文件、本地DNS解析器、根域名服务器、顶级域服务器、权威服务器。这里面最容易漏掉的是缓存环节,以及不同 TTL 对缓存的影响。
HTTP 状态码也是高频考点,但有道卷子考得比较细。不光是 200、404、500,它还会问:502 Bad Gateway 和 504 Gateway Timeout 分别是什么问题?502 是网关或代理服务器从上游收到了无效响应,504 是上游没有在规定时间内返回响应。然后延伸到排查方向:502 要查后端服务是否存活、端口是否监听、防火墙是否拦截;504 要查后端服务的处理时间、代理超时配置(比如 Nginx 的proxy_read_timeout)。这种题答好了,后面场景题的压力就小很多。
3.3 Nginx 配置题:反向代理与负载均衡的核心逻辑
Nginx 在有道笔试里出现频率很高,因为它是有道这类 Web 服务最常见的接入层。最典型的题目是:写一个反向代理配置,将/api/路径的请求转发到后端服务器,并配置负载均衡和健康检查。
一个能拿高分的配置示例大概是:
upstream backend { server 10.0.1.10:8080 weight=3 max_fails=2 fail_timeout=10s; server 10.0.1.11:8080 weight=1 max_fails=2 fail_timeout=10s; keepalive 32; } server { listen 80; server_name api.example.com; location /api/ { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 5s; proxy_read_timeout 10s; } }这里面的关键得分点包括:weight权重差异、max_fails和fail_timeout的健康检查机制、keepalive对后端连接复用的优化。如果你还能补充一句"location 块里若不加/,proxy_pass是否带 URI 会导致转发路径不同",那就是资深玩家的水准了。
4. 数据库与缓存:MySQL 和 Redis 的必背内容
4.1 MySQL 索引与慢查询:笔试最常见的两类问题
运维笔试里的 MySQL 题目,十有八九围绕索引和慢查询展开。有道卷子有一道题:某查询语句很慢,你如何排查并优化?一个标准的排查链路是:先EXPLAIN看执行计划,确认是否走索引、type 是什么级别、扫描行数有多少;再看索引是否失效——比如对索引列做了函数操作、隐式类型转换、前置模糊匹配%xxx,这些都会导致索引失效;最后看数据量是否需要分表或增加缓存。
索引本身也常考。题目会问:unique key和普通索引的区别、联合索引的"最左前缀"原则。后者是经典中的经典,举例来说,(a, b, c)联合索引能匹配where a = ?、where a = ? and b = ?,但匹配不了where b = ?。在笔试卷上这种题必须用实际例子写清楚,别只写原则,写例子才能证明你真的理解。
4.2 Redis 持久化与淘汰策略:答出适用场景才加分
Redis 的相关题目集中在两个方面:持久化方式和内存淘汰策略。
持久化方面,RDB 和 AOF 的对比是送分题,但要答出适用场景:RDB 是定期快照,恢复快但可能丢数据;AOF 是追加日志,数据更安全但文件大、恢复慢。进阶答案是"生产环境通常 RDB + AOF 同时开启,AOF 配置appendfsync everysec,在性能和安全性之间取平衡"。如果你能对比 Redis 4.0 之后的混合持久化(AOF 重写时生成 RDB 格式的 base 文件,增量用 AOF),就更有区分度了。
内存淘汰策略的考点是maxmemory-policy的八种策略。至少要知道最常用的:allkeys-lru淘汰最久未使用的键,volatile-lru只淘汰设置了过期时间的键,noeviction不淘汰直接报错。面试官真正想看你有没有在生产环境配过——比如缓存热点数据用allkeys-lru,会话数据用noeviction宁可报错也不能丢。
4.3 数据库类题的答题套路:从"背概念"转向"说场景"
数据库题最大的误区是把概念背一遍就完事。我在试卷上看到的高分答案,普遍是"概念 + 场景 + 操作"三段式。举个例子:问"为什么要分库分表",你要先说概念(单库单表数据量大导致写入和查询性能下降),再说场景(订单表到千万级、写入TPS持续增长),最后说操作方案(水平分表按订单ID取模,垂直分库按业务域拆分,同时引入中间件如 ShardingSphere 或 MyCat)。
这种结构化的答题方式,比写一大段没层次的话更容易让阅卷人找到得分点。笔试是文字沟通,阅卷人每天要看几十份卷子,你的答案一定要结构清晰、要点前置、关键结论加粗或分条,别让他从一堆文字里帮你找答案。
5. 脚本与自动化:Shell/Python 笔试实战拆解
5.1 一道日志分析的 Shell 题完整思路
有道笔试卷的脚本题非常接地气,基本是"给你一个日志文件,让你统计某个维度"。我印象最深的一道题:给定一个 Nginx access log,统计每个 IP 的访问次数,并按从高到低排序输出。
一个标准答案:
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20这行命令看似简单,但如果只写这一句,分数只能拿一半。因为题目实际问的是"统计 Top 20 访问来源 IP",你需要补上几个关键点:$1是 access log 里默认的客户端 IP 字段;uniq -c做次数统计前必须先sort,否则相同的 IP 不连续时统计会出错;sort -rn是按数字逆序排序。如果你能再加一句"如果要统计 Top 20 的同时把 UA 信息也带上,可以用awk同时取 IP 和 UA 字段,存到数组里再排序",说明你真的处理过日志。
5.2 Python 脚本的笔试高频考法:文本处理和定时任务
脚本题的第二道往往是 Python,考察点集中在文本处理和系统交互。一道典型题目:读取一个 2GB 的日志文件,找出所有包含 "ERROR" 的行,统计每个错误码出现的次数,输出到新文件。
一个高效写法是:
from collections import Counter counter = Counter() with open('app.log', 'r') as f: for line in f: if 'ERROR' in line: # 假设错误码格式为 [ERROR-1234] try: code = line.split('[')[1].split(']')[0] counter[code] += 1 except IndexError: pass with open('error_summary.txt', 'w') as f: for code, cnt in counter.most_common(): f.write(f"{code} {cnt}\n")这道题的考点不在语法,而是以下几个方面:with open可以安全处理文件句柄;逐行读取for line in f避免一次性将 2GB 文件读入内存;用Counter做统计比手动字典更简洁。如果你只写一个readlines()再循环,虽然逻辑对,但在大文件场景下就是明显缺陷,阅卷人会看出来你没处理过真实大数据量日志。
5.3 背命令不如背模式:脚本题的通用解法框架
我整理脚本题时发现一个规律:无论题目怎么变,核心解法就那么几类。日志处理类基本是"取字段 + 聚合统计 + 排序输出",这个模式下 awk 和 Python 的 pandas 是两把利器;系统巡检类基本是"执行命令 + 解析输出 + 阈值判断 + 告警通知",这个模式下 subprocess 和 psutil 是常用的库;批量操作类基本是"遍历目标 + 并发执行 + 结果收集 + 错误重试",并行操作可以上xargs -P或者 Python 的ThreadPoolExecutor。
所以备考时不建议一道题一道题地背,而是把题目归到几个模式下,每个模式练熟一两个通用脚本,考场上的题基本就是在这些模式上套壳。这个思路不仅对笔试有用,对实际工作也有很大价值,运维的日常就是不断把重复的排查动作脚本化。
6. 场景设计题:如何用运维思维答开放题
6.1 从单机到集群:容量规划与故障预案怎么写
场景题是整份笔试卷里最拉开差距的部分。有道卷子的场景题大致是:一个业务模块从单机部署要扩展到集群,你会怎么设计部署架构和高可用方案?这种题没有唯一答案,考官看的是你的思考维度是否全面。
一个能拿分的回答框架是分四层展开。接入层:Nginx 做同时负载均衡,配置健康检查,后端服务挂掉后自动摘除节点。应用层:服务至少部署两个节点,通过 systemd 或者 Supervisor 守护进程,配置自动重启策略。数据层:数据库做主从复制,主库故障时手动或半自动切换到从库;Redis 做主从或哨兵模式,保证缓存高可用。监控层:节点存活、CPU/内存/磁盘、接口时延和错误率全部接入监控,设定阈值后触发告警。
6.2 故障排查题的答题框架:按链路一步步拆
另一类常见开放题是给你一个故障现象,让你写排查思路。比如:"线上服务突然大量 502,你怎么处理?"很多人的答案要么特别空泛("先看日志"),要么特别混乱。一个可靠的答题框架是:先缩小范围,再定位原因。
第一步,通过监控大屏确认故障范围——是所有节点都挂了,还是某个节点异常?是某条链路超时,还是整体不可用?第二步,按请求链路逐层排查:客户端→DNS→接入层→应用层→数据层。接入层查 Nginx 的 error.log 和 access.log 的 status 分布;应用层查应用日志的异常堆栈和其依赖的中间件连接池状态;数据层查数据库/Redis 的 QPS 和慢查询,确认是否有连接数被打满。第三步,给出止血措施:最坏情况下先把故障节点摘除、回滚最近上线的变更,保障核心链路恢复,再慢慢定位根因。
6.3 开放题的踩分点:少写"我认为",多写"我会这样做"
场景题最忌讳的写法是"我觉得应该做好监控""我认为要关注稳定性"这类正确但没用的话。阅卷人想看的是具体的操作动词和明确的技术选型。同样表达"做好监控",高分的写法是"部署 Prometheus + Grafana 做指标采集和可视化,对 node_exporter 采集的系统指标和业务接口的响应时间、错误率都配置告警规则,通过 Alertmanager 推送到飞书/钉钉群,值班人员在 5 分钟内响应"。
另外一个容易被忽略的踩分点是故障预案。很多人在场景题里只写了"发生故障后怎么排查",但没写"怎么避免故障发生"。如果你能补充发布流程的灰度发布、配置变更前的备份和回滚方案、定期做故障演练(比如混沌工程里的随机杀节点),这些都是踩分点,说明你有全局运维意识,而不只是一个会敲命令的操作工。
7. 从笔试到面试的备考复盘:如何把一套卷子吃透
7.1 通过笔试暴露的问题反向定位薄弱项
笔试结束后不要对完答案就扔。把错题按模块归类,你会很清楚地看到自己的薄弱环节在哪里。我当时的情况是:Linux 命令和数据库题做得不错,但网络部分的 TCP 状态、Nginx 场景题扣分严重,说明我对"网络协议怎么落到实际运维场景"这一层理解不够深。针对性补了半个月的 Nginx 配置和 tcpdump 抓包分析,后面面试聊起类似问题时状态完全不一样。
建议你也做一张表,列出每个模块的得分率,得分率低于 60% 的模块优先补。把每道错题都改写成"知识点 + 实际场景 + 排查命令"的格式,背后是"错题→查漏→重练"的循环。这个循环不只为笔试,校招后续的面试环节大概率也是同一个知识体系的延展。
7.2 时间分配与刷题建议
如果你现在离笔试还有两到三周,建议按"50% 基础巩固 + 30% 场景练习 + 20% 模拟笔试"来分配。基础巩固阶段把 Linux 核心命令、TCP/IP 状态流转、MySQL/Redis 核心机制过一遍,达到能写出来而不是只能认出来的水平;场景练习阶段重点做故障排查题和脚本题,练完一定要动手敲,加深记忆;最后找两三套别的公司的运维真题做模拟,严格限时,提前适应考试节奏。
笔试过程中的时间分配也有技巧。试卷发下来先快速浏览全卷,把送分题先做掉,给后面的场景题留足时间。遇到卡壳的题先跳过,不要在一道题上耗太久。记住一个原则:运维笔试题大部分不需要你写出业内最优解,而是要你展示出清晰的思路和完整的操作闭环。写满、写完整,比写一个完美但残缺的答案得分更高。
7.3 从笔试卷看运维岗位的真实工作内容
最后说点实际感受。这份 2018 年的笔试卷看上去已经是六七年前的东西了,但当年它考的那些能力——Linux 熟练度、网络排查功底、数据库和缓存的基本素养、脚本自动化能力、场景化思维——到今天依然是运维工程师的立身之本。变化的是工具链:容器化从 Docker 演进到 Kubernetes 生态,监控从 Zabbix 演进到 Prometheus + 可观测性体系,脚本从 Shell 逐步扩展为 Python/Go 工具。但底层那套"定位问题 → 分析原因 → 实施修复 → 复盘沉淀"的思维模式,从来都没有变过。
我在实际招聘中看过很多简历,发现一个共性:能写好场景题、能给出具体排查路径的候选人,入职后上手速度明显更快。因为他们不是背了一堆命令,而是真的理解了一个 Web 服务从请求到响应的完整链路。这也是我在带新人时最看重的一点——笔试的成绩只是入场券,持续的好奇心和动手能力才是运维这条路能走多远的关键。所以刷完这套笔试卷,别急着丢掉,它会是你从校招走向一线运维的第一份实战地图。