ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

京东技术岗笔试选择题A卷考点解析:数据结构、算法、网络、操作系统、数据库

京东技术岗笔试选择题A卷考点解析:数据结构、算法、网络、操作系统、数据库 2016年那会儿,互联网校招还没卷成现在这样,但京东的实习生笔试已经很有含金量了。我记得那年春天投了京东的技术岗实习,拿到笔试链接的时候还挺兴奋,结果打开一看,选择题A卷,60分钟,40道题,涵盖数据结构、算法、网络、操作系统、数据库,还有一部分逻辑推理。时间紧、范围广、题目刁,是那批题给我的整体印象。今天就把这套技术岗位选择题A卷的考察逻辑和背后的知识点拆开揉碎了聊一聊,尤其是那些过了这么多年依然高频出现的考点,帮大家理解大厂笔试到底在筛什么人。很多人以为笔试就是刷题,把LeetCode刷个几百道就稳了。但京东这套技术岗选择题A卷,和我后来参加的其他大厂笔试一对比,你会发现它考察的远不止刷题量,而是计算机基础功底的扎实程度。选择题覆盖面广,单题分值不高,但错不起。因为每个知识点都可能考,你没法靠运气蒙,蒙对了这道,下一道换个角度考,照样露馅。1. 笔试整体结构与考察范围拆解1.1 60分钟40道题的节奏感先说说这套题的整体结构。选择题A卷一共40道题目,考试时间60分钟,平均下来每题只有1.5分钟。这个时间设计非常讲究,它不只考你会不会,还考你熟不熟。我当时做的时候,前10道数据结构题还算顺利,大概花了10分钟。但到了计算机网络的多选题,开始卡壳,尤其是一些关于TCP拥塞控制和HTTP状态码的边角细节,每个选项都长得差不多,犹豫一下就1分钟过去了。后面的操作系统和数据库题更是一点不能松懈。这种节奏下,如果你对某个知识点只是看过而不是吃透,很容易在选项的迷惑性上栽跟头。从考察范围来看,大致可以分成四个块数据结构与算法(约30%)二叉树遍历、排序算法复杂度、链表操作、哈希冲突处理、图的最短路径计算机网络(约20%)TCP/IP协议栈、HTTP协议、DNS解析过程、拥塞控制机制操作系统(约20%)进程调度算法、死锁条件、虚拟内存、页面置换算法数据库与Linux(约20%)SQL语法、索引原理、事务隔离级别、Linux常用命令和Shell脚本逻辑剩下10%左右是逻辑推理和智力题,这部分通常不难,但很考验临场反应速度。比如那种三个人轮流拿石头,谁拿到最后一个谁赢的题目,本质上就是找规律,手速快的人一分钟内能解决,手生的可能在草稿纸上画半天。1.2 为什么选择题比编程题更考验功底很多人有个误区,觉得选择题比编程题简单。实际上在大厂笔试里,选择题A卷这种形式恰恰是刷人最狠的环节。原因很简单编程题有测试用例告诉你对错,而选择题只有四个选项,每个选项都可能是对的知识点被换了个错误的条件,你光知道结论不行,必须知道原理。举个例子。题目问在二叉搜索树中删除一个节点的时间复杂度,答案选项可能包括O(1)、O(log n)、O(n)、O(n log n)。如果你只知道二叉搜索树查找是O(log n),很可能会选O(log n),但这个结论只对平衡的二叉搜索树成立。如果树退化成链表,删除操作最坏情况就是O(n)。这就是考察的深度,套一个最优情况的壳子,实际上问的是最坏情况下的复杂度分析。我当时踩过的坑就是,复习的时候只盯着结论看,比如红黑树插入是O(log n)快排平均是O(n log n),对这些结论背后的推导过程没有足够重视。结果遇到题目稍微变个形式,比如在已经有序的数组上运行快速排序,时间复杂度是多少,一下就慌了。实际上这个场景正好是快排的最坏情况,因为每次选择的基准值都是最大或最小元素,导致左右子树严重失衡,递归深度变成了n,总复杂度退化到O(n²)。笔试选择题考察的不只是记忆,更是在各种约束条件下的推导能力。1.3 大厂用这套题筛的是什么人参加过这么多场笔试之后,我慢慢摸清了大厂出题的逻辑。技术岗选择题,核心筛的是三类能力第一是基础知识的系统性。你的知识不能是东一块西一块的,数据结构和算法、计算机网络、操作系统、数据库这些计算机核心课程,必须有一个完整的知识体系。题目之间的知识点跨度越大,越能看出你平时的积累是不是碎片化的。第二是快速分析问题的能力。1.5分钟一题意味着你不能在某一题上纠结太久,这其实模拟了工作中的真实场景。项目中遇到一个线上问题,你不可能有一整天时间慢慢分析,很多时候就是要靠直觉和经验快速定位。第三是抗压能力和决策能力。40道题总有几道是你不确定的,这时候要不要蒙怎么蒙蒙完之后要不要回头检查这些都是策略。我记得当时有一道数据库索引的题我没把握,果断在草稿纸上标记了个问号,先把后面会的题做完,最后留了3分钟回来排除两个明显错误的选项,在剩下两个里蒙了一个。这种取舍能力,某种程度上也是实际工作中很重要的素质。2. 重点题型解题思路与核心知识点2.1 数据结构题复杂度分析是灵魂数据结构部分的选择题,最常见的出题方式就是给你一个操作和一种数据结构,让你选时间复杂度。这里面有几个高频考点,我一个个说。二叉树相关的题目出现频率最高,尤其是遍历方式。前序、中序、后序、层序遍历的递归和非递归实现都要能熟练写出来,更重要的是理解每种遍历序列的性质。比如给你一个前序序列和一个中序序列,要求你还原二叉树,这种题目看似考递归,实际上是看你对两种遍历序列中根节点位置的敏感度。我记得有一道题目给了一棵完全二叉树的数组存储方式,要求算出某个节点的父节点和子节点的下标。这种题只要知道完全二叉树用数组存储时,节点i的父节点下标是i/2,左孩子是2i,右孩子是2i1,基本是送分题。但要注意边界条件,比如根节点的下标从0开始还是从1开始,这会影响最后的计算结果。很多人在这种小细节上丢分,实在可惜。排序算法的复杂度比较也是必考内容。我整理了一个表格,基本覆盖了选择题常考的排序算法对排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性冒泡排序O(n²)O(n²)O(1)稳定插入排序O(n²)O(n²)O(1)稳定选择排序O(n²)O(n²)O(1)不稳定快速排序O(n log n)O(n²)O(log n)不稳定归并排序O(n log n)O(n log n)O(n)稳定堆排序O(n log n)O(n log n)O(1)不稳定这几行内容背下来不难,难的是理解什么情况下触发最坏复杂度。考得多的两个坑是快速排序在数据基本有序时反而慢,因为基准值选择不好;堆排序的空间复杂度是O(1),因为它是原地排序,很多人误以为堆排序像归并排序一样需要额外空间。2.2 网络题TCP和HTTP是永恒主角计算机网络的选择题,考察点非常集中,基本围绕TCP/IP协议族展开。这里面有一个很典型的考察方式给你一个网络通信的场景,让你分析数据包的封装过程。比如访问一个网页,从输入URL到页面加载完成,经历了什么DNS解析拿到IP,建立TCP三次握手,发送HTTP请求,服务器返回HTTP响应,浏览器解析渲染。可能考的是每一步对应的协议和端口号,DNS是53端口、HTTP是80端口、HTTPS是443端口,这些都是基本常识。TCP的拥塞控制和流量控制也是高频考点。慢启动、拥塞避免、快重传、快恢复,这四个机制的原理和触发条件要搞明白。选择题一般会给一个具体的场景描述,描述TCP的拥塞窗口在某一个RTT内从某个值变到某个值,让你判断当前处于什么阶段。这种题最怕概念混淆,一定要把什么条件下进入快恢复什么条件下重新慢启动这些边界条件记得非常清晰。另外,HTTP状态码在选择题里出现的频率也不低。我记忆里好像考了比较多的是这些2xx表示成功,3xx表示重定向,4xx是客户端错误,5xx是服务端错误。具体来说,301是永久重定向,302是临时重定向,304是未修改,401是未授权,403是禁止访问,404是未找到,500是服务器内部错误,502是网关错误,503是服务不可用。选择题不会直接让你背数字,而是给一个业务场景让你判断返回哪个状态码。2.3 操作系统题进程和内存管理最绕操作系统的选择题,难度通常比数据结构和网络都要高一些,因为很多概念比较抽象,和平时写代码的关系不是那么直接。我有一次笔试里遇到一道进程调度算法的题目,给了一组进程的到达时间和执行时间,要求算平均等待时间。这题本身不难,只要会用短作业优先调度算法计算就行,但选项里给的几个数字非常接近,你要是计算过程中稍微粗心一点,就选错了。进程同步和死锁也是考试重头戏。死锁的四个必要条件——互斥、占有且等待、不可抢占、循环等待——这个知识点几乎是逢考必出。出题方式可能是给你一个资源分配的实例,每个进程占用了哪些资源、还需要哪些资源,让你判断当前是否处于死锁状态。解决这种题的方法是画出资源分配图,看看是否存在循环等待的环路。我建议大家在草稿纸上画图,虽然麻烦一点,但不容易出错。内存管理里的页面置换算法,尤其是LRU和FIFO,考得最多。LRU(最近最少使用)在选择题里的变体很多,比如给你一个页面访问序列和一个物理块数,让你统计缺页次数。这里有一个细节必须注意LRU是看最近是否被访问过,而FIFO是看进入内存的时间先后。这两个在有重复页面访问的时候,计算结果会不一样,选项也会利用这一点来设陷阱。虚拟内存相关的题也值得注意。页表、页表项、逻辑地址到物理地址的转换,有些选择题会给一个具体的逻辑地址和页表,让你算对应的物理地址。这类题的关键在于把握两点一是页面大小决定了页内偏移量的位数,二是页表项的有效位用来判断是否缺页。2.4 数据库题SQL和MySQL原理并行数据库的选择题,一半考SQL语法,一半考数据库原理。SQL语法部分,最常见的考点是SELECT查询的各种子句执行顺序。这个顺序其实是FROM WHERE GROUP BY HAVING SELECT ORDER BY LIMIT。题目可能会给你一个复杂的查询,包含JOIN、GROUP BY、HAVING、ORDER BY,然后问最终结果是什么。如果你搞不清楚HAVING和WHERE的区别,这种题基本必错。WHERE是在分组前过滤,HAVING是在分组后过滤,两者的执行时机完全不同。索引部分是数据库原理题的主角。B树索引为什么能加快查询聚簇索引和非聚簇索引有什么区别什么时候索引会失效。我记得有一道真题是关于最左前缀原则的,给了一个联合索引(a, b, c),问哪些查询条件能命中索引。这种题只要记住查询条件中如果缺少联合索引的第一个字段,索引就失效这条规则,基本就能做对。但要注意,如果查询条件里包含范围查询,比如b 1 and c 2,只有a和b能用到索引,c用不到,这也是一个经典陷阱。事务四大特性的选择题也很好拿分,ACID——原子性、一致性、隔离性、持久性。但要小心,题目可能会问你某个特性主要由什么机制保证。比如原子性由undo log保证,持久性由redo log保证,隔离性由锁和MVCC(多版本并发控制)保证。这些细节如果没深入理解过,选项一混淆就容易选错。2.5 Linux题常考命令和Shell逻辑Linux相关的选择题在技术岗笔试里出现的频率很高,尤其是在京东这种以Java技术栈为主的大厂。最常考的无非是文件权限、进程管理和常用文本处理命令。文件权限的题目属于送分题,但要送得稳还得记清楚。r4,w2,x1,这三个数字的组合能表示所有权限情况。题目一般会给你一个chmod 755,问你它代表什么权限。755就是所有者rwx(7),所属组rx(5),其他用户rx(5)。这里容易出错的是文件权限的数字写法,比如755、644、600分别是什么意思,不用去记每个文件对应的权限是什么,记住数字对应关系就够了。文本处理命令也是个高频考点。grep、awk、sed这三个命令一定要会用。选择题可能会给你一个日志文件,让你从里面过滤出某个关键词出现的次数,选项是几个命令组合。这就要知道grep -c是计数,grep -v是反选,grep -E是扩展正则,awk可以对列进行操作,sed可以直接修改文件内容。3. 笔试实战过程与临场策略3.1 考前一周的复习清单如果现在还有一周就要参加类似的笔试,我的建议是不要刷难题了,把时间花在查漏补缺上。我当时给自己列了一个复习清单,效果还不错,分享给大家参考数据结构二叉树和链表的各类操作、常用排序算法的时间复杂度,建议每天手写一遍快排和归并的代码计算机网络TCP三次握手四次挥手、拥塞控制流程、HTTP常见状态码,重点理解而不是死记操作系统进程和线程的区别、死锁四个条件、银行家算法、页面置换算法数据库SQL语句的基本语法、索引的底层结构、事务的隔离级别这四块内容每天过一遍,花不了多长时间,但能确保知识框架是完整的。考试的时候遇到不确定的题,至少能根据排除法排除掉两个明显错误的选项,把正确率从25%提升到50%,这已经很可观了。3.2 考场上的时间分配与答题策略进入考场之后,我习惯先花30秒把整张试卷从头到尾扫一遍,了解哪些题是熟悉的,哪些题是陌生的。这个动作非常有用,能帮你在心理上提前做好准备,避免做到半路突然遇到一道难题导致心态崩掉。我的答题策略是先做会做的,跳过不确定的。不要把时间卡在某一道题上,特别是那些选项已经看了两三遍还拿不准的题。大厂笔试时间紧张,1.5分钟一题的平均速度,在一道题上停留超过3分钟,后面很可能就做不完了。具体节奏建议第一轮快速做题,会做的直接选,不确定的标记,不纠结第二轮回头处理标记的题,先排除明显错误的选项,再对比剩余选项第三轮检查有没有选错、漏选的情况,多选题尤其要注意我在实际笔试中,第一轮大概用了35分钟做完了25道题,第二轮用了20分钟处理剩下的15道,最后5分钟检查了一遍。整体节奏还算合理,没有出现最后几道题仓促作答的情况。3.3 多选题的“宁缺毋滥”原则京东这套选择题A卷里有多选题,多选的计分规则一般是全部选对得满分,选对但不全得部分分,错选不得分。这意味着如果拿不准,尽量不要冒险多选。比如一道多选题问你TCP和UDP的区别,你知道TCP是面向连接的、可靠的、传输效率低,而UDP是无连接的、不可靠的、传输效率高。如果有个选项是UDP支持组播而TCP不支持,你不确定,那最好的策略就是不选它。哪怕最后正确答案确实包含这个选项,你只是丢了一部分分,但如果选错了,整道题就白做了。我当时考场上的原则就是每道多选题至少能确定两个正确选项才选,如果只能确定一个,那就不选这个选项。宁可少得分,不可得零分。这是我从多次笔试里总结出来的一条实用经验。4. 常见问题与避坑指南4.1 容易被选项迷惑的细节陷阱我在做这套题的过程中,发现出题人特别喜欢用看似正确实则不严谨的选项来干扰判断。举几个我记忆深刻的例子。第一个是某算法的时间复杂度是O(n log n)这种表述。单独看这句话没问题,但如果题目问的是在数据基本有序的情况下,以下哪种排序算法最快,选项里同时出现快速排序和插入排序,你的直觉可能会选快速排序,因为O(n log n)看起来比O(n²)更优。但实际上,基本有序的数据用插入排序,比较次数和移动次数非常少,效率反而更高。这就是只记复杂度结论、不分析具体场景导致的错误。第二个是网络题的TCP保证数据不丢失这类表述。事实上TCP的可靠传输只能保证数据按序到达且不重复,它不能保证应用层的数据处理能力。如果接收端处理不过来,TCP的流量控制机制会主动降低发送速率,但不会丢弃数据。这种细微的表述差异,恰恰是出题人最喜欢的考查角度。第三个是数据库的索引越多查询越快的说法。从直觉上看好像没问题,但如果索引太多,写入操作需要维护的索引结构就越多,反而会拖慢INSERT和UPDATE的性能。所以选择题里出现索引越多越好的选项,基本都是错的。4.2 笔试中真实踩过的坑想说说我那次笔试里真实踩过的坑,希望能给大家提个醒。第一个坑二叉树遍历序列还原。有一道题给出了二叉树的中序和后序遍历序列,让我还原前序遍历。我平时练习时都是给出前序和中序,这次突然后面变成了后序,一下就有点慌。实际上方法是一样的,只不过需要从后序序列的末尾找到根节点而已。这个经历提醒我,复习一定要把各种变体都覆盖到,不能只练一个固定模式。第二个坑SQL查询中COUNT的用法。有一道题问统计某张表中某个字段不为NULL的行数。我一看到COUNT,习惯性就想选COUNT(字段名),但正确的写法是区分COUNT()和COUNT(字段名)——COUNT()统计所有行数,COUNT(字段名)只统计该字段不为NULL的行数。如果题目问的是统计所有行数,结果用COUNT(字段名)就漏掉了为NULL的行,答案就会出错。第三个坑Linux管道命令的优先级。有一道题问把某个日志文件中包含ERROR的行数统计出来,选项里有几个命令组合。我一开始选了grep ERROR file.log | wc -l,后来仔细想了想,wc -l统计的是管道传入的行数,也就是grep输出结果的每一行,所以这个答案是没问题的。但有一个选项是grep ERROR file.log | wc,这个就没指定行数参数,输出的是行数、单词数和字节数,不符合题目要求。这个细节提醒我,选择题每个选项都要认真看完再选,不能凭第一印象。4.3 时间不够时的蒙题技巧虽然不提倡完全靠蒙,但在时间不够的情况下,有一些技巧能提高猜对的概率。如果是单选题,排除明显错误的选项会极大提升正确率。比如一道SQL题,你确定某个选项的说法肯定不对,那就在剩下三个选项里猜,概率从25%提升到33%。如果还能排除一个,那就变成二选一,概率直接到50%。如果是多选题,不确定的选项不要选。这个前面说过了,再多强调一遍宁缺毋滥是多选题最重要的原则。如果选项里出现以上都不对以上都对这类选项,不要急着排除。有些题目确实会设置这种选项,而且很多情况下它们反而是正确答案。唯一的策略是仔细甄别其他选项,如果其他选项都不成立,那选以上都不对就是正确的。4.4 考后复盘才是涨分关键笔试结束并不意味着学习结束。我每次笔试完,不管成绩如何,都会做一次完整的复盘。具体做法是把题目回忆一遍,按照知识点分类,统计每类的得分率。哪个知识点得分率低,就说明哪块基础不牢,再去针对性复习。客观地讲,如果不做这一步,刷十套题也不会有特别大的提升,因为错的题下次换个马甲还是错。但如果每套题都认真复盘,做三套的效果就能顶得上别人做十套。我当年在京东笔试之后,复盘发现自己计算机网络部分的正确率只有50%,远低于数据结构的80%。于是我花了整整三天时间,把TCP/IP那一整块重新学了一遍,画了大量状态图和时间线图。后面参加其他公司的笔试,网络部分的正确率立刻提升到了75%以上。这就是复盘的价值。这套2016年的真题,放到今天的视角看,虽然具体的题目细节有些过时了,但考察的知识结构没有太大变化。互联网大厂的技术岗笔试,始终围绕着计算机核心基础打转。如果你能静下心来,把数据结构和算法、计算机网络、操作系统、数据库这四门课的底层原理吃透,不管题目怎么翻新,你都能应对。我个人觉得,笔试真题最大的价值不是那一两道具体的题目,而是它反映出来的知识体系图谱。顺着这个图谱去复习,比盲目刷题高效得多。
返回列表