2023秋招58运维笔试复盘:题型考点与避坑指南
2023年秋招那阵子运维岗的讨论度其实挺高的网上一边有人说“运维已经无岗了”一边企业笔试筛人筛得比往年更狠。58集团运维岗的笔试也是这一波里比较有代表性的考的不是偏题怪题而是实打实的基础功和场景判断。这篇文章我就以2023年秋招为背景把这套笔试的题型分布、核心考点、我当时怎么答的、后来复盘发现的坑一次性拆开讲清楚想冲互联网大厂运维岗的同学可以重点参考。1. 先说结论这场笔试到底在考什么1.1 题型分布和考察重点运维岗笔试和开发岗笔试有个明显区别开发岗往往一上来就是算法题运维岗更看重你对系统、网络、脚本、服务的理解是否成体系。58集团这场运维笔试整体时长大约90分钟题量不小题型大概可以分这么几类题型占比考察核心建议用时单选题20%Linux基础、网络协议、数据库常识15分钟多选题10%命令参数、服务特性、概念辨析10分钟填空题10%关键命令输出、端口号、默认配置10分钟简答题25%排查思路、命令组合、原理说明25分钟场景/设计题20%故障应急、架构理解、发布方案20分钟编程/脚本题15%Shell/Python基础、文本处理10分钟注意这个比例不是死板的每年会有浮动但整体趋势不会变基础题占大头场景题拉开差距脚本题属于“能做就赚到”的部分。我当时拿到卷子第一感受是题目没有超出《Linux就该这么学》和常见运维面试题的范围但它不直接问你“top命令怎么看CPU”而是给你一段top输出截图让你判断哪个进程出了问题、下一步该用什么命令定位。这种考法比单纯背命令要难一截因为需要你真的用过、真的见过异常时输出长什么样。1.2 从岗位倒推考点运维工程师的能力模型58这种体量的公司业务规模大线上机器多运维团队的核心任务就是三件事稳定性保障、效率工具建设、成本与容量管理。笔试题目设计其实都是围绕这三件事来的。稳定性保障考Linux排查、网络排障、服务集群高可用方案本质是看你能不能扛住线上故障。效率工具建设考Shell、Python、CI/CD、监控告警本质是看你会不会把重复劳动自动化。成本与容量管理考资源评估、限流降级、容量规划思路本质是看你对业务和技术结合有没有感觉。所以备考时别只刷“面试题”而是按能力模型去理解每一个考点背后的业务场景。比如考DNS解析流程不只是让你背递归和迭代的概念而是因为线上真有“域名解析慢、解析到了错误IP”这类故障你懂了原理才能快速定位。2. Linux基础笔试里的“送分题”和“送命题”2.1 高频命令与常用参数别只会背答案Linux命令这块笔试不会让你默写man手册它更多是给你一个实际场景让你输出合适的命令。我整理了2023年这轮笔试里出现频次最高的命令基本可以覆盖80%的Linux题目进程与资源top、ps、free、df、iostat、pidstat网络排查ping、telnet、curl、netstat/ss、traceroute、tcpdump文本处理grep、awk、sed、sort、uniq、wc文件操作find、tar、rsync、scp、chmod、chown、ln系统信息uname、uptime、dmesg、sysctl、systemctl举一个典型的单选题思路题目说“发现服务器负载很高load average达到20但CPU使用率不高应该怎么排查”。很多人第一反应就是看CPU但load高CPU低往往是IO等待或进程阻塞造成的。正确思路是先看top的wa列再用iostat -x 1看磁盘的%util和await确认是不是磁盘IO瓶颈而不是一头扎进CPU分析里。再比如ss -lntp和netstat -lntp的区别笔试出现了不止一次。netstat是老牌工具但ss通过内核socket信息直接读取速度更快在连接数多的情况下不会卡顿。很多线上服务器已经默认没有netstat了所以新环境下优先掌握ss是更符合实际的选择。2.2 权限、进程和系统排查题权限这道题校招笔试特别喜欢出。最常见的是给你一串-rw-r--r--问数字权限是多少或者反过来问你chmod 754是什么含义。这里有一个必背的对应关系r4、w2、x1754就是owner可读可写可执行group可读可执行others只读。但光会换算数字还不够笔试还爱考umask和特殊权限。比如创建一个新文件默认权限是644、新目录默认权限是755这是由umask 022决定的。如果umask改成027那新文件的权限就变成了640。这些细节如果只是死记硬背换个问法就容易翻车。进程这块除了背ps -ef和ps aux的列含义更要注意僵尸进程和孤儿进程的区别。笔试里有一道简答题问“线上发现大量僵尸进程如何定位和清理”我的答案思路是三步走先用ps -ef | grep defunct或者ps -eo stat,ppid,pid,cmd | grep -w Z找到僵尸进程的PPID再找到对应的父进程判断父进程是否正常。如果是父进程没有正确调用wait()回收子进程那可能需要重启父进程或升级业务代码如果父进程本身是init/systemd则要查一下是否有异常的失控子进程。这道题考察的不是你会不会敲命令而是你对进程生命周期有没有完整的理解。2.3 我踩过的坑命令输出解读不到位笔试之后我复盘发现最亏的不是不会做而是“看着眼熟但答错了方向”。这类坑集中在命令输出解读上。比如free -h的输出swap那行显示全是0有人就觉得没问题。但实际上很多服务器根本没配swap这本身就是一个隐患。题目如果问“free命令中available和free的区别”你得知道available才是更接近“实际可用内存”的指标它包含了可回收的page cache而free只是完全空闲的物理内存。再比如df -h和du -sh统计出来的磁盘占用不一致。笔试考过为什么实际原因是文件被进程删除后fd仍然被持有空间不会立即释放df看到的是文件系统级别的使用量du统计的是目录遍历出来的文件大小总和。线上排查“磁盘满了但du找不到大文件”的时候标准做法就是用lsof | grep deleted找已经被删除但仍被占用的文件句柄。这类知识靠面试题清单很难覆盖全我的建议是备考期间找一台测试机故意制造“异常”——比如写个死循环占满CPU、用dd生成大文件塞满磁盘、kill掉父进程制造孤儿进程再用命令去排查一遍。自己动手踩过坑比背一百道题都管用。3. 网络与系统服务运维的“内功”3.1 TCP/IP与DNS这些知识不是背出来的网络这块是运维笔试的重头戏也是拉开分差的地方。TCP三次握手、四次挥手这种基础题基本是必考但58的笔试更进了一步喜欢结合异常场景考。有一个多选题我记得很清楚“以下哪些情况可能导致TCP连接建立失败”选项包括服务器listen队列溢出、防火墙丢弃SYN包、客户端和服务端MTU不一致、服务端进程没有监听端口。前三个都是对的第四个严格来说不会导致连接建立失败而是会直接返回RST。这道题如果你只背了三次握手的状态迁移没有真正抓包看过SYN重传和RST的差异很容易漏选。DNS也考了但不是问“DNS用哪个端口”而是给了一个场景“用户反馈域名解析偶尔超时业务侧排查发现是DNS服务器响应慢问怎么优化。”我的回答从三个层面展开客户端层面配置多个DNS server并设置超时重试服务端层面检查上游递归超时、增加缓存命中率使用dig和delv做诊断架构层面如果是自建DNS考虑引入dnsmasq做前置缓存或部署view视图做智能解析。HTTP状态码这块503和502的区别几乎是互联网公司笔试的送分题但容易混。502 Bad Gateway是网关从上游收到了无效响应503 Service Unavailable是服务本身过载或维护中504 Gateway Timeout是上游没在规定时间内返回。如果题目再延伸一句“Nginx返回502可能是哪些原因”你就得答出后端PHP-FPM进程挂掉、FastCGI超时配置过短、后端端口不通、代理buffer设置太小等。这些都是运维日常工作里真正会碰到的。3.2 常见服务与中间件Nginx、MySQL、Redis再来说服务和中间件。58这类公司内部业务系统基本绕不开Nginx、MySQL、Redis这老三样笔试也在这上面花了不少篇幅。Nginx的考点集中在反向代理、负载均衡和静态资源处理。负载均衡策略常考的是轮询、加权轮询、ip_hash、least_conn这四种你得能说清楚每个的适用场景。比如ip_hash适合有状态服务比如需要session保持的老系统但它的问题在于某个IP流量特别大时会产生倾斜least_conn则更适合请求处理时间不等的场景按当前活跃连接数分发避免把请求都压到慢节点上。MySQL的题目更多是偏理论比如索引失效的几种情况、事务隔离级别、主从延迟的原因。最经典的是“最左前缀原则”和“为什么like %xx%通常不走索引”。笔试里如果不是要求手写SQL基本都是在考察你有没有踩过慢查询的坑。主从延迟的原因我也答了一道简答题归纳了四个方向大事务导致binlog应用慢、从库硬件性能差、主库并发写入太高、从库上做了备份或复杂查询占用IO。每个原因都要能接一句对应的优化手段。Redis那边重点考察过期策略和数据淘汰机制。有个容易混淆的点Redis默认是惰性删除加定期删除不是主动把所有过期key都删掉内存淘汰则是8种策略从noeviction到allkeys-lru要能说清楚区别。笔试问过“Redis内存满了会怎样”如果你答“直接OOM”那就错了答案是看maxmemory-policy配置默认noeviction模式下写命令会返回错误但读命令正常。这种细节直接决定你能不能拿分。3.3 网络排障的通用思路除了单个协议和中间件笔试还喜欢考“综合排障思路”给你一个现象让你从端到端把链路过一遍。这种题没有标准答案但考察你有没有清晰的排查框架。我的套路是物理链路/网络层 - DNS解析 - TCP连接 - HTTP请求/业务逻辑 - 后端服务/数据库。举个例子用户反馈网站打不开我先ping看通不通不通就查链路、防火墙、路由通了就dig看域名解析对不对解析对了就curl -v看HTTP响应状态码如果状态码是200但页面内容不对就去查业务日志和后端服务健康状况。这种“分层排查”的思路笔试不但会直接考还会在场景设计题里埋雷。比如那道“从零搭建一个系统并做好后续维护”的题本质就是考察你有没有一个完整的运维视角而不是只会装个Nginx就完事。我在回答里写了七层基础设施规划、操作系统初始化、应用部署、接入层配置、监控告警、备份容灾、安全加固。每一层都要有具体的工具和动作不能只给概念。4. 脚本与编程能力笔试里写代码是怎么考的4.1 Shell脚本题解析日志和批量处理运维笔试里的Shell题难度不会太高但很实用。核心就两类一类是日志分析一类是批量操作。日志分析类最经典的就是“统计Nginx访问日志中访问次数最多的10个IP”。我当时用的答案是这样的awk {print $1} access.log | sort | uniq -c | sort -rn | head -10这道题虽然简单但有几个Trickawk {print $1}是取IP列Nginx默认log format里IP正好是第一列sort是为了让uniq能正确去重uniq -c会统计出现次数但输出格式是“次数内容”所以后面需要sort -rn按数字倒序排最后head -10取前10。如果题目再加一个条件比如“只统计某个时间段内的日志”就需要用到grep先过滤或者用awk的$4时间字段做范围判断。要特别注意时间格式Nginx日志里时间字段一般是[03/Dec/2023:12:00:00 0800]如果笔试要求统计“2023年12月3日12点到13点”的日志就不能简单grep一个整数字符串建议用awk做子串截取再比较。批量操作类常见的场景是“批量修改100台服务器的某个配置并重启服务”。我的答案是写一个for循环用ssh远程执行命令但要注意几个点一是在脚本开头set -e让出错时停下来二是要能区分哪些机器成功、哪些失败三是重启服务前先检查配置语法比如Nginx要nginx -t通过后再reload避免配置错误导致大面积服务不可用。这些细节体现的不是你多会写代码而是你有没有线上操作的安全意识笔试和面试都吃这一套。4.2 Python/Go笔试常见题型随着运维开发化、平台化越来越明显Python已经成为运维的必备语言。58集团内部的运维平台、自动化脚本、监控系统Python占了相当大的比重所以笔试里Python题也在逐年增加。Python的考察重点不是算法而是文本处理和系统操作。文本处理最常见的是“读取一个结构化日志文件按字段统计”。比如import re from collections import Counter pattern r(\d\.\d\.\d\.\d) ip_counter Counter() with open(access.log, r) as f: for line in f: match re.search(pattern, line) if match: ip_counter[match.group(1)] 1 for ip, count in ip_counter.most_common(10): print(f{count}\t{ip})这段代码考察的知识点有正则提取、Counter的most_common用法、with语句管理文件句柄。笔试时我还在正则那行专门做了注释顺便写出了如果日志字段是更严格的格式比如前面没有空格可以用更精确的正则或split()来做。写代码题的时候注释是一个加分项能帮助阅卷人理解你的思路。还有一类是运维平台常考的场景写一个Python函数检查一个端口是否被占用、检查某个进程的CPU和内存使用率超过阈值就告警。这需要用到psutil库或者解析/proc文件系统。如果笔试环境没有psutil就直接解析/proc/stat或调用ps命令。能写出“自包含、不依赖第三方库”的版本通常更稳妥因为判题环境不一定装了你想要的库。4.3 我的一点看法编程题不求惊艳求能跑笔试阶段写脚本我的原则是宁可朴素不能有bug。有些同学喜欢炫技用一行巨长的命令或者写一个高深的生成器表达式但笔试阅卷通常不是跑测试用例而是人眼评分所以代码的可读性和健壮性比优雅重要得多。我当时的做法是把Shell脚本和Python脚本都按“可上生产”的标准来写变量显式声明、出错有退出、日志有输出。比如一个批量处理的Shell脚本我开头会写#!/bin/bash set -euo pipefail这三行参数非常关键-e遇到错误即退出-u变量未定义就报错-o pipefail管道中任一条命令失败都会让整个管道失败。这三个参数能规避掉运维脚本里最经典的“往下跑了一堆任务才发现前面已经出错”的问题。笔试时写出这几行专业感一下就出来了。5. 云计算与容器化校招笔试里的“新考纲”5.1 Docker和Kubernetes的核心概念现在做运维不懂容器化基本等于缺失了一半技能。58的笔试和整个行业的趋势一致Docker和Kubernetes是必考模块。Docker的题目相对基础重点在镜像和容器生命周期。比如“Docker镜像的分层存储原理”就问过答案是镜像由只读层叠加而成容器运行时在上面加一个可写层写入时执行Copy-on-Write。这个原理解释了为什么多个容器共享同一个镜像时磁盘占用并不会成倍增加。另一个高频考点是“Dockerfile里CMD和ENTRYPOINT的区别”一个容易被覆盖一个不容易组合使用才是标准做法。Kubernetes的题目就要深一些了。58那场笔试考了“Pod的生命周期状态有哪些”包括Pending、Running、Succeeded、Failed、Unknown以及CrashLoopBackOff这种非官方但常见的状态。更进阶一点的是问“Kubernetes是如何调用containerd的”这个题目其实是考察你对Kubelet、CRI、containerd、runc这条调用链的理解Kubelet通过CRI接口调用containerdcontainerd再通过runc创建和运行容器。如果你知道containerd还负责镜像管理、存储和网络插件配置那这道题基本能拿满分。我还遇到一道场景题“一个Pod一直处于ContainerCreating状态排查思路是什么”我的回答分四步先看kubectl describe pod是否有事件报错镜像拉取失败、Volume挂载失败、资源不足再kubectl get events --sort-by.lastTimestamp看集群级事件然后检查节点存储和网络插件状态最后看是否因为调度失败或端口冲突。这道题不只是考命令而是考察你在云原生环境里的排查逻辑是否成型。5.2 CI/CD与自动化运维的实践题如果说容器是底座那CI/CD就是把应用送到底座上的流水线。笔试对CI/CD的考察不一定让你手写Jenkinsfile但会给你一个发布场景让你说出流程设计和代码发布的安全控制点。那道“线上发布系统”的设计题我记得很清楚要求描述从代码提交到生产发布的全过程并且要考虑如何保证发布失败能快速回滚。我的回答拆成了四个阶段代码提交后触发构建、单元测试和镜像打包镜像推送到私有仓库后做环境部署部署时先发布到灰度分组通过健康检查接口和监控指标判定是否继续全量发布后保留上一版本镜像出现问题时一键回滚。发布期间关键动作是摘掉该节点流量、优雅下线、拉起新容器、注册回流量。这套流程现在很多公司都在用笔试提前把这个框架默写出来比现场临时想要稳得多。5.3 操作系统与国产化趋势简历里可以写但要懂2023年秋招还有一个背景值得提很多国企和事业单位已经开始把国产操作系统作为招聘加分项互联网大厂也在关注这块的适配。58这类公司内部业务系统中也有部分模块跑在统信UOS等国产化环境上所以笔试里偶尔会涉及一些桌面运维和国产系统工具的内容。比如“统一操作系统运维工具livecd”这个点如果你简历写了熟悉Linux结果连UOS的livecd启动流程和修复模式都不了解笔试简答题就容易失分。这类工具的核心作用是系统无法正常启动时用livecd进入救援模式修复引导、重置密码、备份数据。原理和CentOS的rescue模式差不多只是命令和包管理可能有差异。备考时不用专门买一台国产系统电脑在虚拟机里装一个统信UOS试用版把livecd启动、磁盘挂载、日志查看这几个场景过一遍简历上的“熟悉Linux”含金量会更高。6. 非技术题和场景题笔试里的隐藏分6.1 开放型场景题怎么答才得分开放型场景题是运维笔试里最有意思、也最拉分的一部分。它没有标准答案考察的是你的思考框架和表达能力。58那场笔试有一道题是“如果给你一批全新的服务器要求搭建一套生产环境系统你会怎么做”。我的答题思路是先问自己这套系统对外提供什么服务、预估流量多大、可用性要求几个9然后才开始设计。设计时按层级展开硬件与网络层服务器配置、机房和网络规划、VIP和DNS系统层操作系统版本选择、内核参数调优、基础组件装好应用层部署方式容器还是裸机、服务编排、配置管理接入层Nginx/负载均衡、证书、WAF数据层MySQL/Redis部署、主从或集群方案、备份策略可观测性监控、日志、链路追踪安全与容灾防火墙、密钥管理、跨机房容灾每一层不要只列名词要跟上“为什么这样选”和“遇到什么问题怎么处理”。比如内核参数调优我会举net.ipv4.tcp_tw_reuse和file-max这类参数的修改场景监控那一层我会说节点用node_exporter采集、业务指标通过接口暴露、告警走分级通知避免夜间被无关告警轰醒。阅卷人真正想看的是你有没有结构化的思维而不是记住了多少零散知识点。就算你的方案和他心里的预期不完全一致只要逻辑自洽、步骤完整分数都不会低。6.2 智力题与工作态度题这部分考题占比较小但每年都有主要是观察你遇到未知问题时的反应模式。智力题一般是经典题比如“有两根不均匀的香每根烧完需要一小时怎么用它们计时45分钟”。这种题考的其实是逻辑拆分答案是同时点燃第一根的两头和第二根的一头第一根烧完是30分钟此时再点燃第二根的另一头从此时到第二根烧完是15分钟加起来就是45分钟。工作态度题常见问法是“如果线上出现P0故障你的处理顺序是什么”。答题要点是先止损再定位最后复盘。不要一上来就翻日志找原因而是先把故障影响面控制住比如摘流量、降级、回滚。我见过有同学回答“先排查代码bug”这不是运维思维。运维的第一优先级永远是恢复服务而不是找到根因。这个顺序问题笔试和面试都会反复考一定要刻在脑子里。6.3 时间分配与应试策略我说一个自己实战出来的时间分配方案大家在参加类似笔试时可以套用前5分钟快速浏览全卷标记出“会做但要想一下”和“完全不会”的题前20分钟做选择题、填空题尽量一遍过不纠结中间40分钟做简答题和场景设计题重点保证逻辑完整、分点清晰最后20分钟写脚本/编程题先写思路注释再写代码骨架最后补细节最后5分钟检查命令有没有写错参数、IP和端口是否合理、有没有漏题笔试最怕的是在选择题上花太多时间导致后面的简答题来不及展开。选择题每题分值低错了也就一两分简答和场景题一道就占十几分一定要把主要精力放在大题上。我那次笔试大概按这个节奏来最后还剩5分钟检查了一遍Shell脚本的引号和管道符号。7. 笔试后的复盘与准备建议7.1 复盘方法把错题变成知识点清单笔试结束不等于事情结束及时复盘才是把经验转成能力的关键一步。我的复盘习惯是拿到题目回忆版后先不看答案自己重新做一遍再对照正确答案找出差距最后每个错题提炼成一个知识点写进自己的运维知识清单里。比如“TCP四次挥手TIME_WAIT过多”这道题如果答错了不要只记“出现大量TIME_WAIT可以调整tcp_tw_reuse和tcp_tw_recycle”还要把TIME_WAIT产生的原因、为什么主动关闭方才会有TIME_WAIT、调整内核参数的副作用NAT场景下可能出错都梳理一遍。这个过程很费时间但效果比单纯背题好得多。我身边能进大厂运维岗的同学基本都有这样一份错题复盘笔记。7.2 备考资料和练习路径关于备考资料我自己的组合是Linux命令和系统知识看《鸟哥的Linux私房菜》和《Linux就该这么学》重点放在权限、进程、文件系统、网络配置这几章网络基础看《TCP/IP详解 卷1》但不需要啃太深重点是三次握手、四次挥手、超时重传和DNS容器和K8s直接看官方文档的入门教程配合本地Docker和kind模拟出一个集群做实验。光看不练等于白搭笔试考的是手感和判断力。我推荐一个练习路径先用虚拟机搭两台CentOS或Ubuntu服务器自己手动部署一个NginxPHPMySQL的环境然后故意制造故障比如删掉php-fpm的sock文件、改错Nginx配置、用dd占满磁盘再按“从现象到定位再到修复”的流程走一遍。这套东西走完一遍笔试里80%的基础题你都不会慌。如果再能自己写一下监控脚本和日志分析脚本脚本题也稳了。7.3 最后说几句心态和长期积累运维笔试的准备拼的不是考前突击而是平时的积累深度。Linux命令、网络协议、服务架构这些知识早一天开始学考场上就多一分从容。哪怕你后来不走运维岗这套“拆解问题-定位问题-解决问题”的思路在整个技术生涯里都是通用的。我现在回过头看那场笔试最深的感受是它没有一道题是“无意义”的所有内容都能对应到实际运维工作里。考命令输出是希望你上线后能看懂监控考TCP状态是希望你能说清连接为什么异常考Shell脚本是希望你遇到重复劳动时能想到用工具解决。笔试不是终点它只是你开始像一个真正的运维工程师那样思考的第一步。希望这篇复盘能帮你少走一些弯路秋招顺利。