公司动态
网易运维工程师笔试题解析:从Linux到故障排查的核心考点
2018年那会儿校招笔试还普遍是线下纸笔作答网易的运维工程师BJ岗位笔试卷是不少想进互联网大厂的运维新人绕不开的一道坎。现在回过头看这份卷子考点其实很有代表性Linux基础、网络协议、脚本能力、故障排查思路基本就是一线运维日常工作的缩影。这篇文章就结合当年这卷子把核心考点、解题思路和背后考察的运维思维完整拆一遍给准备走运维方向的朋友当个参考。1. 笔试卷整体结构与考点分布1.1 试卷题型与考察逻辑网易2018校园招聘运维工程师BJ笔试卷整体题型分几块单选题、多选题、填空题、简答题外加两道综合题。从题型设置能明显看出网易要的不是只会背命令的人而是真正理解系统运行原理、能独立分析问题的人。单从记忆来还原试卷大致结构如下单选题约15-20题覆盖Linux基础命令、文件权限、进程管理、网络基础等。多选题约5-8题偏向TCP/IP协议细节、HTTP状态码、DNS解析流程等容易混淆的知识点。填空题约5题常见于命令参数补全、配置文件路径、系统目录结构等。简答题约4-6题涉及系统启动流程、故障排查思路、负载均衡原理等。综合题约2题通常是给出一个故障场景要求描述排查过程或给出一个架构需求要求设计运维方案。这个结构背后反映的考察逻辑很清晰选择题和填空题看基础扎不扎实简答题看思路清不清晰综合题看能不能把知识串联起来解决实际问题。很多人在准备时只刷选择题结果到了简答题和综合题直接懵这是很吃亏的。1.2 校招运维笔试的定位与难度校招笔试和社招面试不一样它本质上是一次大规模筛选。网易这类公司收到的简历量很大笔试是第一道关卡所以题目设计上不会刻意刁难但覆盖面很广。难度梯度大致是这样基础题占60%左右进阶题占30%左右拔高题占10%左右。基础题考察的是“你知不知道”进阶题考察的是“你会不会用”拔高题考察的是“你能不能想明白”。举个例子基础题可能问ls -l输出中第一列每个字符的含义进阶题可能问如何找出占用CPU最高的进程并定位到具体线程拔高题可能问Linux系统从按下电源键到Shell提示符出现中间发生了什么。我当时做这套卷子的感受是时间看起来充裕但简答题和综合题特别耗时间。一是要组织语言二是要写清楚步骤不能只写几个关键词。如果前面选择题纠结太久后面大题就容易写不完。2. 高频考点详解Linux系统基础2.1 文件权限与目录结构的深挖Linux文件权限几乎是必考内容网易的卷子里也不例外。考察点不只是chmod 755这种简单用法更爱考的是权限位的二进制计算、umask对新建文件默认权限的影响、特殊权限位SetUID/SetGID/Sticky Bit的作用。先说基础计算。chmod 750等于rwxr-x---这个换算要熟练。但更值得留意的是umask新建文件默认权限是666减去umask值新建目录是777减去umask值。如果umask是022新建文件就是644新建目录就是755。这个原理在面试里容易被追问笔试填空题也常出。特殊权限位是很多人容易忽略的点。SetUID位的作用是让普通用户执行某个程序时临时拥有文件属主的权限典型例子是/usr/bin/passwd。SetGID位在目录上的作用是让新建文件的属组自动继承目录的属组。Sticky Bit位在/tmp目录上作用是限制只有文件属主才能删除自己的文件。笔试多选题喜欢把这些混在一起考记忆方法是SetUID用4表示SetGID用2表示Sticky Bit用1表示加在权限位最前面。2.2 进程管理与系统性能分析进程管理这块考察的重点是ps、top、free、iostat、sar这些命令的输出解读。单纯背命令参数是不够的笔试题目往往会给你一段top输出让你判断哪个进程占用了大量内存或者根据load average的三个数值判断系统负载趋势。load average这个知识点堪称经典考点。三个数值分别代表1分钟、5分钟、15分钟的平均负载但它不等于CPU使用率。我见过不少人在笔记里写“load average超过CPU核心数就说明过载”严格来说不算全错但笔试里如果考概念辨析正确的说法是负载是处于运行状态和不可中断状态的进程平均数。如果1分钟数值远大于15分钟数值说明负载在上升需要关注反过来说明负载在下降。性能分析方面网易笔试出现过这样的场景题用户反馈网站访问变慢CPU使用率正常但内存占用很高你如何排查。用free -m查看内存使用情况ps aux --sort-%mem按内存降序找进程再用top观察是否有swap交换发生。这里有个关键点Linux的内存管理机制里空闲内存往往被用作缓存所以free输出中的buff/cache不一定是问题真正要警惕的是swap频繁使用。这个排查思路比单独背命令重要得多。3. 网络基础与常见服务考点解析3.1 TCP/IP协议栈的必背要点网络部分在笔试中的占比相当高网易的卷子尤其重视TCP协议细节。三报文握手、四次挥手是必考但考察角度往往比教科书更贴近实践。先说握手。SYN、SYNACK、ACK三步每一步的序列号变化要注意。这里有个笔试常考的变体如果服务器收到一个并非预期状态的SYN包会回复什么答案是RST。这个点在排障中很实用比如用tcpdump抓包时看到大量RST包说明对端主动拒绝了连接。四次挥手也常考但网易更爱问的是TIME_WAIT状态。为什么主动关闭方要停留在TIME_WAIT状态2MSL原因有两个一是确保最后的ACK能到达对端如果丢失可以重发二是让旧连接的延迟报文在网络中自然消失避免干扰新连接。笔试卷上如果问“服务器出现大量TIME_WAIT连接如何优化”思路是开启net.ipv4.tcp_tw_reuse和net.ipv4.tcp_tw_recycle。不过这里面有个坑tcp_tw_recycle在NAT环境下会导致连接异常现在的新版本内核已经删除了这个参数写答案时需要说明这个背景。3.2 HTTP与DNS的实践性考察HTTP状态码在笔试题里出现频率也很高而且网易喜欢结合场景考。502 Bad Gateway、504 Gateway Timeout、503 Service Unavailable这三个状态码的含义经常被混在一起出多选题。502说明网关或代理服务器收到了上游无效响应504说明网关等待上游响应超时503说明服务暂时不可用。对应到排查方向502重点检查后端服务是否存活、端口是否监听504重点检查后端处理耗时和超时配置503重点检查服务是否在维护、负载是否过高。DNS解析流程也是高频考点。完整的递归查询过程浏览器缓存、系统hosts文件、本地DNS缓存、本地DNS服务器迭代查询根域名服务器、顶级域名服务器、权威域名服务器。填空题喜欢考/etc/resolv.conf配置文件的位置dig和nslookup命令的差异以及/etc/hosts和DNS的优先级关系。这里分享一个实用技巧dig命令的trace参数可以完整显示解析路径非常适合笔试时辅助理解递归和迭代的区别。dig 8.8.8.8 example.com是指定DNS服务器查询dig -x IP是反向解析。这些命令如果笔试时一时想不起来用man dig现查也是可以的但平时用熟了考试自然写得快。4. 脚本能力与自动化考察4.1 Shell脚本的常考题型与解题套路网易运维笔试对Shell脚本的考察不是让写一个几百行的完整脚本而是通过小题目考察对常用命令和正则表达式的掌握程度。典型的题目包括统计日志文件中某个IP出现的次数、找出指定目录下大于100MB的文件并删除、批量重命名文件、从日志中提取特定字段。统计IP出现次数最经典的解法是awk {print $1} access.log | sort | uniq -c | sort -rn。这里考察的点很清晰awk提取字段、sort排序、uniq -c去重计数、再按次数降序。每一步的作用都要能解释清楚因为笔试简答题会要求写出命令并说明思路。批量重命名常见的是把所有.txt文件改成.log后缀for i in *.txt; do mv $i ${i%.txt}.log; done。这个题目考察的是Shell的变量替换${i%.txt}表示从尾部删除.txt后缀。还有一个变体是批量给文件加前缀比如给所有log文件加上日期前缀for i in *.log; do mv $i $(date %Y%m%d)_$i; done。4.2 文本处理三剑客的运用grep、sed、awk这三个命令被业内称为文本处理三剑客笔试题基本不会绕过它们。考察的层次从基础到进阶大致是这样grep按正则匹配文本行-v取反、-c计数、-E扩展正则。考察最多的是配合管道过滤命令输出。sed流编辑器s替换、d删除、p打印-i直接修改文件。笔试常考给定文本和sed命令要求写出输出结果。awk按列处理文本$0整行、$1第一列-F指定分隔符BEGIN和END块的作用。我见过网易的一道填空题是这样有日志文件内容为127.0.0.1 - - [10/Oct/2018:13:55:36] GET /index.php HTTP/1.1 200 2326要求提取状态码命令是awk {print $9}。如果分隔符变化或者包含空格就需要用-F参数或者用sed先处理。掌握这三剑客的关键在于多用笔试前拿一份真实日志做一轮提取练习效果远比背参数好。5. 故障排查与综合场景题5.1 经典场景线上服务器CPU飙高怎么办综合题部分是网易这份卷子区分度最高的环节。CPU飙高是最经典的场景题目往往这样问用户反馈系统响应很慢你登录服务器发现CPU使用率接近100%请描述你的排查过程。标准排查链路大致是这样用top确认CPU使用率找到占用率最高的进程PID。注意看us用户态和sy内核态的占比如果sy高说明系统调用频繁可能是网络或磁盘问题。top -Hp PID查看该进程下所有线程的CPU占用找到占用率高的线程TID。将TID转换成十六进制printf %x\n TID。用jstack PID导出Java线程栈针对Java应用搜索十六进制线程号定位到具体代码行。这套流程对于Java应用特别有效。笔试答题时把步骤写清楚每一步说明目的比直接写kill -9要专业得多。当然如果是Java进程也可以用jstat -gcutil PID看GC情况Full GC频繁也会导致CPU飙升。还有个容易忽略的方向如果CPU不高但系统很慢大概率是I/O Wait过高排查思路完全不一样。需要看top输出里的wa列再配合iostat -x 1看磁盘的%util和await。这道题在笔试里可能以多选题形式出现选项里混入与CPU排查无关的操作目的就是考察你是否能判断什么时候用什么工具。5.2 场景题网站访问异常的排查思路另一个常见综合题是网站从某个时间点开始大量出现502错误可能是什么原因如何一步步排查。这个问题的分析框架可以分三层第一层确认现象范围。是所有用户都502还是部分用户是所有接口都502还是个别接口这个信息决定了排查方向。如果是部分用户先考虑网络链路和防火墙屏蔽如果是特定接口直接查后端服务日志。第二层检查服务状态。登录服务器看Nginx和后端进程是否存活端口是否在监听ss -lntp或netstat -lntp。检查后端健康检查接口是否能正常返回手动curl一下看是否报错。第三层检查负载和依赖。如果进程都在看CPU、内存、磁盘是否异常。还需要检查后端依赖的数据库或缓存服务是否正常比如MySQL连接数打满或者Redis不可用都可能导致接口报错。回答这类题目最忌讳的是从头到尾只写一种可能。正确的答题姿势是先列出可能的故障原因清单再按从易到难、从外围到核心的顺序逐一排查。这个思路本身就是运维工程师的核心能力。6. 从笔试卷反推运维工程师技能地图6.1 笔试题背后的真实工作场景映射做完整份卷子你会发现这些题目并不是出题老师凭空想出来的每一类题都能在真实运维工作中找到对应场景。文件权限考点对应的是日常账号权限管理和应用目录隔离。为什么大厂的服务器上不允许随便把目录权限设为777因为多租户环境下权限失控意味着安全隐患。进程管理考点对应的是线上故障排查load average、内存分析是每天都要看的指标。TCP状态考点对应的是连接数优化和网络问题定位TIME_WAIT、CLOSE_WAIT是排查网络故障时绕不开的状态。脚本能力考点对应的是运维自动化。一个只会手动敲命令的运维和一个会写脚本的运维工作效率差距是数量级的。笔试里考文本处理实际上考察的是批量处理日志、自动化巡检、数据统计这些日常工作能力。综合场景题则直接对应值班时的应急响应这个能力需要长期积累。6.2 校招同学如何系统性准备运维笔试针对这类校招笔试备考策略可以分三个阶段第一阶段打基础。Linux基础命令、文件权限、网络协议、系统管理等用《鸟哥的Linux私房菜》加上实际练习把每个命令都敲一遍。网络基础可以看《TCP/IP详解卷一》的前几章重点掌握TCP状态和HTTP协议。第二阶段刷题加复盘。找历年的校招笔试题来做但重点不是对答案而是分析每道题考察的知识点把相关知识点串成知识树。比如遇到一道TIME_WAIT的题就要顺带复习TCP四次挥手、keepalive参数、Nginx配置中的keepalive_timeout、系统内核参数优化把这些内容连成一张网。第三阶段模拟实战。自己搭一个简单的Web服务模拟故障场景来排查。比如故意把磁盘空间占满、故意改错Nginx配置、模拟数据库连接数满然后限时排查。这种训练比刷一百道题都有效因为考试时能写出来的一定是亲手做过的。7. 常见失分点与实战避坑经验7.1 笔试中的经典丢分原因分析从我自己阅卷复盘和身边同学的经验来看校招笔试卷失分的原因集中在几个方面值得单独说一说。第一个失分点是选择题的过度推导。有些选择题的干扰项设计得很巧妙看起来有道理但不符合题目限定条件。比如问“下列哪个命令可以查看文件内容”cat、less、more、tail都能查看但如果题目限定“分页显示”答案就只能是less和more。审题时把限定条件圈出来再做题能有效减少这类错误。第二个失分点是简答题写得过于简单。不少同学觉得答到点子上就行写两三行就算完成。实际上简答题的评分标准往往包含“步骤完整”和“解释清楚”两个维度。比如问如何排查端口被占用的问题只写netstat -lntp | grep 8080是不够的还应说明如何确认进程归属、如何判断是否可以安全停止该进程以及后续如何避免端口冲突。答题时把每一步意图写明白分数会高很多。第三个失分点是综合题没有结构。没有结构的答案容易遗漏关键环节。推荐用“观察现象—定位范围—逐层排查—根因分析—解决方案—预防措施”这个框架来组织答案既清晰又完整。7.2 实操心得与避坑提示根据我自己做这套卷子的经验以及后来参与校招交流时听到的反馈最后再分享几个实在的避坑心得。笔试过程中时间分配很关键。我的建议是选择题和填空题控制在总时间的三分之一以内简答题用三分之一综合题用三分之一。如果选择题卡住了先标记好跳过不要因小失大。综合题宁可写框架也不留空即使不能完全解决也要把已知的思路和分析写上去能拿一分是一分。考场上出现不确定的命令参数时可以换个思路表达。比如想不起来awk的-F参数怎么拼写那就用awk {print $1}加默认分隔符的思路答题同时说明如果需要指定分隔符可以用-F。关键是把能力和解决问题的思路展示出来阅卷人一眼就能看出你是会还是不会。考后复盘比考前刷题更重要。每做完一套卷子把错题对应的知识点系统复习一遍再找相关的场景题练手。运维这个岗位本质上是一个持续积累的岗位笔试只是一个起点。这套2018年的笔试卷放在今天来看虽然技术栈有些变化容器化和云原生相关内容更多了但底层的排查思路、系统原理和脚本能力依然是这个岗位的核心竞争力。把基础打扎实以不变应万变才是通过笔试、胜任工作的真正秘诀。