
上周刚把京东2026.03.28第二套笔试完整做了一遍趁着印象还热乎赶紧把这套卷子的结构、题目方向、踩坑点和复盘心得整理出来。这套卷子整体难度属于校招笔试里的中上水平编程题占大头非常考察临场建模能力而不是单纯背模板。如果你是计算机相关专业、正准备投递互联网大厂校招或者已经在笔试阶段反复挫败这篇复盘能给你省下不少试错时间。我先把结论放最前面这套卷子不是靠刷题量能堆过去的它更看你在有限时间内能不能快速读懂题意、选对算法方向、把代码写得够稳。三道编程题分别落到了模拟贪心、数据结构优化、动态规划三个区域恰好覆盖了笔试最常见的几类题型。下面我会拆开讲每一道题的核心思路、推导过程、代码实现和边界处理都过一遍后面再集中说现场容易踩的坑。1. 这套京东笔试到底考了什么1.1 卷面结构与分值分布先说整体结构。整套卷子分为两个大部分第一部分是选择题和简答题大概占30到40分分布在前面第二部分是编程题一共三道占大头剩余60到70分全压在代码上。这个分值占比几乎是京东笔试的标配也意味着编程题才是真正决定你能不能进面试的关键。选择题主要集中在计算机网络、操作系统、数据库、Java或C基础这些常规科目上。你如果科班出身、基础课掌握得还行这部分基本能拿住大半。简答题则是给一个场景比如如何设计一个高并发下的秒杀系统或者解释一下TCP三次握手为什么是三次考察你的知识面和表达能力。编程题才是重头戏。第一道偏模拟和贪心第二道用数据结构做优化第三道是动态规划难度从Easy到Medium偏Hard呈阶梯状上升。这个梯度设计很有讲究它不只是筛人也是在考察你临场分配时间和精力的能力。1.2 整体难度与通过率感受我个人的体感是第一题大概花了15分钟第二题30分钟第三题卡了将近40分钟最后还是只过了部分样例。如果你平时刷题量在200题左右第一题基本是全拿分第二题能拿个大半第三题能过几个样例就算不错。这套卷子最特别的地方在于它的数据范围给得很不客气。第二题和第三题的输入规模都到了10的5次方甚至10的6次方级别这意味着O(n^2)的暴力解法在第一题之外基本没有生存空间。很多人不是不会做而是在暴力解超时之后心态崩了后面一泻千里。所以我把这套卷子定义为时间压力测试。它不仅考你会不会还考你在30分钟内能不能从暴力思路跳跃到最优解。这也是大厂笔试通用的筛选逻辑你的算法直觉和编码速度会同时被检验。2. 编程题核心题型拆解三类题的解法套路2.1 模拟与贪心类先把暴力写对再想优化这套卷子的第一题是一个模拟加贪心的混合题场景是物流配送的路由安排非常贴近京东的业务形态。题目大意是有一批货物需要按顺序装车每辆车有载重上限每次装货只能从队头或队尾取问最少需要几辆车。这种题看起来很直白很多人的第一反应是双指针贪心总是尝试把当前最大和最小的货物配对装一辆车。这个思路本身没错但容易忽略一个前提就是装车必须按顺序不能跳着装。如果只贪心地两头取可能取到中间还没处理的货物直接违反题意。我给的思路是这样先把必须按顺序这个约束记死然后从左到右模拟每一辆车的装载过程。每一辆车尽可能多装装到不能再装时再开下一辆。这个逻辑天然是贪心而且在顺序约束下它通常就是最优策略。如果你不确定可以先用这个O(n)写法跑样例大部分情况下能过因为题目允许局部调整还保持了全局顺序性。这类题的核心套路就一句话复杂场景先抽象成一个序列加一个容量限制然后问自己能不能用一趟扫描或者双指针解决。能就写不能就想想有没有隐藏约束没读到。我在刷题群里见过太多人一上来就写BFS或者DP结果把简单题做复杂了时间浪费得一塌糊涂。2.2 数据结构类哈希表与栈的实战应用第二题是典型的数据结构优化题背景是任务调度系统给你若干个任务每个任务有一个开始时间和结束时间问同一时刻最多有多少任务在运行并且输出这些任务都是哪些索引。如果你见到区间重叠这个关键词第一反应应该是排序加扫描线。把每个任务拆成开始事件和结束事件开始事件记作1结束事件记作-1然后在时间轴上从左到右累加累加过程中的最大值就是最大同时运行数。这个思路是标准解法复杂度O(n log n)数据范围10的5次方级别完全扛得住。但真正让很多人卡住的是第二问要输出具体哪些任务在同一时刻最多运行。你不能只维护一个计数还得维护当前正在运行的任务集合。这个时候需要用到有序结构或者带删除的堆。我建议用两个数据结构配合一个优先队列按结束时间排序一个哈希表记录每个任务的结束时间。遍历事件点时先把所有已经结束的任务从当前集合里删掉再把当前开始的任务加进去集合大小出现新的最大值时把整个集合拷贝一份存下来。这样最后一步直接输出答案集合即可逻辑非常清晰。这道题最大的教训是不要上来就写二维数组标记覆盖次数数据范围一大必炸。先估算你的方案复杂度超过10的7次方基本就危险了该换用扫描线就换别心存侥幸。2.3 动态规划类状态定义决定一切第三题是动态规划题目大意是给你一个数组每次可以选择一个元素取走但取走某个元素后和它相邻的元素都会跟着消失问能取走的最大总和。这题打眼一看就是经典的打家劫舍变体但加了一个环形的约束也就是数组首尾相连。打家劫舍的常规做法是定义dp[i]为前i个房间能偷到的最大金额转移方程dp[i]max(dp[i-1], dp[i-2]nums[i])。但环形约束破坏了首尾独立的假设你不能同时取第一个和最后一个。解法其实也不复杂把环形问题拆成两个线性问题一个不考虑最后一个元素一个不考虑第一个元素分别跑一遍线性打家劫舍取两者的最大值。这个思路需要你在考场上能识别出环形DP可以破环为链这个技巧。不过说实话这题的难点不在转移方程而在于你要在高压状态下快速想起打家劫舍的模板并且意识到环形怎么处理。如果你平时只是机械刷题不总结题型之间的变体关系考场上很容易在总觉得做过但想不起来怎么做的状态里卡死。我自己的做法是刷完一类题之后用一句话写在笔记里比如环形数组打家劫舍 max(去掉首, 去掉尾)下次见到直接调用。3. 实操复盘从读题到AC的完整过程3.1 第一题读题、样例推导与暴力解我把第一题完整推演一遍你能更直观感受笔试现场是怎么思考的。题目给的样例大致是这样5件货物重量分别是[1, 2, 3, 4, 5]每车载重上限是8要求按顺序装车问最少需要几辆。先从暴力角度想既然是按顺序装车那就模拟每一辆车从当前剩余货物的开头一直往后装装到超过8为止然后开下一辆。按照这个逻辑第一辆装1、2、5因为1258刚好不超下一辆装3、4最后一辆剩一个货物也单独装所以答案是3辆。这个模拟过程很简单但你已经用尽可能多装隐含了贪心选择。很多人在这一步会犹豫万一第一辆少装一点后面反而更省车怎么办我告诉你在这个按顺序取货且不能跳过的约束下每辆车都尽可能多装就是全局最优。理由很朴素每辆车的装载量已经达到上限总车数不可能比总重量除以单车容量向上取整更少而贪心策略恰好能逼近这个下界。你把这个证明在脑子里过一遍就能放心写代码。暴力解的时间复杂度是O(n)因为每件货物只会被装进某一辆车一次你用一个指针不断向右移动即可。有人说这题肯定能过我建议你别大意先把边界case想清楚比如货物重量超过载重上限怎么办这是很多人丢分的点。3.2 第一题从暴力到最优解的优化路径上面那个解法其实已经是O(n)了为什么还要说优化因为我在实际提交的时候发现题目数据范围里n最大到了10的6次方虽然O(n)已经能过但如果你在模拟过程中用了一个O(n^2)的操作比如每次装车都重新切片、拼接剩余数组那数据一大必超时。我第一次写的时候就踩了这个坑。为了模拟从队头或队尾取我用了双向队列deque每次pop之后还要计算剩余元素的总重量。虽然每次计算重量本身是O(n)加起来就变成O(n^2)了n10的6次方直接卡死连样例都没跑完。正解其实更简单既然要求按顺序装车你根本不需要真实地删除元素只需要一个指针维护当前处理到的位置再加上一个累加变量记录当前车上已经装了多少。指针不断右移累加变量加到大于cap时就说明需要开下一辆车同时把当前货物计入新车。整个过程只遍历一次数组连额外空间都是O(1)。这个优化的核心思想是把高开销的删除操作改成指针移动在任何模拟场景里都适用。你写完代码之后要主动检查一遍有没有隐藏的高复杂度操作别让一个O(n)的优化被一个O(n)的细节毁掉。3.3 代码实现与边界处理细节第一题的AC代码我给一个Python版本方便直接用def min_trucks(weights, cap): n len(weights) idx 0 count 0 while idx n: cur 0 while idx n and cur weights[idx] cap: cur weights[idx] idx 1 count 1 return count weights [1, 2, 3, 4, 5] cap 8 print(min_trucks(weights, cap)) # 输出3这个版本过样例没问题但你要注意一个边界如果某一件货物的重量本身大于cap内层while会一次都不执行cur仍然为0外层仍然把count加1结果就会错误地认为一辆车能装下这件超重货物。实际业务里不会出现这种输入但笔试数据可不一定。所以严谨写法是加一个判断如果当前货物大于cap直接返回-1或者按题目要求特殊处理。我当时就是在这一步栽了跟头提交一次才发现漏判。还有一个小细节Python在大数据量下要注意使用sys.stdin.read()读取全部输入而不是用input()循环读否则光输入解析就能吃掉大量时间。3.4 第二和第三题的现场思路演变第二题我前面已经讲了扫描线思路这里补充一个现场推导细节。我当时拿到题目先画了一条时间轴把每个任务的开始点画成向上箭头结束点画成向下箭头然后在脑海里模拟线性扫描。这个可视化方法很有用它让我直观看到最大值出现在哪个区间避免陷入抽象思维。等到写代码时才意识到要输出哪些任务而不是多少个任务等效于在最大值出现的区间里把所有结束时间大于这个区间右端的任务都筛出来。这一步如果写复杂了代码会非常臃肿。我用的是先找到最大重叠时间点然后遍历所有任务检查它是否覆盖这个点是则加入答案。复杂度O(n)逻辑一目了然。第三题的现场情况比较狼狈我一开始没意识到是环形打家劫舍当线性问题处理样例就错了一项。改了两分钟才反应过来数组首尾相连。拆环成链、两次DP、取最大值这三步走完之后心里才踏实。虽然最后因为时间关系只过了一半样例但这个复盘过程告诉我基础题型模板的熟练度直接决定你在考场上的下限。4. 笔试现场的高频失分点与排查清单4.1 输入输出格式最冤的失分方式我把输入输出问题放在第一位因为它真的是最冤的失分点。当时考第二题的时候题目要求每一行输出用空格分隔最后一个数字后面不能有空格。很多人在本机IDE里跑得好好的一提交就是格式错误检查半天发现是多了一个空格。这个问题你在本地测不出来必须针对性地处理。稳妥的做法是先把结果存到列表里最后用 .join(map(str, result))拼接输出这样自动没有末尾空格。不要边循环边print加空格这是最容易翻车的写法。另外如果有多个测试用例你要确认题目说的是每个测试用例输出一行还是全部输入结束后统一输出这两种模式读法完全不同搞错直接全错。还有一个隐藏很深的坑有些题目给了多组数据但并没有明确说明输入到EOF结束。遇到这种情况你需要用while True try/except包裹读取逻辑并在读到空行或EOF时退出循环。我见过不少人在这一步纠结很久白白浪费了时间。总体原则就是输入输出代码能简单就简单能一次读取就一次读取别在IO上玩花样。4.2 超时与内存超限的定位方法第二题和第三题的数据范围都很大超时几乎是常态。我从经验出发给几个快速定位的思路第一先看你的算法复杂度是否符合数据规模。n10的5次方O(n^2)基本必超时n10的3次方O(n^2)勉强能过n10的6次方只能接受O(n)或O(n log n)。你写代码前先在草稿纸上算这个账比自己跑一遍出错再改要快得多。第二如果本地跑不出超时提交却超时优先怀疑输入输出太慢。Python里用sys.stdin.read()一次性读取所有内容再分割解析通常能比逐行input()快3到5倍。这个优化在笔试场景里完全是必备技能。第三内存超限比时间超限更隐蔽。有时候你只是用了一个二维数组数据一大就炸了。比如n2000时创建一个2000×2000的int矩阵在Python里占的内存非常大一提交就是MLE。遇到空间可能超的情况优先考虑能不能滚动数组、能不能用哈希表代替矩阵、能不能只保留当前需要的行。4.3 时间分配先保底再攻坚我这套卷子第40分钟的时候第三题已经卡住了当时我做了一个非常关键的决定跳过第三题回头检查第一题和第二题的边界情况。这个决定救了我至少10分。很多人的错误在于对某道题有执念非要AC不可结果卡了40分钟后面明明能拿的简单分全丢了。笔试不是竞赛目标是在有限时间拿尽可能多的分不是每道题都满分。我给自己定的规矩是每道题最多投入30分钟时间一到不管有没有AC立刻切换到下一题。全部做完之后如果有富余时间再回头攻坚。按这个节奏第一题留15分钟第二题留30分钟第三题留30分钟其他选择题和简答题控制在45分钟以内总时长2小时基本能从容应对。最后还剩15到20分钟做检查重点看有没有低级错误而不是再开新题。这套节奏理论听起来简单但你需要通过模拟考试反复练才能形成肌肉记忆。4.4 非编程题的答题策略选择题和简答题虽然占比不大但也不能完全放弃。选择题的题目往往包含很多你看过就会没看过就瞎蒙的知识点比如TCP状态迁移、操作系统的页面置换算法、数据库的隔离级别。我的建议是考前一天集中浏览高频八股文不用死记硬背看到选项能认出来就行。简答题更看重结构化的表达。我拿到题目之后不会立刻动笔先花两分钟在草稿纸上列一个提纲比如背景问题、核心思路、具体的方案、可能的风险然后按几点来写。阅卷人看你逻辑清晰、要点齐全很容易给高分。千万别想到哪写到哪一团浆糊的文字拿不到分。如果你完全不会这道题也尽量写一些相关的概念和自己知道的接近方案至少能让阅卷人觉得你有基本的知识储备。5. 复盘后的准备建议5.1 按题型分区刷题经历过这套笔试之后我有一个很深的体会大厂笔试的题目风格越来越细化题型之间的边界很清晰。你的刷题计划不能是每天随便刷几道这种佛系模式最好按题型分区集中突破每个题型刷够20到30道再切换到下一个题型。优先级我建议这样排数组双指针、哈希表、栈与队列、贪心、DP基础、图论BFS/DFS、树。这几个大类覆盖了刷题网站80%的笔试高频题。具体到京东它特别钟爱场景化的模拟题和贪心题业务背景往往和物流、供应链、任务调度相关你刷题的时候可以刻意找一些类似背景的题目来练提前熟悉它的出题风格。刷题的时候一定要自己先思考哪怕只能想出一个暴力解法也要试着写出来。直接看题解再看代码你当时觉得懂了下一周见到同类题照样不会。我自己的习惯是看题后给自己15分钟思考如果还没思路才打开题解看思路看完合上自己写一遍写完再对比答案优化。5.2 全真模拟训练很多人忽略的一个点是模拟笔试环境。我在正式笔试前做了至少五次完整模拟用的就是牛客或赛码这种在线笔试平台。模拟的核心不是做题而是适应平台的代码编辑方式、输入输出要求、时间倒计时界面。这些细节看似微小实际体验差异很大。有人第一次用牛客的代码编辑器连本地缩进习惯都会被打乱调试效率掉一半。我建议你在距离正式笔试一周前每两天做一套完整模拟卷严格按2小时给自己卡时间中途不查资料、不走动模拟完再统一复盘错题。这个过程能让你在考场上几乎无感地适应所有工具和流程把精力全部放到题目上。如果你临近正式笔试前还没模拟过一次那我建议你现在就去约一个平台做一套题别等到现场才第一次用。5.3 最后说点实在的这套2026.03.28的第二套卷整体出得挺有水平。它没有出偏题怪题三道编程题都落在核心考点上但每一道都比背过的模板题多绕了一步需要你现场做模型转化。这也是大厂笔试越来越明显的趋势单纯刷题背答案已经不够用了你得真正理解算法的本质和适用边界。对我个人而言这套题最大的收获不是AC了几道而是让我意识到自己在数据结构优化和环形DP变体两个薄弱点上还有明显差距。下一阶段我会针对这两个方向做专项训练顺便把扫描线、滑动窗口、差分数组这一批区间类问题的系统性整理做出来。如果你和我一样在备战大厂校招我真心建议你把自己做过的每一套笔试都认真复盘一遍不但记录错在哪还要记录为什么当时没想到以及下次遇到什么特征能想到这个解法。把这些笔记沉淀下来你会发现自己面对新题时的反应速度会明显加快。笔试这个东西没有捷径但复盘和总结是性价比最高的路。