欢迎光临
我们一直在努力

2025最新Java面试题精粹

好的,以下是一份结构清晰的 Java 常见面试题及答案汇总(2025 最新版),涵盖基础、进阶、新特性和实战场景:


一、Java 基础

1. 面向对象三大特性

答:

  • 封装:隐藏内部实现,提供公共访问方式(如 private 属性 + getter/setter)。
  • 继承:子类复用父类属性和方法(extends),支持单继承。
  • 多态:同一方法在不同对象中有不同实现(通过方法重写 + 父类引用指向子类对象)。

2. == 和 equals() 的区别

答:

  • ==:比较基本类型的值或引用类型的内存地址。
  • equals():默认比较地址(与 == 相同),但可被重写(如 String 比较内容)。

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // false(地址不同)
System.out.println(s1.equals(s2)); // true(内容相同)


3. String、StringBuilder、StringBuffer 区别

答:

  • String:不可变类,每次操作生成新对象。
  • StringBuilder:可变,线程不安全,性能高。
  • StringBuffer:可变,线程安全(synchronized),性能较低。
    场景:单线程用 StringBuilder,多线程用 StringBuffer。

二、集合框架

4. HashMap 原理

答:

  • 结构:数组 + 链表/红黑树(JDK 1.8+)。
  • 哈希冲突:通过链表或树化解决。
  • 扩容:默认容量 16,负载因子 0.75,扩容时重新散列。
  • 线程安全:非线程安全,可用 ConcurrentHashMap 替代。

5. ConcurrentHashMap 如何保证线程安全?

答:

  • JDK 1.7:分段锁(Segment)。
  • JDK 1.8+:CAS + synchronized(锁单个桶),降低锁粒度。

三、多线程

6. 线程的创建方式

答:

  • 继承 Thread 类
  • 实现 Runnable 接口
  • 实现 Callable 接口 + FutureTask(支持返回值)
  • 线程池(推荐)

  • 7. synchronized 和 ReentrantLock 区别
    特性synchronizedReentrantLock
    锁机制 JVM 内置锁 API 实现(java.util.concurrent)
    可中断 是(lockInterruptibly())
    公平锁 非公平 可配置公平/非公平
    条件变量 单一 wait()/notify() 多 Condition

    四、JVM

    8. 垃圾回收算法

    答:

    • 标记-清除:产生碎片。
    • 复制算法:空间利用率低(年轻代)。
    • 标记-整理:减少碎片(老年代)。
    • 分代收集:年轻代(Minor GC) + 老年代(Full GC)。

    9. 类加载过程

    答:

  • 加载:读取字节码到内存。
  • 验证:检查格式、安全性。
  • 准备:分配内存,初始化默认值。
  • 解析:符号引用转直接引用。
  • 初始化:执行 <clinit>()(静态代码块)。

  • 五、新特性(Java 17~21)

    10. record 类的作用

    答:

    • 简化不可变类的定义(自动生成 equals()、hashCode()、toString())。

    public record User(String name, int age) {} // 自动生成构造器、Getter

    https://weibo.com/tv/show/1034:5277251714088981
    https://weibo.com/tv/show/1034:5277251663757348
    https://weibo.com/tv/show/1034:5277251630202906
    https://weibo.com/tv/show/1034:5277251596386360
    https://weibo.com/tv/show/1034:5277251558899753


    11. 模式匹配(instanceof 增强)

    答:

    • 直接提取对象属性:

    if (obj instanceof String s) {
    System.out.println(s.length()); // 直接使用 s
    }

    https://weibo.com/tv/show/1034:5277251714088981
    https://weibo.com/tv/show/1034:5277251663757348
    https://weibo.com/tv/show/1034:5277251630202906
    https://weibo.com/tv/show/1034:5277251596386360
    https://weibo.com/tv/show/1034:5277251558899753


    12. 虚拟线程(Project Loom)

    答:

    • 轻量级线程:由 JVM 调度,非操作系统线程。
    • 高并发:支持百万级线程(如 Thread.startVirtualThread())。
    • 适用场景:I/O 密集型任务(如微服务、数据库访问)。

    六、场景题

    13. 如何避免死锁?

    答:

  • 固定锁的获取顺序(如按 hash 值排序)。
  • 使用超时机制(tryLock(timeout))。
  • 减少嵌套锁。

  • 14. Spring 事务失效场景

    答:

    • 方法非 public。
    • 自调用(未通过代理)。
    • 异常未被捕获(默认回滚 RuntimeException)。
    • 多线程中事务不传播。

    七、实战优化

    15. MySQL 查询优化

    答:

    • 索引优化:避免全表扫描,覆盖索引。
    • 分页优化:where id > ? limit 替代 limit offset, size。
    • 避免 SELECT *,减少数据传输。

    16. 分布式 ID 生成方案

    答:

    • UUID:简单但无序。
    • 雪花算法(Snowflake):时间戳 + 机器码 + 序列号。
    • 数据库自增:分片下通过步长隔离(如 1,3,5… 和 2,4,6…)。
    • Redis 原子操作:INCR。

    提示:面试时需结合项目经验,用 STAR 法则(情境、任务、行动、结果)阐述解决方案。持续关注 Java 新版本特性(如 Valhalla 值类型、Panama 外部函数)是加分项!

    赞(0)
    未经允许不得转载:171主机测评 » 2025最新Java面试题精粹
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址