掌先后端Java技术面面经

掌先 · 后端开发 · 技术面 · 2026-04

面试题目

  1. 项目深度拷打:项目需求与目的、核心功能实现、立项初衷。
  2. 八股文:
    • JVM内存区域划分及新生代/老年代机制。
    • String为什么设计成不可变结构?
    • HashMap的扩容机制及线程安全性问题。
    • 如何优化安装包体积?
    • 项目中本地存储方式的选择。
    • 数据库索引的类型。
    • 死锁产生的四个必要条件。
  3. 手撕代码:比较两个数的大小。

参考解析

  • String不可变性:为了实现字符串常量池(节省空间)、保证线程安全(无需同步)以及安全性(Hash值不可变,作为HashMap键更可靠)。
  • HashMap扩容机制:当元素数量超过阈值(容量*负载因子)时,会创建一个两倍大小的新数组,并将原数组节点进行rehash重新分配。
  • HashMap线程安全性:HashMap本身非线程安全,多线程并发扩容时可能产生死锁或数据丢失,建议使用ConcurrentHashMap。
  • 死锁产生条件:互斥条件、请求与保持条件、不剥夺条件、循环等待条件。只要破坏其中任意一个即可避免死锁。
  • 索引类型:主键索引、唯一索引、普通索引、全文索引、组合索引(覆盖索引)。