去年春招,我完整复盘了一场游戏公司的系统工程师笔试。和研发岗笔试不太一样,系统工程师的笔试很少让你手写LRU,更多是丢给你一堆真实环境里的坑:线上CPU飙升怎么查、数据库连接被打满怎么办、一台全新的服务器怎么在一天之内变成可上线的生产节点。搜狐畅游这套卷子给我的感觉是,它不考你能不能背出Linux命令,而是考你在生产环境里有没有从零搭建系统并持续维护的完整认知。这篇文章既是笔试题复盘,也是系统工程师日常工作的核心方法总结,如果你正在准备春招、或者刚转岗运维/系统工程师,希望能帮你少走点弯路。
我先把最核心的结论放在前面:系统工程师笔试的所有题目,本质都在围绕一件事——给你一台裸机,你能不能让它变成一个稳定、可监控、可恢复的生产节点。这里的"稳定"指不轻易宕机,"可监控"指出问题能及时发现,"可恢复"指数据丢了能拿回来、服务挂了能拉起。把这条主线抓住,你会发现那些看似零散的题目都能归到一个体系里。
1. 系统工程师笔试到底在考什么
1.1 系统工程师不是"高级网管"
很多同学一开始会混淆系统工程师和运维工程师、DevOps、SRE这些岗位,其实笔试复习前得先把岗位定位搞清楚。在游戏公司或互联网公司里,系统工程师更偏向基础架构层,主要工作是服务器操作系统管理、网络基础、数据库和中间件部署、脚本自动化、监控告警、故障排查,以及最核心的容量规划和成本控制。开发工程师关注的是功能能不能实现,系统工程师关注的是功能上线后能不能长期稳定运转。
笔试里常见的一个误区是狂刷LeetCode,或者花大量时间背Linux命令,结果考到"给你一台新服务器,说说你从装机到上线的完整步骤"直接懵了。这种题没有唯一答案,但没有生产环境经验的人往往会答成"装系统、部署代码、开放端口"三句话,完全撑不起一个系统工程师该有的思考密度。
我复盘下来,系统工程师笔试真正考察的是系统思维,也就是面对一台空机器时,你的决策顺序是什么。先做什么、后做什么、每个步骤为什么这么做、做完怎么验证、失败了怎么回滚,这些才是面试官想看到的。命令可以上网查,架构思路和风险意识没法临时抱佛脚。
1.2 笔试模块与考察权重
从搜狐畅游这套题以及同类型公司的笔试风格来看,系统工程师笔试通常分几个模块。我根据自己的复习和考试经验,整理了一张大致的模块权重表,不一定适用于所有公司,但可以作为复习方向的参考:
| 考察模块 | 主要题型 | 常见考点 | 建议权重 |
|---|---|---|---|
| Linux基础与系统管理 | 选择题、简答题 | 文件系统、进程管理、权限、systemd | 20% |
| 网络基础 | 选择题、场景题 | TCP三次握手、HTTP状态码、DNS、负载均衡 | 20% |
| 数据库运维 | 简答题、场景题 | MySQL索引、主从复制、连接数打满、备份恢复 | 20% |
| 中间件与Web服务 | 场景题、配置题 | Nginx转发、Redis缓存、消息队列 | 15% |
| 脚本与自动化 | 手写脚本、逻辑题 | Shell/Python、定时任务、批量处理 | 10% |
| 故障排查与监控 | 场景题 | CPU飙高、磁盘满、延迟排查、告警设计 | 10% |
| 安全基础 | 选择题、简答题 | 防火墙、权限管控、最小化原则 | 5% |
这个权重说明一个很现实的问题:系统工程师笔试的重心不在"会不会敲命令",而在"能不能处理生产环境里的实际问题"。所以复习的时候,我建议把场景题作为主线,每复习一个知识点都问自己一句——这个知识点在线上有什么用?如果出了故障,它能帮我定位什么问题?
2. 核心考点拆解:生产环境从零搭建系统的完整流程
2.1 第一步:需求分析与容量规划
笔试中出现频率极高的一道题就是:"给你一台8核16G的服务器,请你部署一套Web服务,你会怎么做?"很多人的第一反应是"装Nginx、装MySQL、把代码扔上去、开放80端口",但这个答案在评分时基本拿不到高分。因为一个合格的系统工程师接到任务后,第一件事不是装系统,而是做需求分析和容量规划。
你需要先搞清楚这个系统是给谁用的、并发多大、数据量多少、可用性要求多高。比如游戏业务,如果这是一台游戏登录服,在线人数峰值假设是2万人,每个登录请求平均耗时100ms,那么QPS大概在200左右,单台服务器理论上没有压力。但如果是游戏逻辑服,每个玩家每秒钟可能产生多次协议交互,情况就要复杂得多。
容量规划里有个很实用的估算思路:先定业务指标,再反推服务器资源。比如一个Web服务,你预期峰值QPS是5000,接口平均响应时间50ms,单请求占用内存约500KB。算CPU时,可以估算单核QPS能力,假设一个核心能处理2000个简单请求,那么4个核心就能扛住8000 QPS;算内存时,5000 QPS乘以500KB约2.4GB,再叠加应用本身和系统占用,8G内存基本够用。磁盘则需要按日志量和数据量来算,比如每天产生2GB业务数据、10GB日志,保留30天,磁盘至少需要360GB再加余量。
笔试答题时,把"需求-指标-资源"这条链路写清楚,比直接给结论强很多。哪怕是估算,也要让面试官看到你有数据意识。容量规划这道题的核心不是精确计算,而是你有没有做这件事的思维习惯。
2.2 第二步:操作系统安装与初始化
容量规划做完,才轮到操作系统层面。这里有个高频考点:Linux发行版怎么选、装完系统后要做哪些初始化。说实话发行版选哪个没有绝对标准,但作为系统工程师,你必须给得出选择和理由。比如游戏/互联网公司的传统业务很多用CentOS/Rocky Linux,新业务可能倾向Ubuntu LTS,核心考虑因素是稳定周期、厂商支持、社区生态和团队熟悉度。如果面试中问到"CentOS停更了怎么办",能够说出迁移到Rocky Linux或跳过中间版本平滑升级的方案,会是一个加分项。
系统初始化部分,笔试中常考的有分区、系统参数、安全设置和基础组件安装。以一台16G内存、500G磁盘的服务器为例,我一般建议的分区方案是:系统盘和数据盘分开,系统分区给50-100G,剩余空间全部给数据分区,如果数据库业务建议数据目录单独挂载。用一个LVM逻辑卷管理的好处是后续扩容方便,不用重新分区。如果机器内存比较大,比如64G以上,swap可以不用太大,或者按内存的0.5-1倍设置,避免频繁换页导致性能劣化。
装完系统后有一个很关键的步骤:调整内核参数和文件描述符限制。这里贴一段我常用的初始化脚本片段,笔试里写出关键参数并说明含义,比默写整段脚本更讨巧:
# /etc/sysctl.conf 常见生产参数 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_max_syn_backlog = 8192 net.core.somaxconn = 65535 net.ipv4.ip_local_port_range = 1024 65535 fs.file-max = 1000000 # 文件描述符限制 /etc/security/limits.conf * soft nofile 655350 * hard nofile 655350 * soft nproc 655350 * hard nproc 655350为什么这些参数重要?简单说,tcp_tw_reuse可以加快TIME_WAIT状态的连接回收,高并发场景下连接数才不会快速堆积;somaxconn和somaxconn能缓解短连接高峰时队列溢出;file-max和nofile则直接决定了服务能不能打开足够多的文件描述符。你不需要背下每个参数,但至少要能解释清楚"高并发下连接数不够用"这个经典故障和哪些参数有关。
安全初始化也是笔试里容易踩分的点:关闭不需要的服务、修改SSH默认端口或禁止root远程登录、配置防火墙只放行业务端口、统一ntp/chrony时间同步。特别是时间同步,很多新手会忽略,但游戏业务里的跨服交互、数据库日志排序、分布式锁都依赖时间一致,系统工程师没有时间同步意识会吃大亏。
2.3 第三步:基础组件与中间件部署
生产环境的组件部署,笔试题目中一般会挑一个最常用的组合来考:Nginx + MySQL + Redis。这三件套基本覆盖了Web业务最常见的技术栈,也是系统工程师日常维护中最常打交道的东西。
Nginx部署最核心的是它在架构里扮演的角色。笔试里常见的问题是"Nginx如何做负载均衡和反向代理",这时你需要给出一个带关键参数的配置示例,并且说明upstream里的策略。比如默认是轮询,weight可以配置权重,ip_hash可以保持会话,least_conn能把请求分给连接数最少的后端。另外,Nginx的调优不要只提worker_processes auto,还要知道worker_connections要结合ulimit -n来调,gzip、keepalive、静态文件缓存这些参数也需要掌握。
MySQL部署是重头戏。笔试中我印象最深的是"MySQL连接数被打满怎么办",这个题其实可以从三层去答:先应急,把max_connections临时调大或杀掉一些长事务;再排查,看SHOW PROCESSLIST里是哪些SQL占着连接,是不是因为慢查询堆积;最后根治,从连接池、慢SQL优化、读写分离、缓存多个角度去解决。数据库的innodb_buffer_pool_size设置也很常考,一般建议设为物理内存的60%-70%,如果服务器同时跑着Nginx和Redis,要适当调低,避免内存互相争抢。
Redis部署则要重点说内存淘汰策略和持久化。maxmemory一定要设置,否则Redis可能吃光服务器内存;maxmemory-policy的选择要看业务,缓存场景用allkeys-lru比较常见,有明确过期时间的场景可以用volatile-lru;appendonly yes开启AOF可以在一定程度上减少数据丢失,但同时要关注磁盘I/O压力。这里加分点是你能答出:Redis不是万能的缓存,使用前要考虑缓存雪崩、缓存穿透、缓存击穿,并给出相应的解决方案。
部署过程中的一个笔试技巧是:不要只写"我安装并启动了MySQL",而是写"我通过二进制安装MySQL,数据目录单独放在/data/mysql,关闭了默认的skip-name-resolve并解释原因,配置了binlog并验证开启成功"。每一个技术选型背后都有原因,面试官最反感的是知其然不知其所以然。
2.4 第四步:交付前的自检清单
很多考生答到"启动服务"就停了,但真正的生产环境里,服务启动只是开始。笔试里如果让你说说"系统上线前要注意什么",我会建议用一份自检清单来组织答案,这样既显得有条理,又能覆盖考官可能追问的各个细节。
下面是一份我自己常用的交付前检查清单,笔试中写出来会让答案完整度明显提升:
- 端口检查:
ss -lntp确认业务端口已监听,并且防火墙只放行了必要端口 - 连通性检查:从客户端用
curl -I或nc -vz确认服务可访问,测试HTTP状态码是否符合预期 - 日志检查:
tail -f业务日志确认无ERROR级报错,确认日志切割已配置 - 进程检查:
ps -ef确认服务进程正常常驻,systemd单元文件已配置restart=always - 监控检查:Node Exporter、Agent等监控组件已部署,能在监控平台看到主机指标
- 备份检查:MySQL等数据服务的备份任务已配置,执行一次备份并验证备份文件非空
- 资源检查:
free -h、df -h确认资源余量,关键目录没有即将写满的风险 - 安全检查:SSH禁root登录生效,不必要的服务已关闭,权限最小化
以自检清单切入,会自然引出后续维护的话题。我个人的心得是,笔试中"从零搭建系统"这类题想拿高分,必须在最后交代验证环节。面试官想看到的是,你不会把一个服务"假装启动成功"就交付,而是有完整的验收手段。
3. 搞定笔试里最容易被追问的:后续维护怎么做
3.1 监控告警体系:先定指标再选工具
笔试题目如果只答到"系统上线",后面一般还有一个连环追问——"上线之后你怎么保证它稳定运行?"这就是后续维护的核心命题。在这部分,监控告警是必考题。
很多人的第一反应是"装一个Zabbix/Prometheus",但只答工具不行,你要先回答监控指标怎么定,再回答工具怎么搭。监控的核心是指标,不是工具。一个生产系统至少需要关注四类指标:硬件层(CPU、内存、磁盘、网络)、应用层(进程存活、接口响应时间、错误率)、中间件层(数据库连接数、缓存命中率、消息堆积量)、业务层(在线人数、订单量、登录成功率)。游戏业务还要特别关注玩家在线数、登录队列长度、跨服通信耗时这类业务指标。
在监控工具选型上,我现在的习惯是Prometheus + Grafana + Alertmanager这套组合,配合Node Exporter采集主机指标。笔试中如果让你回答"如何监控一台服务器",你不需要把整个生态名词全堆出来,只要能把链路说清楚:数据采集、指标存储、规则告警、展示看板。以CPU告警为例,写一个Prometheus规则能让答题落地很多:
groups: - name: node_alerts rules: - alert: HighCpuUsage expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85 for: 10m labels: severity: warning annotations: summary: "{{ $labels.instance }} CPU usage high"这段规则表达的意思是:CPU使用率超过85%并持续10分钟才触发告警。这里有一个容易被忽略的经验——告警一定要避免抖动。如果没有for: 10m,CPU稍微波动一下就会刷屏,最后告警变成"狼来了",真正出事时反而没人看。笔试中如果你能主动提到"告警阈值要设置持续时间,避免误报",面试官会认为你踩过坑,是真的在生产环境里待过。
告警分级也是加分项。我一般分三级:紧急(服务宕机、数据丢失风险),需要立即处理,电话/短信通知;警告(磁盘使用率超过80%、CPU持续高),在工作时间内关注;通知(日常波动),只在看板记录。笔试中不要只写"CPU超了就告警",最好补充"不同级别对应不同通知渠道和响应时限"。
3.2 日志管理与故障排查思路
日志是系统工程师最重要的破案线索。笔试中"线上故障排查"类题目,如果没有日志意识基本就是空谈。我复盘时记得有一道题是"用户反馈服务变慢,你怎么排查",很多人上来就说用top看CPU,用free看内存,但一个合格答案应该先讲排查思路,再讲具体命令。
我自己的排查思路是把一条用户请求从客户端到后端完整走一遍。比如游戏玩家登录变慢,链路是:客户端 -> DNS -> 负载均衡 -> Nginx -> 游戏逻辑服 -> MySQL/Redis。第一步先用ping和dig确认网络和DNS正常;第二步用curl -w看Nginx响应时间,区分是网络慢还是后端慢;第三步进入应用服务器,用top看CPU和负载,free看内存,iostat看磁盘I/O;最后再结合日志,看请求在哪个环节耗时最多。
日志管理层面,笔试常考的包括:日志切割、日志集中收集、日志备份与清理。日志切割最常用的是logrotate,按天切割并保留N份,避免单个日志文件无限变大。日志集中收集如果公司规模小,可以用Loki + Promtail + Grafana这套轻量方案,比ELK省资源;如果日志量大、需要复杂检索,再考虑Elasticsearch。笔试里提到ELK时,最好能说清每条日志的流转路径:Filebeat采集 -> Logstash处理/Filter -> Elasticsearch存储 -> Kibana展示。
补充一个我在真实环境踩过的坑:日志不是越多越好,也不是所有的日志都要收到集中平台。游戏业务经常会打超详细的Debug日志,一天几个GB,收进ES后存储成本飙升。合理做法是生产环境只收集WARN和ERROR级别的关键日志,需要临时排查时再动态调高采样级别。这个取舍意识,比单纯会装一套ELK更能体现系统工程师的价值。
3.3 备份、容灾与演练
"没备份就是没运维"这句话在系统工程师圈子里是血泪教训。笔试中数据库备份和恢复几乎是必考项,特别是游戏公司,玩家数据一旦丢失就是灾难性事故。我看到不少考生能背出mysqldump的参数,但问"怎么验证备份是好的"就答不上来,这其实才是真正的考点。
关于MySQL备份,我的方案是:小数据量(比如10G以内)可以用mysqldump逻辑备份,简单直观;大数据量建议用xtrabackup做物理备份,速度更快、对业务影响更小。核心是要说明binlog的作用——全量备份只是某个时间点的快照,真正要做到任意时间点恢复,必须结合binlog做增量恢复。笔试中如果出一题"误删了表中的数据,如何恢复",你的思路可以是:用最近一次全量备份恢复数据文件,再通过binlog把数据回放到误删操作之前的时间点。
备份的保留策略也可以用一句口诀来记:日备保留7天,周备保留4周,月备保留半年或一年。备份文件要定期做恢复演练,不要等到真出事才发现备份文件是坏的。恢复演练这件事,笔试里能说出来就是小亮点,实际工作中更是救命咒语。云主机的话,还可以定期打快照,比如每天凌晨一次,快照不等于备份,但作为补充手段成本低、恢复快。
游戏行业还有一个特别的场景:合服和开服。开新服时大量的初始化脚本和配置要自动化,合服时数据库合并和玩家数据校验必须有完整方案。笔试中如果遇到"新开一组游戏服,你怎么规划"这种开放题,可以从容量评估、基础环境初始化、配置文件管理、监控接入、开服验证几个点展开,把自己代入真实的运维流程。
3.4 变更管理与日常巡检
生产环境最怕的不是出问题,而是"乱变更"导致出问题。笔试中关于后续维护的题,如果只答监控和备份还不够,要有变更管理和巡检制度的意识。比如"线上系统需要升级Nginx版本,你如何保证不影响业务",完整答案至少包含:先在测试环境验证、准备好回滚方案、选择业务低峰期操作、分批灰度、操作后观察监控指标。能答出"变更前必须准备回滚方案"这一点,基本就能和普通考生拉开差距。
日常巡检也值得写进答案里。巡检不能只是登录服务器敲一遍uptime就完事,而是应该有节奏和内容。我一般把巡检分成日、周、月三个级别:
- 日检:CPU负载、内存使用率、磁盘空间、关键进程状态、昨日错误日志
- 周检:数据库备份结果、慢查询数量、证书有效期、系统更新补丁状态
- 月检:全量备份恢复演练、日志归档清理、容量趋势分析、漏洞扫描与安全加固
巡检不是走过场,而是要形成记录。记录里要有当前值、上周值、趋势判断。例如磁盘使用率上周70%、这周78%,如果增长率不变,多久会到90%,这个预判往往比告警来得更早。笔试中如果能把巡检表单化,并强调"基于趋势提前干预",会非常像一个有经验的系统工程师。
4. 笔试中常见的坑与答题加分技巧
4.1 我看到的高频扣分点
复习那些年我见过太多人在同一类问题上丢分,这里集中盘点一下,如果你正在准备笔试,可以拿来自查。
第一个大坑是只写操作不写原因。比如"我修改了/etc/security/limits.conf",但没有解释为什么改、改完怎么验证、对业务有什么影响。系统工程师不是执行命令的人,而是决策和执行并重的人。任何操作题,我都推荐用"目标 -> 方案 -> 验证"三段式来写答案。哪怕笔试时间紧张,至少也要在关键操作后补一句原因。
第二个大坑是忽略验证和回滚。很多答案停留在"服务已启动",但没有说明如何确认服务正常,也没说如果异常如何回滚。生产环境里,任何变更都有风险,没有回滚方案的变更就是赌命。笔试答题时主动加上"我会先备份原配置,变更后立即检查端口、进程和日志,异常则迅速恢复",这十几个字含金量很高。
第三个大坑是不分优先级,把所有知识点平铺。比如题目问"系统卡顿如何排查",有人从DNS一路背到数据库,中间没有重点。实际上应该先从负载、CPU、内存、磁盘、网络这五个维度做快速判断,定位到瓶颈后再深入。回答要体现"先看整体,再聚焦局部"的思路。
第四个大坑是忽视安全与用户权限。作为系统工程师,如果答题时提到数据库密码只想到写死在配置里,或者没有关闭不必要的端口,这些细节都会被扣分。安全不是一个单独的知识点,而是贯穿所有系统操作的原则。最小权限、白名单、定期轮换密码,这些基本素养要在答案中自然流露。
4.2 高频场景题速查
笔试场景题是最难临场发挥的,因为它考察的是工程经验和解决问题的方式。我把这些年遇到的高频场景题整理成一张速查表,建议你复习时对着它练习"快速形成排查思路":
| 场景 | 首选排查方向 | 关键命令/手段 | 加分补充 |
|---|---|---|---|
| CPU飙高 | 定位高CPU进程/线程 | top/pidstat/jstack | 输出线程堆栈看代码热点 |
| 磁盘空间满 | 定位大文件/目录 | df -h/du -sh */`lsof | grep deleted` |
| inode耗尽 | 检查小文件数量 | df -i/`find | wc -l` |
| TIME_WAIT过多 | 检查TCP连接状态 | ss -s/netstat -ant | 结合tw_reuse/keepalive优化 |
| MySQL连接数打满 | 查看processlist | SHOW PROCESSLIST | 杀长事务+连接池调优 |
| 内存不足/Swap飙高 | 检查进程RSS | free -h/ps aux --sort=-%mem | 排查内存泄漏或jvm堆设置 |
| 网络丢包/延迟 | 分段检查链路 | ping/mtr/tcpdump | 区分公网、内网、本机问题 |
| Redis缓存穿透 | 检查命中率与热点key | INFO stats/redis-cli monitor | 加布隆过滤器或空值缓存 |
这张表本身并不神奇,神奇的是你要能根据具体题干灵活调整顺序。比如题目如果强调"服务器突然负载高",就不要一上来抓数据库,要先看是CPU还是I/O,再判断是正常业务高峰还是异常脚本。系统工程师最忌讳的是用套路硬套问题,先收集数据、再下结论才是正确姿势。
4.3 怎么把"经验感"写进答案
同样一道笔试大题,有经验的系统工程师和应届生写出来的答案,区别往往不是知识量,而是答案里有没有"现场感"。我总结了几个写作技巧,可以让你的答案看起来更像一个真正维护过生产环境的人。
第一,使用具体数值而不是模糊描述。比如回答"我会定期备份",不如写"每天凌晨2点用xtrabackup做全量备份,保留7天,每周六做一次归档备份,每月最后一天做一次月度备份并异地拷贝"。数值会让答案变得可信,但不要胡编,尽量贴近常用实践。
第二,主动写出"我如何判断"而不是只写"我做什么"。比如"我会用curl -o /dev/null -s -w '%{http_code} %{time_total}'来判断接口可用性和响应时间",这种表达能让面试官看到你具备验证意识。很多操作题其实并不难,难的是你能想到去验证。
第三,会在答案里区分"快速止血"和"根治方案"。生产环境出了故障,第一时间不是重构代码,而是先恢复服务。比如MySQL连接数被打满,你可以先临时调大连接数让业务恢复,同时马上排查慢SQL,最后再决定是优化索引、上读写分离还是加缓存。能分清楚这两个阶段,证明你对生产故障有真实认知。
第四,不要忽略"复盘和沉淀"这件看似务虚的事。笔试里如果问"你怎么提升系统的稳定性",不要只答监控告警,还可以提到:每次故障后要写复盘文档,记录故障时间、影响范围、根因分析、处理过程和改进项。系统工程师的价值一方面体现在故障发生时能快速恢复,另一方面体现在通过复盘让同样的故障不再发生。
最后说点个人体会
笔试结束这么久,我印象最深的不是某道具体的题目,而是这种岗位考察方式背后的逻辑。系统工程师和开发最大的不同,不是命令背得多熟,而是你有没有把一台服务器当成一个需要长期照看的生命体。上线前做规划,运行中盯监控,出问题能快速定位,事后能复盘并沉淀成文档,这一整套循环才是这个岗位真正的核心能力。
我自己踩过最大的坑就是刚接触生产环境时,只重部署不重验证。服务启动成功了就觉得万事大吉,结果第二天发现数据没有备份、磁盘没有监控、日志没有切割,差点出大事。那次之后我才明白,笔试里反复出现的"从零搭建一个系统并做好后续维护"从来不是一句空话,它就是系统工程师每一天在做的事。准备笔试或刚入职的朋友,别急着追求花哨的容器化、自动化,先把"一台裸机到稳定生产节点"这套基本功彻底吃透。地基稳了,后面学调度编排、云原生才有根。