2025年Java架构师基础面试题
Java核心基础
1. 泛型原理
问题:Java泛型擦除机制如何工作?
答案:
- 编译时检查:
- 编译时检查类型安全
- 运行时擦除为原生类型
- 示例代码:
List<String> list = new ArrayList<>();
// 运行时实际类型是List
2. NIO模型
问题:对比BIO/NIO/AIO的区别?
答案: | 模型 | 阻塞方式 | 适用场景 | |------|----------|----------| | BIO | 同步阻塞 | 连接数少 | | NIO | 同步非阻塞 | 高并发短连接 | | AIO | 异步非阻塞 | 高并发长连接 |
JVM原理
3. 对象内存布局
问题:Java对象在内存中的结构?
答案:
- 组成结构:
- 对象头(8-16字节)
- 实例数据
- 对齐填充
- 查看工具:
jol-cli-0.9-full.jar java.lang.Object
4. 垃圾回收
问题:CMS和G1收集器的区别?
答案:
- CMS特点:
- 标记-清除算法
- 并发收集
- 内存碎片问题
- G1特点:
- 分Region收集
- 可预测停顿
- 整体标记整理
并发编程
5. ThreadLocal
问题:ThreadLocal的内存泄漏问题如何解决?
答案:
- 原因分析:
- 线程池中线程长期存活
- Entry的key是弱引用
- 解决方案:
try {
threadLocal.set(value);
// ...
} finally {
threadLocal.remove();
}
6. 并发容器
问题:ConcurrentHashMap的size()方法原理?
答案:
- 实现机制:
- 分段统计各Segment
- 最多重试3次
- JDK8优化:
- 基于baseCount和CounterCell
数据库
7. 事务隔离
问题:MySQL的RR隔离级别实现原理?
答案:
- MVCC机制:
- 版本链+ReadView
- undo日志回滚
- 锁机制:
- 记录锁
- 间隙锁
8. 索引优化
问题:联合索引的最左前缀原则?
答案:
- 示例说明:
-- 索引(a,b,c)
WHERE a=1 AND b=2 -- 使用索引
WHERE b=2 AND c=3 -- 不使用索引
Spring框架
9. Bean生命周期
问题:Spring Bean的初始化顺序?
答案:
- 执行顺序:
- @PostConstruct
- InitializingBean
- init-method
- 销毁顺序:
- @PreDestroy
- DisposableBean
- destroy-method
10. AOP原理
问题:Spring AOP的代理创建时机?
答案:
- 创建流程:
- Bean初始化完成后
- 通过BeanPostProcessor创建
- 源码位置:
- AbstractAutoProxyCreator
分布式
11. 分布式锁
问题:Redis分布式锁的Redlock算法?
答案:
- 实现步骤:
- 向N个节点获取锁
- 多数节点成功才算获取成功
- 锁有效期需包含时钟漂移
- 问题:
- 性能较低
- 实现复杂
12. 服务注册
问题:Eureka的服务续约机制?
答案:
- 心跳间隔:
- 默认30秒
- 失效时间:
- 90秒未续约则剔除
系统设计
13. 缓存策略
问题:缓存穿透解决方案?
答案:
- 方案对比:
- 布隆过滤器
- 空值缓存
- 接口校验
- 实现示例:
if (bloomFilter.mightContain(key)) {
return cache.get(key);
}
14. 限流算法
问题:令牌桶算法实现原理?
答案:
- 核心参数:
- 令牌生成速率
- 桶容量
- Guava实现:
RateLimiter limiter = RateLimiter.create(10); // 每秒10个令牌