一、Java核心八股文 

1. Java基础

  • HashMap vs ConcurrentHashMap

    • HashMap:非线程安全,JDK1.8后采用数组+链表/红黑树,扩容可能死循环(JDK1.7)。

    • ConcurrentHashMap:JDK1.8改用CAS + synchronized优化锁粒度,分段锁淘汰。

  • synchronized vs ReentrantLock

    • synchronized:JVM内置锁,非公平锁,不可中断。

    • ReentrantLock:支持公平锁、可中断、Condition条件队列。

  • volatile的作用与局限性

    • 保证可见性(强制主存读取)和有序性(禁止指令重排序),但不保证原子性(如i++AtomicInteger)。

  • JVM内存模型

    • 线程私有:虚拟机栈、本地方法栈、程序计数器。

    • 线程共享:堆、方法区(JDK1.8后为元空间)。

2. JVM篇

  • G1垃圾回收器特点

    • Region分区、可预测停顿、适合大内存应用。

  • OOM排查方法

    • jmap -dump导出堆内存 → MAT分析内存泄漏 → jstack查死锁。

  • 类加载机制

    • 双亲委派模型(BootStrap → Extension → Application),打破方式(如TomcatWebAppClassLoader)。

3. 并发编程

  • 线程池参数设置

    • corePoolSize(核心线程数)、maxPoolSize(最大线程数)、workQueue(任务队列)、拒绝策略。

    • IO密集型CPU核心数 * 2CPU密集型CPU核心数 + 1

  • AQS(AbstractQueuedSynchronizer)原理

    • 核心:state(资源状态)+ CLH队列(线程排队),实现类如ReentrantLockCountDownLatch

  • 分布式锁方案

    • RedisSETNX + RedLock)、ZooKeeper(临时节点 + Watch机制)。


二、高并发与分布式系统(高频场景题)

1. 秒杀系统设计

  • 核心问题:超卖、库存一致性、高并发请求。

  • 解决方案

    • 分层削峰Nginx限流 → Redis预减库存(Lua脚本保证原子性)→ 消息队列(Kafka/RocketMQ)异步处理。

    • 热点隔离:独立Redis集群处理秒杀商品。

    • 风控防刷:IP限流、验证码、用户行为分析。

2. 分布式事务

  • TCC模式Try-Confirm-Cancel):适用于金融支付系统。

  • SAGA长事务:适用于补偿机制较强的业务。

  • 本地消息表:最终一致性方案,适用于订单系统。

3. 缓存一致性

  • 延迟双删:先删缓存 → 更新DB → 再删缓存。

  • 订阅BinlogCanal监听MySQL变更)。

4. 十亿级数据分页优化

  • ES search_after(深度分页)。

  • 覆盖索引 + 禁止跳页LIMIT 10000, 10优化)。


三、数据库与缓存优化

1. MySQL高频考点

  • 索引失效场景

    • LIKE '%xx'、函数计算、OR条件、隐式类型转换。

  • MVCC实现原理

    • ReadView + Undo Log版本链,解决不可重复读 & 幻读。

2. Redis实战

  • 缓存雪崩预防

    • 随机过期时间 + 多级缓存(本地→RedisDB)+ 熔断降级(Sentinel)。

  • 热点Key探测

    • redis-cli --hotkeys --pattern "user:*"


四、微服务与系统设计

1. Spring Boot自动配置原理

  • @EnableAutoConfiguration + META-INF/spring.factories + 条件注解(@Conditional)。

2. 服务熔断策略

  • Sentinel动态调整阈值(基于慢调用比例触发降级)。

3. 全链路灰度发布

  • 流量标记Header传递)+ Service MeshIstio动态路由)。


 

 

 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐