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

Java核心语法

数据类型与包装类
Java的8种基本数据类型对应包装类:byte-Byteshort-Shortint-Integerlong-Longfloat-Floatdouble-Doublechar-Characterboolean-Boolean。包装类提供对象操作能力,如集合存储和泛型使用。

自动装箱与拆箱原理
装箱调用valueOf()方法,拆箱调用xxxValue()方法。Integer缓存-128~127的实例,高频复用。

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

String、StringBuffer、StringBuilder区别

  • String不可变,每次操作生成新对象
  • StringBuffer线程安全(synchronized修饰)
  • StringBuilder非线程安全,性能更高

final关键字作用场景

  • 修饰类:不可继承
  • 修饰方法:不可重写
  • 修饰变量:基本类型值不可变,引用类型地址不可变

面向对象特性

多态的实现机制
基于JVM方法调用指令:

  • invokestatic:调用静态方法
  • invokevirtual:调用实例方法(多态核心)
  • invokeinterface:调用接口方法
  • invokespecial:调用构造函数、私有方法等

抽象类与接口的异同

维度 抽象类 接口
方法实现 可包含具体方法 Java8后默认方法
变量 无限制 默认public static final
继承 单继承 多实现
设计目的 代码复用 行为契约

JVM深度剖析

内存模型与GC算法

  • 堆分区:新生代(Eden+S0+S1)、老年代
  • GC算法:
    • 标记-清除(产生碎片)
    • 标记-整理(老年代常用)
    • 复制算法(新生代)

类加载机制
双亲委派模型流程:

  1. 加载:获取二进制字节流
  2. 验证:文件格式、元数据等
  3. 准备:分配内存并初始化默认值
  4. 解析:符号引用转直接引用
  5. 初始化:执行方法

OOM问题排查

  • java.lang.OutOfMemoryError: Java heap space:堆内存不足
  • java.lang.OutOfMemoryError: Metaspace:元空间溢出
  • java.lang.OutOfMemoryError: unable to create new native thread:线程数超限

并发编程体系

AQS实现原理分析
核心结构:

  • state:同步状态(如ReentrantLock的重入次数)
  • CLH队列:线程等待队列
    关键方法:
public final void acquire(int arg) {
    if (!tryAcquire(arg) &&
        acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
        selfInterrupt();
}

ThreadLocal内存泄漏防范
使用弱引用避免Key内存泄漏,但需手动remove()清理Value。

并发容器源码解读
ConcurrentHashMap JDK8改进:

  • 数组+链表+红黑树
  • CAS+synchronized替代分段锁
  • 扩容时协助迁移

Spring核心技术

IOC容器启动流程

  1. 初始化BeanDefinitionReader
  2. 解析配置生成BeanDefinition
  3. 执行BeanFactoryPostProcessor
  4. 实例化单例Bean(依赖注入、初始化回调)

AOP动态代理实现

  • JDK动态代理:基于接口
  • CGLIB:基于子类继承
public Object getProxy() {
    return Enhancer.create(target.getClass(), 
        (MethodInterceptor)(obj, method, args, proxy) -> {
            System.out.println("Before method");
            Object result = proxy.invokeSuper(obj, args);
            System.out.println("After method");
            return result;
        });
}

分布式系统设计

CAP理论公式
分布式系统最多满足两个特性:
一致性(C) + 可用性(A) + 分区容错性(P) ≤ 2

Kafka高可用设计

  • 分区副本机制(ISR列表)
  • 生产者ACK配置(0/1/all)
  • 消费者偏移量管理

分布式ID生成方案

  • UUID:无序,索引效率低
  • 数据库自增序列:存在单点瓶颈
  • Snowflake算法:
    • 1位符号位 + 41位时间戳 + 10位机器ID + 12位序列号

系统设计案例

短链服务设计

  • 哈希算法:MD5截取/自增ID转62进制
  • 301/302重定向选择
  • 缓存预热策略

秒杀系统架构

  • 分层削峰:页面静态化+读写分离+队列缓冲
  • 库存扣减:Redis原子操作或分布式锁
  • 限流策略:令牌桶/漏桶算法

Java新特性

虚拟线程(Java21)
轻量级线程,由JVM调度:

Thread.startVirtualThread(() -> {
    System.out.println("Virtual thread running");
});

GraalVM原生镜像
通过AOT编译生成独立可执行文件:

native-image -jar app.jar

你可能感兴趣的:(面试专栏,java,面试,开发语言,Java面试)