1. 笔试卷整体观察:先看清网易在考谁
先交代个背景,我是经历过那个年代校招的人。2018年前后正好是互联网运维岗位从“会装系统会重启”往“懂开发、懂架构、懂自动化”转型的节点。网易当年那套校招运维笔试卷,放在今天看依然有很强的代表性——它考的其实不是知识点的堆砌,而是一个人对“稳定”这两个字有没有本能的敏感。
整套试卷的题型大概分四块:单选题、多选题、简答题、编程题,有的场次还会加几道场景排查题。单选题倒不稀奇,稀奇的是它会把一些日常命令挖得很深,比如问你top命令里load average三个值分别代表什么,用netstat还是ss能更快拿到连接状态,ulimit -n修改的是哪个层面的限制。这些题目单独拎出来都不难,但组合在一起就能筛掉一大半“只背过面试题但没真上过机器”的人。
为什么网易要这么出?有个很现实的原因:校招进来的运维应届生,前半年基本都在填坑——服务器宕机了要能快速定位,日志刷爆了要能第一时间处理,线上出故障了要能从监控图里看出异常。笔试不考架构设计、不考K8s原理,是因为他们很清楚这些可以后面慢慢学,但基础是否扎实、排查思路是否清晰、遇到问题是否手忙脚乱,这三点很难在短期内速成。所以整张卷子表面在考知识点,实际在考三件事:基本功、工程习惯、逻辑链路。
如果你准备的是这类大厂的运维笔试,第一件事不是疯狂刷八股文,而是先弄清它在筛选什么样的候选人。我在后面几个章节里会按模块把这套试卷涉及的考点、解题思路和备考方法完整拆开讲,每一步都配上当年实际操作的复盘记录,希望能给你省掉一些摸索的时间。
2. 核心考点拆解:Linux、网络、数据库一个都不少
2.1 Linux基础:不只考命令,还考你对系统的理解
Linux基础题在这套试卷里占的比例最大,而且陷阱最多。比如有道题是问/proc目录的作用,很多人会答“存放进程信息”,这不能说错,但只拿一半分。完整的答案是:/proc是一个虚拟文件系统,内核运行时把进程、内存、设备、网络等运行时信息以文件和目录的形式暴露出来,cat /proc/cpuinfo能看CPU信息,cat /proc/meminfo能看内存详情,/proc/sys下的文件还能直接修改内核参数。这里考的是你有没有真正理解Linux“一切皆文件”这个设计哲学,而不只是背过几个目录。
还有一个高频考点是文件描述符和进程限制。题目会这样出:线上服务报too many open files错误,你会怎么排查?先后顺序是什么?标准做法是:先用ulimit -n看当前shell的进程级限制,再用cat /proc/{pid}/limits看具体进程的限制,最后用lsof -p {pid} | wc -l统计进程实际打开的文件句柄数。需要注意的是,ulimit -n修改的是当前shell及其子进程的限制,对已经运行的进程不生效,修改系统级配置要改/etc/security/limits.conf并重新登录。如果进程是systemd管理的,还得在service文件里配LimitNOFILE。这道题能完整答出来的候选人通常比较少,因为它层层递进,考的不只是命令,而是你对问题定位的完整链路。
系统启动流程也是常客。BIOS → 引导程序 → 内核 → init/systemd → 运行级别/目标单元 → shell或图形界面,这个流程要熟悉到能说出每一步出问题时的典型现象。比如内核解压阶段挂了会直接卡住或报Kernel Panic,而/etc/fstab配错则会进入emergency模式。试卷里给一个“重启后无法进入系统,卡在光标闪烁”的场景,很多人第一反应是重装系统,但真正的问题是挂载点写错了。做运维最忌讳一上来就想重装,先判断是引导问题还是挂载问题还是服务问题,这决定了你的排查效率。
另外,grep、awk、sed这三件套基本是必考的,但考法很灵活。不是让你写复杂的正则,而是给一个日志文件,要求提取某个时间段内访问量最高的IP。这道题考的是组合用法:用grep过滤时间段,再用awk '{print $1}'提取IP列,sort排序,uniq -c去重计数,最后sort -rn | head -n 10取前十个。看起来简单,但真动手写的时候很多人会把uniq放到sort前面导致结果错误——uniq只能去除连续重复的行,必须先排序才能正确统计。这种细节是笔试中最容易踩的坑,我在实际面试候选人的时候也经常拿这道题做试金石。
2.2 网络协议:三握手、四次挥手是底线但不止于此
网络题在这套试卷里属于“送分与送命并存”。送分的是HTTP状态码分类:2xx成功、3xx重定向、4xx客户端错误、5xx服务端错误,这个初中级开发者都懂。送命的是各种边缘场景,比如状态码499代表什么——Nginx定义的一个非标准状态码,表示客户端在服务端还没返回响应时就主动断开了连接。这道题能答上来的人不多,但它考的是实际排查经验:当你看到监控里突然出现大量499,第一反应应该是查客户端超时设置和上游响应耗时,而不是盯着Nginx的错误日志死磕。
三次握手和四次挥手几乎是必考题,但网易的考法比较进阶。它会问:如果服务端处于SYN_RECV状态的连接特别多,可能是什么原因?答案方向有四个:客户端发完SYN后没有收到SYN-ACK,可能是服务端并发连接数满了;服务端somaxconn和backlog配得太小,握手队列溢出;防火墙丢包;SYN攻击。这里考的是你对协议状态机的理解——并不需要死记硬背参数,但要能根据状态反推问题。反过来,如果TIME_WAIT过多,原因通常是服务端主动关闭连接比较多,或者客户端没有开启keep-alive导致大量短连接。调整net.ipv4.tcp_tw_reuse和tcp_fin_timeout可以缓解,但tcp_tw_recycle这个参数在NAT环境下容易出问题,不建议启用。我把这些考点整理成了一个速查表,方便你对照复习:
| 问题现象 | 可能原因 | 排查命令/工具 | 处理建议 |
|---|---|---|---|
| SYN_RECV堆积 | 握手队列满、防火墙丢包、SYN攻击 | netstat -s/ss -lnt/ tcpdump | 调大somaxconn和backlog,检查防火墙规则 |
| TIME_WAIT过多 | 短连接过多、服务端主动关闭 | netstat -ant | 开启keep-alive,按需调整tcp_tw_reuse |
| 大量499 | 客户端提前断开、上游响应慢 | Nginx access log / 链路追踪 | 排查后端接口耗时和客户端超时时间 |
| 丢包严重 | 带宽打满、网卡故障、防火墙拦截 | sar -n DEV/ethtool -S | 检查带宽监控,联系网络团队 |
DNS解析流程也是那个年代笔试卷里的常客。从浏览器缓存、操作系统缓存、本地hosts、本地DNS服务器、根服务器到权威服务器的完整链路,笔试会问“修改了DNS解析记录,但客户端访问还是旧IP,为什么?”答案方向包括:本地DNS缓存没刷新、浏览器有预解析缓存、HTTP keep-alive连接保持旧IP、CDN节点缓存等。这道题考的是你对整个链路的理解深度,能在答案里答出“不仅要检查运营商DNS,还要检查HTTP连接层和客户端层”的人,基本都能过。
2.3 数据库与缓存:MySQL基本操作是运维的必修课
数据库题在运维笔试卷里通常不会太深,但MySQL的基本操作和概念是避不开的。网易的卷子考过一道题:一张用户表,有user_id、login_time两个字段,要统计每天活跃用户数,SQL怎么写?这题考GROUP BY和DATE_FORMAT的组合使用:SELECT DATE_FORMAT(login_time, '%Y-%m-%d') AS day, COUNT(DISTINCT user_id) FROM user_logs GROUP BY day;。很多人会漏掉DISTINCT,或者把COUNT(DISTINCT user_id)写成COUNT(*),导致一个用户多次登录被重复统计。这种细节就是运维和开发的差异——开发关心功能是否实现,运维关心数据是否准确。
还有一道经典题:MySQL的四种隔离级别分别是什么?分别解决什么问题?读未提交、读已提交、可重复读、串行化。其中Read Uncommitted可能产生脏读,Read Committed解决脏读但可能不可重复读,Repeatable Read是MySQL默认级别,解决不可重复读但仍可能幻读,Serializable则完全串行但性能最差。这里需要额外补充一个实操知识:binlog的三种格式statement、row、mixed,以及主从复制延迟的常见原因——大事务执行时间长、从库单线程复制跟不上主库写入速度、表上没有主键导致全表扫描,这些在笔试试卷里不会直接考,但面试环节很容易被追问。
缓存方面,Redis的考点集中在缓存穿透、缓存击穿、缓存雪崩三个概念的区别与应对策略。穿透是指查询一个不存在的key,请求直接打到数据库;击穿是指某个热点key过期瞬间大量请求打到数据库;雪崩是指大量key在同一时间过期或Redis宕机。解决手段分别是布隆过滤器、互斥锁或逻辑过期、过期时间加随机值或使用集群高可用。这几个概念虽然常见,但试卷会把这几个场景混在一起,让你判断属于哪种情况,所以概念一定要区分清楚。我见过不少人把穿透和击穿搞反,笔试丢分很可惜。
3. 实战环节:Shell脚本和场景排查题是真正的分水岭
3.1 一道典型Shell脚本题:日志清理的需求要怎么做才规范
校招笔试卷里几乎必有一道Shell编程题。网易有一年的题目是:写一个脚本,定期清理Nginx日志目录下超过7天的日志文件,并保留每周日的日志做备份。
这个需求的坑在于“保留每周日的日志”这个条件。如果只是简单find /var/log/nginx -mtime +7 -exec rm -f {} \;,会把所有超过7天的文件都删掉,周日备份也就没了。正确做法是先判断文件的时间属性,再结合date -d判断是否为周日,或者用文件名中的日期去匹配。这里我给出一个完整可用的版本,这个方案也适用于生产环境:
#!/bin/bash # 日志清理脚本:删除7天前的日志,保留每周日 LOG_DIR="/var/log/nginx" RETENTION_DAYS=7 CURRENT_DATE=$(date +%Y%m%d) # 遍历所有日志文件 find "$LOG_DIR" -type f -name "*.log" | while read file; do # 获取文件的修改日期,格式YYYYMMDD file_date=$(date -r "$file" +%Y%m%d) # 计算文件距今的天数 diff_days=$(( ( $(date -d "$CURRENT_DATE" +%s) - $(date -d "$file_date" +%s) ) / 86400 )) # 超过保留天数且不是周日 weekday=$(date -d "$file_date" +%u) # 1-7,7表示周日 if [ "$diff_days" -gt "$RETENTION_DAYS" ] && [ "$weekday" -ne 7 ]; then rm -f "$file" echo "$(date '+%Y-%m-%d %H:%M:%S') deleted $file" fi done这段脚本的核心在于:先拿到每个文件的修改日期,再用date +%u判断是星期几,只有同时满足“超过7天”和“不是周日”两个条件才删除。日期计算用了date -d转成时间戳做差,可以避免跨月时用字符串比较导致的误判。脚本里加了日志输出,方便追溯哪些文件被清理过,这在生产环境里很重要——千万不能删完就完事,出了问题你连查的依据都没有。
这道题考察的真实能力不是会写脚本,而是有没有足够的边界思维。比如空目录判断、文件名包含空格、find遍历遇到权限不足的目录时会不会中断,这些都是加分项。如果你在笔试时能主动想到这些边界条件并写进注释里,面试官会认为你有工程化意识,这在应届生里是稀缺特质。
3.2 场景排查题:用“假设-验证-定位”的闭环拿下高分
还有一类题目是纯场景题,不给代码环境,只给一段故障描述,让你写出排查思路。网易的试卷有过这样一道题:用户反馈线上服务突然变慢,从监控看CPU使用率接近100%,你如何排查?
多数人的答案是“用top查看是哪个进程占用CPU高”,这不够。完整的答题思路应该是分层递进:
第一步查看现象确定范围:top先看整体负载,再看具体是哪个进程。如果是Java应用,top -Hp {pid}可以精确到线程,再用jstack {pid} > thread_dump.txt导出线程栈,搜索这个线程的十六进制ID定位到具体业务代码。
第二步分析是计算密集还是锁竞争:如果是计算密集,可能是业务代码死循环、大量正则匹配、频繁GC;如果是锁竞争,线程dump里会看到大量线程处于BLOCKED状态。分别对应不同的解决路径,前者要优化代码或扩容,后者要排查锁粒度、热点资源。
第三步检查外部依赖是否拖慢主线程:数据库连接池被打满、Redis慢查询、下游接口响应慢,都会表现为CPU升高,因为CPU都在等I/O,实际是I/O等待被计算进了负载。这时要配合pidstat -d查看进程I/O等待,iostat -x看磁盘利用率,ss -lnt看连接数是否异常。
第四步回溯变更:这个服务在故障发生前后有没有发过版本?有没有改过配置?有没有扩缩容?线上很多问题都是变更引起的,先自查变更能避免在错误的方向上浪费大量时间。
这里有个关键技巧:排查问题时先看变更,再看资源,最后看代码。很多人一上来就埋头分析代码,结果发现是上游接口超时拖垮了整个调用链,分析代码纯属浪费时间。做题时把你的思路按这个层次写出来,即使不知道具体命令也不会丢太多分,因为面试官更看重的是排查思路是否成体系。
还有一个容易忽略的细节:监控指标的选取。CPU使用率升高,不要只盯着%cpu,要看是用户态时间(%us)高还是系统态时间(%sy)高。用户态高通常是业务代码问题,系统态高可能是系统调用频繁或内核bug,这个判断方向完全不同。vmstat里的wa列如果很高,说明I/O才是瓶颈,这时给CPU加配置毫无意义。能在笔试卷里写出这层区分,说明你真的在线上处理过问题,而不是纯背概念。
3.3 编程题的常见变形:Python和Go在运维场景中的应用
2018年那会儿Python在运维领域已经比较普及了,试卷里偶尔会出现一道Python题。比如写一个脚本,监控某端口是否存活,如果挂了就重启服务并发送告警。这个需求里藏着三个考点:端口检测的方法、重启服务的幂等性、告警通知的实现。
我当年给出的参考解答是这样的:
#!/usr/bin/env python3 import socket import subprocess import time def check_port(host, port): """检测端口是否可连接""" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(3) try: sock.connect((host, port)) return True except socket.error: return False finally: sock.close() def restart_service(): """重启服务,幂等操作""" subprocess.run(["systemctl", "restart", "nginx"], check=True) def send_alert(): """发送告警,可以对接钉钉/邮件/短信""" print("Service down, restarted!") if __name__ == "__main__": while True: if not check_port("127.0.0.1", 80): restart_service() send_alert() time.sleep(30)这段代码的核心价值不在语法多高级,而在于它体现了三个做监控脚本的原则:一次只做一件事、检查动作要设置超时、重启服务要幂等可重复。往深了说还有一点:生产环境的脚本一定要有日志和异常捕获,不能挂了就静默。我后来在团队里定过一个规矩——凡是没有日志的自动化脚本,一律不允许上生产,这个观念在校招笔试里提前建立起来,会是一个不小的优势。
4. 易错点整理:这些坑每年都有大批人踩
4.1 基础命令的边界条件和默认值
很多看似简单的命令,考的是你有没有真正用过。比如crontab的环境变量问题,脚本里写的命令在终端能执行,但cron跑不起来,原因通常是cron环境变量里没有PATH,脚本里的python、java等命令找不到。解决方案是在脚本开头显式声明环境变量或使用绝对路径。这类题在笔试里不会直接给答案,而是让你排查“为什么cron执行失败”,能把环境变量差异这个点答出来,基本就稳了。
另一个高频易错点是df和du的区别。df看的是文件系统的磁盘空间分配情况,du看的是目录或文件实际占用的块大小。有时候df显示磁盘满了,但du -sh /统计下来没占多少,很可能是某个大文件被删除但进程还持有文件句柄,空间没释放。排查方法是lsof | grep deleted,找到持有已删除文件的进程,重启或让进程重新打开文件,空间才会释放。这个场景我在写题时经常拿来做陷阱选项,能绕开的人不多。
4.2 网络排查里最容易忽略的代理和防火墙层
本地网络正常、服务正常,但外网访问不了,这类题的排查方向通常指向防火墙和代理。试卷里给过这样一个场景:服务器上curl http://127.0.0.1:8080能返回正常内容,但通过公网IP访问超时,可能是什么原因?
标准答案包括:云安全组/防火墙规则没放行8080端口、Nginx/SLB监听配置绑定了内网IP没绑公网IP、系统防火墙iptables或firewalld拦截、路由或NAT配置问题。这几层要一层一层剥开:先查监听地址ss -lntp确认服务绑定的是0.0.0.0还是127.0.0.1,再查安全组规则和系统防火墙,最后用telnet或nc从外部测试端口连通性。很多人在这一步会卡住,因为习惯性认为是服务本身的问题,忘记了外部链路和防火墙这层。笔试卷里出现这种题的目的就是考察你有没有由内到外、由近及远的排查习惯。
4.3 Shell语法陷阱:空格、变量、引号
Shell脚本的语法细节在笔试里特别容易被设置成陷阱。一个经典题目是三个变量赋值,哪一个是正确写法:
# 错误 - 等号两边不能有空格 name = "test" # 正确 name="test"这类题目看着简单,但每年都有不少人在上面翻车。还有if [ $var = "yes" ]和if [ "$var" = "yes" ]的区别,后者多了双引号,可以避免变量为空时语法报错。再比如在for循环里遍历文件名带空格的文件,如果没有正确处理引号,就会分词导致循环次数不对。这些细节不是死抠字眼——脚本一旦放到生产环境,任何一个字符的错误都可能导致服务重启失败,所以大厂笔试试卷特别爱考这些。
为了方便你复习,我把校招笔试里最容易混淆的知识点整理成了一张速查表:
| 易混知识点 | 正确理解 | 常见错误 |
|---|---|---|
| 软链接/硬链接 | 软链接是独立文件指向目标路径,硬链接是指向文件inode的目录项 | 混为一谈,以为硬链接可以跨文件系统 |
| NAT/桥接模式 | NAT模式下宿主机和虚拟机在不同网段,桥接模式下在同一网段 | 分不清ping不通的原因 |
| iptables chain | INPUT用于进入本机的包,FORWARD用于本机转发的包,OUTPUT用于本机发出的包 | 不清楚为什么要区分链 |
| 僵尸进程 | 父进程未调用wait()回收的子进程残留 | 以为僵尸进程可以被kill杀掉 |
| TCP与UDP | TCP可靠有序,UDP不可靠但开销小 | 以为UDP没有连接概念就完全不可用 |
5. 备考策略:一套可持续复用的方法论
5.1 分模块建立知识体系,而不是零散背题
运维笔试覆盖的面很广,如果按官网上列出的考点一个个背,效率很低,还容易遗忘。我的建议是按“操作系统、网络、数据库、中间件、脚本编程、监控告警、CI/CD”这几个大模块建立自己的知识树。每个模块下只保留最核心的50个知识点,然后反复自测。比如操作系统模块,重点不是背命令参数,而是搞清楚“进程管理、内存管理、文件系统、权限模型、日志系统”这几条主线。
我当年复习时用过一个笨但有效的方法:把每个模块的知识点做成一道“自问自答题”,每题都用“现象 → 原因 → 排查 → 解决”的格式写满一页纸。比如“为什么磁盘空间显示满了但删除文件后空间没释放?”从df看到那个文件系统,到lsof | grep deleted找到持有的进程,再到重启进程释放空间,整个链路写一遍,印象比刷十道选择题都深。这个方法后期帮我建立起了一套排错直觉,让我在笔试和面试中都能快速定位问题的关键环节。
5.2 动手实验是唯一的捷径
笔试里有一类题很吃亏,就是“看起来知道但一写就错”。比如iptables -A INPUT -p tcp --dport 80 -j ACCEPT,光看这个命令不难理解,但让你写一条“只允许192.168.1.0/24访问3306端口,其他全部拒绝”的规则时,很多人会漏掉顺序问题——iptables规则是自上而下匹配的,DROP规则如果放在ACCEPT前面,后面的允许规则永远不生效。这类细节只有亲手在虚拟机里搭环境才能体会到。
建议至少在一台2核4G的虚拟机里搭一个最小环境:安装Nginx、MySQL、Redis,自己写脚本做日志切割、服务守护、报警通知,再故意搞坏几个配置来观察报错现象。这个过程花不了多少时间,但会让你对命令的实际行为有真实记忆,而不是纸面上的想象。我在实际操作中发现,凡是亲手踩过的坑,笔试时遇到同类型题基本都能下意识选出正确答案,这种肌肉记忆是背题无法替代的。
5.3 面试环节的衔接:笔试试卷之外还会问什么
笔试只是第一轮筛选,后续面试通常只会比笔试更深入。网易的面试环节里,我见过面试官拿着笔试卷上的某道简答题继续追问:比如问“你用ss还是netstat看连接数”,答完会接着问“ss比netstat快在哪里”,再追问“/proc/net/tcp里每个字段的含义”。这种连环题的逻辑是考察你到底理解到哪一层,是否有真实上手经验。
所以复习笔试题目时不要只准备到“答对”为止,要养成追问的习惯。每背一个命令,问自己三个问题:它是什么原理?它和类似工具的区别是什么?生产环境什么时候用它、什么时候不用它?比如curl -I和curl -X HEAD的区别、telnet和nc的适用场景、dig和nslookup的差异,这些都是面试官非常喜欢拿来深挖的点。当你把这三个问题都能答上来,笔试通过率会大幅提升,面试时也不会被问得哑口无言。
6. 从一场笔试看懂运维岗位的成长路径
回顾这套试卷,它真正想选拔的是具备“系统化思维”的候选人。运维这个岗位的日常就是跟不确定性打交道——不确定什么时候会宕机、不确定日志里藏着什么异常、不确定下一次变更会引入什么新问题。笔试里的所有题目,本质上都在模拟这种不确定性:你能否在信息不完整的情况下快速定位问题,能否用工具精准验证假设,能否把解决思路清晰地表达出来。
有些人在准备校招笔试时会陷入一个误区,觉得运维就是背命令、会装环境、能写脚本,把这些做好了就万事大吉。但2018年那套试卷已经在传递一个信号:运维正在从“配置管理”走向“稳定性工程”。后来的几年里,SRE概念在国内互联网公司普及,监控告警、容量规划、故障演练、混沌工程这些能力逐渐成为运维工程师的核心竞争力。如果你是为了长期在这个行业发展而参加笔试,眼光要放远一些——笔试只是起点,真正的挑战是后续你能不能在复杂的分布式系统里稳住局面。
我个人在做这套试卷复盘时的体会是:单纯刷题不如动手搭一套完整的服务环境,再自己折腾一遍故障排查。这种方法的收益远超预期——你不仅掌握了命令的用法,还理解了它们为什么被设计成这样,以后遇到任何新工具都能快速上手。
7. 一些小建议与拿分技巧
最后说几个在真实笔试场景中很有用的技巧:
先把会做的题全部做完,再回头啃难题。运维笔试卷的题量通常不小,单选题和判断题的分数也很好拿,不要在个别题目上卡太久。我见过很多人在一道网络题上纠结了十分钟,导致后面的Shell脚本题没时间写,得不偿失。
简答题和编程题答案要写清楚注释和思路。阅卷的人通常不会一行行执行你的代码,而是看你的逻辑是否完整、边界是否考虑周全。所以哪怕代码不能完整跑通,也要把注释写清楚,把“我接下来会怎么做”写在末尾。比如写Shell题时,可以在开头加一句“这个脚本只清理按天滚动的日志文件,如果日志命名格式不同需要调整正则匹配”,这种句子不会扣分,反而会让阅卷人觉得你想问题全面。
拼写和格式要干净。命令少写一两个字母、循环少个done、Python缩进不对这类低级错误,在笔试中属于冤屈分,尽量别丢。我在模拟阅卷时见过不少代码逻辑完全正确但语法细节写错的答卷,真的很可惜。
平时用英文资料做题,考试时遇到英文题目不紧张。大厂笔试试卷偶尔会出现英文题干,虽然句子结构不难,但如果不适应英文表达,还是会影响阅读速度。建议平时看官方文档时不要只看中文翻译,直接读英文原文,考试时对专业术语能一眼反应过来,省下更多时间集中在解题上。
不要忽略“附加题”和开放性问题。网易的试卷里偶尔会有一道没有标准答案的设计题,比如“如果让你设计一个监控系统,你会考虑哪些指标”,这种题没有对错,但非常考验你日常思考的深度。答题时不要罗列堆砌,而是分层次展开:先基础设施层(CPU、内存、磁盘、网络),再中间件层(连接数、慢查询、GC),再业务层(接口耗时、错误率、QPS),每一层之间用“数据如何上报、如何存储、如何展示”串起来,这样整体结构就非常完整了。这类题答好了,往往能把前面丢的分补回来。
以上这些经验都是我从实际复习和参与阅卷的过程里慢慢总结出来的。道理不复杂,关键是动手去做——找一台虚拟机,把Nginx、MySQL、Redis这些服务都搭一遍,再模拟各种故障去排查,这套功夫下了,再回来看笔试试卷,你会发现自己已经站在了另一个高度。