京东 Java 一面面经
最近参加了京东的 Java 岗位一面,整体面试时长大约 50 分钟,内容涵盖了 Java 基础、集合、多线程、JVM、数据库以及项目经验。面试官提问比较深入,考察的是对底层原理的理解和项目中实际应用的思考。
一、Java 基础
- String、StringBuilder、StringBuffer 的区别是否可变线程安全性使用场景
- 关键字final、static、volatile 的使用场景transient 在序列化中的作用
- 异常机制受检异常与非受检异常的区别项目中异常处理的规范
二、集合框架
- HashMap 与 ConcurrentHashMap 的区别底层数据结构JDK1.7 与 JDK1.8 的实现差异并发安全的实现机制
- ArrayList 与 LinkedList 的区别时间复杂度内存占用情况
- 集合扩容机制HashMap 的负载因子与 rehash 过程
全网最全面的java八股文专栏:https://www.nowcoder.com/creation/manager/columnDetail/0n9XOd
三、多线程与并发
- 线程池ThreadPoolExecutor 的核心参数拒绝策略的几种实现项目中如何设置线程池大小
- synchronized 与 ReentrantLock可重入性公平锁与非公平锁使用场景
- volatile 的内存语义可见性与禁止指令重排与 CAS 的配合使用
四、JVM 相关
- 垃圾回收机制常见的垃圾收集器(G1、CMS、Serial、Parallel)新生代、老年代的回收特点
- 类加载机制双亲委派模型破坏双亲委派的场景
- 内存区域堆、方法区、虚拟机栈、本地方法栈、程序计数器的作用
五、数据库与缓存
- MySQL 索引B+树索引的原理覆盖索引与回表联合索引的最左前缀原则
- 事务隔离级别READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE 的区别MySQL 默认级别以及幻读的解决方式
- Redis数据结构与应用场景缓存穿透、缓存击穿、缓存雪崩的解决办法
六、项目相关
- 介绍了之前做的一个高并发下订单处理的项目,重点被问到:如何保证接口的高可用性如何处理数据库的并发写入缓存与数据库一致性问题是否使用过消息队列,以及消息丢失、重复消费的处理方式
七、总结
京东的一面整体技术性较强,注重基础扎实程度和项目实践经验。面试过程中,面试官会在基础问题之后延伸到实际项目,追问为什么这么设计、有没有其他方案以及在高并发场景下的优化方式。因此,除了掌握 Java 基础和常见框架的使用之外,还需要对原理有一定理解,并能结合项目给出合理的设计思路。