
2023年秋招那阵子我身边不少同学把京东的笔试通知当成了一个阶段性目标投了简历之后大家最怕的不是笔试难而是连笔试链接都等不到。我也是九月中旬收到的通知点进去一看标题写着“技术通用岗位-第四批笔试”。这个岗位和一般的后端、前端岗位不太一样它更像一个“大池子”不急着按语言和方向分岗而是先统一筛一轮基础能力后面再根据面试表现和部门需求去匹配方向。所以这批笔试的考察逻辑不是看你某个框架用得有多熟而是看你计算机基础扎不扎实、代码能力能不能过关、遇到实际问题有没有清晰的解决思路。这篇文章我按自己的备考过程和实际踩坑经历把京东技术通用岗位第四批笔试从岗位定位、题型分布、高频考点、编程题思路到临场策略完整拆一遍。后面几批还没笔试的朋友以及秋招还在海投阶段的应届生都可以拿这份内容当参考提前感受一下这批笔试的调性。1. 笔试基本盘技术通用岗到底在筛什么人1.1 “通用”两个字背后的选拔逻辑技术通用岗和定向开发岗最大的区别是它不会在笔试阶段就逼你选Java、C、Go这些语言赛道。你可以在答题时选择自己最熟悉的一门语言但你面对的题目范围会非常宽数据结构、算法、计算机网络、操作系统、数据库、Linux基础知识样样都可能涉及。这种设置其实有很现实的理由。京东的校招体量很大业务线很多不同部门的后端、中间件、基础架构、云计算岗位对技术栈的要求差异巨大。如果笔试一开始就锁定某个方向对候选人来说太早对岗位匹配来说也太机械。通用岗位的做法是先把“基本功”这件事考透你的代码能力决定了你能不能干活你的计算机基础决定了你后续能学多快。只要这一轮表现足够好后面部门双选的时候你就有更多议价空间。所以我在备考的时候给自己定的基调就是不做深度钻研但覆盖面要拉满。具体来说就是操作系统、网络、数据库、Linux这些课的基础概念必须能快速判断对错算法题要练到中等难度能在限定时间内写出来语言特性题只复习自己常用的那一门别贪多。1.2 在线笔试的设备和环境要求京东这批笔试用的是在线考试系统说白了就是浏览器里打开一个链接登录后进入答题页面。整体界面分几个区域左边是题目列表右边是答题区选择题直接点选编程题会在页面里嵌一个在线编辑器你选好语言后在里面写代码然后可以运行测试用例。有几个硬性要求得提前确认清楚。第一电脑要有摄像头考试系统会要求人脸识别或全程抓拍这是防作弊的基础配置。第二建议用Chrome这类主流浏览器兼容性比某些偏门浏览器好很多。第三考试过程中系统会限制切屏一旦频繁切出考试页面后台会记录切屏次数严重的时候可能直接强制交卷。我那次考试之前特意把电脑上的弹窗广告、输入法、通讯软件全部关掉了只留下浏览器和本地IDE。虽然在线编辑器能完成所有答题但遇到复杂编程题时我习惯先在本地IDE里把思路跑通再同步到答题页面。这里要提醒一句如果你打算像我一样用本地IDE验证一定要控制时间并且别在编辑器和考试页面之间来回切换太多次否则容易被系统误判。2. 题型构成与时间分配策略2.1 选择题范围广、题量不小从往年校招情况来看京东技术类的笔试通常由选择题和编程题两部分组成。选择题覆盖的面很宽我印象比较深的有计算机网络、操作系统、数据库、Linux基础、Java或C语言特性、设计模式偶尔还会穿插几道简单智力题或逻辑推理题。这类选择题的特点在于它们不考背诵而是考概念理解。比如网络题很可能不直接问你“TCP首部多长”而是给你一个具体场景让你判断此时应该用什么协议或者问状态转换过程中某个标志位的变化。操作系统题也经常是给一段并发代码问这段代码是否会有死锁风险或者让你推断某个内存分配的最终结果。选择到后面的时候很多人会陷入一种“好像都会但每个答案都要犹豫”的状态。我的策略是先做有把握的题遇到犹豫超过一分钟的直接标记跳过把时间留给后面的编程题。因为选择题的分值通常单题不高没必要在个别题上死磕。2.2 编程题典型的三段式难度分层编程题一般会有两到三道难度是有梯度的。第一道往往偏简单考察基本的字符串或数组操作更像是“送分题”让你热热身。第二道开始需要一些算法设计常见的套路是滑动窗口、双指针、哈希表、贪心、简单动态规划。第三道可能会涉及二叉树、图或者更复杂的动态规划状态设计用来拉高区分度。这二十分钟到半小时之间第三题可能只写部分解法能过部分测试用例就不亏。2.3 时间分配表150分钟怎么花我按自己参加笔试时的体感整理了一张时间分配参考表。具体总时长要以你收到的通知为准但思路可以通用。题型建议用时策略选择题50-60分钟快速判断不确定的先标记编程题第一题10-15分钟求稳边界条件写全编程题第二题25-35分钟正常难度先想后码编程题第三题35-50分钟能拿部分分就拿部分分检查与上传5-10分钟检查编译运行确认提交这里想多说一句很多人笔试翻车不是因为不会做而是因为时间安排失控。选择题做得太慢把编程题压得只剩四十分钟后面代码写得手忙脚乱。我的做法是选择题无论有没有做完在考试进行到一半左右时都必须停笔先去看编程题。毕竟编程题分值高而且写代码本身就比点选择题更耗时。3. 高频考点复盘选择题的四个重点板块3.1 计算机网络别只背状态码学会看场景网络题在技术类笔试里出现频率极高。最经典的是TCP和UDP的区别几乎每年都会考。但现在的出题方式很灵活不是简单问你“TCP可靠还是UDP可靠”而是给你一个直播推流、文件传输、视频通话之类的场景让你选更适合的传输协议。备考的时候我给自己列了一个网络知识清单TCP三次握手和四次挥手的过程与原因、TCP和UDP特点对比、HTTP常见状态码含义、HTTP与HTTPS的区别、DNS解析流程、IP地址分类和子网划分、常见的负载均衡策略。其中TCP四次挥手里的TIME_WAIT状态是个高频点很多候选人能说出状态名字但说不清为什么需要等待。我当时刷到一道比较典型的题大意是问客户端主动关闭连接后进入TIME_WAIT状态为什么需要等待2MSL。答案的核心有两层一是保证最后一个ACK能送达对端如果丢失可以重传二是让旧连接产生的所有报文在网络中自然消失避免影响新连接。这种题看起来是问状态实际是考你对连接生命周期问题的理解程度准备的时候一定要把原理捋透。3.2 操作系统死锁、并发和内存管理操作系统板块的出题点同样非常集中。死锁的四个必要条件互斥、持有并等待、不可剥夺、循环等待是必背内容但笔试更常考的是“如何预防死锁”和“如何避免死锁”。预防和避免是两个维度预防是破坏条件避免是使用银行家算法这类动态判断机制。进程和线程的区别也是老生常谈但通用岗位的笔试会把问题包装得更新一些。比如问多线程并发访问同一个变量用哪种同步方式能保证可见性这就需要你对volatile、synchronized、ReentrantLock或者Python的GIL机制有基本认知。内存管理这块我建议重点复习虚拟内存、分页和页面置换算法。LRU是个高频词不光是操作系统很多框架和缓存设计里也用它。考试里除了问你LRU是什么还可能让你搭建一个LRU Cache的数据结构这就是把操作系统的知识和算法题结合了。3.3 数据库与LinuxSQL基本功加常用命令数据库的考察重点集中在索引、事务隔离级别、SQL优化这些高频区域。B树为什么适合作为InnoDB的索引结构这个问题的标准答案你至少要能说出三点叶子节点存数据且形成链表、树高较低减少磁盘IO、范围查询友好。事务的ACID特性、四种隔离级别以及各自解决的问题脏读、不可重复读、幻读也要熟练掌握。我在刷题时发现数据库题很喜欢给一个SQL执行很慢的场景让你分析原因并提出优化方案。这种题没有唯一答案但你的回答里至少要提到几个方向是否走了索引、有没有全表扫描、数据量级多大、表结构是否合理。哪怕笔试时拿不准最佳答案把常规排查思路写上去也能得分。Linux板块相对简单主要考察常用命令的使用场景。比如查看进程用ps、查看端口占用用netstat或ss、查找文件用find和grep、权限管理用chmod。还有一个高频考点是管道符和重定向的区别。笔试里出现这种题属于白送分千万别在这种细节上失分。3.4 语言基础选一门深挖一门通用岗位不会逼你同时精通C、Java、Python但你选来答题的语言它的核心特性必须足够扎实。如果选Java那HashMap的底层结构、扩容机制、Hash冲突处理方式必须能讲清楚。如果选C那指针和引用的区别、虚函数与多态的实现原理、智能指针的类型与使用场景都是高频点。如果选Python那深拷贝和浅拷贝的区别、列表与元组的差异、装饰器的作用以及GIL对并发的影响这些都要烂熟于心。我的建议是不要去背一大堆语言细节而是围绕“内存管理、并发处理、集合/容器、常见坑点”四条主线来回顾。语言层面的选择题出题人更想看到你踩过坑、理解过机制而不是单纯记住语法。4. 编程题思路拆解与代码模板4.1 滑动窗口无重复字符的最长子串编程题里字符串、数组方向是最常出现的。有一类经典题目是“给定一个字符串请你找出其中不含有重复字符的最长子串的长度”。这道题几乎可以当成滑动窗口的模板题来准备因为很多变体题都是在这个基础上加条件。我的实现思路是用一个哈希表记录每个字符最近一次出现的位置然后用left指针维护当前窗口的左边界。遍历字符串时如果当前字符之前出现过并且出现位置不小于left就说明窗口内有重复字符需要把left移动到上次出现位置的右边一格。每一步都计算当前窗口长度并更新最大值。def lengthOfLongestSubstring(s: str) - int: last_pos {} left 0 max_len 0 for right, ch in enumerate(s): if ch in last_pos and last_pos[ch] left: left last_pos[ch] 1 last_pos[ch] right max_len max(max_len, right - left 1) return max_len这段代码的时间复杂度是O(n)空间复杂度是O(字符集大小)。笔试时如果时间紧张写出这种方式是最稳的。需要注意的边界情况包括空字符串、全是同一个字符的字符串以及重复字符出现在窗口外的情况。4.2 动态规划0-1背包问题的标准模板动态规划是区分度的主要来源。0-1背包问题可以说是动态规划里的必刷题不夸张地说理解了它很多背包类变形题都能一通百通。题目一般是这样给定n个物品每个物品有重量weight和value再给一个容量为capacity的背包问能装入的最大价值。每个物品只能用一次。我习惯用一维dp数组做空间优化。dp[w]表示容量为w时能获得的最大价值。外层遍历物品内层倒序遍历容量这样才能保证每个物品只取一次。def knapsack(weights, values, capacity): n len(weights) dp [0] * (capacity 1) for i in range(n): for w in range(capacity, weights[i] - 1, -1): dp[w] max(dp[w], dp[w - weights[i]] values[i]) return dp[capacity]很多人写背包题容易忽略内层循环为什么必须倒序。如果正序更新一个物品就可能在同一个状态转移中被重复使用变成完全背包的逻辑。笔试考场上这种细节很容易被忽略我的建议是平常练习时就养成写注释的好习惯把这道题吃透。4.3 图与连通性用DFS/BFS遍历网格还有一类考得越来越多的题是在二维网格上做搜索比如“岛屿数量”问题。题面给你一个由’1’陆地和’0’水组成的二维网格要求计算岛屿数量。这道题考察的点不是你背了什么高级算法而是你能否在矩阵场景下写出DFS或BFS的遍历逻辑。我用的是遍历整个网格遇到陆地就把计数器加一同时把相邻的陆地全部标记为访问过。标记方式可以直接把’1’改成’0’这样省去额外空间的消耗也简化了代码判断。def numIslands(grid): if not grid: return 0 rows, cols len(grid), len(grid[0]) count 0 for i in range(rows): for j in range(cols): if grid[i][j] 1: count 1 stack [(i, j)] while stack: x, y stack.pop() if not (0 x rows and 0 y cols) or grid[x][y] ! 1: continue grid[x][y] 0 stack.extend([(x-1, y), (x1, y), (x, y-1), (x, y1)]) return count这里有一个小技巧用显式栈代替系统递归可以避免数据量较大时出现递归深度超限的问题。笔试系统如果用的是Python递归深度默认只有1000左右一旦格子数量多递归写法可能会崩在运行用例上。4.4 程序题审题与边界处理心得关于编程题我最想重点强调的还是“审题”这两个字。笔试紧张的时候最容易犯的错不是不会做而是没看清题目要求就开始写。我总结了几条自己的审题习惯一、先看输入输出约束数据量决定算法复杂度上限这个必须放在第一位二、再看有没有特殊说明比如数组是否有序、元素是否为整数、是否可能为空三、然后用题面给出的示例过一遍思路确认自己理解的题意和示例一致四、最后再动手写。边界情况是另一个失分重灾区。字符串长度为零、数组只有一个元素、某个变量取到最大值导致int溢出这些都是测试用例最容易埋雷的地方。写最后提交之前我的习惯是花一分钟把代码里的每个分支条件扫一遍看看有没有遗漏。5. 临场实战记录笔试中遇到的状况和处理方式5.1 在线IDE和本地编译器之间的选择这里要好好说说在线IDE的坑。很多校招笔试系统自带在线编辑器但它的提示、补全、语法检查能力比本地IDE差不少。如果你习惯了PyCharm、VS Code这种全功能环境突然换到在线编辑框里写代码很容易犯一些低级错误比如缩进错乱、括号没对齐、函数名拼写错误。我的做法是先用本地IDE把思路实现一遍确认能跑通后再把代码复制到答题页。这个方法在选择题少、时间充裕的时候很有效但如果选择题做太慢连本地IDE都来不及打开那就只能在线编辑器里硬写。所以平时刷题时我偶尔会刻意把IDE提示关掉用最原始的编辑器写代码练一练不依赖补全的代码拼写能力。5.2 编译通过但运行结果不对时的排查节奏我这次笔试里遇到一个情况代码编译通过了但跑示例用例时结果不对。当时没有立刻慌因为我给自己定过一条排查顺序。先查边界条件数组是否可能为空索引是否越界循环的起止条件是否正确。再查状态更新动态规划的转移方程是否漏了状态滑动窗口的left指针是否在正确位置更新。最后查数据类型是不是应该用long却用了int导致大数结果被截断。这套顺序每面时间不长但能覆盖绝大多数运行结果错误的原因。如果排查两轮还找不到问题就果断放弃这道题转去做后面的题目。笔试时间有限死磕一道题付出的机会成本太高了。5.3 遇到完全没思路的题目怎么办说句实话第三道编程题如果完全没思路这种情况真的很常见我身边不少同学都遇到过。我的策略是先把题目重读一遍尝试写一个暴力解法不要把问题想复杂。比如搜索类题目哪怕不知道最优算法也可以先写一个DFS把所有可能性遍历一遍。动态规划状态不知道设什么那就用递归把所有组合列举出来。暴力解法的得分可能不高但至少能跑过一部分简单测试用例比空着强。而且当你把暴力解法写出来之后往往会对题目本身有更深的理解反而更容易想到优化方向。6. 笔试结束后的复盘与下一步准备6.1 趁记忆还热把题目和思路记录下来交卷之后不要直接关电脑我强烈建议趁记忆还清晰把能记住的题目快速记录在备忘录里。不需要写得很完整重点是题型、考点、自己当时的思路、卡壳点。笔试结束后一两天内这些记录还有复盘价值等过了一周再回头看很多细节早就忘了。记录题目还有一个隐藏好处如果后续面试里被问到“你最近做过哪些算法题”你就能直接从这些记录里挑一个讲得最清楚的案例把题面、思路、复杂度、踩坑过程完整讲给面试官。这不仅是笔试复盘的延伸也是面试准备的素材来源。6.2 通用岗位笔试之后可能面临的面试方向笔试通过后下一轮一般是技术面试。通用岗位的技术面通常不会只盯着某一种语言或某一条技术栈面试官更可能围绕项目经历、算法能力、计算机基础以及你选择的方向展开。因为我投的是通用岗位所以我把面试重点就分成了两块一是项目里的技术难点和取舍面试官很喜欢问你为什么选这个方案而不是那个方案二是基础知识的深挖他们可能会顺着笔试中的某个考点连续追问。这个过程其实比笔试更需要体系化表达所以笔试结束后的一周可以开始整理自己的项目资料并熟悉常规追问套路。我在备考时的一点点感受是笔试只是一道门槛真正决定你能去哪个团队、做什么业务方向的往往还是面试阶段的表现。笔试没有考到的知识面试仍然可能考到笔试里表现出彩的思路也可以作为面试时的谈资。秋招这场仗很熬人笔试作为第一道关卡心态占了很大比重。如果你现在手里已经收到了类似的笔试通知别纠结自己能不能全做对先按本文的思路把基础知识点过一遍然后抽出两天时间刷一刷滑动窗口、动态规划、DFS、哈希表这些高频题型稳扎稳打比什么都强。