[特殊字符] Java 高频面试题汇总

📚 一、Java 基础篇
  1. Q:equals () 和 == 的区别? A:==判断对象内存地址是否相同(是否为同一对象);equals()默认和==一样,但重写后可判断内容是否相等(如 String 类重写后比较字符串内容)。💡 提示:重写 equals 时必须重写 hashCode,否则会导致 HashMap 等集合存储异常。

  2. **Q:String、StringBuilder、StringBuffer 的区别?**A:String 不可变,每次拼接生成新对象;StringBuilder 非线程安全,效率高;StringBuffer 线程安全(方法加 synchronized),适合多线程场景。

  3. Q:什么是自动装箱拆箱?举例说明。 A:基本类型和包装类自动转换,如Integer a = 10;(自动装箱),int b = a;(自动拆箱)。底层通过Integer.valueOf()和intValue()实现。


🧰 二、集合框架篇
  1. **Q:ArrayList 和 LinkedList 的区别?**A:ArrayList 基于动态数组,查询快(O (1))、增删慢(需移动元素);LinkedList 基于双向链表,增删快(O (1))、查询慢(需遍历)。

  2. **Q:HashMap 的底层实现原理?JDK8 有什么优化?**A:JDK7 是数组 + 链表,JDK8 改为数组 + 链表 / 红黑树(链表长度≥8 且数组长度≥64 时转红黑树),解决哈希冲突导致的链表过长查询慢问题。💡 考点:哈希计算、扩容机制(负载因子 0.75)、红黑树转换条件。

  3. **Q:HashSet 如何保证元素不重复?**A:底层依赖 HashMap,将元素作为 HashMap 的 key 存储,利用 HashMap 的 key 不可重复特性(通过 equals 和 hashCode 判断)。


⚡ 三、多线程并发篇
  1. **Q:synchronized 和 Lock 的区别?**A:synchronized 是关键字,自动释放锁;Lock 是接口,需手动 lock ()/unlock ()(通常放 finally 块),支持公平锁 / 非公平锁、可中断锁等。

  2. **Q:什么是线程池?为什么要用线程池?**A:管理线程的池子,复用线程、控制并发数、降低资源消耗。核心参数:核心线程数、最大线程数、空闲时间、任务队列。💡 常见线程池:FixedThreadPool、CachedThreadPool、ScheduledThreadPool。

  3. **Q:Volatile 关键字的作用?**A:保证内存可见性(禁止指令重排序、强制刷新主内存),但不保证原子性,适合状态标记量场景(如停止线程的 flag)。


🌸 四、Spring/SpringBoot 篇
  1. **Q:什么是 IOC 和 AOP?**A:IOC(控制反转):将对象创建权交给 Spring 容器,解耦依赖;AOP(面向切面编程):通过动态代理实现日志、事务等横切逻辑复用。

  2. Q:SpringBoot 自动配置原理? A:通过@SpringBootApplication注解,整合@EnableAutoConfiguration,扫描 classpath 下的META-INF/spring.factories文件,加载自动配置类。

  3. **Q:Spring 中 Bean 的作用域有哪些?**A:singleton(单例,默认)、prototype(多例)、request(一次请求一个)、session(一个会话一个)、application(全局)。


🗄️ 五、数据库篇
  1. **Q:事务的四大特性(ACID)是什么?**A:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

  2. **Q:数据库事务隔离级别有哪些?**A:读未提交(Read Uncommitted)、读已提交(Read Committed,默认)、可重复读(Repeatable Read)、串行化(Serializable)。💡 解决的问题:脏读、不可重复读、幻读。

  3. **Q:什么是索引?为什么用索引?**A:数据库优化查询的数据结构(B + 树为主),加快查询速度,但会降低增删改效率,适合查询频繁的字段。


🧠 六、JVM 篇
  1. **Q:JVM 内存结构分为哪些区域?**A:程序计数器、虚拟机栈、本地方法栈、堆(GC 主要区域)、方法区(存储类信息、常量池等)。

  2. **Q:常见的垃圾回收算法有哪些?**A:标记 - 清除、标记 - 复制、标记 - 整理;分代收集算法(新生代用复制,老年代用标记 - 整理)。

  3. **Q:什么是内存泄漏?举例说明。**A:对象不再使用但无法被 GC 回收,如静态集合持有对象引用、未关闭 IO 流 / 数据库连接。


🎨 七、设计模式篇
  1. **Q:单例模式有几种实现方式?**A:饿汉式、懒汉式(双重检查锁)、静态内部类、枚举。推荐双重检查锁(DCL)和枚举(线程安全且防止反射破坏)。

  2. **Q:工厂模式有哪些?应用场景?**A:简单工厂、工厂方法、抽象工厂。Spring 的 BeanFactory 就是工厂模式的应用,解耦对象创建。

相关推荐
学长毕设4 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
C^h4 小时前
c++ string
开发语言·c++
raindayinrain4 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的4 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao4 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
zzu123zsw5 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
学逆向的5 小时前
C 局部静态变量
c语言·开发语言·网络安全
Yuzhiyuxia5 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
大都督会赢的5 小时前
C++第一节课
开发语言·c++
“AI国潮设计-小江”6 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc