职位题库

Java 后端开发工程师面试题库

面向Java 后端开发工程师相关面试,围绕Java、JVM、线程池、系统设计、Spring等主题展开练习,结合题目考察点、回答思路、参考答案和常见误区,梳理知识要点并练习清晰表达。

16 道题目建议用时 48 分钟专项面试练习

全部题目 16 道题

01

请口述 Java 8 HashMap.put() 的完整流程,并解释为什么链表长度达到 8 且数组容量小于 64 时优先扩容而不是直接树化。

考察对 HashMap 底层数据结构、扩容与树化条件的理解,以及能否解释设计权衡。
02

请解释 Spring Boot 自动配置原理,并说明 @ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty 的作用及典型使用场景。

考察对 Spring Boot 自动配置机制和条件装配的理解,能否结合实际场景说明。
03

请解释 Spring AOP 的本质,JDK 动态代理和 CGLIB 的区别,并说明同类调用为什么会导致 AOP 失效,以及 final/static/非 Spring Bean 等情况下为什么可能无法代理。

考察对 Spring AOP 实现机制、代理方式差异及失效场景的深入理解。
04

请介绍你实习中数据权限重构的项目:原来的问题是什么,为什么要自己做 @CrmDataScope,AOP 如何生成并注入权限 SQL,以及多角色用户的数据权限怎么处理?

考察候选人对数据权限设计的理解,包括问题背景、技术方案、多角色处理、缓存结合及服务间传递。
05

请介绍你项目中的数据同步框架:为什么要用模板方法模式,水位线、分页拉取、数据转换、批量写入的流程是怎样的,以及如何保证不漏数据?

考察对数据同步框架设计、模板方法模式应用、水位线推进时机及数据一致性保证的理解。
06

请口述 HashMap 的 put 过程,并说明何时触发扩容以及为什么负载因子是 0.75。

考察候选人对 HashMap 底层数据结构、哈希计算、冲突处理、扩容机制和负载因子设计权衡的理解深度。
07

请说明线程池的核心参数、任务提交后的执行流程,以及 serialVersionUID 的作用。

考察候选人对线程池参数、执行流程和 Java 序列化版本控制机制的掌握程度。
08

请说明 MySQL 常见索引失效场景、隔离级别,以及 redo log、undo log、binlog 的作用。

考察候选人对 MySQL 索引优化、事务隔离和日志系统的理解,以及对比 Oracle 默认隔离级别的知识广度。
09

请结合你的项目或实习经历,说明你是如何通过配置线程池来解决并发效率或资源竞争问题的?

考察候选人将 Java 并发理论应用于实际项目的能力,特别是线程池的配置与调优经验。
10

你提到线程池核心线程数为3并使用有界队列,当时是出于什么考虑设计这两个参数的?

深入考察候选人对线程池参数设计背后思考过程,评估其系统设计能力。
11

请说明 G1 垃圾回收器对比 CMS 的优缺点。

考察对主流垃圾回收器的理解,包括设计原理、适用场景及性能差异。
12

在 JVM 内存管理中,哪些区域是线程私有的?哪些是线程共有的?

考察对 JVM 内存区域划分的基础知识掌握程度。
返回面试题库