📚 一、Java 基础篇
-
Q:equals () 和 == 的区别? A:
==判断对象内存地址是否相同(是否为同一对象);equals()默认和==一样,但重写后可判断内容是否相等(如 String 类重写后比较字符串内容)。💡 提示:重写 equals 时必须重写 hashCode,否则会导致 HashMap 等集合存储异常。 -
**Q:String、StringBuilder、StringBuffer 的区别?**A:String 不可变,每次拼接生成新对象;StringBuilder 非线程安全,效率高;StringBuffer 线程安全(方法加 synchronized),适合多线程场景。
-
Q:什么是自动装箱拆箱?举例说明。 A:基本类型和包装类自动转换,如
Integer a = 10;(自动装箱),int b = a;(自动拆箱)。底层通过Integer.valueOf()和intValue()实现。
🧰 二、集合框架篇
-
**Q:ArrayList 和 LinkedList 的区别?**A:ArrayList 基于动态数组,查询快(O (1))、增删慢(需移动元素);LinkedList 基于双向链表,增删快(O (1))、查询慢(需遍历)。
-
**Q:HashMap 的底层实现原理?JDK8 有什么优化?**A:JDK7 是数组 + 链表,JDK8 改为数组 + 链表 / 红黑树(链表长度≥8 且数组长度≥64 时转红黑树),解决哈希冲突导致的链表过长查询慢问题。💡 考点:哈希计算、扩容机制(负载因子 0.75)、红黑树转换条件。
-
**Q:HashSet 如何保证元素不重复?**A:底层依赖 HashMap,将元素作为 HashMap 的 key 存储,利用 HashMap 的 key 不可重复特性(通过 equals 和 hashCode 判断)。
⚡ 三、多线程并发篇
-
**Q:synchronized 和 Lock 的区别?**A:synchronized 是关键字,自动释放锁;Lock 是接口,需手动 lock ()/unlock ()(通常放 finally 块),支持公平锁 / 非公平锁、可中断锁等。
-
**Q:什么是线程池?为什么要用线程池?**A:管理线程的池子,复用线程、控制并发数、降低资源消耗。核心参数:核心线程数、最大线程数、空闲时间、任务队列。💡 常见线程池:FixedThreadPool、CachedThreadPool、ScheduledThreadPool。
-
**Q:Volatile 关键字的作用?**A:保证内存可见性(禁止指令重排序、强制刷新主内存),但不保证原子性,适合状态标记量场景(如停止线程的 flag)。
🌸 四、Spring/SpringBoot 篇
-
**Q:什么是 IOC 和 AOP?**A:IOC(控制反转):将对象创建权交给 Spring 容器,解耦依赖;AOP(面向切面编程):通过动态代理实现日志、事务等横切逻辑复用。
-
Q:SpringBoot 自动配置原理? A:通过
@SpringBootApplication注解,整合@EnableAutoConfiguration,扫描 classpath 下的META-INF/spring.factories文件,加载自动配置类。 -
**Q:Spring 中 Bean 的作用域有哪些?**A:singleton(单例,默认)、prototype(多例)、request(一次请求一个)、session(一个会话一个)、application(全局)。
🗄️ 五、数据库篇
-
**Q:事务的四大特性(ACID)是什么?**A:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
-
**Q:数据库事务隔离级别有哪些?**A:读未提交(Read Uncommitted)、读已提交(Read Committed,默认)、可重复读(Repeatable Read)、串行化(Serializable)。💡 解决的问题:脏读、不可重复读、幻读。
-
**Q:什么是索引?为什么用索引?**A:数据库优化查询的数据结构(B + 树为主),加快查询速度,但会降低增删改效率,适合查询频繁的字段。
🧠 六、JVM 篇
-
**Q:JVM 内存结构分为哪些区域?**A:程序计数器、虚拟机栈、本地方法栈、堆(GC 主要区域)、方法区(存储类信息、常量池等)。
-
**Q:常见的垃圾回收算法有哪些?**A:标记 - 清除、标记 - 复制、标记 - 整理;分代收集算法(新生代用复制,老年代用标记 - 整理)。
-
**Q:什么是内存泄漏?举例说明。**A:对象不再使用但无法被 GC 回收,如静态集合持有对象引用、未关闭 IO 流 / 数据库连接。
🎨 七、设计模式篇
-
**Q:单例模式有几种实现方式?**A:饿汉式、懒汉式(双重检查锁)、静态内部类、枚举。推荐双重检查锁(DCL)和枚举(线程安全且防止反射破坏)。
-
**Q:工厂模式有哪些?应用场景?**A:简单工厂、工厂方法、抽象工厂。Spring 的 BeanFactory 就是工厂模式的应用,解耦对象创建。