2025年Java高级工程师核心面试宝典

在这里插入图片描述

2025年Java高级工程师面试题

Java基础

1. HashMap原理

问题:HashMap在JDK8中的实现原理?

答案:

  1. 数组+链表/红黑树结构
  2. 当链表长度>8且数组长度>64时转为红黑树
  3. hash计算:
static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

2. 动态代理

问题:JDK动态代理和CGLIB区别?

答案:

特性JDK动态代理CGLIB
原理基于接口基于继承
性能调用稍快生成快
限制必须实现接口不能代理final类

JVM

3. 类加载机制

问题:双亲委派模型的工作流程?

答案:

  1. 加载顺序:
    • 应用程序类加载器 → 扩展类加载器 → 启动类加载器
  2. 优势:
    • 避免重复加载
    • 防止核心API被篡改

4. OOM排查

问题:如何排查Metaspace内存溢出?

答案:

  1. 参数配置:
-XX:MaxMetaspaceSize=256m
-XX:MetaspaceSize=64m
  1. 分析工具:
jcmd <pid> GC.heap_dump /path/to/dump.hprof

并发编程

5. volatile关键字

问题:volatile如何保证可见性和有序性?

答案:

  1. 可见性:
    • 写操作立即刷新到主内存
    • 读操作从主内存读取
  2. 有序性:
    • 禁止指令重排序

6. AQS原理

问题:AbstractQueuedSynchronizer如何实现锁?

答案:

  1. 核心结构:
    • state变量表示锁状态
    • CLH队列管理等待线程
  2. 获取锁流程:
public final void acquire(int arg) {
    if (!tryAcquire(arg) &&
        acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
        selfInterrupt();
}

数据库

7. 索引失效

问题:哪些情况会导致MySQL索引失效?

答案:

  1. 常见场景:
    • 使用!=<>操作符
    • 对索引列使用函数
    • 隐式类型转换
    • 最左前缀原则违反

8. 事务隔离

问题:MySQL的RR隔离级别如何解决幻读?

答案:

  1. 解决方案:
    • 快照读:通过MVCC
    • 当前读:通过Next-Key Lock
  2. 锁范围:
    • 记录锁+间隙锁

Spring框架

9. 循环依赖

问题:Spring如何解决循环依赖?

答案:

  1. 三级缓存:
    • singletonObjects:完整Bean
    • earlySingletonObjects:早期引用
    • singletonFactories:ObjectFactory
  2. 解决流程:
// DefaultSingletonBeanRegistry
protected Object getSingleton(String beanName, boolean allowEarlyReference) {
    // 检查一级缓存
    Object singletonObject = this.singletonObjects.get(beanName);
    if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {
        // 检查二级缓存
        singletonObject = this.earlySingletonObjects.get(beanName);
        if (singletonObject == null && allowEarlyReference) {
            // 检查三级缓存
            synchronized (this.singletonObjects) {
                // 再次检查...
            }
        }
    }
    return singletonObject;
}

10. Bean生命周期

问题:描述Spring Bean的完整生命周期?

答案:

  1. 主要阶段:
    • 实例化 → 属性填充 → Aware接口回调
    • 初始化前 → 初始化 → 初始化后
    • 使用 → 销毁
  2. 关键接口:
    • BeanPostProcessor
    • InitializingBean
    • DisposableBean

分布式

11. CAP理论

问题:分布式系统如何权衡CAP?

答案:

  1. 常见选择:
    • CP系统:Zookeeper
    • AP系统:Eureka
  2. 实际应用:
    • 金融系统优先CP
    • 社交系统优先AP

12. 分布式ID

问题:Snowflake算法原理和优化?

答案:

  1. 原始结构:
    • 1位符号位 + 41位时间戳 + 10位机器ID + 12位序列号
  2. 优化方案:
    • 缩短时间戳位数延长使用年限
    • 增加机器ID位数支持更多节点

系统设计

13. 秒杀系统

问题:设计秒杀系统的关键技术点?

答案:

  1. 核心方案:
    • 流量削峰:消息队列
    • 库存扣减:Redis+Lua
    • 限流措施:令牌桶算法
  2. 架构示例:
用户 → 网关层 → 限流 → 缓存层 → 队列 → 服务层 → DB

14. 缓存策略

问题:如何保证缓存与数据库的一致性?

答案:

  1. 常见模式:
    • Cache Aside Pattern
    • Read/Write Through
    • Write Behind
  2. 最终一致性方案:
    • 延时双删
    • 监听binlog
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值