2025 Java面试大全技术文章(面试题1)

发布于:2025-06-05 ⋅ 阅读:(26) ⋅ 点赞:(0)

数据类型与包装类

问题:Java中基本数据类型与包装类的区别是什么?自动装箱与拆箱的底层原理?
答案:
基本数据类型(如intdouble)直接存储值,包装类(如IntegerDouble)是对象,具备方法和属性。自动装箱由Integer.valueOf()实现,拆箱调用intValue(),频繁装箱可能触发缓存(如Integer缓存-128~127)。

Integer a = 100;  // 装箱:Integer.valueOf(100)
int b = a;        // 拆箱:a.intValue()


String、StringBuffer、StringBuilder区别

问题:对比三者的性能及适用场景。
答案:
String不可变,每次修改生成新对象;StringBuffer线程安全,使用synchronizedStringBuilder非线程安全,性能更高。

String str = "a" + "b";  // 编译期优化为"ab"
StringBuffer sb = new StringBuffer().append("a").append("b");


final关键字作用场景

问题:final修饰变量、方法、类分别有什么作用?
答案:

  • 变量:基本类型值不可变,引用类型指向不可变(对象内容可变)。
  • 方法:禁止子类重写。
  • 类:禁止继承。
final List<String> list = new ArrayList<>();
list.add("item");  // 合法,修改对象内容


多态的实现机制

问题:Java多态如何通过JVM实现?
答案:
基于虚方法表(vtable)动态绑定,运行时确定实际调用的方法。父类引用调用子类重写方法时,JVM通过对象实际类型查找方法表。


单例的七种写法

问题:列举线程安全的单例实现方式。
答案:

  1. 双重检查锁(推荐)
public class Singleton {
    private static volatile Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

  1. 静态内部类(懒加载)
  2. 枚举(防反射破坏)

JVM类加载机制

问题:描述类加载的双亲委派模型及其打破场景。
答案:
加载流程:Bootstrap ClassLoaderExtension ClassLoaderApplication ClassLoader。打破场景:如JDBC驱动使用ServiceLoader,或自定义类加载器重写loadClass方法。


AQS实现原理

问题:AQS如何管理线程同步状态?
答案:
通过volatile int state和CLH队列实现。ReentrantLock调用acquire()时,CAS修改state,失败则入队阻塞。


Spring事务传播机制

问题:PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED的区别?
答案:

  • REQUIRES_NEW:新建独立事务,原事务挂起。
  • NESTED:嵌套事务,回滚到保存点而非全事务。

Kafka高可用设计

问题:Kafka如何保证分区消息不丢失?
答案:

  • 生产者:acks=all确保ISR副本写入。
  • Broker:多副本同步+Leader选举。
  • 消费者:手动提交偏移量。

短链服务设计

问题:设计一个高并发短链系统,如何生成唯一ID?
答案:

  • ID生成:Snowflake算法或自增ID+Base62编码。
  • 映射存储:Redis缓存短码到原URL,数据库持久化。
// Base62示例
String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
String shortUrl = encode(longUrl.hashCode(), chars);


Java21虚拟线程

问题:虚拟线程相比平台线程有哪些优势?
答案:
轻量级线程,由JVM调度,无需操作系统线程切换。适合IO密集型任务,显著提升吞吐量。

Thread.startVirtualThread(() -> System.out.println("Virtual Thread"));


CAP理论公式

分布式系统只能满足其中两项:
一致性(C) + 可用性(A) + 分区容错性(P) ≤ 2


其他技术点可参照类似格式展开,如需深入某个主题可进一步细化。


网站公告

今日签到

点亮在社区的每一天
去签到