尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

京东2017校招技术笔试客观题解析:考点梳理与解题套路

京东2017校招技术笔试客观题解析:考点梳理与解题套路 开头京东2017校招的技术类客观题二网上流传的版本一直不少。这套题被很多后来准备大厂校招的同学当作“刷题热身”素材原因也很直白它涵盖了数据结构、算法、操作系统、网络、数据库、Java/C基础这些技术岗笔试的常青考点难度中等偏上但又不至于劝退。相比那些动不动甩出五道ACM难度压轴题的笔试卷京东早年这套客观题反而更贴近“基本功筛查”的定位很适合拿来评估自己的基础扎实程度。这篇文章就以这套题为主线不逐题罗列答案而是把里面最有代表性的几类考点拎出来讲讲每一类题背后的出题意图、常见坑点以及我实际刷题和辅导同学时总结的解题套路。不管你是正在准备校招的应届生还是想自测一下基本功的在职开发都可以照着这个思路去查漏补缺。如果你已经把题目做过一遍对着错题看这篇文章效果会更好。1. 这套题的整体面貌考点分布与出题逻辑1.1 客观题技术笔试的“筛人”逻辑先聊一个很多人没意识到的点校招笔试中的客观题本质上不是用来“选状元”的而是用来“筛人”的。2017年京东校招的流程里技术岗简历量大面试官精力有限笔试题必须在短时间内把“基础扎实、思维清晰”的候选人和“简历写得花团锦簇但一问底层就懵”的候选人区分开。这就决定了客观题的出题风格——不追求偏题怪题而是追求“高频考点典型陷阱”的组合。这套题二的题目结构也印证了这一点。客观题部分主要分为单选题和多选题内容覆盖范围大致如下数据结构与算法二叉树遍历、排序算法复杂度、链表操作、哈希冲突、图的基本性质。操作系统进程调度、死锁、内存管理、线程与进程的区别。计算机网络TCP/IP分层、HTTP协议、DNS解析、TCP三次握手与四次挥手。数据库SQL语法、索引原理、事务的ACID、范式判断。编程语言基础Java内存区域、C指针与引用、虚函数、重载与重写。数学与逻辑排列组合、概率计算、逻辑推理题。这个范围基本就是当年互联网公司技术笔试的“标准菜单”。京东作为电商巨头系统并发量高、数据规模大所以对集合类容器、并发编程、数据库索引这些和业务强相关的考点尤为重视。有同学问过我“京东笔试怎么考这么多Java和数据库我是搞C的怎么办”——这就是没看懂出题逻辑。电商核心系统绕不开SQL和缓存招进去的人不管什么语言背景都得能和现有技术栈协作。所以别对考点有抵触把它当成一次查漏补缺反而更划算。1.2 “真题二”和“真题一”有什么不同很多同学会同时搜到一和二两套题问有什么区别。从我对比过的内容来看两套题的知识点重叠度大约有六成但二在几个方向上明显加深了二叉树相关的题目更多而且不再只考遍历序列而是开始考“由遍历序列反推树结构”“哈夫曼树带权路径长度”这类需要两步推理的题目。操作系统部分把重心从概念背诵转向了计算比如页面置换算法的缺页次数、死锁的银行家算法安全性判断。数据库部分增加了索引失效场景的辨析不再只是“什么是B树”这种送分题。所以如果你只刷一就去考试遇到二里的计算型题目十有八九会卡壳。后面我每个板块都会挑这种“从概念上升到计算”的典型题来讲这也是这套题真正有价值的地方。2. 数据结构与算法两类必考题型与三种解法思路2.1 复杂度计算题别只会数循环嵌套数据结构部分是客观题的大头其中第一类高频题是“给一段代码问时间复杂度或空间复杂度”。很多同学一看到复杂度题就条件反射去数for循环嵌套了几层这个思路对付简单题够用但这套题里有几道题恰恰是在这个惯性思维上挖坑。举个例子题目给出这样一段伪代码i 1; while (i n) { for (j 1; j n; j) { // 常数时间操作 } i i * 2; }凭“两层循环嵌套就是O(n^2)”的直觉很容易选错。正确做法是分别看两个循环变量的变化趋势内层循环固定从1跑到n是O(n)外层循环每次i翻倍从1到n只需要log2(n)次。所以整体复杂度是O(n log n)。我当时给一起刷题的朋友讲这道题时打过一个比方你把内层循环想象成“每天要完成n件固定任务”外层循环想象成“每隔一段时间任务难度翻倍但总共只翻倍到n为止”。两个维度的机制不同不能想当然地相乘。这类题的通用解法我总结成三步先看循环退出条件搞清楚每个循环变量是怎么变化的是递增、翻倍还是减半。分别算出每个循环的执行次数再把它们乘起来前提是它们是嵌套关系。遇到递归则写出递推式比如T(n) T(n/2) O(1)然后套主定理或展开求解。这套题里还有一道关于“判断某个算法时间复杂度为O(1)是否可能是平均复杂度”的辨析题答案是可以。比如哈希表查找最坏O(n)但平均O(1)。这提醒我们复杂度除了看最坏情况还要区分最好、平均、最坏和均摊。校招笔试特别喜欢考这种“理论上不严谨但工程上常用”的描述答题时千万要读清楚题干说的是哪一种情况。2.2 二叉树的遍历与反推建树思维是核心第二类高频题是二叉树。这套题二里出现了不止一道二叉树的题其中最有代表性的一类就是“给定前序遍历和中序遍历求后序遍历”或者反过来。这类题的解题核心不是死记“前中后”的序列顺序而是理解一个关键规律前序遍历的第一个节点一定是根节点中序遍历中根节点左边的节点都在左子树右边的节点都在右子树。我建议遇到这类题不要直接在脑子里空转而是拿笔在草稿纸上把树画出来。比如前序是ABDEC中序是DBEAC第一步从前序推出根是A然后到中序里找到A的位置发现DBE在A左边、C在A右边所以左子树有三个节点、右子树只有一个节点。继续在前序剩下的BDEC中B是第一个说明B是左子树的根。再到中序的DBE里找BD在B左边、E在B右边所以D是B的左孩子、E是B的右孩子。整棵树就画出来了后序遍历自然就出来了DEBCA。这套题里还考了哈夫曼树。题目会给一组权值比如{2, 3, 5, 7, 9}让计算带权路径长度WPL。这类题有两个易错点一是合并时选最小两个权值但合并后的新节点权值要放回去重新参与比较二是WPL的计算既可以在合并过程中累加每次合并把新节点权值加到总和里也可以最后用“每个叶子权值乘深度”求和。两种方法结果一致很多人只记一种遇到节点多的时候就容易数错层数。2.3 排序与查找不背结论理解过程排序算法是校招客观题里最“卷”的考点。这套题二对排序的考查分两个层次一是时间/空间复杂度对照表二是“某种排序在特定数据下的表现”。第一层次没什么捷径该背的表还是要背。但我要提醒一个高频易混点快速排序在“完全有序”的数组上如果每次选的基准都是第一个元素那么划分极不均衡时间复杂度会退化成O(n^2)。很多同学记了“快排平均O(n log n)”就以为所有情况下都是这个数遇到“以下排序算法中在数据基本有序时最慢的是哪个”就会选错。第二层次的一种典型考法是“给出一趟排序后的中间结果判断可能使用了哪种排序算法”。这种题的关键是观察序列中元素的局部有序特征。比如一趟冒泡排序后最大的元素一定在最后一趟简单选择排序后最小的元素一定在最前但其余元素相对顺序不变希尔排序则会让相隔某个增量的子序列有序。用排除法往往比直接“背特征”更快。还有一类和查找相关的题会考二分查找的比较次数。比如在16个元素的有序数组中二分查找某个值最多需要比较几次。答案是5次不是4次。原因在于每次比较后区间减半从16到1需要log2(16)15次。原因是最后一次比较是“区间长度为1时还需要比较一次确定是否命中”。这类题最好自己画一棵判定树一劳永逸。3. 操作系统与网络记忆之外的“计算题”才是分水岭3.1 死锁与银行家算法别怕其实就是逻辑推导操作系统部分的客观题里死锁几乎是必考。这套题二里有一道银行家算法的判断题题干给了各进程的已分配资源、最大需求量和系统剩余资源问“当前状态是否安全并给出一个安全序列”。很多同学看到这种题就慌觉得“安全序列”是个很高深的概念。实际做题方法非常机械甚至不需要理解操作系统的调度细节你只需要记住一句话每次找一个进程它的剩余需求小于等于系统当前可用资源然后假设它执行完并释放所有已分配资源让系统可用资源变多。重复这个过程如果所有进程都能被找到则系统安全。具体操作就是画一张表每个进程还有多少资源要申请、当前可用资源是多少。先扫描所有进程找到第一个“剩余需求可用资源”的进程假设它完成把它的已分配资源加回可用资源里然后继续扫描。如果某一步找不到符合条件的进程说明存在死锁风险当前状态不安全。这道题真正的坑在于多选题里可能会同时给出多个“安全序列”让你判断哪些正确。这时候只要你按上述步骤把整个分配过程走一遍就不容易被干扰项带偏。另外注意银行家算法计算时是“每次只能让一个进程执行完”不能同时让两个进程合并释放资源这是很多人的计算错误来源。3.2 页面置换算法缺页次数的三种计算口径内存管理里考得最多的就是页面置换。这套题二出现了FIFO和LRU的缺页次数计算。题目一般会给一个页面访问序列比如1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5内存块数为3让分别计算FIFO和LRU的缺页次数。解题时最容易出错的地方是“初始内存为空时前三次访问算不算缺页”。答案是要算的因为每个页面第一次调入内存都会触发一次缺页中断。不少教材为了简化会把前三次算作“预热”不算缺页但校招笔试通常按正规定义算结果会差3次。我建议做题前先看清楚题干有没有“初始为空”和“缺页次数”的明确定义如果没有特殊说明就按“第一次访问即缺页”处理。FIFO有一个比较有意思的考点叫Belady异常内存块数增多缺页次数反而可能增多。但这套题里考得不多作为拓展了解即可。LRU则是每次淘汰最久没被访问的页面实现上可以用“往前扫描看哪个页面最后一次出现的位置最远”来人工模拟这个方法比维护访问时间标记要快得多。3.3 TCP三次握手与HTTP状态码网络题的“必背清单”网络部分的客观题在这套题里占比不低但难度不大属于送分题。不过送分题也有送分题的坑——多选题。三次握手考的不是“哪三步”而是“为什么不能是两次”或“为什么不是四次”。核心理解是三次握手是为了让双方都确认自己和对方的接收、发送能力正常。第二次握手时服务器在向客户端发送SYNACK的同时也确认了客户端的SYN第三次握手则是客户端确认服务器的SYN同时向服务器表明“我还能发”。如果没有第三次服务器不知道自己发出的SYN是否被客户端收到会浪费资源维持半连接。HTTP状态码里这套题比较偏爱考3xx重定向和4xx客户端错误。有个易混淆的点是301和302的区别301是永久重定向搜索引擎应该更新链接权重302是临时重定向链接权重不转移。另外401和403的区别也是高频考点401是未认证服务器不知道你是谁403是已认证但没权限服务器知道你是谁但不让你进。这两个状态码的区分在两年后的面试里还可能被追问建议一次记牢。4. 数据库与编程语言基础客观题里最“值钱”的分数4.1 索引失效场景死记不如推演数据库部分是京东这类电商公司笔试的重头戏客观题二里除了常规的SQL查询、事务ACID辨析还有一道典型的“索引失效”多选题给出一堆查询条件问哪些情况下索引会失效。这类题算是概念题里最能拉开差距的因为只背“最左前缀原则”三个字远远不够得会实际判断。我总结了几个笔试中必考的索引失效场景对索引列使用函数比如where YEAR(create_time) 2017索引会失效正确写法是范围条件 where create_time 2017-01-01 and create_time 2018-01-01。隐式类型转换比如索引列是varchar类型查询条件where num 123MySQL会自动把两个类型转成可比较的类型导致索引失效。前导模糊查询where name like %张因为B树索引是有序存储的前缀未知就无法利用顺序性。而where name like 张%则可以用到索引。在索引列上进行计算比如where price 1 100索引会失效改写为where price 99就能命中。这里有一个特别容易忽略的点复合索引的最左前缀原则。假设表里建了复合索引(a, b, c)查询条件where b 1 and c 2因为跳过了第一个字段a索引是用不上的。但如果查询条件是where a 1 and c 2那么只有a能用到索引c用不到因为中间隔了b。4.2 SQL语句执行顺序一条被无数人忽略的主线这套题二里还有一道关于SQL关键字执行顺序的辨析题。选项里出现了FROM、WHERE、GROUP BY、HAVING、SELECT、ORDER BY让你选出真正的执行顺序。很多人写SQL写了一两年还真不一定能完整说对。正确的顺序是FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT。这个顺序有两层意义。第一WHERE是在分组之前过滤的所以WHERE里不能使用聚合函数而HAVING是在分组之后过滤的可以使用聚合函数。第二SELECT是在HAVING之后执行的这意味着SELECT子句里起的别名不能在WHERE或HAVING中使用但可以在ORDER BY中使用。笔试如果考“以下哪个选项可以在WHERE子句中使用”这类题本质就是在查你有没有理解执行顺序。有个同学问过我一个问题既然WHERE不能使用聚合函数那“筛选出订单数大于10的客户”这类需求怎么写答案是先用GROUP BY按客户分组再用HAVING count(*) 10过滤。这条经验在工作中也经常用值得写进笔记。4.3 Java内存区域与C虚函数语言题背后的“内存观”这套题二的语言基础部分Java和C都有涉及。Java考察的是内存区域划分比如堆、栈、方法区、程序计数器里哪些是线程共享的、哪些是线程私有的。答案是堆和方法区是线程共享的虚拟机栈、本地方法栈和程序计数器是线程私有的。这道题虽然基础但后来面试里经常被扩展为“new出来的对象一定在堆上吗”“栈上分配是怎么回事”。如果你只背了结论没有理解“线程共享意味着需要考虑并发安全线程私有则不需要”这层逻辑那面试官往下追问两句就露馅了。C部分则考了虚函数。虚函数的核心价值是“动态绑定”也就是通过基类指针或引用调用虚函数时实际调用哪个版本的函数在运行时由对象的真实类型决定而不是由指针的静态类型决定。实现机制是虚函数表vtable每个包含虚函数的类都有一张虚函数表对象内部有一个虚表指针vptr指向它。笔试里有个高频判断题“虚函数可以是内联函数吗”答案是可以但只有在编译器能够确定调用目标时比如通过对象直接调用才可能内联。通过指针或引用调用时由于是动态绑定无法内联。4.4 重载与重写一字之差考的却是两套机制编程语言题里还有一个高频考点是“重载Overloading与重写Overriding的区别”。这套题二中用多选题的形式列出了几个描述让选出正确的。重载发生在同一个类中方法名相同、参数列表不同返回类型可以不同也可以相同但只有返回类型不同不算重载。重写发生在子类和父类之间方法签名方法名参数列表必须相同返回类型可以相同也可以是父类返回类型的子类型协变返回访问修饰符不能比父类更严格。之所以强调这个区别是因为很多人在真正写代码时会把两者混为一谈。重载是编译期的多态重写是运行期的多态。笔试里如果考“以下哪种是编译期多态”选重载就对了。5. 数学逻辑与智力题客观题里的“提速题”和“送命题”5.1 排列组合与概率用“分步”代替“空想”这套题二里有几道排列组合和概率题通常是整张卷子里最看心态的题目。其实这些题的计算量并不大但如果你状态不好很容易被绕进去。我的建议是碰到这类题不要试图心算老老实实用“分步计数”的方法在草稿纸上写。比如一道经典题目一个队伍有5男3女要选3个人组成小组要求至少包含1名女生有多少种选法。常规做法是用总选法C(8,3)减去全男选法C(5,3)等于56 - 10 46种。如果直接分类讨论“包含1名女生”“包含2名女生”“包含3名女生”也能算但容易漏掉情况。在客观题限时环境下能用“反面求解”的优先用反面求解。概率题的常见套路是把问题拆成“独立事件相乘”和“互斥事件相加”。遇到“至少”“至多”这类词优先考虑1减去对立事件概率。这套题里还有一道逻辑推理题题干比较长选项也类似“甲说真话乙说假话”的经典结构。这类题没有技巧就是在草稿纸上画一个真值表把所有可能情况列出来然后看哪种情况不会产生矛盾。一旦开始推理必须盯着“只有一个人说真话”或“只有一个人说谎”这种约束条件把假设和矛盾逐一排除。5.2 逻辑推理的“草稿纸作战法”我见过不少同学在逻辑推理题上栽跟头不是不会推而是“心里推”推着推着把自己绕晕了。笔试题里的逻辑推理往往不超过三四个变量完全可以用表格穷举。具体操作是把每个人或每个选项列成行把“真话/假话”的可能组合列成列然后逐行检查是否与题干条件冲突。被淘汰的组合直接用斜线划掉。这个方法看起来笨但错误率极低而且不会出现“推理着推理着忘掉了前提”的问题。考前至少用三道题练熟这套流程考试时才能形成条件反射。6. 备考策略与应试经验如何把这套题吃干榨净6.1 刷题顺序与复盘方法如果你打算拿这套题来做考前训练我不建议直接从头做到尾。我的做法是先快速通做一遍把答案写在另外一张纸上不对答案。然后第二遍再逐题精做重点标记那些“看过答案后恍然大悟”的题——这些才是你的提分点因为它们说明你离掌握这个知识点只差一层窗户纸。做完后一定要按考点维度整理错题而不是按题目序号整理。比如把“二叉树反推”“索引失效”“银行家算法”“页面置换”各归一类。整理时要写清楚三个要素题目考察的知识点、我当时的错误思路、正确的解题路径。这样一周后回头翻一次记忆效果比反复刷十套题都好。6.2 时间分配与心态控制客观题二的题量在45道左右如果我没记错考试时间应该在70分钟左右平均每题不到两分钟。这意味着你不可能在每一道题上都花5分钟去精算。我的建议是第一遍快速作答把没把握的题先标记出来等全部做完后如果还剩时间再回头仔细推敲。不要在单选题上死磕超过3分钟即使你最终做对了浪费的时间也可能导致后面概率题没时间做。这套题里多选题是失分重灾区因为少选、多选都不得分。我的策略是“只选绝对有把握的选项”对于二选一拿不准的选项宁可少拿分也绝不冒险。有些平台改卷时少选给一半分但校招笔试往往是严格判分所以做题前先搞清楚计分规则很重要。6.3 这套题之外的扩展建议客观题只是校招笔试的第一关它的作用是帮你拿到面试资格而不是直接决定offer。京东的面试流程里技术面会更深入地考察项目经验、系统设计、源码阅读和实际编码能力。所以我的建议是不要把全部时间花在刷客观题上花30%精力和时间刷题把70%的时间投入在项目复盘、算法编码和基础知识体系化上。如果你正在为2017年之后的京东或其他大厂校招做准备这套2017年的真题在难度和风格上依然是很好的参考样本。但注意现在的笔试系统越来越喜欢在客观题里嵌套“场景化题干”比如“在一个高并发秒杀系统里以下哪种方案能有效避免超卖”这类题已经不再是纯粹的知识点考察而是需要你具备把基础知识迁移到真实业务场景中的能力。这种能力没有捷径只能在准备过程中多做一步每学一个知识点都问自己一句“这个知识点在电商业务里到底会用在什么地方”。7. 常见问题与临场技巧速查7.1 我基础不好现在刷这套题来得及吗关于时间规划我给一个保守估计如果每天能挤出两小时数据结构、操作系统、网络、数据库各花一周巩固语言基础再花三天一个月左右可以搭起一个比较完整的知识框架。这个框架应付客观题足够了。如果时间更紧优先保住数据结构、数据库和网络这三块是客观题出题密度最高的区域。7.2 多选题总是拿不准怎么办多选题的难点在于“确定性”。我的经验是复习时把容易混淆的概念整理成对比表比如“重载vs重写”“进程vs线程”“TCP vs UDP”“301 vs 302”“B树 vs B-树”。考试时遇到多选题先问自己这道题考的是哪个对比组然后逐个选项对照对比表做筛选。这个方法能有效降低犹豫时间。7.3 考试时遇到完全没见过的题怎么办坦率地说2017年这套题里有些偏门的题目放在今天看已经过时了。如果你在考场上遇到从未见过的知识点不要慌客观题一般是“单选出最正确的”哪怕你不了解全部细节也可以从选项间的逻辑关系上推断。优先排除绝对化表述的选项比如“一定会”“完全不”“任何情况下都”这些往往是错误项的标志。剩下的选项里选择一个表述最稳健的正确率通常不低。这是应试技巧不是长期学习的正路但考场上能救急。这套题我曾带着好几个准备校招的同学逐题过了一遍每次复盘都能发现一些“哦原来我是这样想错的”瞬间。笔试考察的从来不只是知识量更是你在限时压力下的判断力。把这套题的思路吃透比多刷十套新题更值。
返回列表