
京东2019校招Java笔试放在今天回头看难度不算离谱但它那种“基础题占比高、算法题卡时间、多选专门挖坑”的出题风格确实刷掉了一大批只会背八股、不会变通的人。我当年整理过这套题的考点分布也跟不少参加过的同学对过答案今天把它拆开揉碎讲一遍。不管你是准备大厂校招还是只想把Java基础补扎实这份解析都能帮你省下不少瞎翻面经的时间。先说清楚一个事这里讲的是根据当年笔试考情和各路面经整理出的高频考点与代表性题目不是官方原卷。它的价值在于让你搞清楚京东这类大厂到底怎么考Java考到什么深度以及用什么策略能拿高分。毕竟笔试不是竞赛它考的是你在限定时间内稳定输出知识的能力。1. 整体试卷结构与考察逻辑1.1 笔试环节的构成与筛选逻辑京东2019年的校招笔试技术岗分成两大部分一部分是通用能力测试也就是行测题包含言语理解、逻辑推理、数字推理另一部分是专业笔试Java开发工程师岗位考的就是Java基础、数据结构与算法、数据库、计算机网络、操作系统这些硬核内容。我主要讲专业笔试部分因为行测那部分跟技术能力关系不大靠刷题软件练几天就能过关。专业笔试的筛选逻辑很直接先用选择题快速过滤基础不牢的人再用编程题筛选真正能写代码的人。选择题覆盖Java语法细节、集合原理、JVM内存、并发机制、SQL和网络基础这些题的特点是不难但特别细。比如一个关于HashMap的题它会让你判断“JDK 1.8中链表转红黑树的阈值是7还是8”这种题你靠“大概知道”是选不对的必须精确记忆。编程题通常两道到三道难度递进。第一道一般是模拟题或者简单数据结构题送分用的但题干巨长很多人读题就花了十分钟。第二道开始上强度常见的有链表操作、二叉树遍历、动态规划、贪心算法。整个笔试时间大概是90到120分钟选择题如果磨蹭太久编程题基本没时间写这是很多人挂掉的主要原因。1.2 题型分布与时间分配策略我根据当年考过的人反馈整理了一个大概的题型占比表虽然每年会有微调但大方向是稳定的模块题型题量占比难度时间投入建议Java基础语法单选/多选20%-25%低15分钟集合框架单选/多选10%-15%中10分钟JVM与内存单选8%-10%中8分钟并发编程单选/多选8%-10%中高10分钟数据库/SQL单选8%-10%中8分钟网络/操作系统单选8%-10%中8分钟算法编程题编程20%-25%高30-40分钟注意多选京东的选择题里多选题占比不小而且多选、少选、错选都不得分。这意味着你不能抱着“选个最稳妥的”心态必须对每个选项都有确定的判断。所以做题节奏应该是基础题快速过没有把握的多选题先标记跳过把编程题写完再回来纠结。编程题的分数权重远高于选择题一道编程题的分值顶得上十几道选择题千万别因小失大。2. Java核心基础选择题里的高频考点拆解2.1 面向对象、语法细节与类型机制面向对象是Java笔试开场必考的内容考法一般不直接问“什么是封装”而是给你一段代码让你判断输出结果或者指出错误。比如重载和重写同时出现的时候JVM怎么决定调用哪个方法父类引用指向子类对象时能访问哪些成员抽象类和接口在Java 8之后有什么区别。我印象比较深的一个题是这样的class A { public String show(D obj) { return A and D; } public String show(A obj) { return A and A; } } class B extends A { public String show(B obj) { return B and B; } public String show(A obj) { return B and A; } } class C extends B {} class D extends B {}问new A().show(new C())和new B().show(new C())分别输出什么。这种题考的是方法分派机制编译时看引用类型确定候选方法运行时根据实际对象类型进行动态绑定。new B().show(new C())中C是B的子类B中最匹配的方法是show(B obj)所以输出“B and B”。这类题没有捷径必须把继承体系画清楚再逐层判断。还有一个必考的知识点是String、StringBuilder、StringBuffer的区别以及字符串常量的驻留机制。京东喜欢出这类题String s1 java; String s2 java; String s3 new String(java); System.out.println(s1 s2); System.out.println(s1 s3); System.out.println(s1.equals(s3));答案分别是true、false、true。s1 s2为true是因为字符串字面量会放到常量池指向同一个对象new String()强制在堆上创建新对象引用不同equals比较的是内容。这个考点属于必拿分题但很多人在intern()方法上栽过跟头s3.intern() s1才是true这点要分清。2.2 集合框架从HashMap看大厂的考法集合框架是京东笔试的重头戏HashMap更是核心中的核心。2019年的卷子里HashMap相关题目至少出现两道一道考底层结构一道考扩容机制。它考的不是你“会不会用”而是“懂不懂原理”。先梳理一下HashMap必须掌握的知识点。JDK 1.8之后HashMap底层是数组加链表加红黑树的结构。默认初始容量16负载因子0.75当元素个数超过容量 * 负载因子时触发扩容扩容后容量翻倍。链表长度超过8且数组长度大于等于64时转为红黑树红黑树节点数小于6时退化为链表。为什么阈值是8因为泊松分布下负载因子0.75时链表长度达到8的概率只有千万分之六这个设计是为了在时间和空间上做权衡。常考的坑点有两个。第一为什么HashMap线程不安全因为多线程并发put时可能发生数据覆盖JDK 1.7中扩容时头插法还会导致环形链表put操作时死循环CPU飙高JDK 1.8改成尾插法解决了循环问题但数据覆盖依然存在。第二key为null时HashMap会把它放到数组下标0的桶里而Hashtable直接抛NullPointerExceptionConcurrentHashMap也不允许null key这个区别经常出现在多选题里。ArrayList和LinkedList的区别也是送分题但换了个角度就变难了。LinkedList插入删除快的前提是你已经拿到了节点引用如果按索引插入它还是要遍历链表时间复杂度O(n)跟ArrayList的插入成本相差不大。所以“LinkedList插入一定比ArrayList快”这个说法是错的笔试喜欢用这种绝对化表述挖坑。2.3 异常、JVM内存模型与OOM考点异常体系这块京东的题考得比较基础但正确率不高。核心是分清Error和ExceptionError是JVM层面的严重问题比如OutOfMemoryError、StackOverflowError程序无法处理Exception分为受检异常和非受检异常受检异常必须显式捕获或抛出非受检异常即RuntimeException及其子类可以不处理。注意一个细节OutOfMemoryError的全称是java.lang.OutOfMemoryError它虽然是Error不是Exception但catch (Exception e)是抓不到它的只能catch (Throwable t)。这个点几乎每年都有多选题在考跟标题热搜词里挂着的“outofmemoryerror”刚好对应上。JVM内存模型考得最多的就是运行时数据区。堆内存存放对象实例是GC的主要区域虚拟机栈存放栈帧每个方法调用对应一个栈帧的入栈和出栈方法区在JDK 1.8之后改名为元空间存放类元信息直接使用本地内存。本地方法栈、程序计数器也偶尔出现在选项里但权重不高。一个经典的考题是下面哪些情况会引起OutOfMemoryErrorA. 不断创建新线程导致无法分配新的栈内存B. 无限递归调用C. 大量字符串拼接导致堆内存耗尽D. 循环引用。答案是A和C。无限递归会导致StackOverflowError而不是OOM循环引用如果对象不可达会被GC正常回收不会OOM。这道题难就难在很多人把栈溢出和内存溢出混为一谈其实一个是栈空间不够一个是堆或方法区内存不够完全是两回事。2.4 并发编程与Java 8新特性考点并发这块是分水岭基础好的同学可以拿满分基础差的直接全军覆没。京东2019年的并发题主要集中在volatile、synchronized、线程池、ThreadLocal这四个方向。volatile是必考中的必考它保证可见性和有序性但不保证原子性。这句话几乎人人都背过但真正做题时就露馅了。比如多个线程执行count变量用volatile修饰最终结果一定正确吗不对因为count是读改写三步操作volatile不保证原子性。那volatile解决什么场景典型的是状态标记位一个线程写flag另一个线程读flag这种一对一的状态可见性控制用它最合适。synchronized的锁升级过程也是热门考点无锁 - 偏向锁 - 轻量级锁 - 重量级锁。JDK 1.6之后引入了大量锁优化synchronized不再是“重量级”的代名词。考法一般是问“偏向锁会偏向第一个获取锁的线程后续如果该线程不再竞争锁JVM会怎么处理”答案是撤销偏向锁。这个知识点理解起来不难但选项里总是混着“自旋锁”“锁粗化”“锁消除”这些概念需要你把这些术语全都分清。Java 8新特性Lambda表达式、Stream流、函数式接口、Optional类都会考。一个常见题是让选择正确的Lambda写法选项里混着() - {}、x - x * 2、(x, y) - x y这些还夹杂着不写括号、不写箭头等错误形式。本质上就是考Lambda的语法格式参数列表 箭头 方法体参数类型可以省略单参数可以省略括号单条语句可以省略花括号和return。还有Stream的中间操作和终止操作的区别。filter、map、sorted是惰性求值的中间操作不调用终止操作不会执行forEach、collect、reduce是终止操作。考法就是问下面哪段代码能正确统计集合中大于10的元素个数错误选项里通常会漏掉.count()这个终止操作。3. 算法与数据结构笔试拉开差距的主战场3.1 排序算法从冒泡到快排的考察方式排序算法在笔试里考两种形式选择题考时间复杂度和稳定性编程题考手写实现。2019年京东的卷子里排序题没有直接出“手写快排”这种大题的而是在选择题里结合具体场景考察但你还是得会写因为有些编程题的优化思路依赖排序。先记住这张表选择排序、插入排序、冒泡排序、归并排序、快速排序、堆排序是重点排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性冒泡排序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(n)。再比如要求排序后相等的元素保持原有相对位置应该选哪个答案是稳定排序冒泡、插入、归并都可以。千万不要在这些基础题上丢分这是整个笔试卷子里最确定能拿到的分。快排作为Java的Arrays.sort()在基础类型上的默认实现值得单独讲一下。快排的核心是分治选基准元素把小于基准的放左边、大于基准的放右边然后递归处理左右两个子区间。Java的Arrays.sort()并没有直接简单递归它在元素少于47个时改用插入排序元素较多时用了双轴快排避免递归过深导致性能下降。面试问到排序优化策略时这是加分项笔试中则只需要掌握基础快排的正确写法。3.2 高频手撕题解析反转链表、LRU与TopK编程题部分京东2019年出现过的原题还原度比较高的有三类。第一类是链表操作最典型的是反转链表。很多人觉得这题简单但笔试要求的是白板写代码一次性写对、不犯空指针错误的人其实不多。反转链表的迭代写法非常经典public ListNode reverseList(ListNode head) { ListNode prev null; ListNode curr head; while (curr ! null) { ListNode nextTemp curr.next; curr.next prev; prev curr; curr nextTemp; } return prev; }注意三要素记录当前节点的下一个节点防止链表断裂、当前节点的next指向前驱、prev和curr同步前进。这种题没别的方法考前多默写几遍形成肌肉记忆考场上的时间要留给更复杂的题目。第二类是LRU缓存。这题在2019年前后的大厂笔试里出现频率极高京东也考了。它考察的是对数据结构的综合运用get和put都要O(1)时间复杂度。标准解法是HashMap加双向链表HashMap负责O(1)查找双向链表负责O(1)插入和删除。但在笔试中你直接用LinkedHashMap可以省很多时间因为LinkedHashMap本身就维护了访问顺序或插入顺序。class LRUCache extends LinkedHashMapInteger, Integer { private final int capacity; public LRUCache(int capacity) { super(capacity, 0.75f, true); this.capacity capacity; } public int get(int key) { return super.getOrDefault(key, -1); } public void put(int key, int value) { super.put(key, value); } Override protected boolean removeEldestEntry(Map.EntryInteger, Integer eldest) { return size() capacity; } }核心是构造方法里第三个参数true表示按访问顺序排序每次get会把元素移到链表尾部头部就是最久未使用的元素。重写removeEldestEntry当容量超出时自动删除链表头部元素。如果面试官追问底层原理你再答双向链表加HashMap的手写方案但笔试中用LinkedHashMap足够拿分了。第三类是TopK问题找出一组数据中最大的K个数。这类题有几个常见思路先排序再取前K个时间复杂度O(n log n)笔试中容易想到但不是最优解用大小为K的小顶堆遍历数据时如果当前元素大于堆顶就替换并调整堆时间复杂度O(n log K)用快排的partition思想平均O(n)不需要全部排序。笔试建议写小顶堆方案因为PriorityQueue就是现成的堆实现public int[] topK(int[] nums, int k) { PriorityQueueInteger heap new PriorityQueue(k); for (int num : nums) { if (heap.size() k) { heap.offer(num); } else if (num heap.peek()) { heap.poll(); heap.offer(num); } } int[] result new int[k]; int i 0; for (int num : heap) { result[i] num; } return result; }这里要重点理解为什么用小顶堆而不是大顶堆小顶堆的堆顶是堆中最小的元素是新元素进入堆的唯一“门槛”只有比它大的元素才有资格替换这样堆里始终保留的是当前遇到的K个最大元素。3.3 动态规划与字符串题目的破题思路动态规划在京东笔试中通常作为第二道或第三道编程题出现难度中等偏上。考得最多的是“最大连续子数组和”也就是LeetCode的53题。这道题本身不难但出题人会把题干包装成业务场景比如“计算一段时间内股票的最大收益”之类的让你先抽象出模型。最大连续子数组和的状态转移方程特别简单dp[i] max(nums[i], dp[i-1] nums[i])意思是以第i个元素结尾的最大子数组和要么是当前元素本身要么是当前元素加上以前一个元素结尾的最大子数组和。因为数组是连续的不能跳过中间元素。最终答案是max(dp[i])。public int maxSubArray(int[] nums) { int dp nums[0]; int max nums[0]; for (int i 1; i nums.length; i) { dp Math.max(nums[i], dp nums[i]); max Math.max(max, dp); } return max; }这里有个空间优化技巧不需要用整个dp数组因为dp[i]只依赖dp[i-1]用一个变量滚动计算即可。这种优化在笔试中体现的是你“会变通”同样的题目用O(1)空间和O(n)空间代码的含金量完全不同。字符串题目也有个值得说的判断一个字符串是不是回文串、最长回文子串、字符串匹配。京东笔试出过“将字符串中的空格替换成%20”考的是从后往前遍历的移位技巧避免多次移动元素。这类题本身不复杂但如果你没做过现场想很容易出错。平时把这些经典字符串题过一遍考场反应会快很多。4. 数据库、Redis与框架容易被忽视的丢分点4.1 数据库核心考点索引、事务与SQL编写数据库题在选择题里占的比例不高但每年必考而且考得非常固定。第一类是索引相关的原理题。B树是MySQL InnoDB存储引擎索引的底层结构为什么用B树而不是B树因为B树的所有数据都存在叶子节点并且叶子节点之间用链表相连这样范围查询只需要遍历链表不需要每次都从根节点往下走。同时B树的非叶子节点只存索引不存数据一个节点能容纳更多索引项树的高度更低磁盘IO次数更少。聚簇索引和非聚簇索引是另一个高频考点。InnoDB的主键索引是聚簇索引叶子节点直接存储整行数据二级索引的叶子节点存储的是主键值所以通过二级索引查询数据时要先查到主键再回表查一次。如果查询的列正好都在索引里就不需要回表这叫覆盖索引。笔试里经常用一个SQL让你判断是否走了索引以及是否需要回表。比如有一张表student(id, name, age, score)创建了联合索引(name, age)查询SELECT * FROM student WHERE age 18会不会走索引答案是可能不走索引因为联合索引遵循最左前缀原则查询条件必须从索引最左侧的列开始单独查age是没办法使用这个联合索引的。第二类是事务隔离级别。MySQL默认的隔离级别是可重复读事务ACID四个特性是原子性、一致性、隔离性、持久性。四种隔离级别从上到下依次是读未提交、读已提交、可重复读、串行化并发安全性递增性能递减。脏读只发生在读未提交不可重复读和幻读分别在读已提交和可重复读下被解决。注意一个细节MySQL的可重复读通过MVCC解决了普通读下的幻读问题但在当前读下还是可能发生幻读所以严格来说只有串行化才能完全避免幻读。这个细节如果出现在多选题里绝对是个拉分项。SQL编写题也出现过但2020年之后大厂笔试里的纯SQL手写越来越少了更多的是结合业务场景让你从多个SQL中选择执行效率最高的一个。核心还是看会不会用JOIN、GROUP BY、HAVING、子查询以及能不能判断出执行计划的好坏。有一个经验是能用JOIN解决的就别用子查询能用一条SQL解决的就别用存储过程能用索引覆盖的就别SELECT *。4.2 Redis高频考点与缓存三兄弟Redis虽然不是Java笔试的必考项但京东这种使用Redis极其频繁的公司笔试里出现Redis的概率很高。2019年的卷子至少考了Redis数据结构、过期策略、缓存穿透和缓存雪崩。Redis的字符串、哈希、列表、集合、有序集合五种基础数据结构中ZSET有序集合是最高频的考点因为它在排行榜、延迟队列、滑动窗口限流等场景中广泛应用底层实现是跳跃表加字典。为什么用跳跃表而不是平衡树因为跳跃表的实现更简单查询效率和平衡树相当但范围查询和插入删除操作更方便。这个知识点问到“为什么”的时候很多人都答不上来值得背一下。缓存穿透、缓存击穿、缓存雪崩这三个概念几乎是必考的。缓存穿透是指查询一个根本不存在的数据请求直接打到数据库上解决办法是缓存空值或者布隆过滤器缓存击穿是指一个热点key过期瞬间大量请求同时打到数据库解决办法是互斥锁或者热点数据永不过期缓存雪崩是指大量key在同一时间过期或者Redis宕机导致数据库压力过大解决办法是给过期时间加随机值、多级缓存、集群高可用。这三个概念经常放在选项里让你区分认准“穿透是查不存在的数据击穿是单个热点key过期雪崩是大量key同时失效”这个判断标准基本不会错。4.3 Spring全家桶与MyBatis的常考概念框架题在京东笔试中出现比重不高一般两三道但都是非常经典的概念题。Spring的核心是IoC控制反转和AOP面向切面编程。IoC就是把对象的创建和管理交给Spring容器你不再自己new对象而是通过注解或者XML配置声明依赖容器负责注入。AOP是通过动态代理实现对业务方法的横切增强比如日志、事务、权限校验这类与业务无关的逻辑。Spring Boot相比Spring MVC最大优势是自动配置和起步依赖约定大于配置。考题一般会问Spring Boot的启动类上为什么要有SpringBootApplication这个注解其实是SpringBootConfiguration、EnableAutoConfiguration、ComponentScan三个注解的合成。Spring的默认作用域是单例这个也常考。Bean和Component的区别在于Component是类级别注解Bean是方法级别注解两种方式都可以把对象交给Spring管理。MyBatis的#{}和${}的区别是Java后端笔试里特别爱考的题。#{}是预编译用的是PreparedStatement的占位符可以有效防止SQL注入${}是字符串拼接直接把值拼进SQL里有SQL注入风险。所以能用#{}的地方绝对不用${}只有表名、列名这种必须动态拼接的场景才用${}而且参数必须是白名单校验过的。5. 计算机网络与操作系统非Java但必考的题5.1 网络协议与HTTP计算机网络是选择题的大户Java笔试里占比虽然不高但分数稳定属于不拿白不拿的题。TCP三次握手和四次挥手是毫无疑问的必考点。三次握手的过程要能默写客户端发送SYN包进入SYN_SENT状态服务端收到后回复SYNACK进入SYN_RCVD状态客户端再发送ACK双方进入ESTABLISHED状态。为什么需要第三次握手因为要防止已失效的连接请求突然传到服务端导致服务端建立无效连接浪费资源。四次挥手则是因为TCP是全双工的每个方向都需要单独关闭客户端发送FIN服务端回ACK服务端发送FIN客户端回ACK之后等待2MSL才关闭。HTTP和HTTPS的区别也是必考。HTTPS是在HTTP和TCP之间加了一层TLS/SSL协议解决了HTTP明文传输的安全问题。建立HTTPS连接时客户端会用CA证书验证服务端身份然后通过非对称加密协商出对称加密密钥后续数据传输用对称加密兼顾了安全性和性能。选择题经常考对称加密和非对称加密的算法对称加密有AES、DES非对称加密有RSA、ECC不要搞混。HTTP状态码也是白送分的题但很多人记不全。背熟这几个就够应付笔试了200表示成功301永久重定向302临时重定向304未修改走缓存400客户端请求错误401未认证403禁止访问404资源不存在500服务器内部错误502网关错误503服务不可用。京东笔试出现过利用状态码判断问题原因的题比如服务重启期间返回502还是503答案是502后端服务不可用503是服务端暂时无法处理请求这个区分很细微但确实考过。5.2 操作系统与并发基础操作系统在Java笔试中考察的内容不多集中在进程与线程、死锁、上下文切换这几个概念上。进程是资源分配的基本单位线程是CPU调度的基本单位。一个进程可以包含多个线程线程之间共享进程的地址空间所以线程间通信比进程间通信更高效但也更需要注意同步问题。死锁的四个必要条件要背熟互斥条件、持有并等待、不可剥夺、循环等待。只要打破其中一个条件就能避免死锁。选择题经常问“下列哪种方式可以预防死锁”答案是资源一次性分配打破持有并等待或者按序分配资源打破循环等待。这里有个容易混淆的点银行家算法是避免死锁不是预防死锁它是通过动态检查安全性来确保系统不会进入死锁状态。这两个概念一字之差但在考试里是两个不同的选项。线程的生命周期状态也是考点新建、就绪、运行、阻塞、等待、超时等待、终止。Java中对应Thread.State枚举的六种状态NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。注意不要把操作系统层面的“就绪”和“运行”混入Java线程状态因为Java把可运行和运行中的线程统一视为RUNNABLE。Thread.sleep()和wait()的区别也是个经典题sleep不释放锁wait释放锁sleep是Thread的静态方法wait是Object的方法。6. 备考实操建议与踩坑实录6.1 复习路线怎么排如果目标是京东这个级别的Java开发岗不建议一上来就刷面经更不建议只刷题不看书。我的建议是分三轮。第一轮先系统过Java基础把《Java核心技术》或者《Head First Java》的重点章节读一遍集合、异常、I/O、并发这些必须吃透。这轮的核心目标是建立知识框架做题时知道每道题在考什么而不是凭感觉猜。第二轮刷题以LeetCode的Hot 100题目为主每天三到五道坚持一个月。排序、链表、二叉树、动态规划、字符串这五类题目优先级最高。第三轮才是大量刷笔试题和面经找近三年的京东、阿里、美团、字节的Java笔试题来做重点整理错题和高频考点形成自己的一份笔记。代码量千万不能省。笔试编程题和面试手撕代码不一样笔试时间更紧你要在20分钟内做完一道题必须达到“看到题目能快速匹配到对应题型和模板”的水平。这种能力没有捷径就是多练。反转链表、快排、二分查找、层序遍历二叉树、最大子数组和、LRU这几道题我建议你背到默写的程度就像运动员练习基本动作一样。先快不起来熟练了自然就快了。有一个很容易忽略的点是编译环境。笔试平台一般是牛客网或者赛码网编程题的环境跟本地IDE差别很大没有自动补全没有语法高亮提示甚至有的平台连编译报错信息都很简陋。所以平时练习就要直接在网页端做题不要依赖IDEA的快捷键和插件。我见过太多同学本地写得好好的一上笔试平台就各种低级语法错误白白丢分。6.2 笔试现场策略与常见问题排查真到了笔试现场几个策略非常重要。第一拿到卷子先看编程题。别一上来就从第一道选择题开始做先花两分钟扫描一遍编程题判断难度顺序。如果第二道很难就先做第一道保底然后回头认真做选择题最后再啃难题。这样做的好处是确保基础分全拿到不会出现“难题没做出来简单题也没时间做”的惨剧。第二选择题遇到不确定的多选题先标记跳过不要在一道题上卡五分钟。笔试选择题的总量通常在三四十道平均下来每道题只有一分钟左右的时间卡住会严重影响后面的节奏。第三编程题调试的时候如果平台报ArrayIndexOutOfBoundsException优先检查循环边界条件报NullPointerException检查链表或者数组元素是否为null。这类笔试题的输入参数经常包含空数组或者null很多边界情况题目描述里根本不会说必须自己预判。关于环境变量配置、本地编译报错这类问题其实考的不是Java知识而是工程习惯。很多同学笔试前才发现本地Java环境没配好命令行里java -version直接报错这种问题严重拉低效率。提前把JDK下载安装、JAVA_HOME和PATH配置好是备考的基本功。如果真的在笔试中遇到代码逻辑没问题但本地跑不起来的情况优先看是不是JDK版本和编译目标版本不一致导致的比如提示“源发行版17需要目标发行版17”八成是IDE的编译设置不对。这些问题提前处理干净省下的时间都是实打实的做题时间。6.3 一些不吐不快的经验教训最后聊点我在整理过程中感受最深的东西。很多同学备考时沉迷于背“八股文”觉得把HashMap原理、JVM内存模型这些背得滚瓜烂熟就能拿高分但京东这套笔试根本不是这么考的。它的题目设计思路很明确用选择题考基础知识的精确度用编程题考代码实现的熟练度两个维度都需要长期积累临时抱佛脚能补上知识点但补不上动手写代码的手感。我见过一个印象很深的案例有个同学把面经背得很熟HashMap、JVM、Redis这些概念张口就来结果笔试编程题第一道是反转链表他愣是想了五分钟没写出来。不是不会是不熟。练习的时候从来都是看题、看答案、觉得自己懂了从没亲手完整写过一遍。这种“看懂了”和“写得出来”之间的鸿沟是校招笔试最大的隐形杀手。所以我的建议是备考期间每天至少亲手写五道题哪怕是很简单的题目也要完整敲一遍。不追求刷题数量追求每个类型都形成肌肉记忆。笔试考场上选择题你还有时间犹豫编程题是绝对没有的看到题目第一反应——这道题该用什么数据结构、什么算法模板然后直接开写这个过程必须在考前就练成。京东2019校招Java笔试题的难度放在整个行业里属于中等偏上。它不偏不怪考点全在主流知识体系内但覆盖面广、细节要求高、编程题时间紧。如果你能把上面这些考点全部吃透不仅是京东其他大厂的Java笔试你也有七八成的把握。关键是别贪多嚼不烂把每个知识点都抠到“精确”而不是“大概”把每道算法题都练到“默写”而不是“眼熟”这两件事做到了笔试这道坎基本就迈过去了。