公司动态

京东2018秋招运维笔试真题解析:Linux、Shell与网络排查核心考点

📅 2026/8/30 16:15:32
京东2018秋招运维笔试真题解析:Linux、Shell与网络排查核心考点
2018年那会儿京东秋招技术运维工程师的笔试在圈子里算是出了名的“硬”。不少朋友考完都说题量大、跨度广Linux、网络、数据库、Shell脚本一个不落最后甚至还有一道编程题和几道让人挠头的逻辑推理。我当时也帮不少学弟学妹做过复盘整理结合当年考生群里反馈出来的题目方向这套笔试题的核心思路其实非常清晰它不考死记硬背的冷门参数而是看你有没有一个真正在生产环境干过活的“运维脑”。这篇文章我就把当年考察最集中的几个方向连同答题思路、易错点、以及放到今天依然适用的备战方法一并梳理出来。1. 京东2018秋招运维笔试到底在考什么1.1 笔试整体结构与考察思路从当年考生反馈来看运维岗笔试题型大致分为四块选择题、填空题、简答题和最后的编程/综合题。选择题覆盖范围很广从Linux命令到网络协议都有填空题更变态经常让你直接写命令或补全一段配置完全没法蒙简答题则偏重故障排查和方案设计最后的编程题难度不算高但如果你平时只会在Windows上点点点那一下就能看出差距。考点占比我根据记忆梳理了一下大概是这个分布考察方向大致占比典型形态Linux系统与Shell脚本30%命令填空、脚本编写、文本处理网络基础与故障排查20%协议概念、状态码、排查思路数据库与中间件20%SQL、索引、Redis缓存、Nginx配置监控与告警10%监控指标、告警阈值、工具选型编程与逻辑推理20%脚本编程、场景设计、逻辑题这个出题结构其实很有代表性。电商业务对稳定性要求极高每年618、双11大促都是运维团队的“大考”所以笔试非常看重候选人处理真实问题的能力。它不是很想招一个“只会背命令但不知道在什么场景下用”的人而是希望候选人能快速定位问题、规范化操作、有自动化意识。1.2 几个容易被忽略的隐藏考点有一种题目表面上看是在考命令实际上是在考你对系统底层机制的理解这类题最容易拉开差距。比如问“磁盘空间明明充足应用却报错无法写入”很多人第一反应是看df -h但真正的问题可能是inode耗尽了要看到df -i那一行才能确认。再比如“进程用kill -9杀不掉”十有八九是进程处于D状态不可中断睡眠正在等待磁盘IO返回这种时候硬杀没用得先解决底层存储问题。还有一类题喜欢考配置文件加载顺序。比如/etc/profile、~/.bashrc、~/.bash_profile的区别一个普通登录shell和一个非登录shell加载的文件完全不一样。如果你在生产环境帮别人改过环境变量就会知道乱改全局配置可能导致所有终端异常这种“吃过亏”的经验笔试里是能体现出来的。这些隐藏考点提醒我们笔试只是把日常运维中的“坑”换了个形式呈现在卷面上。真正干过活的人看到题目会立刻联想到当时的故障场景答题自然就准。2. Linux与Shell脚本运维笔试的绝对主力2.1 高频Linux命令与系统管理题目Linux命令是绝对的重点但考的往往是“理解”而不是“记忆”。比如查看系统负载命令有uptime、top、w这些都是基础中的基础。容易出错的点在于理解负载值的含义——1分钟、5分钟、15分钟三个负载值不能只看当前值要结合起来判断负载是在上升还是下降。再结合CPU核数来看负载长期大于核数几十倍那就要考虑扩容或者排查死循环进程了。磁盘相关的高频题也不少。df -h看整体空间du -sh看目录占用这两条几乎必考。但深入一点就会问为什么df显示空间充足但文件创建失败答案就是inode耗尽或者文件系统只读。这种题目一旦出现基本就能筛掉一批没有实战经验的人。进程管理也是常客。ps aux和ps -ef的区别如何找出CPU占用最高的5个进程kill -9和kill -15的区别——别小看kill15是让进程优雅退出9是强制杀掉很多服务在退出前要做状态清理直接kill -9容易留下脏数据。笔试里我见过问“如何让一个进程在退出前执行清理脚本”的题目答案其实就是先用kill -15发SIGTERM信号让应用自己捕获并处理。常用命令我再列几个考得多的find的-mtime、-name、-type、-size组合比如“查找7天前修改的.log文件”ln -s软链接和硬链接的区别硬链接不能跨文件系统软链接可以chmod的数字权限和特殊权限位比如setuid、setgid、sticky bittar打包配合cron做定时归档gzip压缩级别怎么选这些题目不复杂关键是熟练度。笔试时间紧如果你每条命令都要现场想半天后面的大题肯定做不完。2.2 Shell脚本题的典型出题套路Shell脚本几乎每年都有出题方向也比较固定总结起来就是四类日志清理、数据备份、批量操作、日志分析。日志清理脚本是经典中的经典标准答案大概长这样#!/bin/bash LOG_DIR/var/log/myapp find $LOG_DIR -name *.log -mtime 7 -exec rm -f {} \;但实际答题时我会建议你多想一层。直接find加-exec删除在生产环境是有风险的万一路径写错可能把不该删的删了。更好的写法是先统计一下将要删除的文件列表再执行清理#!/bin/bash LOG_DIR/var/log/myapp DEL_LIST$(find $LOG_DIR -name *.log -mtime 7) if [ -n $DEL_LIST ]; then echo $DEL_LIST /tmp/cleanup_$(date %F).log echo $DEL_LIST | xargs rm -f fi这样既保留了可追溯的审计日志又避免了误删后无据可查。答题时体现出“先备份后删除”“操作可回滚”的思路面试官会非常加分因为这才是生产的常态。数据备份脚本也很常见。比如“将/var/www目录打包并保留最近7份备份”核心是控制备份数量和文件名格式#!/bin/bash BACKUP_DIR/backup tar czf $BACKUP_DIR/www_$(date %Y%m%d_%H%M%S).tar.gz -C /var www find $BACKUP_DIR -name www_*.tar.gz -mtime 7 -delete这里用$(date %Y%m%d_%H%M%S)生成带时间戳的文件名是运维脚本里的共识写法既避免文件覆盖也方便后续回溯。批量操作类题目比如“给100台服务器批量创建用户”那就要用到循环和远程执行#!/bin/bash for ip in $(cat server_list.txt); do ssh user$ip useradd newuser echo passwd | passwd --stdin newuser done这个脚本在笔试里看起来简单但实际运行会有无数幺蛾子——有些服务器ssh端口不同、有些host key校验过不去、有些系统没有passwd --stdin参数。所以笔试答案和真实落地是两回事但你起码要在答案里展示出“用循环批量处理考虑异常情况”的意识。2.3 文本处理三剑客的实战用法grep、sed、awk这三件套是运维笔试里几乎绕不开的组合拳。有一道题出现的频率极高“统计nginx access.log中访问次数最多的10个IP”标准答案就是awk {print $1} access.log | sort | uniq -c | sort -rn | head -10这条命令看着简单但每一步都有讲究。awk默认按空格切分日志的第一列正好是客户端IPsort先排序是为了让uniq能正确合并相同IPuniq -c统计出现次数sort -rn按次数逆序排序head -10取前10名。每一步缺了都不行比如不用sort直接uniq -c重复IP分散在不同的位置就统计不到一块去。再看一个考点用sed替换文件内容。比如把配置文件中所有“127.0.0.1”替换成“0.0.0.0”sed -i s/127.0.0.1/0.0.0.0/g /etc/nginx/nginx.conf这里要注意的是不加g只替换每行第一个匹配-i是直接修改文件不加-i只是预览输出如果替换内容包含特殊字符需要用其他分隔符比如s#old#new#gawk还有两个高频考点按多个字符分隔-F[ :]、取倒数第一个字段$NF。比如从日志中提取响应时间这一列可能是最后一个字段直接用$NF就行。笔试中对awk的要求一般不高能用它完成日志统计、字段提取就够80分了。3. 网络基础与故障排查判断你是不是“真运维”3.1 网络概念题的高频命题点网络部分的选择题和填空题考点非常集中。TCP三次握手和四次挥手几乎是必考TIME_WAIT尤其受欢迎因为生产环境的连接问题十有八九和它有关。TIME_WAIT是主动关闭一方进入的状态需要等待2MSL最大报文段生存时间才能完全关闭目的是防止旧连接的数据包干扰新连接。如果线上服务器TIME_WAIT过多一般就是短连接太频繁解决办法是开启tcp_tw_reuse、调整tcp_fin_timeout或者把短连接改成连接池。HTTP状态码也是高频考点需要记牢的有这几个状态码含义常见场景301永久重定向域名变更、HTTP跳HTTPS302临时重定向临时跳转403禁止访问权限不足、IP被拒绝404资源不存在路径写错500服务端内部错误应用代码异常502网关收到无效响应后端服务挂了、FastCGI进程崩溃503服务不可用服务过载、正在维护504网关超时后端响应太慢笔试里不只是问状态码含义还会让你根据状态码判断问题出在哪一环。502和504的排查路径就完全不同502通常是后端进程挂了或连接数打满504通常是后端处理超时或者PHP/Java慢查询导致。DNS解析流程也是常客。完整的解析链路是浏览器缓存→本地hosts文件→本地DNS服务器→根DNS服务器→顶级域服务器→权威DNS服务器。考题经常问“修改了DNS记录后为什么还没生效”答案就是各个缓存节点的TTL还没过期需要在TTL到期后重新解析。3.2 从一道网络故障题看排查思路简答题非常喜欢出“故障排查”类直接给你一个场景让你写排查步骤。我印象比较深的一道题是“用户反馈访问公司网站间歇性超时请描述排查思路。”这种题没有唯一答案但好的答案必须体现“分层排查”的思路。我通常建议的答题框架是先确认范围是单个用户问题还是大面积问题先看监控大屏判断是否有地域性、运营商差异。再走基础链路客户端ping一下域名看是否通、延迟多少再用dig查DNS解析是否正常看解析出的IP是否正确。接入层排查如果是Nginx做入口检查Nginx错误日志和upstream状态看后端server是否全部在线。应用层排查检查后端应用进程是否存活GC是否频繁数据库连接池是否被打满。深入网络内核用ss统计TIME_WAIT、CLOSE_WAIT数量看连接是否堆积用tcpdump抓包看是否有大量重传检查是否触发防火墙限流。这样组织答案面试官一眼就能看出你有过真实排障经验而不是只会几个命令。另一种常见考法问“服务器CPU正常但页面响应慢”那就需要换一个思路先看网络链路时延再看后端依赖服务是否变慢最后用trace链路定位到具体模块。核心原则是不管什么问题都要有顺序、有依据、有结论。3.3 看完这篇能直接拿分的网络命令网络命令在笔试填空里也经常出现。我按用途整理了一个速查表方便你考前过一遍用途命令示例查看TCP连接状态及进程ss -tnp统计TIME_WAIT连接数ss -tan state time-wait测试端口连通性telnet ip port / nc -vz ip port查询域名解析结果dig 域名 / nslookup 域名查看HTTP响应头curl -I http://域名查看请求耗时curl -w code:%{http_code} time:%{time_total}检查链路丢包与延迟mtr -r 目标IP抓包分析流量tcpdump -i eth0 port 80 -w /tmp/out.pcap这里我想特别提一下curl的-w参数很多人不知道它能输出请求各阶段耗时。笔试如果考“如何测量一个接口的响应时间”答案除了time curl之外更精细的就是用curl -w输出DNS时间、连接时间、首字节时间、总时间这样能快速定位慢在哪一段。这个技巧在真实排查中非常有用是一道性价比很高的工具题。4. 数据库、监控与常见中间件考点4.1 MySQL笔试基础题与易错点数据库在运维笔试里的占比不算最高但一旦出现就很有区分度。MySQL的索引是必考方向一般会问“为什么MySQL用B树而不是B树或哈希索引”。答题要点是B树所有数据都在叶子节点叶子节点用链表串联非常适合范围查询和排序同时树的高度可控IO次数少。哈希索引只适合等值查询无法处理范围。SQL编写题也经常出现比如“统计每个用户的订单总数”“查询最近7天下单量最高的用户”。这类题没什么捷径就是多写。但运维视角和开发视角不同运维更关心查询效率所以附加问法往往是“这条SQL怎么优化”考点就是explain。explain的输出里type是关键从好到差依次是systemconsteq_refrefrangeindexALL。效率最差的就是ALL全表扫描。笔试里看到一个SQL应该能判断是否需要为where、join、order by的字段建立组合索引。还有一个常见易错点对索引列使用函数或隐式类型转换会导致索引失效。比如idx_create_time字段上写了WHERE DATE(create_time)2024-01-01这就没法走索引要改成WHERE create_time 2024-01-01 00:00:00 AND create_time 2024-01-02 00:00:00。主从复制也是高频题。核心流程是主库把变更写入binlog从库的IO线程拉取binlog并写入relay log从库的SQL线程再执行relay log中的操作。笔试常问“主从延迟怎么排查”答案一般包括查看Seconds_Behind_Master指标查看从库磁盘IO是否占用过高检查是否有大事务长时间未提交检查从库是否在做备份等密集读写操作最后还要记得mysqldump是逻辑备份导出来一般是SQL文件xtrabackup是物理备份直接拷贝数据文件备份和恢复速度更快。生产环境大库一般用xtrabackup小库用mysqldump就够了。4.2 监控系统与告警策略相关考点监控题看起来很简单但想答出彩不容易。基础问答通常是“一个完整的监控体系应该包含哪些维度”标准答案是硬件层CPU、内存、磁盘、网络、温度、操作系统层文件句柄、进程、负载、应用层接口耗时、错误率、线程池、业务层订单量、PV、转化率。这个层次感很重要因为只看CPU和内存往往发现不了应用已经被慢SQL拖垮了。工具方面2018年前后主流监控是Zabbix但近几年Prometheus Grafana已经成了事实标准。笔试如果让你选型可以从这几个维度比较维度ZabbixPrometheus Grafana数据模型关系型存储时序数据库采集方式Agent主动上报拉取/推送告警能力内置Alertmanager云原生支持一般优秀学习成本中等中高告警策略这类题最要避免的就是“告警风暴”。如果每个指标都设阈值线上会出现成百上千条告警真正重要的反而被淹没。比较好的做法是分级告警P0级别直接短信电话P1级别企业微信/钉钉推送P2级别邮件汇总。阈值设定要结合历史基线比如CPU使用率超过80%持续5分钟才告警而不是瞬时超过就触发。这一部分如果你能讲出“降低误报率”和“跟踪告警闭环”这两个点面试官会眼前一亮。4.3 Redis、Nginx等中间件高频点Redis也是运维笔试常客。最简单的题是“Redis有哪些常用数据结构”答案就是String、Hash、List、Set、ZSet。但真正拉开差距的是缓存三大问题穿透、击穿、雪崩。缓存穿透查询一个不存在的key每次都打到数据库。解决缓存空对象、布隆过滤器。缓存击穿某个热点key过期瞬间大量请求打到数据库上。解决互斥锁、热点数据永不过期配合后台更新。缓存雪崩大量key集中在同一时间过期数据库压力瞬间暴涨。解决过期时间加随机值多级缓存限流降级。这三种问题几乎是运维面试必问三连笔试简答题里出现概率也极高。答题时要能区分概念别把穿透和击穿搞混。Redis持久化同样会考RDB是周期性快照恢复速度快、但可能丢数据AOF是追加写日志数据更安全、但文件大。生产环境通常是两者结合或者根据业务数据容忍度选择。Nginx的考题集中在反向代理和负载均衡。负载均衡策略有轮询默认、权重weight、ip_hash按客户端IP哈希保证同一用户访问同一后端、least_conn最小连接数。笔试让你写一个简单配置的概率也不小我建议你把下面这段背熟upstream backend { server 10.0.0.1:8080 weight3; server 10.0.0.2:8080 weight1; keepalive 32; } server { listen 80; server_name example.com; location /api/ { proxy_pass http://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; } }这里的keepalive 32是为了复用后端连接减少TCP握手开销。设置X-Real-IP和X-Forwarded-For是为了让后端应用能拿到真实客户端IP这在访问日志分析题里特别重要。5. 编程题与逻辑推理题笔试中的隐形门槛5.1 运维也会考算法其实考的是思维不少人在笔试前对编程题有抵触觉得“我是运维凭什么写代码”。但京东这类互联网公司的运维写代码是基本功——自动化平台、发布系统、监控脚本、日志采集哪家不是要写Shell和Python笔试编程题根本不会出快排、动态规划那种竞赛题更常见的是“统计日志里的error数量”“写一个脚本批量修改文件名”这种贴近工作的题目。有一道印象很深的题“给你一个access.log每行格式为IP、时间、请求URL、状态码请统计状态码为404的请求数量并输出出现最多的3个URL。”用Python写大概就是from collections import Counter with open(access.log) as f: urls_404 [] for line in f: parts line.split() if parts[3] 404: urls_404.append(parts[2]) print(len(urls_404)) print(Counter(urls_404).most_common(3))这道题真正考察的不是算法而是“你会不会按行读取文件”“字符串怎么切分”“用什么数据结构做计数”。这些能力在运维日常工作里天天都要用。如果你只背了Linux命令而不会Python这类题基本等于送分给会的人。5.2 典型的逻辑推理与场景设计题逻辑推理题在2018年秋招里是一道明显的“压力题”。有人可能觉得运维考逻辑是玄学其实不是。运维工作中面对一台上千台服务器、无数告警的复杂系统能不能快速缩小排查范围靠的就是逻辑推理能力。经典题目比如“1000瓶水里有一瓶有毒用最少的小白鼠在24小时内找出毒水”答案是10只小白鼠利用二进制编码。这种题如果你没见过现场很难想出来所以考前准备时刷一刷逻辑题是有意义的重点不在背答案而在于训练“把可能性拆开用有限信息做排除”的思路。场景设计题更贴近运维实际比如“双11大促前给你一个流量预估翻5倍的系统你怎么做容量评估”这类题没有标准答案但你要能从下面几个角度回答基于历史峰值数据估算QPS再换算成所需实例数梳理全链路入口Nginx→应用→缓存→数据库找瓶颈做压测验证不是拍脑袋提前准备限流、降级、扩容预案压测期间要能实时观察监控定出安全水位线答题时把“预估→摸底→压测→预案”这个流程写出来基本就是标准高分回答。5.3 如何用“运维视角”答题更稳同样一道场景题普通回答和运维回答的差距是很大的。举例说“数据库连接池满了怎么办”普通回答可能是“调大连接池数量”但运维视角会是这样先看连接都在干什么是否存在慢SQL占着连接不释放看应用是否有连接泄漏反复创建不归还调整连接池不能解决根本问题只能缓解长效对策是设置连接超时、慢查询告警、定期重启应用我在给新人培训时经常强调一个答题公式“先止血再排查后根治最后加监控。”笔试的简答题不要只回答一个点要写全这个链条。比如“网站响应慢”就可以按照先用监控定位是入口慢还是后端慢再查日志找具体报错恢复后分析根因最后决定是否需要扩容或加缓存再调整告警阈值。这样回答不仅完整而且能体现出你对运维这个岗位的理解是体系化的。6. 结合最新热词重新审视运维笔试准备6.1 2025年再看这些考点至今仍是基本功很多人在准备运维笔试时会犯一个错误过度追求新技术比如天天看Kubernetes的源码细节结果最基础的Linux命令却说不利索。2018年京东笔试里的系统命令、网络排查、Shell脚本放到今天依然是运维面试的必考项。尤其现在的环境变得更复杂——应用跑在容器里、Pod不停重启底层排查思路反而更依赖网络和系统基础。容器时代有一个普遍的痛点服务突然无法访问了你依然要先判断“是Pod挂了、是流量没进来、还是后端依赖挂了”而判断这些靠的是Linux网络知识、端口连通性测试、抓包分析。所以我说云原生改变的是运维的形态没有改变运维的基础。笔试准备时Linux和网络绝对不能跳过。6.2 从最新热词看运维技能栈变化在搜索“运维”相关热词时你会发现一个很有意思的现象搜索“linux常用命令大全运维”“网络运维工具箱”“桌面运维常见问题”的人非常多这说明入门级的基础需求一直很旺盛同时“云计算运维”“私有化运维”“智能运维AI运维”这些词也在快速增长说明行业正在分层。国产操作系统运维工具比如统信UOS运维工具-LiveCD的搜索量上升也值得注意随着国产化替代推进运维工程师需要掌握这些系统上的软件包管理、日志排查、LiveCD救援等技能。虽然笔试未必会直接考但简历里写过这些能力面试官会眼前一亮。“kubernetes如何调用containerd”这类底层调用链路的问题越来越常见说明运维岗位不再只停留在“会部署”层面而是要理解容器运行的完整链路。如果你要把这些热词消化成笔试/面试优势我建议关注三个方向云原生运维Kubernetes基础调度原理、Pod生命周期、镜像构建、部署策略平台化运维把重复性工作脚本化、平台化、容器化理解CI/CD流程大数据/AI化运维日志聚类、指标异常检测、告警降噪笔试里考“传统基础新趋势”的占比现在基本能做到七三开传统基础依然是大头。6.3 一套可执行的运维笔试备战清单如果你现在正准备运维岗位的笔试我给你一个能直接套用的备战计划按一个月左右来排阶段时间重点任务基础巩固第1周Linux常用命令、文件系统、权限、网络基础脚本与文本处理第2周Shell脚本实战、grep/sed/awk、Python基础进阶模块第3周MySQL索引与主从、Redis缓存、Nginx配置、监控体系综合冲刺第4周真题模拟、故障排查答题模板、逻辑题、场景设计题学习设备方面不用纠结一台Linux虚拟机就够了。CentOS系和Ubuntu系至少各装一台练习软件包管理和系统命令差异。有条件的话自己用虚拟机搭一套论坛或者博客系统配置Nginx、MySQL、Redis再写脚本做日志备份这样一套走下来笔试里出现的多数场景你就都有体感了。推荐的学习路径是先跟着文档把命令跑一遍再脱离文档做“乱搞恢复”练习比如故意把Nginx配置改坏再看日志修复。这种“先破坏、再修复”的玩法对培养实战感觉特别有效比单纯刷题强得多。最后再多说一句2018年那批题后来被不少人当作运维复习的范本不是它有多高深而是它太能代表互联网运维工程师这个岗位的真实要求了。在我带新人的这些年里只要底子扎实哪怕具体技术栈换成了别的学起来也很快。准备笔试别急着海量刷题先把手边一台Linux虚拟机用起来把日志分析、网络排查、脚本自动化这三件事练成肌肉记忆比什么都靠得住。