职位题库

后端开发工程师面试题库

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

1256 道题目建议用时 3768 分钟专项面试练习

全部题目 1256 道题

721

请从原理、权衡和源码层面,谈谈你对 HashMap 的理解深度。

考察候选人对 HashMap 的掌握是否达到源码级深度,能否分析设计权衡。
722

为什么数据库索引常用 B+ 树,而不是二叉搜索树、红黑树或 B 树?

考察候选人对数据库索引底层数据结构的理解,以及不同树结构在磁盘存储场景下的权衡。
723

给定一个订单表和高频查询,这个表与查询的索引应怎样设计?

考察候选人根据具体查询设计联合索引的能力,包括最左前缀、覆盖索引、排序和分页优化。
724

请使用你熟悉的语言实现支持构造、get 和 put 的 LRU Cache。

考察候选人实现 LRU 缓存的能力,包括数据结构选择和边界处理。
725

实习中你做过最有挑战性的事情是什么?请说明背景、你的方案、遇到的困难和最终结果。

考察候选人能否从真实经历中提炼技术难点、决策过程与个人贡献,而非泛泛描述团队成果。
726

为什么重写equals时必须同时重写hashCode?请结合==与equals的区别说明。

考察对Java对象相等性契约、哈希容器行为以及==与equals语义差异的理解。
727

String a = new String("abc"); String b = new String("abc"); 请分别说明 a == b 和 a.equals(b) 的结果及原因。

考察字符串对象创建、常量池、引用比较与值比较的区分。
728

请说明 ThreadPoolExecutor 的核心参数及其作用,并描述提交任务后的完整执行流程:何时入队、何时扩容到最大线程数?

考察对 Java 线程池核心参数、任务调度流程和扩容策略的理解,判断候选人能否把参数语义与真实执行路径对应起来。
729

线程池常见拒绝策略有哪些?ThreadFactory 在实际工程中有什么作用?

考察候选人对线程池拒绝策略的掌握程度,以及是否理解 ThreadFactory 在命名、异常处理、线程属性设置等工程实践中的价值。
730

Tomcat 线程池和 JDK ThreadPoolExecutor 在任务入队与线程扩容策略上有什么区别?

考察候选人是否理解 Tomcat 对 JDK 线程池的定制,尤其是“先扩容再入队”的差异,以及这种差异对高并发请求处理的影响。
731

什么情况下适合建立联合索引?联合索引的最左前缀原则是什么?以 (B, C, D) 为例,只查询 C、D 能否走索引?范围查询后后续列还能用吗?

考察候选人对联合索引设计原则、最左前缀匹配、范围查询对索引列使用影响的理解,判断其能否在实际 SQL 优化中正确设计和使用索引。
732

Spring @Transactional 常见事务失效场景有哪些?为什么同类内部方法自调用会导致事务失效?声明式事务为什么依赖 AOP 代理?如何保证同一事务中的 SQL 使用同一个数据库连接?

考察候选人对 Spring 声明式事务底层机制的理解,包括 AOP 代理、自调用失效、连接绑定与 ThreadLocal,以及事务传播行为。
返回面试题库