拓冰建站拓冰建站
首页 / 资讯中心 / 正文

爱奇艺运维笔试深度复盘:Linux、Nginx、MySQL考点全解析

1. 先聊聊这份卷子爱奇艺运维岗笔试在考什么爱奇艺2019秋招运维方向笔试题A放在今天看依然有很强的参考价值。原因很简单视频网站是互联网行业里运维挑战最大的一类业务海量带宽、超高并发、7×24小时可用性要求、成本压力都摆在那里笔试题目必须贴着真实场景出没办法靠背概念混过去。我拿到这份卷子的第一感觉是八个字基础为骨场景为肉。它不会直接问你“Nginx有哪些特性”这种纯背诵题而是把Nginx配置、网络排查、数据库慢查询全部揉进一个“线上视频加载变慢”的场景里一上手就知道你有没有真刀真枪干过运维的活儿。围绕这套题不需要把关注点局限在“把原题做对”这一层。更值得做的是把它当成一套体检清单逐项检查自己在Linux、网络、数据库、缓存、中间件、脚本能力、故障排查这七个维度上到底哪里还有缺口。这也是我写这篇复盘的核心目的把爱奇艺这份A卷背后真正想考察的能力地图摊开告诉你每个考点怎么复习、怎么答题、哪里最容易丢分。1.1 题型分布与命题思路按照2019年秋招的普遍情况来看这份A卷的题型结构大概是选择题20道左右覆盖Linux、网络、数据库、常见中间件每题1到2分简答题4到6道主要考原理和流程例如“简述一次完整的HTTP请求过程”脚本题1到2道Shell或Python任选要求现场写代码解决一个实际问题最后是一道大的场景分析题给一段故障描述让你写排查思路和解决方案。整体答题时间90到120分钟题量不算大真正的难度在每道题都在试探你的工程直觉而不是记忆容量。出题逻辑上爱奇艺这类视频网站和普通业务系统有明显区别。视频业务的链路特别长用户从App点一个播放按钮开始要经过DNS解析、CDN调度、防盗链校验、鉴权、分发、源站取流、转码产物读取、日志上报等环节任何一个环节出问题都会影响播放体验。所以运维笔试里会出现大量和“链路”相关的题目比如CDN回源失败怎么排查、如何辨别是客户端问题还是服务端问题、缓存命中率低怎么优化。复习时如果只按传统运维的“装系统、配环境、写脚本”思路来准备遇到这类题会很吃亏。1.2 这份卷子适合谁、怎么刷这份卷子适合三类人。第一类是准备校招的应届生想搞清楚运维笔试到底考什么这份A卷是一个很典型的样本第二类是工作一到两年的初级运维想系统梳理自己的知识盲区可以用题目倒推自己的技能树哪里不完整第三类是准备跳槽的社招同学虽然社招主要面项目和实操但核心考点是相通的用来查漏补缺同样有价值。怎么刷这份题最有效我的建议是三步走先按考试时间完整做一遍不管会不会都逼自己写出答案然后对着考点逐个梳理把每道错题背后涉及的知识点展开复习不要只背正确答案最后把典型的场景题和脚本题在本地机器上实际跑一遍看到真实输出。标题后面有个“A”说明这套题大概率还有B卷。A卷和B卷难度差别通常不大只是题目顺序和案例细节有变化所以这套复盘方法对B卷同样适用。我一直强调不要背题要背思路思路通了换个壳照样能解。2. Linux与网络基础选择题最密集的得分区2.1 Linux常用命令与系统原理Linux部分在A卷里占了选择题的大头大概有8到10道属于整张卷子最容易拿分的区域因为考点非常固定。命令考察集中在几个方向上进程管理ps、top、htop、网络排查netstat、ss、磁盘管理df、du、iostat、文本处理grep、awk、sed、find、权限管理chmod、chown、umask、打包压缩tar、rsync。我建议把每个命令的常用参数、输出格式、典型使用场景都过一遍尤其是awk和sed笔试里几乎必出而且通常会以“组合拳”的形式出现。这里说一个很多人踩过的坑。题目会问“下面哪个命令能统计出日志文件中访问次数最多的IP”选项里给你cat、grep、awk、sort、uniq的各种组合。很多同学会在五个选项里来回纠结其实这种题考的是命令组合能力标准做法是awk {print $1} access.log | sort | uniq -c | sort -rn | head -10。这一条管道里包含了awk提取列、sort排序、uniq去重计数、sort -rn按数字倒序、head取前N行缺任何一环都选不对。所以平时练命令不要只练单个命令要练管道思维想清楚数据是怎么从一个命令流到下一个命令的。系统原理方面高频考点包括Linux启动流程、硬链接与软链接的区别、inode与文件删除的关系、进程与线程的区别、僵尸进程与孤儿进程、系统运行级别。有一个考点被反复考为什么一个文件被进程打开后删除了磁盘空间却没有释放答案是文件被删除只是在目录项中解除了链接但进程持有的文件描述符仍然指向inode只有所有文件描述符关闭后磁盘空间才会真正释放。这类题考的显然不是背诵能力而是对文件系统工作机制的理解深度。如果平时没有处理过磁盘空间不足的经历建议你在虚拟机里开一个文件删掉之后用lsof看一下实际操作过一次就再也忘不掉。A卷偶尔还会出几道内核参数相关的题目比如vm.swappiness、fs.file-max、net.ipv4.tcp_tw_reuse、net.core.somaxconn。不要求你背全所有参数但常见几个要知道作用并且能结合场景说明“当遇到什么问题时改这个参数”。比如net.ipv4.tcp_tw_reuse是用来复用TIME_WAIT连接的对高并发短连接场景有明显帮助net.core.somaxconn控制的是全连接队列长度队列满了之后连接会被直接丢弃表现为客户端连接超时。这类参数题拉不开差距但能决定你笔试分数的上限。2.2 网络协议与排查网络部分和Linux部分一样是选择题的另一个大户。TCP三次握手和四次挥手属于必考题而且经常以变形方式出现比如“TCP连接建立过程中第三次握手失败会怎样”“TIME_WAIT出现在哪一端为什么要保留2MSL”。这里要反复强调TIME_WAIT出现在主动关闭连接的一方保留2MSL是为了让最后一个ACK即使丢失也有足够时间等待对端重传FIN。视频网站这种高并发短连接场景下TIME_WAIT过多是非常常见的问题所以这个知识点对爱奇艺来说非常实际。HTTP状态码也是送分题但A卷喜欢考容易混淆的几个301和302的区别、403和404的区别、500与502与504的区别。尤其是502和504很多同学分不清。我给你一个记忆方法502 Bad Gateway是网关收到了上游的无效响应常见原因是Nginx后端的PHP-FPM挂掉或者后端服务崩溃504 Gateway Timeout是网关等待上游响应超时常见原因是后端处理太慢、数据库卡住、长事务阻塞。这道题在简答题里也出现过要求你说出排查步骤思路通常是先看Nginx错误日志再确认后端进程存活状态然后检查数据库负载和网络连通性一层层缩小范围。还有一个高频区域是DNS和负载均衡。DNS要掌握解析流程、A记录/CNAME/TXT记录的区别、TTL的作用、以及本地DNS缓存。负载均衡要知道四层LVS、F5和七层Nginx、HAProxy的区别以及轮询、加权轮询、最少连接、IP哈希这些调度算法的适用场景。爱奇艺这种视频站流量地域特征非常明显调度策略和CDN是必须掌握的内容。CDN相关的考点通常是这样用户访问一个视频URL怎么命中边缘节点、怎么回源、边缘节点没有命中怎么办、如何通过HTTP响应头确认是否命中缓存。这一类题目尽量结合抓包和curl的实测结果去理解效果好过死记硬背。另外爱奇艺从2019年前后开始大规模推进HTTPS化所以TLS/SSL基础也得看一眼比如握手过程、证书链校验、HTTP和HTTPS的端口区别。不需要深入到密码学算法细节但如果你能说清楚“HTTPS握手时客户端如何验证服务器证书的真实性”在简答题里已经能甩开很多人了。3. 数据库与缓存高并发场景的送分题3.1 MySQL核心考点数据库部分在运维笔试题里稳占4到6道基本全是MySQL。爱奇艺的服务端大量使用MySQL笔试对MySQL的考察集中在索引原理、SQL优化、主从复制、备份恢复、事务隔离级别这几个方向。索引是必考中的必考。你需要理解B树索引的结构、聚簇索引与非聚簇索引的区别、覆盖索引是什么、联合索引的最左前缀原则。选择题里经常有这样的问法“以下哪个SQL语句不会命中联合索引(a,b,c)”四个选项分别考察最左前缀原则和范围查询后的索引失效。注意两个细节联合索引遇到范围查询、、between之后后面的列会失效最左列不参与where条件时整个索引都用不上。把这两条规则记清楚选择题基本全对。除了规则还需要理解索引失效的常见场景。我整理了一个速查表考前直接背场景原因应对where中使用函数或计算索引列经过函数运算后顺序被破坏把计算放到应用层或改用冗余字段隐式类型转换字段是varchar传入数字保证类型一致避免MySQL自动转换like %关键字%前导通配符导致无法用B树定位考虑全文索引或引入ES等外部搜索or连接非索引列无法合并多个索引扫描改用union或为or两侧都建索引is not null索引对NULL值处理特殊根据业务决定必要时增加非空约束慢查询这块你要能回答“如何定位慢SQL、如何通过explain查看执行计划、type字段和rows字段怎么解读”。常见优化套路是先开启慢查询日志把long_query_time设为1秒拿到慢SQL后用explain分析看是否全表扫描然后加索引、改写SQL或者拆大查询。笔试时如果让写优化思路按照“观察→定位→分析→修改→验证”的顺序来答就稳了。主从复制几乎每年都考。要掌握binlog的三种格式statement、row、mixed区别主从复制的三个线程binlog dump线程、IO线程、SQL线程以及主从延迟的常见原因和解决方案。这里多说一句延迟不只是网络问题更多是主库写入压力大、从库单线程重放慢。解决方案可以是并行复制、提升硬件、把读请求分流到缓存不要只回答“换更好的机器”这种毫无工程含量的废话。3.2 Redis与缓存缓存是视频网站的命根子所以笔试题里Redis不会缺席。A卷常考的三个经典问题缓存穿透、缓存击穿、缓存雪崩要求说清楚每个问题是什么、怎么解决。缓存穿透是查询一个不存在的key请求直接打到数据库解决思路是空结果也做短期缓存、用布隆过滤器挡一层缓存击穿是某个热点key在过期瞬间大量请求打到DB解决思路是互斥锁重建缓存、逻辑过期、热点key永不过期缓存雪崩是大量key在同一时间过期或Redis整体宕机导致流量全部打到DB解决思路是过期时间加随机数、Redis高可用、限流降级。除了这三个经典问题A卷还可能考Redis的数据类型和持久化机制。数据类型要用一句话说清适用场景string适合计数和简单KVhash适合对象存储list适合消息队列set适合去重和交集并集运算zset适合排行榜。持久化要分清RDB和AOF的优缺点RDB恢复快但可能丢最后一次快照之后的数据AOF最多丢1秒数据但文件大、恢复慢。生产环境通常是两者结合。Redis这块容易丢分的地方我觉得是“为什么Redis是单线程却还能这么快”。很多人只答“因为内存存储”但命题人想听的是四点IO多路复用、纯内存操作、避免上下文切换、单线程无锁竞争。简答题里能把内存、IO模型、数据结构设计三个层面都说出来才是满分答案只答一个方面肯定不够。4. 中间件与Web服务Nginx是绕不开的重点4.1 Nginx配置与工作原理Nginx在爱奇艺这种业务里承担的角色非常多静态资源服务、反向代理、负载均衡、缓存、HTTPS终结、限流。所以运维笔试里Nginx必然出现而且经常一考就是两道选择题考配置语法简答题考调优思路。Nginx的核心模型必须先说清楚master进程管理worker进程worker进程基于epoll异步非阻塞处理连接。同样一个概念你能说出“每个worker是单线程但能同时处理大量并发连接”和只会回答“性能高”是截然不同的得分档次。选择题还喜欢考worker_processes和worker_connections的含义前者表示worker进程数量一般设为CPU核数后者是每个worker能同时打开的最大连接数两者乘积决定了Nginx的最大并发连接数。反向代理和负载均衡的配置你得能看懂并且会写基础版本。下面是一个典型配置笔试里常作为填空或判断的题干出现upstream video_backend { server 10.0.0.11:8080 weight3; server 10.0.0.12:8080 weight1; server 10.0.0.13:8080 backup; } server { listen 80; server_name api.xxx.com; location /api/ { proxy_pass http://video_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 5s; proxy_read_timeout 10s; } }要能解释weight和backup的含义weight是权重默认1数值越大分配越多backup表示备份服务器只有主服务器都不可用时才启用。proxy_set_header里带上真实IP是为了让后端拿到用户真实地址否则所有请求在后端看起来都来自Nginx服务器日志分析和风控就全废了。Nginx调优方向的简答题答题框架建议按三层展开先调系统层包括文件句柄数、TCP backlog队列再调Nginx层包括worker进程数、worker连接数、keepalive、gzip压缩、静态资源缓存最后调业务层包括静态资源CDN化、动态接口缓存策略。A卷如果出“如何优化一个性能不佳的Nginx集群”就按这个层次展开每层给出一两个具体参数和理由分数不会低。4.2 消息队列与虚拟化容器消息队列在2019年的运维笔试里已经出现但考察不深。主要问Kafka或RabbitMQ的基础概念Kafka里的broker、topic、partition、consumer group是什么关系RabbitMQ的exchange有哪几种类型。视频网站里消息队列大量用于削峰填谷和异步解耦比如用户上传视频成功后转码任务通过消息队列异步处理。如果在简答题里能主动结合这个生产场景会给阅卷人留下明显的“有实战视角”印象。虚拟化和容器是那个年代的热点笔试重点在于理解差异。要分清虚拟机和容器的本质区别虚拟机通过Hypervisor虚拟化硬件每个VM有独立内核容器共享宿主机内核通过namespace做隔离、cgroup做资源限制。Docker相关的选择题高频答案是镜像与容器的关系、Dockerfile里RUN/CMD/ENTRYPOINT的区别、数据卷的作用。2019年Kubernetes已经开始大火爱奇艺这样的体量的公司内部也在大规模实践容器编排所以A卷出现一两道K8s基础题并不意外。比如Pod是什么、Deployment和StatefulSet的区别、kubelet的作用这些基础概念必须清晰。不用深入到“Kubernetes如何通过CRI调用containerd”这样的实现级细节笔试一般不会考这么深但如果你在面试环节能把这个链路讲清楚会是非常亮眼的加分项。笔试阶段把基础概念稳住就够了。5. 脚本编程与场景分析题区分度最大5.1 Shell与Python脚本题思路脚本题是运维笔试里区分度最高的一类。很多同学选择题能拿高分一到手写脚本就露馅因为平时写命令全靠网上复制真到笔试环境里从零开始写就卡壳。A卷的脚本题通常是二选一Shell或者Python我建议两个都准备一下有些题用Python写更简洁有些用Shell管道一行就搞定。先说一道高频Shell题统计nginx访问日志中访问量最高的前5个IP。完整答案是awk {print $1} access.log | sort | uniq -c | sort -rn | head -5答题注意两点一是sort -rn必须加-n否则是字典序排序10会排在2前面二是如果想输出“IP 次数”这种格式可以再用awk {print $2, $1}调整列顺序。这道题每年错误率都很高多数死在排序问题上。另一类常见题是归档清理比如删除7天前的日志文件但要保留每周日凌晨的归档。经典答案是find /data/logs -name *.log -type f -mtime 7 -delete如果要排除某些文件用! -name *.tar.gz加排除条件。笔试考这种题一方面考find的mtime参数另一方面考你有没有“删除之前先确认”的意识。我强烈建议在答案里写上先用-exec ls -l {} \;确认列表再真正删除虽然多了一步但能给阅卷人留下“这人不会删错生产数据”的好印象。Python题常见的是写监控脚本比如检查某个服务是否存活不存活就拉起并发送告警。核心逻辑类似这样import subprocess import time service_name nginx def is_alive(proc_name): ret subprocess.run([pgrep, -f, proc_name], capture_outputTrue) return ret.returncode 0 def restart_service(): subprocess.run([systemctl, restart, service_name]) if __name__ __main__: if not is_alive(service_name): restart_service() time.sleep(5) if is_alive(service_name): print(service restarted) else: print(service restart failed)这题拿满分的关键不在于语法多高级而在于三个职业习惯判断进程时用pgrep而不是grep ps避免匹配到自己的进程重启后要二次确认失败后要有告警兜底。这些细节才是运维工程师真正的工程素养。5.2 故障排查场景题场景题是A卷最后一道大题也是最能拉开差距的地方。典型出题方式是给一个线上故障描述比如“某天上午10点用户反馈视频加载变慢监控显示Nginx的5xx比例上升数据库CPU使用率飙到90%请写出你的排查思路”。这种题千万别上来就写“重启一下试试”。阅卷人想看到的是完整的排查框架。我的答题模板分四步第一步收集信息。看监控面板确认故障范围是全站故障还是某一区域、某一个接口是CDN回源慢还是源站本身慢先缩小排查面。第二步分层定位。网络层看带宽和丢包系统层看CPU、内存、磁盘、负载应用层看日志和错误码数据层看慢查询和连接数。先解决“当前有没有挂掉”再分析“为什么挂掉”。第三步临时止血。比如先扩容、切流量、降级非核心功能、重启异常实例保证业务恢复在线再谈根因。这一点比找根因还重要面试官非常看重。第四步根治复盘。找到根因后补全监控告警、限流熔断、容量规划避免同类问题再次出现。再补充一个经典caseCPU使用率飙升到100%怎么排查正确顺序是先top按CPU排序找到高CPU的进程PID再用top -Hp PID找到进程内的高CPU线程接着printf %x\n 线程PID转成十六进制最后用jstack PID | grep 十六进制线程号查看线程栈。这套组合拳是Java应用排查的标准姿势笔试题里只要出现CPU飙高基本就能套用。如果没有jstack的经验也要学会看线程状态和堆栈文件。这类题能不能拿高分本质上取决于有没有真的修过线上故障。如果暂时没有实战经验至少要每个场景自己在虚拟机里完整演练一遍亲眼看到top、jstack、strace的输出长什么样考场上才有画面感。靠背框架写的答案和亲眼见过故障写的答案差距一眼就能看出来。6. 考场实战技巧与备考路线6.1 时间分配与作答策略最后聊聊应试本身。爱奇艺这套A卷如果按100分算我认为最优时间分配是选择题30分钟、简答题30分钟、脚本题20分钟、场景题20分钟剩下的时间检查和补漏。选择题不许恋战超过1分钟没思路就先标记最后再看简答题写要点不要写流水账分点作答阅卷人最喜欢“首先其次最后”的清晰结构。几个考场细节必须提醒。第一如果笔试平台支持本地运行脚本一定要实际跑一遍再提交千万不要觉得“思路对就行”。缩进错误、语法错误、引号不匹配是脚本题最冤的失分点。第二SQL题记得写分号注意表名和字段名不要自己改名题目给什么就用什么。第三线上考试如果允许查资料善用man和--help但不要过度依赖时间消耗太大。第四遇到不会的选择题优先用排除法把确定错的选项划掉猜对的概率会明显提升。这里汇总一份笔试最高频的命令速查表考前过一眼非常有用场景命令组合查看系统负载top / uptime / vmstat查看磁盘IOiostat / iotop / df -h查看网络连接ss -anpt / netstat -anpt查看端口监听ss -lntp追踪包路径traceroute / mtr抓包分析tcpdump -i eth0 port 80 -w /tmp/a.pcap查看文件占用lsof / fuser大文件查找du -sh * | sort -hr实时查看日志tail -f / tail -n 200系统启动耗时systemd-analyze blame6.2 以试题为纲的复习路线最后给出一份一个月冲刺路线适合计算机相关专业、有一定Linux基础的应届生。第一周主攻Linux和网络把命令背熟、TCP/IP核心概念过完配合虚拟机每天做两三个小实验比如抓包看三次握手、用dd和iostat观察磁盘IO。第二周主攻MySQL和Redis重点做索引优化实验用explain观察不同SQL的执行计划变化把缓存穿透、击穿、雪崩三个场景分别模拟一遍。第三周主攻Nginx和脚本动手搭一个Nginx反向代理环境写十个脚本题练手每个脚本都跑出真实输出。第四周进入刷题和场景模拟阶段把错题整理成卡片每天完整模拟一道故障排查题用手机录音讲一遍排查思路逼自己把逻辑说完整。我特别推荐用“问题驱动”的方式复习而不是按技术栈从头往后翻。比如先问一个问题“用户访问视频卡顿可能的原因有哪些”由这个问题发散出去自然就覆盖到CDN、带宽、源站性能、数据库、缓存、网络链路、客户端兼容性。这样复习的好处是知识挂在真实场景上考试时换一个场景你也能把知识迁移过去。很多同学纠结“运维工程师到底需要学什么”“Linux运维技术栈是什么”“云计算运维学习路线怎么规划”本质上都是在回答同一件事一个运维工程师的知识体系应该如何搭建。以试题为纲以场景为目把两端对齐运维笔试就没有死角了。我自己当年就是从这种笔试一路折腾过来的刷题刷到想吐入职后带过不少实习生发现笔试分数高的人工作里不一定顺但有一类人笔试和上手都稳——就是“每道错题都愿意去机器上复现一遍”的人。你在一道Nginx选择题上卡住了与其反复背答案不如花10分钟在虚拟机里把那个配置跑起来用curl和日志亲眼看到现象。看到现象的那一刻这道题才算真正属于你之后哪怕换个端口、换个域名、换个故障表现你也能从根上理解它。这份A卷也好其他公司的笔试题也好说到底都是信号载体信号背后考察的是“你到底有没有动手解决问题的能力”。希望这份复盘能帮你看明白信号考场上少踩几个坑。笔试只是入场券运维这条路真正的挑战在后面基础打牢了后面走起来才不慌。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门