目录

一、Java 核心基础

1. 语法与特性

2. 集合框架

3. I/O 与网络

二、并发编程

1. 基础概念

2. JUC 工具类

3. 进阶主题

三、JVM 与性能调优

1. 内存管理

2. 常用工具

3. 调优实战

四、数据库

1. MySQL

2. Redis

五、开发框架

1. Spring 核心

2. Spring Boot

3. ORM 框架(MyBatis)

六、分布式基础

1. 微服务核心

2. 消息队列

3. 分布式理论与实践

七、系统设计与工程能力

1. 设计原则与模式

创建型模式

结构型模式

行为型模式

2. 高并发系统设计

3. 工程能力与运维

八、面试专项准备

1. 项目阐述

2. 算法与数据结构

3. 行为与职业规划


一、Java 核心基础

1. 语法与特性

核心概念:

  1. 面向对象(封装、继承、多态)与面向过程的设计思想对比;
  2. 接口与抽象类的设计场景抉择;
  3. 泛型擦除机制及常见问题(如泛型数组、类型转换);
  4. 注解生命周期(SOURCE/CLASS/RUNTIME)与自定义注解 + 注解处理器实战;
  5. 反射的性能开销、使用场景(Spring IoC/MyBatis 映射)及优化。

Java8+ 新特性:

  1. Lambda 表达式:
    • 函数式接口(@FunctionalInterface)规范;
    • 方法引用 / 构造器引用的使用。
  2. Stream API:
    • 中间操作(无状态 / 有状态)、终止操作(短路 / 非短路)分类;
    • 并行流的线程安全、性能瓶颈及适用场景。
  3. CompletableFuture:
    • 异步任务编排(thenApply/thenCombine/allOf/anyOf);
    • 异常处理(exceptionally/handle/whenComplete);
    • 线程池指定(避免默认 ForkJoinPool)。
  4. Optional:
    • NPE 规避最佳实践(拒绝isPresent()+get()滥用);
    • 与 Stream 结合使用技巧。
  5. 枚举与序列化:
    • 枚举的线程安全特性、枚举实现单例的优势;
    • Serializable 接口作用、serialVersionUID 防序列化异常;
    • 深 / 浅拷贝的实现(Cloneable 接口、序列化、BeanUtils)及场景选择。

2. 集合框架

核心容器:

  1. ArrayList/LinkedList:
    • 底层结构(数组 / 双向链表);
    • 扩容机制、随机访问 / 增删性能对比及适用场景。
  2. HashMap:
    • 哈希算法、扩容机制(JDK1.7 vs 1.8);
    • 哈希冲突解决(链表→红黑树阈值);
    • JDK1.8 红黑树优化原理;
    • HashTable/TreeMap/LinkedHashMap 特性及区别。
  3. ConcurrentHashMap:
    • JDK1.7 分段锁(Segment)实现原理;
    • JDK1.8 CAS+synchronized+Node 数组的实现演进;
    • 高并发场景下的使用注意事项。

故障机制:

  1. 快速失败(fail-fast):
    • 触发条件、底层原理(modCount 校验);
    • 常见出现的容器场景。
  2. 安全失败(fail-safe):
    • 实现原理(迭代集合副本);
    • 性能损耗、适用的并发容器。

工具类实战:

  1. Guava 集合工具:Immutable 不可变集合、Multimap、BiMap;
  2. Guava 缓存构建器(CacheBuilder)的使用;
  3. Apache Commons Collections:CollectionUtils/MapUtils 核心方法实战。

3. I/O 与网络

I/O 模型:

  1. BIO(阻塞 IO):核心特点、适用场景(连接少且短连接);
  2. NIO(非阻塞 IO):核心特点、适用场景(高并发短连接);
  3. AIO(异步 IO):核心特点、适用场景(大文件传输 / 长连接);
  4. 三种模型的核心底层区别对比。

NIO 核心组件:

  1. Selector(多路复用器):事件监听(OP_READ/OP_WRITE)、工作机制;
  2. Channel(通道):FileChannel/SocketChannel/ServerSocketChannel 核心用法;
  3. ByteBuffer(缓冲区):核心方法(flip/clear/compact)、直接内存 vs 堆内存区别;
  4. 三者协同工作的完整流程。

零拷贝:

  1. Linux 下零拷贝的两种实现(mmap+write/transferTo);
  2. FileChannel.transferTo 方法的实际应用;
  3. 零拷贝在文件传输、消息队列中的性能提升原理。

网络编程:

  1. Socket/TCP 通信完整流程;
  2. TCP 粘包 / 拆包问题产生原因;
  3. 解决方案(定长包、分隔符、消息头 + 消息体)。

二、并发编程

并发编程-JUC工具类相关面试题-CSDN博客

并发编程-锁相关知识点-CSDN博客

1. 基础概念

线程基础:

  1. 线程四种创建方式及优缺点对比;
  2. 线程六大状态(NEW/RUNNABLE/BLOCKED/WAITING/TIMED_WAITING/TERMINATED);
  3. 状态之间的转换条件及触发场景;
  4. 线程优先级、守护线程的特性与使用。

线程安全:

  1. synchronized:
    • 底层实现(对象监视器 Monitor);
    • 锁升级流程(无锁→偏向锁→轻量级锁→重量级锁);
    • 锁消除、锁粗化的 JVM 优化。
  2. volatile:
    • 内存可见性、禁止指令重排的底层原理(内存屏障);
    • 与 happens-before 原则的关联;
    • 无法保证原子性的原因及解决办法。

死锁:

  1. 死锁产生的四大必要条件(互斥 / 占有且等待 / 不可剥夺 / 循环等待);
  2. 使用 jstack 命令排查死锁的实操步骤;
  3. 死锁的避免策略(破坏必要条件)。

线程通信:

  1. Object 类 wait/notify/notifyAll 的使用及注意事项;
  2. Condition(Lock 配套)的使用场景及与 wait/notify 的区别;
  3. 生产者 - 消费者模式的两种实现方案(wait/notify vs BlockingQueue)。

2. JUC 工具类

锁与同步器:

  1. ReentrantLock:
    • 可重入性实现原理;
    • 公平锁 / 非公平锁的底层区别及选型;
    • 与 synchronized 的性能对比及适用场景。
  2. AQS(抽象队列同步器):
    • 核心原理(CLH 队列、状态位 state);
    • 独占锁 / 共享锁的实现区别。
  3. 常用同步器:
    • CountDownLatch:使用场景、底层 AQS 实现;
    • Semaphore:信号量原理、限流场景实战;
    • CyclicBarrier:与 CountDownLatch 的区别、使用场景;
    • Exchanger:线程间数据交换的使用场景。

线程池:

  1. ThreadPoolExecutor:
    • 七大核心参数的含义及配置原则;
    • 核心工作流程(核心线程→队列→非核心线程→拒绝)。
  2. 拒绝策略:
    • 四种默认策略(AbortPolicy/CallerRunsPolicy/DiscardPolicy/DiscardOldestPolicy)的适用场景;
    • 自定义拒绝策略的实现。
  3. 线程池调优:
    • CPU 密集型、IO 密集型场景的参数配置公式;
    • 常见的线程池创建方式(Executors)及弊端;
    • 线程池的监控(任务数、完成数、异常数)。

3. 进阶主题

并发容器:

  1. ConcurrentSkipListMap:跳表结构、有序性特性、适用场景;
  2. CopyOnWriteArrayList/CopyOnWriteArraySet:写时复制原理、读多写少场景适配;
  3. BlockingQueue:ArrayBlockingQueue/LinkedBlockingQueue/DelayQueue 核心特性及使用场景;
  4. 各并发容器的线程安全实现原理对比。

原子类与 CAS:

  1. CAS 原理:
    • 乐观锁机制、CPU 底层指令(cmpxchg)支持;
    • CAS 的三大问题(ABA、循环时间长、只能保证单个变量原子性)。
  2. ABA 问题:产生原因、解决方案(AtomicStampedReference/AtomicMarkableReference);
  3. 原子类体系:
    • 基本类型(AtomicInteger)、数组类型(AtomicIntegerArray);
    • 引用类型(AtomicReference)、字段更新器(AtomicIntegerFieldUpdater);
    • 原子累加器(LongAdder)与 AtomicLong 的性能对比及适用场景。

其他核心点:

  1. ThreadLocal:
    • 实现原理(ThreadLocalMap、弱引用);
    • 内存泄漏的原因及解决办法(手动 remove);
    • 在框架中的使用场景(Spring 事务、MyBatis 分页)。
  2. 读写锁:
    • ReentrantReadWriteLock:读写分离原理、锁降级特性;
    • StampedLock:乐观读特性、与 ReentrantReadWriteLock 的性能对比。

三、JVM 与性能调优

JVM 垃圾回收器 核心知识点-CSDN博客

并发垃圾回收器-三色标记法实现原理-CSDN博客

1. 内存管理

运行时数据区:

  1. 堆:
    • 新生代(Eden/S0/S1)、老年代的划分及比例;
    • 对象创建的完整流程(分配内存→初始化→引用赋值);
    • 对象的内存布局(对象头、实例数据、对齐填充)。
  2. 虚拟机栈 / 本地方法栈:
    • 栈帧结构(局部变量表 / 操作数栈 / 动态链接 / 返回地址);
    • 栈溢出(StackOverflowError)、栈内存配置;
  3. 方法区 / 元空间:
    • JDK8 元空间替代永久代的原因;
    • 元空间的内存来源(本地内存)、配置参数;
    • 元空间溢出的场景及解决。
  4. 程序计数器:核心作用、唯一不会出现 OOM 的区域。

垃圾回收:

  1. 垃圾判定算法:
    • 引用计数法的弊端(循环引用);
    • 可达性分析算法的核心(GC Roots、引用链)。
  2. 引用类型:强引用、软引用、弱引用、虚引用的特性及使用场景;
  3. 垃圾回收算法:
    • 标记 - 清除:原理、优缺点(内存碎片);
    • 标记 - 整理:原理、优缺点(无碎片,耗时);
    • 复制算法:原理、优缺点(高效,内存损耗);
    • 各算法的适用内存区域。
  4. 垃圾收集器:
    • 新生代收集器:Serial/Parallel/ParNew 的特性及对比;
    • 老年代收集器:SerialOld/CMS/ParallelOld 的特性及对比;
    • 混合收集器:G1 的 Region 分区模型、Mixed GC 概念;
    • 低延迟收集器:ZGC/Shenandoah 的核心特性、适用场景;
  5. GC 触发条件:
    • Minor GC:触发条件、执行过程;
    • Full GC:触发条件(老年代满、元空间满、GC 失败等)、对应用的影响;
    • Mixed GC:G1 专属,触发条件及执行过程。

类加载机制:

  1. 类加载的完整流程(加载→链接→初始化);
  2. 链接阶段:验证、准备、解析的核心工作;
  3. 初始化阶段的触发条件(主动使用 / 被动使用);
  4. 类加载器:
    • 启动类加载器、扩展类加载器、应用程序类加载器的作用;
    • 自定义类加载器的实现步骤;
  5. 双亲委派模型:
    • 工作原理、设计优势;
    • 打破双亲委派的场景(JDBC/OSGi/Spring)及实现方式。

JMM(Java 内存模型):

  1. 核心规范:主内存与工作内存的划分;
  2. 八大原子操作:内存间数据交互的规则;
  3. happens-before 规则:核心规则及实际应用;
  4. 指令重排与数据可见性问题的解决。

2. 常用工具

命令行工具:

  1. jstack:排查死锁、线程阻塞、线程状态的实操命令;
  2. jmap:生成堆转储快照、查看内存使用、查询大对象的命令;
  3. jstat:实时监控 GC 指标(垃圾回收次数、耗时、内存占用)的命令;
  4. jcmd:综合命令,替代 jps、实现 GC 触发、查看 JVM 参数;
  5. jinfo:查看 / 修改 JVM 运行时参数的实操。

实战分析工具:

  1. Arthas:
    • 线上问题诊断核心命令(jad 反编译、watch 监控方法、trace 追踪调用链);
    • stack 查看方法调用栈、tt 记录方法执行快照;
  2. MAT(Memory Analyzer Tool):
    • 堆快照的导入与分析;
    • 内存泄漏定位、大对象分析、支配树 / 直方图的使用;
  3. VisualVM:JVM 监控、线程分析、GC 日志分析、插件扩展。

3. 调优实战

GC 日志分析:

  1. GC 日志的开启参数(-XX:+PrintGCDetails/-XX:+PrintGCTimeStamps/-Xloggc);
  2. Minor GC/Full GC/G1 GC 日志的关键指标解读(停顿时间、回收前后内存、GC 原因);
  3. 日志分析的核心关注点(停顿时间、GC 频率、内存占用趋势)。

JVM 调优参数:

  1. 堆内存配置:-Xms(初始堆)、-Xmx(最大堆)、-Xmn(新生代);
  2. 新生代比例:-XX:NewRatio、-XX:SurvivorRatio;
  3. GC 收集器指定:-XX:+UseG1GC、-XX:+UseCMSGC 等;
  4. 元空间配置:-XX:MetaspaceSize、-XX:MaxMetaspaceSize;
  5. 其他核心参数:-XX:+HeapDumpOnOutOfMemoryError(OOM 时生成堆快照)。

问题排查与调优:

  1. OOM 异常排查:
    • 堆溢出、栈溢出、元空间溢出、直接内存溢出的场景;
    • 完整排查流程(日志分析→工具定位→代码优化);
  2. 内存泄漏:
    • 常见原因(静态集合、未关闭资源、ThreadLocal 未 remove);
    • 定位方法(MAT 分析 + Arthas 监控);
  3. GC 调优思路:
    • GC 频繁、停顿时间长的常见原因;
    • 调优目标(低停顿 / 高吞吐)与收集器选型;
    • 调优步骤(监控→分析→参数调整→验证)。

四、数据库

Mysql索引底层数据结构与算法-CSDN博客

MySql优化——Explain详解-CSDN博客

Mysql的MVCC底层原理-CSDN博客

Redis 相关知识点整理-CSDN博客

1. MySQL

索引与优化:

  1. 索引原理:
    • B + 树索引结构(有序、叶子节点链表、磁盘 IO 优化);
    • 哈希索引、全文索引、空间索引的特性及适用场景;
    • 聚簇索引 / 非聚簇索引的区别(InnoDB vs MyISAM)。
  2. 索引设计与优化:
    • 最左前缀匹配原则、索引失效的常见场景(like % xxx、函数操作字段);
    • 回表、覆盖索引、索引下推的原理及优化应用;
    • 联合索引的设计原则(区分度高的字段在前)。
  3. SQL 优化:
    • EXPLAIN 命令解读(id/select_type/table/type/key/rows/Extra 字段);
    • 慢查询日志的开启、分析与优化;
    • JOIN 优化(小表驱动大表)、子查询优化、分页查询优化。

事务与锁:

  1. 事务特性:ACID 的底层实现原理;
  2. 事务隔离级别:
    • 四大隔离级别(读未提交 / 读已提交 / 可重复读 / 串行化)的定义;
    • 脏读、不可重复读、幻读的产生及解决;
    • InnoDB 默认隔离级别(可重复读)的实现;
  3. MVCC(多版本并发控制):
    • 核心原理(undo log / 版本链 / Read View);
    • InnoDB 实现可重复读的底层逻辑;
  4. 锁机制:
    • 行锁、表锁的特性及适用场景;
    • 意向锁(意向共享锁 / 意向排他锁)的作用;
    • 间隙锁、Next-Key Lock 的产生原因及解决幻读的原理;
    • 死锁的排查(information_schema.innodb_locks)与避免。

进阶机制:

  1. 存储引擎:
    • InnoDB 与 MyISAM 的核心区别(事务、锁、索引、崩溃恢复);
    • InnoDB 的核心组件(缓冲池、redo log/undo log、自适应哈希索引);
  2. 主从复制:
    • binlog 日志格式(STATEMENT/ROW/MIXED)及优缺点;
    • 主从复制的完整流程(主库 binlog→从库 IO 线程→中继日志→SQL 线程);
    • 复制延迟的原因与优化方案;
  3. 分库分表:
    • 垂直分表、水平分表的适用场景;
    • 分库分表带来的问题(分布式 ID、分布式事务、跨库 JOIN);
    • Sharding-JDBC 的核心使用(分片策略、读写分离);
  4. 其他:分区表的使用、表碎片的整理、大表优化策略。

2. Redis

数据类型与使用:

  1. 基础数据类型:
    • String:动态字符串底层、常用命令、适用场景(缓存、计数器);
    • Hash:哈希表底层、常用命令、适用场景(存储对象);
    • List:双向链表底层、常用命令、适用场景(消息队列、排行榜);
    • Set:哈希表底层、常用命令、适用场景(去重、交集并集);
    • Zset:跳表 + 哈希表底层、常用命令、适用场景(有序排行榜);
  2. 高级数据类型:
    • BitMap:位图原理、适用场景(签到、统计);
    • HyperLogLog:基数统计原理、适用场景(UV 统计);
    • Geo:地理位置原理、适用场景(附近的人);
  3. 各数据类型的时间复杂度、常用命令优化。

持久化与高可用:

  1. 持久化机制:
    • RDB(快照):触发机制(手动 / 自动)、原理、优缺点;
    • AOF(追加日志):触发机制、重写机制、原理、优缺点;
    • 混合持久化的配置与优势;
    • 持久化方案的选型建议;
  2. 主从复制:
    • 全量复制、增量复制的触发条件及流程;
    • 主从复制的原理、数据同步保障;
  3. 哨兵模式(Sentinel):
    • 核心功能(故障检测、自动故障转移、主从切换);
    • 哨兵集群的工作原理;
  4. 集群模式(Cluster):
    • Slot 槽分片原理(16384 个槽);
    • 主从复制、节点间通信、重定向机制;
    • 集群的扩容与缩容。

缓存问题与优化:

  1. 经典缓存问题:
    • 缓存穿透:产生原因、解决方案(布隆过滤器、空值缓存);
    • 缓存击穿:产生原因、解决方案(互斥锁、热点数据永不过期);
    • 缓存雪崩:产生原因、解决方案(随机过期时间、集群部署、熔断降级);
  2. 缓存策略:
    • 缓存更新策略(Cache Aside/Write Through/Write Back)及选型;
    • 缓存一致性的保障(最终一致性、双删策略);
    • 缓存预热、缓存降级的实现方案;
  3. 性能优化:
    • Redis 序列化方案(StringRedisSerializer vs Jackson2JsonRedisSerializer);
    • 大 key、热 key 的识别与解决办法;
    • Redis 连接池的配置优化(Jedis/Lettuce);
  4. 其他:Redis 的单线程模型、IO 多路复用原理、并发能力保障。

五、开发框架

1. Spring 核心

IoC/DI(控制反转 / 依赖注入):

  1. IoC 与 DI 的本质含义、Spring IoC 容器的核心作用;
  2. BeanDefinition 的加载与解析流程;
  3. Bean 的生命周期:实例化→属性填充→初始化→销毁;
    • 初始化阶段:@PostConstruct、InitializingBean、自定义 init-method;
    • 销毁阶段:@PreDestroy、DisposableBean、自定义 destroy-method;
  4. 循环依赖:
    • 产生原因、Spring 的解决办法(三级缓存);
    • 构造器注入循环依赖的解决;
  5. Bean 的作用域:singleton/prototype/request/session 的特性及使用;
  6. 依赖注入的方式:构造器注入、setter 注入、字段注入的优缺点及选型。

AOP(面向切面编程):

  1. AOP 核心概念:切面(Aspect)、切点(Pointcut)、通知(Advice)、连接点、织入;
  2. AOP 的实现方式:JDK 动态代理(基于接口)vs CGLIB 代理(基于子类);
  3. Spring AOP 的核心执行流程;
  4. @Aspect 注解的使用:
    • @Pointcut 切点表达式(execution/within/annotation 等);
    • 通知类型(@Before/@After/@AfterReturning/@AfterThrowing/@Around);
  5. Spring AOP 与 AspectJ 的区别及整合使用。

事务管理:

  1. 事务的核心接口:PlatformTransactionManager、TransactionDefinition、TransactionStatus;
  2. 声明式事务:
    • @Transactional 注解的原理(AOP 动态代理);
    • 事务传播行为(PROPAGATION_REQUIRED/PROPAGATION_REQUIRES_NEW 等 7 种)的使用场景;
    • 事务隔离级别、超时时间、只读属性的配置;
  3. 编程式事务:TransactionTemplate 的使用场景;
  4. 事务失效的常见场景:
    • 非 public 方法、异常被捕获、多线程调用;
    • 数据源未配置事务管理器、传播行为配置错误;
  5. 分布式事务:Spring 对分布式事务的初步支持(JTA)。

2. Spring Boot

核心原理:

  1. @SpringBootApplication 注解:
    • 三大核心注解(@SpringBootConfiguration/@EnableAutoConfiguration/@ComponentScan)的作用;
    • 扫描包的规则及自定义扫描范围;
  2. 自动配置:
    • @EnableAutoConfiguration 的核心原理(META-INF/spring.factories);
    • 自动配置类的条件注解(@ConditionalOnClass/@ConditionalOnMissingBean/@ConditionalOnProperty);
    • 禁用指定自动配置类的方法;
  3. 起步依赖(Starter):核心原理、依赖传递与版本管理。

实战进阶:

  1. 自定义 Starter:
    • 命名规范、开发完整流程;
    • 自动配置类的编写、spring.factories 配置;
  2. Spring Boot 配置:
    • 配置文件类型(properties/yml/yaml)、配置优先级;
    • 自定义配置绑定(@ConfigurationProperties/@Value);
    • 多环境配置(profile)、配置外部化;
  3. 监控与管理:
    • Spring Boot Actuator 的使用(健康检查、指标收集、接口暴露);
    • 自定义健康检查指标;
  4. 其他:Spring Boot 的启动流程、内嵌容器(Tomcat/Jetty/Undertow)的配置与切换。

3. ORM 框架(MyBatis)

核心配置与组件:

  1. MyBatis 核心配置文件:configuration、environment、mapper、settings 等标签;
  2. 核心组件及作用:
    • SqlSessionFactory:创建 SqlSession 的工厂,单例设计;
    • SqlSession:与数据库的会话,非线程安全;
    • MapperProxy:动态代理实现 Mapper 接口的核心;
    • Executor:执行器(Simple/Reuse/Batch)的作用;
  3. #{} 与 ${} 的区别:预编译防 SQL 注入、字符串替换的使用场景;
  4. 别名配置、类型别名处理器的使用。

映射与 SQL 编写:

  1. 实体与表的映射:@Mapper 注解、xml 映射文件的编写;
  2. 结果映射:resultMap 的核心使用(解决字段名与属性名不一致、关联查询);
  3. 关联查询:
    • 一对一关联(association)、一对多关联(collection);
    • 懒加载的配置与实现原理;
  4. 动态 SQL:if/choose/when/otherwise/foreach/trim/where/set 标签的编写;
  5. 分页查询:RowBounds、PageHelper 分页插件的原理与使用。

缓存机制:

  1. 一级缓存:SqlSession 级别,默认开启,缓存失效场景;
  2. 二级缓存:Mapper 级别,手动开启(@CacheNamespace),缓存实现;
  3. 二级缓存的使用注意事项(序列化、关联查询缓存);
  4. MyBatis 与第三方缓存(Redis)的整合;

进阶使用:

  1. 自定义 TypeHandler:类型处理器的实现与配置;
  2. 插件开发(Interceptor):核心原理(四大核心对象拦截)、分页插件自定义实现;
  3. 批量操作:BatchExecutor、foreach 批量插入 / 更新的优化;
  4. MyBatis-Plus:核心功能(CRUD 封装、分页、条件构造器)、与原生 MyBatis 的整合。

六、分布式基础

1. 微服务核心

服务注册与发现:

  1. Eureka:
    • 核心原理(AP 原则、服务注册 / 发现 / 续约);
    • 自我保护机制的触发与作用;
    • Eureka 集群的搭建;
  2. Nacos:
    • CP+AP 模式的切换、与 Eureka 的区别;
    • 服务注册 / 发现、心跳检测的原理;
  3. 服务发现的两种模式:客户端发现、服务端发现。

配置中心:

  1. 配置中心的核心功能:动态配置、配置灰度发布、配置加密;
  2. Apollo:核心架构(配置服务、管理服务、客户端)、配置加载与热更新;
  3. Nacos 配置中心:配置发布、监听、持久化的原理;
  4. 配置中心的使用场景:多环境配置、动态开关、服务配置统一管理。

服务网关:

  1. Spring Cloud Gateway:
    • 核心架构(路由定位、过滤器链);
    • 路由配置(静态路由、动态路由)、断言(Predicate)的使用;
    • 过滤器(GatewayFilter/GlobalFilter)的编写与使用;
  2. Zuul 1.x/2.x:核心原理、与 Gateway 的区别;
  3. 网关的核心功能:鉴权、限流、日志记录、跨域处理、路由转发;
  4. 限流实现:令牌桶 / 漏桶算法、Redis+Lua 实现网关限流。

服务治理:

  1. 负载均衡:
    • 核心原理、常见策略(轮询、随机、权重、最少活跃数);
    • Ribbon、Nacos LoadBalancer 的使用与自定义策略;
  2. 熔断与降级:
    • 熔断的核心原理(打开 / 半开 / 关闭状态);
    • Resilience4j、Sentinel 的核心功能与使用;
    • 降级的场景(服务不可用、流量高峰、依赖服务故障);
  3. 服务调用:
    • Feign:声明式远程调用,核心原理(动态代理)、自定义配置;
    • OpenFeign:与 Feign 的区别、核心功能扩展;
  4. 链路追踪:Sleuth+Zipkin/SkyWalking 的核心原理、分布式链路追踪的实现。

2. 消息队列

Kafka相关知识整理-CSDN博客

RabbitMQ相关知识整理-CSDN博客

Kafka:

  1. 核心架构与概念:Producer、Consumer、Broker、Topic、Partition、Replica;
  2. 高吞吐的核心原因:
    • 顺序读写、页缓存、零拷贝、批量发送;
    • 分区机制、数据压缩;
  3. 生产者(Producer):
    • 消息发送流程(同步 / 异步)、分区策略(自定义 / 默认);
    • 生产者确认(acks 参数)、消息重试机制;
  4. 消费者(Consumer):
    • 消费者组(Consumer Group)的原理、Rebalance 机制(触发条件、过程);
    • offset 的提交方式(自动 / 手动)、offset 的持久化;
    • 消息的消费模式(点对点、发布订阅);
  5. 高可用与可靠性:
    • ISR 机制(同步副本)、Leader 选举;
    • 消息丢失、重复消费的解决办法;
  6. 其他:Topic 的分区与副本配置、日志清理策略(删除 / 压缩)。

RabbitMQ:

  1. 核心架构与概念:Producer、Consumer、Broker、Exchange、Queue、Binding;
  2. 交换机类型及路由模式:
    • Direct Exchange:直连路由,点对点场景;
    • Topic Exchange:通配符路由,发布订阅场景;
    • Fanout Exchange:广播路由,多队列同步场景;
    • Headers Exchange:头部匹配,小众场景;
  3. 消息投递与消费:
    • 消息的投递流程(生产者→交换机→队列→消费者);
    • 消费者的消息确认机制(手动 ACK/AUTOACK);
  4. 可靠性保障:
    • 生产者确认(Confirm 模式)、返回模式(Return);
    • 消息持久化(Exchange/Queue/Message);
    • 消费者手动 ACK、死信队列(DLQ)的使用;
  5. 高级特性:
    • 延迟队列的实现(死信队列 + TTL);
    • 消息限流、消息优先级;
    • 集群模式(普通集群、镜像集群)的搭建与原理;
  6. 消息丢失、重复消费、消息堆积的解决办法。

3. 分布式理论与实践

分布式理论:

  1. CAP 理论:一致性(C)、可用性(A)、分区容错性(P)的定义;
    • 三者不可兼得,分布式场景下的取舍原则(保证 P,权衡 C/A);
  2. BASE 理论:基本可用、软状态、最终一致性,CAP 理论的延伸;
  3. 分布式事务:
    • 分布式事务的产生原因(跨库 / 跨服务);
    • 常见解决方案:2PC(两阶段提交)、TCC(补偿事务)、SAGA(长事务)、本地消息表、可靠消息最终一致性;
    • 各方案的优缺点及适用场景;

分布式实战方案:

  1. 分布式 ID:
    • 常见生成方案:UUID、数据库自增、雪花算法、Redis 自增、美团 Leaf;
    • 各方案的优缺点(唯一性、有序性、性能、分布式)及选型;
    • 雪花算法的核心(时间戳 + 机器 ID + 序列号)、时钟回拨问题的解决;
  2. 分布式锁:
    • 核心要求:互斥、超时释放、可重入、高可用;
    • Redis 实现:setnx+expire、Redlock 算法、Lua 脚本保证原子性;
    • ZooKeeper 实现:临时顺序节点、Watcher 机制;
    • 两种实现的优缺点及选型;
  3. 分布式限流:
    • 限流的核心指标(QPS、并发数);
    • 常见算法:令牌桶、漏桶、计数器;
    • 实现层面:网关层限流、应用层限流(Redis+Lua);
  4. 分布式会话:
    • 会话共享的问题、常见解决方案(Redis/Token/JWT);
    • JWT 的原理、优缺点、使用场景;
    • Redis 实现分布式会话的核心步骤。

七、系统设计与工程能力

1. 设计原则与模式

SOLID 设计原则:

  1. 单一职责原则:类 / 方法的职责单一,避免职责耦合;
  2. 开闭原则:对扩展开放,对修改关闭;
  3. 里氏替换原则:子类可替换父类,不改变原有逻辑;
  4. 接口隔离原则:细化接口,避免实现类依赖无用方法;
  5. 依赖倒置原则:依赖抽象,不依赖具体实现;
  6. 各原则的落地实践与在框架中的应用。

设计模式:

创建型模式

  1. 单例模式:
    • 饿汉式、懒汉式(双重检查锁 + volatile)、静态内部类、枚举;
    • 各实现的线程安全性、优缺点及选型;
  2. 工厂模式:
    • 简单工厂模式:核心实现、适用场景;
    • 工厂方法模式:接口 + 实现,解耦产品与创建;
    • 抽象工厂模式:多产品族、多产品等级,适用场景;
  3. 建造者模式:核心实现、与工厂模式的区别、适用场景(复杂对象创建);

结构型模式

  1. 代理模式:静态代理、动态代理(JDK/CGLIB)、在 Spring AOP 中的应用;
  2. 装饰器模式:核心实现、与代理模式的区别、在 IO 流中的应用;
  3. 适配器模式:类适配器、对象适配器、接口适配器,适用场景(接口兼容);
  4. 享元模式:核心实现、池化思想(连接池、线程池)的应用;
  5. 组合模式:核心实现、适用场景(树形结构);

行为型模式

  1. 观察者模式:核心实现、发布 - 订阅模型、在 Spring 事件监听中的应用;
  2. 策略模式:核心实现、与简单工厂的结合、适用场景(算法动态切换);
  3. 模板方法模式:核心实现、钩子方法、在框架中的应用(Spring JdbcTemplate);
  4. 责任链模式:核心实现、在网关过滤器、拦截器中的应用;
  5. 迭代器模式:核心实现、在集合框架中的应用;
  6. 命令模式:核心实现、适用场景(请求封装、撤销 / 重做);

2. 高并发系统设计

核心设计策略:

  1. 缓存优化:多级缓存(本地缓存 + Caffeine+Redis)、缓存穿透 / 击穿 / 雪崩解决;
  2. 异步化:消息队列、线程池、CompletableFuture 实现异步处理;
  3. 读写分离:主库写、从库读、中间件(Sharding-JDBC)实现;
  4. 分库分表:水平分表 / 垂直分表、分片策略、分布式 ID;
  5. 负载均衡:Nginx/LVS、服务端负载均衡、客户端负载均衡;
  6. 限流降级:网关限流、应用层限流、熔断降级、服务隔离;
  7. 队列削峰:消息队列(Kafka/RabbitMQ)实现流量削峰;

经典系统设计场景:

  1. 短链系统:
    • 核心需求:长链转短链、短链跳转、高可用、高并发;
    • 核心设计:发号器策略(数据库自增 / 雪花算法)、哈希算法(避免冲突)、短链映射存储(Redis/MySQL);
    • 优化点:缓存预热、短链过期、分布式部署;
  2. 秒杀系统:
    • 核心痛点:高并发、超卖、流量高峰、接口防刷;
    • 核心设计:流量削峰(网关限流 / 消息队列)、库存扣减(Redis 预扣 + 数据库最终一致性)、热点数据隔离;
    • 优化点:防重复提交(分布式锁 / 令牌)、静态资源 CDN、服务降级;
  3. 订单系统:
    • 核心需求:订单创建、库存扣减、支付回调、订单超时关闭;
    • 核心设计:幂等性设计(唯一订单号 / 令牌)、分布式事务(TCC / 本地消息表)、延迟队列(订单超时);
  4. 限流系统:
    • 核心需求:按 IP / 接口限流、高可用、低延迟;
    • 核心设计:令牌桶 / 漏桶算法、Redis+Lua 实现、网关层集成;

3. 工程能力与运维

开发工具与协作:

  1. Git:
    • 核心命令(clone/commit/push/pull/branch/merge/rebase);
    • Git Flow 工作流(master/develop/feature/hotfix/release 分支);
    • 冲突解决、cherry-pick 的使用、标签管理;
  2. 构建工具:
    • Maven:依赖传递规则、依赖冲突解决(exclusions/force);
    • Maven 生命周期、插件配置、私服(Nexus)的使用;
    • Gradle:核心特点、与 Maven 的区别(可选);
  3. Linux 基础:
    • 核心命令:grep/awk/sed(日志查询)、ps/top/jps(进程查询);
    • netstat/ss(网络查询)、df/du(磁盘查询)、kill(进程杀死);
    • shell 脚本编写:批量启停服务、日志切割、定时任务(crontab);

代码质量保障:

  1. 单元测试:JUnit5、Mockito 模拟测试、单元测试覆盖率;
  2. 集成测试 / 接口测试:PostMan、Swagger/SpringDoc、JMeter;
  3. 代码规范:Alibaba Java 开发手册、代码注释规范;
  4. 静态代码检查:SonarQube、IDEA 代码检查插件;
  5. 代码重构:提取方法、封装字段、消除重复代码、简化条件表达式;

监控与部署:

  1. 应用监控:
    • APM 工具:SkyWalking/Pinpoint/Prometheus 的核心功能;
    • 链路追踪、性能指标监控(QPS、响应时间、错误率);
  2. 日志收集:ELK 栈(Elasticsearch+Logstash+Kibana)、日志规范、日志分级;
  3. 容器化与编排:
    • Docker:镜像构建、容器创建、Dockerfile 编写、镜像仓库;
    • Kubernetes(K8s):核心概念(Pod/Service/Deployment)、简单部署(可选);
  4. 持续集成 / 持续部署(CI/CD):
    • Jenkins 的核心使用、流水线(Pipeline)编写;
    • 自动化构建、测试、部署;
  5. 发布策略:蓝绿发布、灰度发布(金丝雀发布)、滚动发布的原理及适用场景;

八、面试专项准备

1. 项目阐述

STAR 法则落地:

  1. Situation:清晰描述项目背景、业务场景、项目规模(用户量、QPS、数据量);
  2. Task:明确自己在项目中的核心职责、承担的任务、面临的挑战;
  3. Action:详细说明解决问题的具体行动、技术选型的原因、核心实现步骤;
  4. Result:量化项目成果(性能提升 XX%、QPS 从 XX 提升至 XX、故障率下降 XX%);

重点准备方向:

  1. 项目的核心架构设计:画出架构图,说明各组件的作用、技术选型的考量;
  2. 项目中的技术难点:如高并发、数据一致性、性能瓶颈等;
  3. 问题排查与解决:完整描述问题现象→分析原因→制定方案→落地实现→复盘优化的过程;
  4. 技术优化点:如 SQL 优化、JVM 调优、缓存优化、接口性能优化等,说明优化前后的对比;
  5. 分布式场景处理:分布式 ID、分布式锁、分布式事务的实现与选型;

2. 算法与数据结构

基础数据结构:

  1. 数组:核心特性、增删改查的时间复杂度、双指针 / 滑动窗口技巧;
  2. 链表:单链表 / 双向链表 / 循环链表、反转 / 环检测 / 合并等核心操作;
  3. 栈 / 队列:核心特性、栈的括号匹配 / 单调栈、队列的生产者消费者;
  4. 哈希表:核心原理、哈希冲突解决、常见使用场景;
  5. 树 / 二叉树:二叉树的遍历(前序 / 中序 / 后序 / 层序,递归 / 迭代);
    • 二叉搜索树、平衡二叉树、红黑树的核心特性;
    • 堆(大顶堆 / 小顶堆)、堆排序、TopK 问题解决;
  6. 图:邻接矩阵 / 邻接表、深度优先 / 广度优先遍历(可选);

基础算法:

  1. 排序算法:
    • 基础排序:冒泡 / 选择 / 插入排序(时间复杂度 O (n²));
    • 高级排序:快速排序 / 归并排序 / 堆排序(时间复杂度 O (nlogn));
    • 各排序的原理、稳定性、时间 / 空间复杂度、手写实现;
  2. 查找算法:顺序查找、二分查找(递归 / 迭代)、二分查找的变种;
  3. 递归与回溯:核心思想、适用场景(排列 / 组合 / 子集);
  4. 动态规划:核心思想(状态定义、状态转移方程、初始条件);
    • 常见题型:背包问题、最长递增子序列、最大子数组和、爬楼梯;
  5. 贪心算法:核心思想、与动态规划的区别、常见题型(活动选择、零钱兑换);
  6. 分治算法:核心思想、与递归的结合、常见题型(归并排序、快速排序);

刷题策略:

  1. 刷题平台:LeetCode、牛客网;
  2. 刷题重点:中等难度题目为主,覆盖数组、字符串、链表、二叉树、动态规划;
  3. 刷题原则:重思路、重手写、重复盘,不追求数量;
  4. 面试刷题:重点准备手写题(快排、二分查找、单例模式、生产者消费者);

3. 行为与职业规划

软实力准备:

  1. 团队协作:介绍在团队中的角色、如何配合团队完成任务、跨团队沟通的经验;
  2. 冲突处理:描述工作中遇到的团队冲突 / 技术分歧,如何解决的;
  3. 技术攻坚:介绍遇到的技术难题,如何通过学习、调研解决的(体现学习能力);
  4. 问题解决:描述工作中遇到的线上问题,如何排查与解决的(体现问题解决能力);
  5. 抗压能力:介绍在项目紧急上线 / 高压力场景下,如何完成工作的;

职业规划:

  1. 短期规划(1-2 年):技术深化(如 JVM 调优、分布式架构)、提升架构设计能力、参与核心项目;
  2. 长期规划(3-5 年):成为领域技术专家 / 架构师、带领小团队、主导核心项目的架构设计;
  3. 技术视野:对 Java 生态、微服务、云原生(Docker/K8s)、大数据等技术趋势的理解;

其他面试注意事项:

  1. 基础知识点扎实:避免基础问题答不上来,如 HashMap 原理、synchronized 底层;
  2. 表达逻辑清晰:回答问题分点说明,先结论后细节;
  3. 主动展示亮点:介绍自己的技术积累、开源项目、技术博客等;
  4. 反问环节:向面试官询问团队技术栈、项目规划、技术挑战等问题;
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐