掌先后端Java技术面面经
面试题目
- 项目深度拷打:项目需求与目的、核心功能实现、立项初衷。
- 八股文:
- JVM内存区域划分及新生代/老年代机制。
- String为什么设计成不可变结构?
- HashMap的扩容机制及线程安全性问题。
- 如何优化安装包体积?
- 项目中本地存储方式的选择。
- 数据库索引的类型。
- 死锁产生的四个必要条件。
- 手撕代码:比较两个数的大小。
参考解析
- String不可变性:为了实现字符串常量池(节省空间)、保证线程安全(无需同步)以及安全性(Hash值不可变,作为HashMap键更可靠)。
- HashMap扩容机制:当元素数量超过阈值(容量*负载因子)时,会创建一个两倍大小的新数组,并将原数组节点进行rehash重新分配。
- HashMap线程安全性:HashMap本身非线程安全,多线程并发扩容时可能产生死锁或数据丢失,建议使用ConcurrentHashMap。
- 死锁产生条件:互斥条件、请求与保持条件、不剥夺条件、循环等待条件。只要破坏其中任意一个即可避免死锁。
- 索引类型:主键索引、唯一索引、普通索引、全文索引、组合索引(覆盖索引)。