尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

网易校招数据库运维笔试全解析:从Linux到高可用架构

网易校招数据库运维笔试全解析:从Linux到高可用架构 1. 笔试卷结构与出题逻辑一场“反背题”的能力筛选先说结论网易2018校园招聘数据库运维工程师BJ笔试卷放到今天来看依然是校招题库里非常有代表性的一套它考察的不是你会不会背某几条命令而是你在真实生产环境下能不能“活下去”。整张卷子围绕Linux基础、MySQL核心机制、SQL编写与优化、备份恢复策略、高可用架构这几大块展开看似每个知识点都见过但组合到一起就筛掉了一批只会刷题的人。我当年参加校招时吃过类似的亏这里先讲一个很重要的认知**校招笔试题和你在培训班里做的练习题是两码事。**练习题喜欢问“MySQL的默认端口是多少”“innodb_buffer_pool_size参数的作用是什么”这种单点知识但大厂的笔试题喜欢给你一个场景让你在场景里做判断。比如同样考察主从复制练习题会问“binlog有哪几种格式”而网易这套卷子的风格是给你一个“某业务写入量突增从库延迟持续拉大”的案例让你分析原因、给出排查步骤、提出解决方案。这就是“背题模式”和“能力模式”的区别。既然要拆这套卷子我们先把整体的知识地图铺开。数据库运维工程师这个岗位核心职责就是保证数据库稳定、高效、不丢数据。围绕这个职责笔试的考察目标可以拆成三层第一层基础操作能力。Linux常用命令、文件系统、进程管理、网络排查以及SQL增删改查的编写能力。这层考察的是你“能不能干活”。第二层机制理解能力。MySQL的存储引擎、事务隔离级别、锁机制、主从复制原理、binlog格式、缓冲池替换策略等。这层考察的是你“懂不懂原理”出问题的时候能不能定位到根因。第三层架构设计能力。备份恢复策略怎么定、高可用方案怎么选、分库分表怎么设计、监控告警怎么搭。这层考察的是你“有没有全局视野”能不能在系统设计阶段就把隐患消灭掉。很多同学复习时只盯着第二层因为网上关于MySQL原理的文章最多但实际笔试时三层是交错的。Linux操作题里可能带SQLSQL题里可能带索引优化索引优化背后又牵扯到存储引擎的实现。所以这篇拆解我不会按试卷的题型顺序走而是按“从基础到原理再到架构”的逻辑把考点重新串一遍这样对备考更有参考价值。2. Linux与SQL基本功校招笔试里的“送分题”其实不送分2.1 Linux常用命令的考察方向不止是“会用”而是“会排查”数据库运维的第一技能不是数据库而是Linux。网易这套卷子里涉及的命令考察方向非常明确**让你在限定场景里选对命令或者直接让你写出排查步骤。**比如给你一台MySQL服务器说“连接数被打满”问你用什么命令查当前连接状态、用什么命令看网络连接数、怎么快速定位是哪个IP在疯狂建连。这就是典型的运维场景题。相关热搜词里“linux常用命令大全”“网络运维工具箱”反复出现说明这是很多人的痛点。我按优先级给大家梳理一套校招笔试必须掌握的Linux命令树场景核心命令笔试常见问法磁盘与空间df -h、du -sh、iostat、fdisk -l磁盘写满怎么处理如何找到占用最大的目录内存与CPUfree -m、top、vmstat、ps auxCPU飙高怎么看是哪个进程内存不足怎么排查网络排查netstat/ss、ping、telnet、tcpdump应用程序连不上数据库怎么判断是网络问题还是服务问题日志与定位tail -f、grep、less、find如何从几GB的日志里快速筛出错误信息进程与服务systemctl、kill、ps、crontab如何安全重启MySQL如何定时执行备份脚本这里有一个容易忽略的细节笔试考的不是命令本身而是命令组合。比如排查一条SQL慢查询你单看mysql的slow log字段不会操作但结合Linux命令就能形成完整链路先用top看MySQL进程CPU占用是否异常再用tail -f跟踪慢查询日志再用grep筛出同一模板的SQL最后用mysqldumpslow汇总排序。这一串操作在笔试简答题里就是一道标准答案。另一个高频点是文本处理三剑客grep、sed、awk。大厂笔试几乎必考比如“有一个access.log每行格式为IP 时间 URL 状态码请用awk统计每个IP的出现次数并按次数降序输出”。这个命令就是awk {print $1} access.log | sort | uniq -c | sort -rn。看着简单但很多人栽在忘记加sort管道或者不知道awk默认按空格分割。这类题只要你多动手敲几遍基本不会失分。2.2 SQL基本功增删改查之外的“隐藏考点”“数据库增删改查”这个热搜词看起来入门级但网易笔试的SQL题完全不是让你写几条insert、select完事。它的典型考察方式是给你两张业务表让你写一条满足复杂条件的查询并且要求使用到索引。比如学生表学号、姓名、院系、成绩表学号、科目、成绩让你查“每个院系总分排名前3的学生”。这题要求你理解group by、子查询、关联查询的综合用法同时能想到用窗口函数或者变量游标来实现排名。校招阶段多数人对SQL的掌握停留在“能查出来”而不是“查得高效”。笔试题目不会明说“请优化”但阅卷时一定会看你的写法。**同一个查询全表扫描的写法和走索引的写法得分差距是按层级拉的。**比如WHERE YEAR(create_time) 2018这种写法虽然结果对但在create_time列上用了函数导致索引失效正确写法是WHERE create_time 2018-01-01 AND create_time 2019-01-01。这在笔试里是一个很经典的陷阱因为功能上等价但性能上是天壤之别。再补充一个容易被忽略的点SQL笔试题里的“隐含事务”考点。有经验的DBA写批量更新时会主动包事务但校招生往往忽略。比如一道题让你“把A表所有status1的记录更新为status2同时B表插入对应操作日志”如果你没包事务中途一条语句失败就会造成数据不一致。这个考点看起来是SQL题实际考的是运维人员的“数据安全意识”在笔试卷里反复出现。3. MySQL核心机制拆解主从复制、事务与锁是重头戏3.1 主从复制原理与考试常见问法MySQL主从复制是数据库运维笔试的绝对核心网易这套卷子几乎不可能绕过。相关热搜词里“mysql同步”“数据库同步软件”频繁出现说明这也是日常工作里的重点难点。主从复制的基本流程可以概括为三个线程配合主库binlog线程记录变更从库I/O线程拉取binlog并写入relay log从库SQL线程回放relay log。这个流程必须能完整画出来、说出来。笔试常考的第一个问题是binlog有哪几种格式分别有什么优缺点statement格式记录SQL语句日志量小但存在不确定函数导致主从数据不一致的风险row格式记录实际行变更最安全但日志量大mixed格式混合使用。校招笔试里常让你分析“为什么生产环境推荐row格式”答案不只是“更安全”还要提到“row格式支持闪回和数据误操作恢复”——这已经牵扯到备份恢复的范畴了。第二个必考点是主从延迟。典型的笔试题是“某业务高峰期从库延迟达到500秒可能的原因有哪些怎么解决”这是一个开放性分析题踩分点很分散主库写入并发太高单线程SQL线程回放不过来。解决方案是老生常谈的并行复制但你要能说出MySQL 5.7的MTS多线程从库基于database或者基于commit timestamp两种分发逻辑的区别。从库硬件配置差磁盘IO能力跟不上relay log的回放速度。大事务。一个大事务在主库执行了20分钟binlog记录完成后从库要完整回放20分钟这段时间从库延迟持续拉大且追不上。这就是为什么运维规范里反复强调“避免大事务”。从库上有查询压力和回放线程争抢IO资源。一道主从延迟的题能同时考察你对复制原理、硬件知识、事务机制、线上规范的理解性价比极高。备考时一定要把每个原因都拓开去复习不能只背结论。第三个盲区是主从切换的数据一致性。比如笔试问你“主库宕机后如何在从库上提升一个新主库怎么保证数据不丢”这里涉及半同步复制、GTID、binlog位点等概念。2018年时GTID已经比较成熟了笔试卷里很可能出现“基于GTID的主从切换流程”这种题。你要能做到知道SHOW SLAVE STATUS里Executed_Gtid_Set和Retrieved_Gtid_Set的差异知道选举新主库时怎么对比各从库的GTID集合选出最接近原主库的节点。3.2 事务隔离级别与数据库死锁分析事务和锁是另一块必考阵地。“数据库死锁”这个热搜词说明它在实际工作中是高频事故笔试自然爱考。先理清四个隔离级别读未提交Read Uncommitted、读已提交Read Committed、可重复读Repeatable Read、串行化Serializable。MySQL默认是Repeatable ReadOracle默认是Read Committed。笔试题如果给你一个隔离级别和一组并发操作让你判断会不会出现脏读、不可重复读、幻读你首先要能把这个对应关系背下来隔离级别脏读不可重复读幻读读未提交可能可能可能读已提交不可能可能可能可重复读不可能不可能可能InnoDB间隙锁下可避免串行化不可能不可能不可能死锁是另一个高频题。笔试题模式通常是**给两个并发事务的操作序列让你分析是否会发生死锁如果会请说明加锁过程。**比如事务A先更新表X的记录1事务B先更新表Y的记录2然后A再更新记录2B再更新记录1——这个必然死锁。但笔试的陷阱往往是把顺序写得比较隐蔽你需要自己画出每个事务持有的锁和等待的锁形成等待环。更进阶一点的考法是排查死锁的命令SHOW ENGINE INNODB STATUS里LATEST DETECTED DEADLOCK段会显示最近一次死锁的详细信息包括两个事务的SQL语句、持有和等待的锁记录。备考时要会读这段输出笔试简答题里如果给你一段死锁日志让你分析原因并给出解决方案你能说出“两个事务对同一行记录的锁请求顺序不一致”就已经拿到了核心分。还有一个值得注意的点是锁的粒度问题。行锁、间隙锁、下一键锁Next-Key Lock的区别以及它们在可重复读级别下的作用。幻读的解决就依赖间隙锁。笔试可能会给你一个范围查询比如WHERE id BETWEEN 10 AND 20让你说这个查询在可重复读下会锁住哪些范围——答案是不仅锁住已存在的记录行还会锁住这个范围内的间隙防止其他事务插入新的记录。这个概念对校招生来说比较抽象但恰恰是区分“背过八股”和“真懂原理”的分水岭。4. 备份恢复与高可用架构运维工程师的核心价值4.1 备份策略设计与binlog分析能力数据库运维圈有句话“没有备份的DBA不是DBA没做过恢复演练的DBA不是合格的DBA。”网易这套笔试卷里备份恢复一定占比较大的分值而且很少只考“mysqldump的常用参数”这种单纯记忆题更多是给你一个业务场景让你设计备份方案。典型题目“某业务库容量500GB每天增量约10GBRTO要求1小时RPO要求最多丢失5分钟数据请设计一套备份方案。”这一题考察的全是实战权衡全量备份方式逻辑备份用mysqldump物理备份用XtraBackup。500GB的库mysqldump导出再导入的时间可能远超RTO要求所以生产环境应该选择物理备份。XtraBackup可以在线备份不阻塞业务但要注意它是Percona的工具需要对应MySQL版本。增量与差异策略每天凌晨做全量备份还是每周一次全量每天增量增量备份用binlog实现归档binlog文件。这里要能说出binlog的三种格式选择在生产环境通常为row因为它对数据恢复更友好。binlog的恢复姿势给定一个时间点怎么用binlog恢复到该时间点mysqlbinlog --stop-datetime或--start-position和--stop-position这两个参数怎么配合使用。更关键的是如果误操作是DROP TABLE你要能回答出“先恢复最近的物理备份再用binlog从备份点开始重放到DROP之前的位置”这个完整链路。RTO和RPO的区别与取舍RTO是恢复时间目标RPO是恢复点目标。如果RPO要求小于5分钟意味着binlog要同步到远端或者用半同步复制保证从库不落后太多。如果RTO要求1小时那么“冷备异地备份”可能不够需要预热从库或者定期做恢复演练。还有一个容易被忽略但笔试很可能出现的点备份文件本身的安全性。备份文件存放在和主库同一台机器的磁盘上如果机器磁盘损坏备份也跟着没了如果备份文件明文存储被入侵之后等于把全部数据拱手送人。所以备份策略里还要包含加密存储和异地存储。这个点很多人会漏但写上就是加分项。4.2 高可用方案的选择题MHA、keepalived等方案的权衡高可用永远是运维笔试的大题方向。2018年MySQL高可用的主流方案还是MHA搭配keepalived或者LVSMMM已经逐渐被淘汰。相关热搜词里“互联网系统运维和国企系统运维的区别”也隐含了高可用架构的选型差异——互联网企业更看重自动切换和快速恢复传统企业可能更看重数据安全和切换可控。笔试常见问法是“对比MHA和keepalived方案的优缺点你会怎么选”这是一个开放题没有标准答案但你的回答要体现出对方案适用场景的理解keepalived方案通过虚拟IP漂移实现主从切换配置简单切换速度快但存在“脑裂”风险需要配合脚本检测MySQL存活状态。keepalived本身只负责IP漂移不感知数据一致性可能发生主库实际活着但VIP已经漂移到从库的情况。MHA方案专门为MySQL主从切换设计可以在很大程度上保证数据一致性支持GTID能自动选择最合适的从库提升为新主库并把其他从库重新指向新主库。缺点是切换耗时较长几秒到几十秒需要额外的管理节点。半同步复制这个不是独立方案但高可用笔试几乎必问。主库在提交事务时必须等到至少一个从库确认收到binlog才返回客户端成功这样主库宕机时不会丢失已提交事务。你要能说出半同步复制在性能和数据安全之间的取舍。另外还有一个高频考点为什么主从复制不能完全替代备份原因至少要列出三点一是人为误操作比如DROP DATABASE会通过binlog同步到从库从库也一样被删二是从库数据损坏可能不被及时发现三是如果从库落后主库较长时间它本身就不是一个完整的数据副本。这题就是考察你对“复制”和“备份”这两个概念本质区别的理解。4.3 国产数据库与数据库同步工具从笔试延伸出的现代视野相关热搜词里出现了达梦数据库、人大金仓、GaussDB等国产数据库可能有人觉得奇怪2018年的笔试卷怎么会涉及这些其实笔试的参考价值不在于原题重现而在于知识体系的延展。达梦数据库的安装部署、人大金仓在Docker下的运行模式、GaussDB适配Nacos这类话题在当下已经是数据库运维工作里真实存在的一类任务了。我的建议是备考时不必死磕某个国产数据库的操作细节但一定要理解通用数据库原理在不同产品上的映射。比如达梦数据库也支持类似Oracle的表空间、用户、权限管理也提供逻辑备份和物理备份工具也支持主备集群。你掌握了MySQL的原理再迁移到其他数据库时核心概念是相通的只是命令和工具链要重新熟悉。笔试如果出了这类题通常考察的是“你有没有迁移能力”而非“你是否背过达梦的命令”。数据库同步工具这个话题也是同理。MySQL本身的主从复制是最基本的同步方式但大数据场景下还要了解Canal、DataX这类组件。Canal模拟MySQL从库协议拉取binlog变更再将变更投递到消息队列或下游存储是实现缓存与数据库最终一致性的常用手段。笔试不一定会考到这么深但如果你在答案里能引出“除了MySQL原生复制还可以通过解析binlog实现异构数据同步”会让阅卷人觉得你是有生产知识储备的不只是会刷题。5. 实操题与排查思路模拟像真正的DBA一样解题5.1 一道SQL调优题的全过程演示笔试卷里的实操题通常是一个“看起来简单但到处是坑”的SQL调优场景。我拿一道很典型的题来模拟题目大致是“有一个订单表ordersorder_id, user_id, status, create_time数据量一亿行查询语句为SELECT * FROM orders WHERE statusUNPAID AND create_time 2018-01-01 ORDER BY create_time LIMIT 10执行需要十几秒请分析原因并优化。”这道题的正确打开方式不是直接给一个“加索引”的答案而是要展示完整的诊断思路第一步看执行计划。EXPLAIN这个关键动作必须出现在答案里。你会看到typeALL表示全表扫描rows100000000Extra里可能有Using filesort。这一步说明查询走了全表扫描且排序用了文件排序性能必然差。第二步分析索引选择。如果建了单列索引idx_status(status)由于status字段区分度不高只有几个值优化器可能放弃索引直接全表扫描。所以在字段区分度低的情况下单列索引不一定有效。第三步设计联合索引。idx_status_create_time(status, create_time)这样既能用status快速过滤又能利用索引的有序性消除filesort。这里要注意字段顺序等值条件字段放前面排序字段放后面这是联合索引设计的基本规则。第四步考虑回表问题。如果查询列都包含在索引里可以使用覆盖索引避免回表。但这里SELECT *包含所有列覆盖索引不可能完全覆盖只能通过索引过滤加回表查询。如果回表次数过多还可以考虑分页优化把“用索引定位主键 主键回表查详情”改写成子查询方式。这四步走完一个调优题的答案才算完整。校招笔试的评分逻辑就是这样你要让阅卷人看到你不是只会说“加索引”而是知道为什么加、加在哪、加了之后能不能生效。顺便说一句这种题型当年我备考时练了几十道每一道都按“看执行计划→找瓶颈→设计索引→验证”的流程走笔试时遇到任何SQL题都有底气。5.2 主从延迟排查一份标准的“急诊流程”主从延迟是运维工作中最常见的“急诊”之一。笔试的实操题会让你扮演一个值班DBA假设收到告警“从库Seconds_Behind_Master持续300秒”给你几分钟写排查方案。我按一线DBA的排查习惯给你整理一个标准线索链第一件事确认现象。登录从库执行SHOW SLAVE STATUS\G看Seconds_Behind_Master的数值同时看Slave_IO_Running和Slave_SQL_Running是否都是Yes。如果SQL线程停了延迟数字会不断增长且不下降这是复制中断不是单纯的性能延迟处理优先级立即提升。第二件事判断瓶颈在IO还是SQL线程。看SHOW PROCESSLIST如果System lock状态居多说明SQL线程在等待锁如果大量Reading event from the relay log且IO占用高说明磁盘IO是瓶颈如果CPU在跑满但SQL线程仍然追不上可能是单线程回放能力到极限了。第三件事从主库定位源头。在主库执行SHOW MASTER STATUS对比从库的Read_Master_Log_Pos和Exec_Master_Log_Pos。如果从库已经把binlog拉过来了但SQL线程回放慢说明问题在从库自身如果还没拉过来说明网络或者主库binlog产出有问题。第四件事定位大事务或者大DDL。查询主库的binlog找出内容量特别大的事务。典型的场景是有同事在业务高峰期跑了ALTER TABLE重建大表这个操作在binlog里是一个超大事务从库SQL线程必须完整执行完才能继续后续回放。另一个典型是定时任务在凌晨做了大批量DELETE每行都记录binlog导致从库延迟飙升。这个排查思路比单纯的背命令有价值得多。因为运维的日常就是“现象→定位→解决→验证”笔试实操题想看的正是这个思考链路的完整性。6. 常见问题与笔试避坑心得6.1 面试官追问的高频点八股文背得溜不是万能的笔试之后往往还有面试环节我在这个行业摸爬滚打多年面试官针对笔试卷追问的点其实有规律可循。这里整理几个高频追问方向第一个高频追问是“你刚才写的主从复制流程里从库I/O线程拿到binlog之后会发生什么”这一问就把纯粹的记忆题变成了机制理解题。你要能说出I/O线程把binlog事件写入relay logSQL线程读取relay log并解析执行relay log和应用位置分别记录在Relay_Log_File和Relay_Log_Pos同时Exec_Master_Log_Pos记录已应用的主库binlog位置。如果答不出来说明你只是在背概念没有真正理解整个复制的完整闭环。第二个高频追问是“如果主库宕机从库有5秒的数据差异你能接受吗”这其实是在考察你对RPO的理解。有人会脱口而出“不能接受”但现实中要分业务场景。对交易系统来说5秒数据丢失等同于事故对数据分析平台来说5秒的延迟可能毫无感知。你要展现的是“我能根据业务需求定义容忍度并据此选择对应的高可用方案”这种思考方式。第三个高频追问是“你做过最复杂的故障排查是什么”这个问题不是笔试范围内的但回答得好坏直接影响最终评价。我自己的经验是哪怕没有真实生产经验你也要把实习时接触过的场景、或者自己搭建实验环境时踩过的坑讲出逻辑性。重点不是故障有多严重而是你能不能清楚地说出“现象→假设→验证→根因→修复→预防”这个闭环。6.2 现场笔试的答题策略时间分配与踩分技巧网易这套卷子题量不小覆盖范围广现场笔试时间其实挺紧张。我根据自己的考试经验总结几条实操性很强的答题策略优先做大分值题这是最朴素也最有效的策略。通常最后一道架构设计题或综合案例分析题分值最高但很多人把时间耗在了前面的SQL题目上导致最后大题草草写几行。我的习惯是拿到卷子先花两分钟浏览全部题目标出高分题从高分题开始做前面如果卡住了就跳过去绝不恋战。开放性分析题要写“分点回答”。比如让你分析主从延迟原因你写一段话和写一条条分点阅卷体验完全不一样。分点回答不仅让阅卷者快速找到你踩中了哪些点也会让你自己的思路更清晰避免漏掉某个原因。我见过很多人明明知道好几个原因但全揉在一大段文字里阅卷人看着费劲分也给得保守。遇到不会的题把相关的基础公式和原理写上去。比如有一道题关于InnoDB内存结构对性能的影响你记不清每个池的具体参数但你知道Buffer Pool是InnoDB缓存表和索引数据的内存区域把“扩大buffer_pool可以提升命中率减少IO”写上去至少能拿到部分踩分点。总比空白强得多。注意卷面上的“关键词”暗示。笔试题的题干里往往藏着出题人的提示比如题目里提到“数据一致性要求高”答案里就一定要体现对一致性机制的考虑提到“高峰期”就一定要考虑到并发和锁的影响。这些词不是随便写的它们是在引导你往正确的方向上答题。6.3 备考路上的实用建议实验环境比题海战术更有用最后这条建议不仅针对网易这套笔试卷也适用于所有数据库运维岗位的校招备考一定要花时间搭一套自己的实验环境。虚拟机装两个MySQL实例一个主一个从亲自配置主从复制然后模拟各种故障手动kill主库进程、在从库执行大查询、往主库灌大事务。这些操作做一遍比刷十套笔试卷都管用。我在学习阶段就是这么干的。在自己搭的环境里我第一次真实看到了Seconds_Behind_Master跳变的过程第一次通过SHOW ENGINE INNODB STATUS看到死锁日志的完整输出第一次成功用binlog把误删的表恢复回来。这些亲身经历让我在笔试和面试时谈起原理不再是抽象的概念复述而是带着操作记忆的“真知道”。碰到不会的问题优先自己动手验证。比如你一直没弄明白RR隔离级别下Next-Key Lock到底锁了什么那就在实验环境里开两个会话自己跑一遍观察阻塞情况。这种自我验证带来的理解深度是任何培训班都替代不了的。我个人在实际操作中的体会是校招笔试本质上是在筛“有基础、有逻辑、有练习意识”的人而不是筛“背过最多理论”的人。知识框架有了实验经验有了剩下的就是放平心态把自己的思考过程清晰地写到卷面上。这套网易的题哪怕放到今天依然是很好的练兵素材按这篇文章梳理的结构去备考把Linux命令、MySQL原理、备份恢复、高可用选型这几个模块逐个攻克我相信你一定能拿到心仪的offer。
返回列表