网易运维实习生笔试题拆解:从Linux基础到生产环境排障
我当年也参加过类似的实习生招聘说实话系统运维这个岗在笔试环节筛人挺狠的。网易这套2018年的卷子放在今天来看依然不过时反而因为这几年的云原生化和 DevOps 普及很多考察点变得更值得玩味。题面本身并不算难但它考察的不是死记硬背而是一个人对“系统是怎么跑起来的”这件事有没有完整的认知框架。这篇文章我会把整套题拆开揉碎把每类题背后的考察意图、参考答案的思考路径、以及实际工作中对应的场景都讲透。不管你是准备校招、跳槽还是刚入行想建立运维知识体系这份拆解都能直接拿来用。1. 考卷整体设计与考察逻辑先说一个很多人都会忽略的点实习生的笔试题出题人其实并不指望你能答出多么惊艳的答案他们真正想看的是两件事——第一你的基础扎不扎实边界在哪里第二遇到不会的问题时你的思维路径是不是一个工程师该有的样子。网易这套运维实习生的卷子整体看下来可以分成五大模块。模块典型考点考察目的Linux 基础文件系统、权限管理、进程管理、常用命令是否具备最基本的操作手感网络基础TCP/IP 协议栈、HTTP 状态码、DNS 解析流程是否理解“数据怎么从一台机器到另一台机器”Shell 脚本与编程文本处理三剑客、定时任务、简单脚本编写是否能把重复劳动自动化数据库与中间件SQL 基本操作、MySQL 主从概念、缓存原理是否了解业务数据是怎么存和读的系统设计与排障思路负载均衡方案、日志分析、故障排查步骤是否具备宏观架构观和问题拆解能力这个模块顺序本身是有讲究的。它是按照“单机 → 网络 → 自动化 → 数据 → 全局架构”的路径在递进正好对应一个运维工程师从入门到能独立扛事的成长路线。如果你在这个顺序上暴露出明显的断层比如单机操作很熟但一问网络就懵那面试官基本能判断出你的学习路径是偏科的。我见过不少候选人死背命令、死记端口号但问一句“为什么 SSH 默认走 22 端口这个连接建立过程发生了什么”就卡住了。这套题恰恰就是用来过滤这种“背多分”型选手的。另外一个值得注意的细节是卷子里有相当比例的场景题比如“线上服务出现大量 TIME_WAIT 怎么排查”“磁盘满但 du 看不到大文件怎么办”。这类题没有标准答案但特别能看出一个人是真跑过生产环境还是只在虚拟机里玩过。这也是我在下文要重点展开的部分。2. 核心考点逐个击破下面我把这套题里最有代表性的几类题目拿出来逐题拆解。每一题我都会给出考察点、参考答题思路以及与之对应的真实工作场景。2.1 Linux 进程与权限不是让你背命令是看你能不能管住机器笔试题里必有一道类似“如何查看某个进程占用的 CPU 和内存如何找到 CPU 占用率最高的线程”的题。很多人第一反应是ps aux然后按 CPU 列排序。这个答案不能算错但距离“生产可用”还差两步。完整的思路应该是# 第一步找到 CPU 占用率最高的进程 top -bn1 | head -20 # 第二步定位到具体线程 top -Hp PID # 第三步把线程 ID 转为十六进制配合 jstack 定位 Java 代码行 printf %x\n TID为什么要转十六进制因为 JVM 的线程 dump 文件里线程 ID 就是十六进制表示的。笔试如果考到这一步说明出题人希望你不仅会看现象还能顺着现象揪出根因。放到真实场景里这就是线上 Java 应用 CPU 飙高时的标准排查路径。权限管理也是必考项。比如“如何让一个用户只能查看某个日志文件但不能修改”“如何设置一个文件使同组用户可以读写但其他用户只能读”。这类题看着简单但能把chmod、chown、setfacl、umask四者的区别讲清楚的人其实不多。我个人的建议是笔试遇到权限题别只写chmod 754就完事最好补充一句“如果需要对某个特定用户单独授权可以用setfacl -m u:username:rwx /path来做细粒度控制”。这一句话就能让阅卷人知道你见过真实的需求场景而不是只在课本里见过755。2.2 网络协议三次握手谁都会背关键是“然后呢”网络题几乎是所有运维笔试题的保留项目。网易这套卷子里有一道典型的描述 TCP 三次握手的过程以及为什么需要三次而不是两次。网上答案很多但多数人只写到“确认双方收发能力”。如果你想答出区分度可以再往下深挖一层两次握手无法避免“已失效的连接请求报文段突然传送到了服务端”造成的资源浪费。这是 RFC 793 里明确给出的原因。三次握手本质上是在同步双方的初始序列号ISN序列号是后续可靠传输的基础。握手过程中任何一次丢包会触发什么重传行为客户端在 1s、2s、4s… 的指数退避后重传 SYN。把这些延伸点讲出来面试官会觉得你不仅懂协议还懂协议背后的设计哲学。HTTP 状态码也是高频考点。网易喜欢让你区分 301 和 302以及“502 Bad Gateway”和“504 Gateway Timeout”的差别。区分前者容易但 502 和 504 特别多人搞混。我的记忆方法很简单502网关收到了上游的无效响应意思是“上游崩了或者返回了垃圾数据”。504网关把请求转发给上游后等了半天没等到响应意思是“上游还活着但没空理你”。实际工作中Nginx 出现 502 多半是后端 PHP-FPM 或 Java 服务挂了504 则多半是后端某个慢 SQL 把连接池堵死了。同样是大面积报错排查方向完全不同。2.3 Shell 与文本处理能不能把十分钟的重复劳动写成三秒的脚本Shell 脚本题在笔试卷子里一般不会缺席。网易喜欢考一些看似简单但特别考验熟练度的题比如“统计一个日志文件中每个 IP 出现的次数并按照次数降序排列”。参考答案我很熟悉awk {print $1} access.log | sort | uniq -c | sort -rn这道题的精髓不是那四个命令本身而是“管道思维”。运维每天做的事情本质上都是把一个大问题拆成多个小步骤用管道把每个步骤的输出接到下一步的输入。awk负责取字段sort负责排顺序uniq -c负责计数最后一个sort -rn负责把结果变成人眼最容易读的降序。四段式处理行云流水。还有一类脚本题是“写一个定时清理 7 天前日志的脚本并加入 crontab”。考察点有三个find /var/log -type f -mtime 7 -exec rm {} \;的写法是否正确。是否知道-mtime和-atime、-ctime的区别。是否会把清理动作封装成脚本并配置crontab日志或使用logrotate替代。我能理解很多人直接写rm -rf但如果笔试能主动提到“生产环境建议用 logrotate 而不是手动 crontab 清理”这道题你就比别人高一档。2.4 MySQL 与缓存数据层永远是运维的必修课数据库在实习生笔试题里通常不会问得太深但基础概念必须清楚。比如“MySQL 主从复制的原理是什么”你得能说清楚主库开启 binlog从库通过 I/O 线程拉取主库 binlog 并写入 relay log再由 SQL 线程执行 relay log 中的内容。基于这个原理面试官很喜欢追问几个经典问题主从延迟怎么解决从库能不能写binlog 有哪几种格式分别有什么区别延迟问题最能区分候选人有没有真实排障经验。参考答案的框架是先确认延迟是持续性的还是突发的再看从库所在机器的 IO 压力、主库的大事务、以及从库是否在同步期间执行了慢查询。如果show slave status里Seconds_Behind_Master一直增长多半是单线程 SQL 线程追不上主库的写入速度这时候要么升级到多线程复制要么对大事务做拆分。缓存这块Redis 几乎是必问。常见考点是“缓存穿透、缓存击穿、缓存雪崩分别是什么怎么解决”。这三个概念特别容易混我用一句话区分穿透查了一个不存在的数据每次请求都打到数据库。击穿某个热点 key 过期瞬间大量请求同时打到数据库。雪崩大量 key 同时过期数据库瞬间被压垮。对应的解法分别是布隆过滤器拦截穿透、互斥锁或逻辑过期解决击穿、过期时间加随机值避免雪崩。能把这套讲清楚笔试基本就能在数据层拿满分了。2.5 安全与系统加固白送分的地方别丢安全类题目在运维笔试题里占分不高但几乎每年都有。网易常考的无非是这几个Linux 系统登录的认证方式有哪些如何配置 SSH 密钥登录并禁用密码登录如何查看系统当前所有开放端口以及对应的进程一个 Web 服务被入侵你的第一反应是什么第一题的考点是sshd_config里PasswordAuthentication和PubkeyAuthentication的配合以及~/.ssh/authorized_keys文件权限要设置为 600。第二题是ss -tlnp或netstat -tlnp的组合使用。第三题才是真正拉开差距的很多人第一反应是“删文件”“杀进程”但正确的思路应该是“先保证据、再断网、再排查”。保守的做法是先通过history、/var/log/secure、last等确认入侵入口和时间线再对可疑文件做md5sum保存哈希、复制一份到隔离目录然后才去清理和修复。这个流程体现了运维对“可追溯性”的理解也是生产环境事故响应中最基本的素养。3. 从零搭建一套生产系统笔试背后的真实需求网易这套笔试题虽然看起来是零散的知识点但它真正想考察的是你心里有没有“一套系统从零到稳定运行”的完整画面。这也是好几个热词里反复提到的“如何在生产环境从零搭建一个系统并做好后续维护”。我把这个完整流程拆成六个阶段这也是我在实际项目里反复用到的框架。3.1 阶段一资源规划与初始化搭建系统的第一步不是装软件而是先想清楚这台机器要跑什么、扛多少流量、需要什么样的 IO 能力。如果是云服务器选型时要关注几个关键参数CPU 核数与主频CPU 密集型应用选高主频并发型应用选多核。内存大小决定能开多少线程、多少缓存Java 应用尤其吃内存。磁盘类型SSD 还是普通 HDD日志型应用优先考虑 SSD 的随机读写能力。带宽与网络类型内网互通、公网入口带宽峰值直接影响架构设计。系统初始化阶段我通常会做几件固定的事# 更新系统包 yum update -y || apt update apt upgrade -y # 创建普通用户并加入 sudo 组禁用 root 远程登录 useradd deploy usermod -aG wheel deploy # 修改 SSH 配置只允许密钥登录 sed -i s/^PasswordAuthentication yes/PasswordAuthentication no/ /etc/ssh/sshd_config systemctl restart sshd # 配置基础安全策略 firewall-cmd --permanent --add-servicehttp firewall-cmd --permanent --add-servicehttps firewall-cmd --reload这些操作看起来琐碎但每一条后面都有故事。禁用 root 远程登录是为了避免暴力破解直接拿到最高权限修改 SSH 端口或只允许密钥登录是云上服务器被扫描攻击时的最低成本防线firewall 只放行必要端口是纵深防御的第一道门。3.2 阶段二基础组件部署生产环境里几乎没有“裸跑一个应用”的场景业务落地之前必须先部署好基础组件。最常见的组合是Nginx作为反向代理和静态资源服务器。MySQL业务数据的主存储。Redis缓存和分布式锁。应用运行时比如 JDK、Python、Node.js 环境。以 Nginx 为例一个最小可用的反向代理配置如下server { listen 80; server_name yourdomain.com; access_log /var/log/nginx/yourdomain_access.log main; error_log /var/log/nginx/yourdomain_error.log warn; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static/ { alias /data/www/static/; expires 7d; } }几个容易踩坑的地方proxy_set_header Host $host必须加否则后端应用拿到的是内网 IP 而不是真实域名会导致重定向地址错乱静态资源要单独开一个 location 并配置expires避免所有请求都打到后端应用上。3.3 阶段三应用发布与配置管理应用从代码到线上运行中间隔着一整套发布流程。实习生可能不用负责完整 CI/CD 的建设但必须理解其中的核心逻辑。最原始的发布方式就是git pullrestart适合个人项目。稍微规范一点的环境会引入构建产物和版本管理代码在 CI 服务器上跑测试、打镜像或打压缩包然后通过 Ansible 或脚本分发到目标机器再执行滚动重启。这里想强调一个实习生最容易被忽略的点发布不等于重启。生产环境发布要考虑灰度、回滚、流量切换。哪怕刚入职只用过kill -9重启服务也要在笔试或面试中展示你理解“优雅下线”的含义先摘流量、等存量请求处理完再停进程。3.4 阶段四监控告警体系系统搭起来之后下一个绕不开的就是“如何知道它是否健康”。监控是整个运维体系里最容易被低估、也最能在关键时刻救命的部分。生产环境最少要覆盖四层监控监控层指标举例常用工具基础设施层CPU、内存、磁盘、网络 IOPrometheus node_exporter应用层QPS、响应时间、错误率、JVM GCPrometheus Grafana中间件层MySQL 连接数、慢查询、Redis 命中率mysqld_exporter / redis_exporter业务层订单量、支付成功率、核心接口拨测自定义 exporter / 拨测脚本搭建监控的优先级有讲究不是一上来就把所有指标接全。我的习惯是先接基础四件套CPU、内存、磁盘、网络然后接应用存活探针TCP 拨测加 HTTP 状态码检查这些能覆盖 80% 的故障。之后再逐步加中间件指标和业务指标。告警规则尤其要克制。新手容易犯的错是把告警阈值设得太敏感结果半夜三点被垃圾告警炸醒第二天一怒之下把告警全关了等于没搭。合理的做法是分级告警P0 级别服务不可用直接打电话或机器人通知P1/P2 级别只发工作群便于观察趋势。3.5 阶段五备份与容灾策略笔试里“备份”不一定单独出题但一定会融在场景里。讲一个真实教训我之前遇到过一台数据库服务器磁盘损坏因为备份脚本一直只在另一台机器上保留了一份全量备份而那个备份文件所在的磁盘和主库是同机房同批次的结果机房级故障时两边的数据一起丢。从那以后我给自己定了一条铁律异地冗余 定期恢复演练。备份设计最少要考虑三个维度备份粒度全量备份每周 增量备份每天 binlog 实时同步。备份保留周期按恢复时效和数据重要性一般保留 7 天到 30 天。恢复演练频率备份是否真的能用必须定期演练验证否则就是心理安慰。以 MySQL 为例# 每周日凌晨全量备份 mysqldump -uroot -p --single-transaction --master-data2 \ --databases yourdb | gzip /backup/yourdb_$(date %F).sql.gz # 每天执行增量备份基于 binlog mysqlbinlog --start-datetime$(date -d yesterday %F) \ /var/log/mysql/mysql-bin.000001 /backup/incremental_$(date %F).sql--single-transaction是为了在 InnoDB 引擎下不锁表地做备份--master-data2会在备份文件里记录当前的 binlog 位置增量恢复时可以直接对位。这些细节在笔试里不一定直接考但实操中能救你命。3.6 阶段六日常巡检与变更管理系统上线不是终点真正的挑战在“接下来每天怎么维护”。日常巡检要有固定的 SOP。我自己的巡检清单大致是登录跳板机批量检查各服务器负载uptime、free -h、df -h。查看核心应用日志有无新增 ERRORtail -f或grep关键字。检查定时任务是否都正常执行/var/spool/mail或专门的任务监控平台。确认证书有效期SSL 证书过期是生产事故的高发原因。检查备份任务是否成功生成文件且文件大小是否为 0。变更管理则是运维从“野路子”走向“正规军”的分水岭。任何对生产环境的修改都需要有变更申请、变更审批、实施步骤、影响范围、回滚方案和验证方案。哪怕只是改个 Nginx 配置也建议走这个流程。原因很简单大多数生产事故不是来自大版本重构而是来自那些“这次改动很小不用走流程”的瞬间。4. 互联网运维和国企运维到底差在哪有些人在准备笔试时会纠结应试准备应该偏互联网那套还是偏传统企业那套我这些年两边都待过感触很深这里把差异讲透方便你做针对性准备。4.1 从“维稳”到“求快”的思维差异国企运维的核心目标用两个字就能概括维稳。系统不出事、数据不丢、业务不断这就是最大的功劳。因为国企的业务往往面向大规模固定用户群体系统的稳定性直接关系民生和资金安全宁可不创新也不能出事故。互联网运维的目标则是“在快速迭代的前提下维稳”。业务每周甚至每天发版运维必须确保每一次变更都能快速上线、异常时能秒级回滚。这里的“稳”不是静态的稳而是动态的稳是建立在高度自动化和高危意识之上的稳。这个差异直接决定了笔试和面试会问什么样的问题。国企更看重你对流程的理解、对合规的认知、对传统架构比如小型机、集中式存储、虚拟化平台的熟悉度。互联网更看重你对性能调优、分布式架构、容器化平台、故障快速定位的能力。4.2 工具链与工作方式的碰撞工具选择上的差异也很明显。国企环境里很多机器是内网隔离的不允许连接外网下载软件包所有依赖都是内部源工具选型也偏向商业产品和成熟的统一平台。互联网公司则更倾向于开源生态Prometheus、Grafana、Ansible、Kubernetes 几乎是标配。举个例子就能感受到差别同样是一台服务器出现 CPU 飙高国企运维的流程可能是先报障、再走流程审批、再远程登录排查全程留痕互联网运维的流程可能是先看监控、再 kubectl exec 进入容器、用 arthas 抓线程栈两分钟内定位到具体代码行。两种方式各有优劣。国企的流程化能保证操作风险可控、责任清晰但响应速度偏慢互联网的高度自治能带来极致效率但对个人能力和责任心要求更高。没有哪个一定更好关键是不同环境要匹配不同的思维方式。4.3 对求职者的启示无论是考网易这种互联网公司还是去国企研究院笔试题本质上都在考察同一件事你的知识体系是否完整、解决问题的能力是否可迁移。互联网公司看重的是你能否在高压环境下快速定位问题并修复国企看重的是你能否在流程规范内稳定地执行和维护。两者都需要扎实的 Linux 功底、网络基础和故障排查能力差异只是侧重点。我的建议很直接基础打牢是通用的流程规范是学习的工具链是适应的。不要因为目标企业类型不同就在基础上偷懒最后坑的都是自己。5. 高频排障场景实录与面试官的小心思笔试里最后一道大题或者面试时的附加追问十有八九会落在故障排查上。我把高频场景整理成一份速查表再单独聊几个面试官绝对不会写进题目里的隐性考察点。5.1 高频故障排查速查表现象排查思路常用命令/工具服务响应慢先看系统负载再看应用日志再看数据库慢查询top, free, dmesg, grep ERROR磁盘空间满df 找分区du 找大目录再排查是否有文件被删除但未释放df -h, du -sh *, lsof | grep deletedCPU 使用率100%先定位进程再定位线程最后转储分析代码top, top -Hp, jstack, pstack大量 TIME_WAIT 连接看连接状态分布调内核参数优化应用连接复用ss -s, netstat -anp, sysctl内存不足 OOM看 dmesg 找 OOM 进程分析堆内存和 GC 日志dmesg -T, free -m, jstat接口返回 502/504确认是网关问题还是上游问题分段 curl 验证curl -I, tail nginx error_log域名解析异常先本地 dig再排查 DNS 服务器和 hosts 文件dig, nslookup, cat /etc/resolv.conf数据库连接数打满看 max_connections、processlist、慢查询show processlist; show variables like %conn%这几种场景笔试和面试怎么考都不会绕过。我给几个典型问题的排查详解。磁盘满但看不到大文件这是经典面试题。思路是df -h看到/满了但du -sh /加总后发现远小于磁盘总量。这时候大概率是有文件被进程打开后删除但进程没退出空间被持续占用。解决方法是lsof L1查看 deleted 文件找到对应 PID重启那个进程或直接 kill空间才会真正释放。大量 TIME_WAIT的问题则更隐蔽。TIME_WAIT 本身不是错误它是 TCP 协议保证可靠性的必经阶段但数量过多会占用本地端口和内存导致新连接无法建立。常见诱因是短连接请求量过大、应用没开 keep-alive。调优方向可以从两方面入手应用侧开启连接复用系统侧适当调低net.ipv4.tcp_fin_timeout和开启端口复用。5.2 面试官不会写进题目的隐性观察点回到网易这套题本身我想说一个很多人没意识到的事实笔试题的分数也许只占三成剩下的七成是阅卷人在你的答案里寻找“这个人是不是能一起干活”的信号。哪些信号是加分的第一你会在答案中主动给出“边界条件”。比如写 Shell 脚本时会判断目录是否存在、文件是否为空、命令是否执行成功。这说明你考虑问题足够周全。第二你会区分“测试环境”和“生产环境”的差异。比如同一个命令在测试环境可以rm -rf在生产环境必须先备份再操作。这说明你有风险意识。第三你会承认自己不会但会给出解决路径。比如“这个参数我没用过但我会先查 man 文档再在测试环境验证然后才会在生产操作。”这个回答比硬编一个错误答案值钱百倍。我也见过很多反例。有人 Linux 命令背得滚瓜烂熟但问他“生产环境一台机器 CPU 飙高你会怎么做”他第一反应是把 CPU 打满的进程 kill 掉完全没有“先看监控、确认影响面、保留现场、再决策”的概念。这种答案暴露的不只是技术问题而是工程思维缺失。扎实的岗位知识和完整的问题思考链路同样重要。单会操作不会思考最多是个“高配键盘手”单会思考不会操作则是“纸上架构师”。运维这个岗位最核心的能力是把这两者揉在一起形成肌肉记忆级别的判断力。最后想说的几句实话把网易这套题从头到尾过一遍你会发现一个特点它考察的所有知识点都不是靠考前突击背出来的而是靠平时一点一滴积累的。什么是文件描述符、什么是 inode、为什么 TCP 握手的序列号要随机、为什么 Redis 要用单线程——这些问题的答案就藏在你每一次敲命令、每一次看日志、每一次排障的复盘里。所以如果你正在准备运维方向的面试我的建议很朴素别刷题去折腾。买一台云服务器从零部署一个应用申请一个域名配上 HTTPS接入监控写一个备份脚本然后想办法把它搞挂一次再修好。这个过程比刷十个晚上的笔试题都管用。因为只有真正经历过服务挂掉又救回来你才理解那些命令和参数背后的价值。这大概就是运维这份工作最迷人的地方——它永远在教你敬畏系统同时又给你足够多的机会去理解系统。