Java 后端开发者复习 & 面试核心知识点大纲
·
目录
一、Java 核心基础
1. 语法与特性
核心概念:
- 面向对象(封装、继承、多态)与面向过程的设计思想对比;
- 接口与抽象类的设计场景抉择;
- 泛型擦除机制及常见问题(如泛型数组、类型转换);
- 注解生命周期(SOURCE/CLASS/RUNTIME)与自定义注解 + 注解处理器实战;
- 反射的性能开销、使用场景(Spring IoC/MyBatis 映射)及优化。
Java8+ 新特性:
- Lambda 表达式:
- 函数式接口(@FunctionalInterface)规范;
- 方法引用 / 构造器引用的使用。
- Stream API:
- 中间操作(无状态 / 有状态)、终止操作(短路 / 非短路)分类;
- 并行流的线程安全、性能瓶颈及适用场景。
- CompletableFuture:
- 异步任务编排(thenApply/thenCombine/allOf/anyOf);
- 异常处理(exceptionally/handle/whenComplete);
- 线程池指定(避免默认 ForkJoinPool)。
- Optional:
- NPE 规避最佳实践(拒绝
isPresent()+get()滥用); - 与 Stream 结合使用技巧。
- NPE 规避最佳实践(拒绝
- 枚举与序列化:
- 枚举的线程安全特性、枚举实现单例的优势;
- Serializable 接口作用、serialVersionUID 防序列化异常;
- 深 / 浅拷贝的实现(Cloneable 接口、序列化、BeanUtils)及场景选择。
2. 集合框架
核心容器:
- ArrayList/LinkedList:
- 底层结构(数组 / 双向链表);
- 扩容机制、随机访问 / 增删性能对比及适用场景。
- HashMap:
- 哈希算法、扩容机制(JDK1.7 vs 1.8);
- 哈希冲突解决(链表→红黑树阈值);
- JDK1.8 红黑树优化原理;
- HashTable/TreeMap/LinkedHashMap 特性及区别。
- ConcurrentHashMap:
- JDK1.7 分段锁(Segment)实现原理;
- JDK1.8 CAS+synchronized+Node 数组的实现演进;
- 高并发场景下的使用注意事项。
故障机制:
- 快速失败(fail-fast):
- 触发条件、底层原理(modCount 校验);
- 常见出现的容器场景。
- 安全失败(fail-safe):
- 实现原理(迭代集合副本);
- 性能损耗、适用的并发容器。
工具类实战:
- Guava 集合工具:Immutable 不可变集合、Multimap、BiMap;
- Guava 缓存构建器(CacheBuilder)的使用;
- Apache Commons Collections:CollectionUtils/MapUtils 核心方法实战。
3. I/O 与网络
I/O 模型:
- BIO(阻塞 IO):核心特点、适用场景(连接少且短连接);
- NIO(非阻塞 IO):核心特点、适用场景(高并发短连接);
- AIO(异步 IO):核心特点、适用场景(大文件传输 / 长连接);
- 三种模型的核心底层区别对比。
NIO 核心组件:
- Selector(多路复用器):事件监听(OP_READ/OP_WRITE)、工作机制;
- Channel(通道):FileChannel/SocketChannel/ServerSocketChannel 核心用法;
- ByteBuffer(缓冲区):核心方法(flip/clear/compact)、直接内存 vs 堆内存区别;
- 三者协同工作的完整流程。
零拷贝:
- Linux 下零拷贝的两种实现(mmap+write/transferTo);
- FileChannel.transferTo 方法的实际应用;
- 零拷贝在文件传输、消息队列中的性能提升原理。
网络编程:
- Socket/TCP 通信完整流程;
- TCP 粘包 / 拆包问题产生原因;
- 解决方案(定长包、分隔符、消息头 + 消息体)。
二、并发编程
1. 基础概念
线程基础:
- 线程四种创建方式及优缺点对比;
- 线程六大状态(NEW/RUNNABLE/BLOCKED/WAITING/TIMED_WAITING/TERMINATED);
- 状态之间的转换条件及触发场景;
- 线程优先级、守护线程的特性与使用。
线程安全:
- synchronized:
- 底层实现(对象监视器 Monitor);
- 锁升级流程(无锁→偏向锁→轻量级锁→重量级锁);
- 锁消除、锁粗化的 JVM 优化。
- volatile:
- 内存可见性、禁止指令重排的底层原理(内存屏障);
- 与 happens-before 原则的关联;
- 无法保证原子性的原因及解决办法。
死锁:
- 死锁产生的四大必要条件(互斥 / 占有且等待 / 不可剥夺 / 循环等待);
- 使用 jstack 命令排查死锁的实操步骤;
- 死锁的避免策略(破坏必要条件)。
线程通信:
- Object 类 wait/notify/notifyAll 的使用及注意事项;
- Condition(Lock 配套)的使用场景及与 wait/notify 的区别;
- 生产者 - 消费者模式的两种实现方案(wait/notify vs BlockingQueue)。
2. JUC 工具类
锁与同步器:
- ReentrantLock:
- 可重入性实现原理;
- 公平锁 / 非公平锁的底层区别及选型;
- 与 synchronized 的性能对比及适用场景。
- AQS(抽象队列同步器):
- 核心原理(CLH 队列、状态位 state);
- 独占锁 / 共享锁的实现区别。
- 常用同步器:
- CountDownLatch:使用场景、底层 AQS 实现;
- Semaphore:信号量原理、限流场景实战;
- CyclicBarrier:与 CountDownLatch 的区别、使用场景;
- Exchanger:线程间数据交换的使用场景。
线程池:
- ThreadPoolExecutor:
- 七大核心参数的含义及配置原则;
- 核心工作流程(核心线程→队列→非核心线程→拒绝)。
- 拒绝策略:
- 四种默认策略(AbortPolicy/CallerRunsPolicy/DiscardPolicy/DiscardOldestPolicy)的适用场景;
- 自定义拒绝策略的实现。
- 线程池调优:
- CPU 密集型、IO 密集型场景的参数配置公式;
- 常见的线程池创建方式(Executors)及弊端;
- 线程池的监控(任务数、完成数、异常数)。
3. 进阶主题
并发容器:
- ConcurrentSkipListMap:跳表结构、有序性特性、适用场景;
- CopyOnWriteArrayList/CopyOnWriteArraySet:写时复制原理、读多写少场景适配;
- BlockingQueue:ArrayBlockingQueue/LinkedBlockingQueue/DelayQueue 核心特性及使用场景;
- 各并发容器的线程安全实现原理对比。
原子类与 CAS:
- CAS 原理:
- 乐观锁机制、CPU 底层指令(cmpxchg)支持;
- CAS 的三大问题(ABA、循环时间长、只能保证单个变量原子性)。
- ABA 问题:产生原因、解决方案(AtomicStampedReference/AtomicMarkableReference);
- 原子类体系:
- 基本类型(AtomicInteger)、数组类型(AtomicIntegerArray);
- 引用类型(AtomicReference)、字段更新器(AtomicIntegerFieldUpdater);
- 原子累加器(LongAdder)与 AtomicLong 的性能对比及适用场景。
其他核心点:
- ThreadLocal:
- 实现原理(ThreadLocalMap、弱引用);
- 内存泄漏的原因及解决办法(手动 remove);
- 在框架中的使用场景(Spring 事务、MyBatis 分页)。
- 读写锁:
- ReentrantReadWriteLock:读写分离原理、锁降级特性;
- StampedLock:乐观读特性、与 ReentrantReadWriteLock 的性能对比。
三、JVM 与性能调优
1. 内存管理
运行时数据区:
- 堆:
- 新生代(Eden/S0/S1)、老年代的划分及比例;
- 对象创建的完整流程(分配内存→初始化→引用赋值);
- 对象的内存布局(对象头、实例数据、对齐填充)。
- 虚拟机栈 / 本地方法栈:
- 栈帧结构(局部变量表 / 操作数栈 / 动态链接 / 返回地址);
- 栈溢出(StackOverflowError)、栈内存配置;
- 方法区 / 元空间:
- JDK8 元空间替代永久代的原因;
- 元空间的内存来源(本地内存)、配置参数;
- 元空间溢出的场景及解决。
- 程序计数器:核心作用、唯一不会出现 OOM 的区域。
垃圾回收:
- 垃圾判定算法:
- 引用计数法的弊端(循环引用);
- 可达性分析算法的核心(GC Roots、引用链)。
- 引用类型:强引用、软引用、弱引用、虚引用的特性及使用场景;
- 垃圾回收算法:
- 标记 - 清除:原理、优缺点(内存碎片);
- 标记 - 整理:原理、优缺点(无碎片,耗时);
- 复制算法:原理、优缺点(高效,内存损耗);
- 各算法的适用内存区域。
- 垃圾收集器:
- 新生代收集器:Serial/Parallel/ParNew 的特性及对比;
- 老年代收集器:SerialOld/CMS/ParallelOld 的特性及对比;
- 混合收集器:G1 的 Region 分区模型、Mixed GC 概念;
- 低延迟收集器:ZGC/Shenandoah 的核心特性、适用场景;
- GC 触发条件:
- Minor GC:触发条件、执行过程;
- Full GC:触发条件(老年代满、元空间满、GC 失败等)、对应用的影响;
- Mixed GC:G1 专属,触发条件及执行过程。
类加载机制:
- 类加载的完整流程(加载→链接→初始化);
- 链接阶段:验证、准备、解析的核心工作;
- 初始化阶段的触发条件(主动使用 / 被动使用);
- 类加载器:
- 启动类加载器、扩展类加载器、应用程序类加载器的作用;
- 自定义类加载器的实现步骤;
- 双亲委派模型:
- 工作原理、设计优势;
- 打破双亲委派的场景(JDBC/OSGi/Spring)及实现方式。
JMM(Java 内存模型):
- 核心规范:主内存与工作内存的划分;
- 八大原子操作:内存间数据交互的规则;
- happens-before 规则:核心规则及实际应用;
- 指令重排与数据可见性问题的解决。
2. 常用工具
命令行工具:
- jstack:排查死锁、线程阻塞、线程状态的实操命令;
- jmap:生成堆转储快照、查看内存使用、查询大对象的命令;
- jstat:实时监控 GC 指标(垃圾回收次数、耗时、内存占用)的命令;
- jcmd:综合命令,替代 jps、实现 GC 触发、查看 JVM 参数;
- jinfo:查看 / 修改 JVM 运行时参数的实操。
实战分析工具:
- Arthas:
- 线上问题诊断核心命令(jad 反编译、watch 监控方法、trace 追踪调用链);
- stack 查看方法调用栈、tt 记录方法执行快照;
- MAT(Memory Analyzer Tool):
- 堆快照的导入与分析;
- 内存泄漏定位、大对象分析、支配树 / 直方图的使用;
- VisualVM:JVM 监控、线程分析、GC 日志分析、插件扩展。
3. 调优实战
GC 日志分析:
- GC 日志的开启参数(-XX:+PrintGCDetails/-XX:+PrintGCTimeStamps/-Xloggc);
- Minor GC/Full GC/G1 GC 日志的关键指标解读(停顿时间、回收前后内存、GC 原因);
- 日志分析的核心关注点(停顿时间、GC 频率、内存占用趋势)。
JVM 调优参数:
- 堆内存配置:-Xms(初始堆)、-Xmx(最大堆)、-Xmn(新生代);
- 新生代比例:-XX:NewRatio、-XX:SurvivorRatio;
- GC 收集器指定:-XX:+UseG1GC、-XX:+UseCMSGC 等;
- 元空间配置:-XX:MetaspaceSize、-XX:MaxMetaspaceSize;
- 其他核心参数:-XX:+HeapDumpOnOutOfMemoryError(OOM 时生成堆快照)。
问题排查与调优:
- OOM 异常排查:
- 堆溢出、栈溢出、元空间溢出、直接内存溢出的场景;
- 完整排查流程(日志分析→工具定位→代码优化);
- 内存泄漏:
- 常见原因(静态集合、未关闭资源、ThreadLocal 未 remove);
- 定位方法(MAT 分析 + Arthas 监控);
- GC 调优思路:
- GC 频繁、停顿时间长的常见原因;
- 调优目标(低停顿 / 高吞吐)与收集器选型;
- 调优步骤(监控→分析→参数调整→验证)。
四、数据库
1. MySQL
索引与优化:
- 索引原理:
- B + 树索引结构(有序、叶子节点链表、磁盘 IO 优化);
- 哈希索引、全文索引、空间索引的特性及适用场景;
- 聚簇索引 / 非聚簇索引的区别(InnoDB vs MyISAM)。
- 索引设计与优化:
- 最左前缀匹配原则、索引失效的常见场景(like % xxx、函数操作字段);
- 回表、覆盖索引、索引下推的原理及优化应用;
- 联合索引的设计原则(区分度高的字段在前)。
- SQL 优化:
- EXPLAIN 命令解读(id/select_type/table/type/key/rows/Extra 字段);
- 慢查询日志的开启、分析与优化;
- JOIN 优化(小表驱动大表)、子查询优化、分页查询优化。
事务与锁:
- 事务特性:ACID 的底层实现原理;
- 事务隔离级别:
- 四大隔离级别(读未提交 / 读已提交 / 可重复读 / 串行化)的定义;
- 脏读、不可重复读、幻读的产生及解决;
- InnoDB 默认隔离级别(可重复读)的实现;
- MVCC(多版本并发控制):
- 核心原理(undo log / 版本链 / Read View);
- InnoDB 实现可重复读的底层逻辑;
- 锁机制:
- 行锁、表锁的特性及适用场景;
- 意向锁(意向共享锁 / 意向排他锁)的作用;
- 间隙锁、Next-Key Lock 的产生原因及解决幻读的原理;
- 死锁的排查(information_schema.innodb_locks)与避免。
进阶机制:
- 存储引擎:
- InnoDB 与 MyISAM 的核心区别(事务、锁、索引、崩溃恢复);
- InnoDB 的核心组件(缓冲池、redo log/undo log、自适应哈希索引);
- 主从复制:
- binlog 日志格式(STATEMENT/ROW/MIXED)及优缺点;
- 主从复制的完整流程(主库 binlog→从库 IO 线程→中继日志→SQL 线程);
- 复制延迟的原因与优化方案;
- 分库分表:
- 垂直分表、水平分表的适用场景;
- 分库分表带来的问题(分布式 ID、分布式事务、跨库 JOIN);
- Sharding-JDBC 的核心使用(分片策略、读写分离);
- 其他:分区表的使用、表碎片的整理、大表优化策略。
2. Redis
数据类型与使用:
- 基础数据类型:
- String:动态字符串底层、常用命令、适用场景(缓存、计数器);
- Hash:哈希表底层、常用命令、适用场景(存储对象);
- List:双向链表底层、常用命令、适用场景(消息队列、排行榜);
- Set:哈希表底层、常用命令、适用场景(去重、交集并集);
- Zset:跳表 + 哈希表底层、常用命令、适用场景(有序排行榜);
- 高级数据类型:
- BitMap:位图原理、适用场景(签到、统计);
- HyperLogLog:基数统计原理、适用场景(UV 统计);
- Geo:地理位置原理、适用场景(附近的人);
- 各数据类型的时间复杂度、常用命令优化。
持久化与高可用:
- 持久化机制:
- RDB(快照):触发机制(手动 / 自动)、原理、优缺点;
- AOF(追加日志):触发机制、重写机制、原理、优缺点;
- 混合持久化的配置与优势;
- 持久化方案的选型建议;
- 主从复制:
- 全量复制、增量复制的触发条件及流程;
- 主从复制的原理、数据同步保障;
- 哨兵模式(Sentinel):
- 核心功能(故障检测、自动故障转移、主从切换);
- 哨兵集群的工作原理;
- 集群模式(Cluster):
- Slot 槽分片原理(16384 个槽);
- 主从复制、节点间通信、重定向机制;
- 集群的扩容与缩容。
缓存问题与优化:
- 经典缓存问题:
- 缓存穿透:产生原因、解决方案(布隆过滤器、空值缓存);
- 缓存击穿:产生原因、解决方案(互斥锁、热点数据永不过期);
- 缓存雪崩:产生原因、解决方案(随机过期时间、集群部署、熔断降级);
- 缓存策略:
- 缓存更新策略(Cache Aside/Write Through/Write Back)及选型;
- 缓存一致性的保障(最终一致性、双删策略);
- 缓存预热、缓存降级的实现方案;
- 性能优化:
- Redis 序列化方案(StringRedisSerializer vs Jackson2JsonRedisSerializer);
- 大 key、热 key 的识别与解决办法;
- Redis 连接池的配置优化(Jedis/Lettuce);
- 其他:Redis 的单线程模型、IO 多路复用原理、并发能力保障。
五、开发框架
1. Spring 核心
IoC/DI(控制反转 / 依赖注入):
- IoC 与 DI 的本质含义、Spring IoC 容器的核心作用;
- BeanDefinition 的加载与解析流程;
- Bean 的生命周期:实例化→属性填充→初始化→销毁;
- 初始化阶段:@PostConstruct、InitializingBean、自定义 init-method;
- 销毁阶段:@PreDestroy、DisposableBean、自定义 destroy-method;
- 循环依赖:
- 产生原因、Spring 的解决办法(三级缓存);
- 构造器注入循环依赖的解决;
- Bean 的作用域:singleton/prototype/request/session 的特性及使用;
- 依赖注入的方式:构造器注入、setter 注入、字段注入的优缺点及选型。
AOP(面向切面编程):
- AOP 核心概念:切面(Aspect)、切点(Pointcut)、通知(Advice)、连接点、织入;
- AOP 的实现方式:JDK 动态代理(基于接口)vs CGLIB 代理(基于子类);
- Spring AOP 的核心执行流程;
- @Aspect 注解的使用:
- @Pointcut 切点表达式(execution/within/annotation 等);
- 通知类型(@Before/@After/@AfterReturning/@AfterThrowing/@Around);
- Spring AOP 与 AspectJ 的区别及整合使用。
事务管理:
- 事务的核心接口:PlatformTransactionManager、TransactionDefinition、TransactionStatus;
- 声明式事务:
- @Transactional 注解的原理(AOP 动态代理);
- 事务传播行为(PROPAGATION_REQUIRED/PROPAGATION_REQUIRES_NEW 等 7 种)的使用场景;
- 事务隔离级别、超时时间、只读属性的配置;
- 编程式事务:TransactionTemplate 的使用场景;
- 事务失效的常见场景:
- 非 public 方法、异常被捕获、多线程调用;
- 数据源未配置事务管理器、传播行为配置错误;
- 分布式事务:Spring 对分布式事务的初步支持(JTA)。
2. Spring Boot
核心原理:
- @SpringBootApplication 注解:
- 三大核心注解(@SpringBootConfiguration/@EnableAutoConfiguration/@ComponentScan)的作用;
- 扫描包的规则及自定义扫描范围;
- 自动配置:
- @EnableAutoConfiguration 的核心原理(META-INF/spring.factories);
- 自动配置类的条件注解(@ConditionalOnClass/@ConditionalOnMissingBean/@ConditionalOnProperty);
- 禁用指定自动配置类的方法;
- 起步依赖(Starter):核心原理、依赖传递与版本管理。
实战进阶:
- 自定义 Starter:
- 命名规范、开发完整流程;
- 自动配置类的编写、spring.factories 配置;
- Spring Boot 配置:
- 配置文件类型(properties/yml/yaml)、配置优先级;
- 自定义配置绑定(@ConfigurationProperties/@Value);
- 多环境配置(profile)、配置外部化;
- 监控与管理:
- Spring Boot Actuator 的使用(健康检查、指标收集、接口暴露);
- 自定义健康检查指标;
- 其他:Spring Boot 的启动流程、内嵌容器(Tomcat/Jetty/Undertow)的配置与切换。
3. ORM 框架(MyBatis)
核心配置与组件:
- MyBatis 核心配置文件:configuration、environment、mapper、settings 等标签;
- 核心组件及作用:
- SqlSessionFactory:创建 SqlSession 的工厂,单例设计;
- SqlSession:与数据库的会话,非线程安全;
- MapperProxy:动态代理实现 Mapper 接口的核心;
- Executor:执行器(Simple/Reuse/Batch)的作用;
- #{} 与 ${} 的区别:预编译防 SQL 注入、字符串替换的使用场景;
- 别名配置、类型别名处理器的使用。
映射与 SQL 编写:
- 实体与表的映射:@Mapper 注解、xml 映射文件的编写;
- 结果映射:resultMap 的核心使用(解决字段名与属性名不一致、关联查询);
- 关联查询:
- 一对一关联(association)、一对多关联(collection);
- 懒加载的配置与实现原理;
- 动态 SQL:if/choose/when/otherwise/foreach/trim/where/set 标签的编写;
- 分页查询:RowBounds、PageHelper 分页插件的原理与使用。
缓存机制:
- 一级缓存:SqlSession 级别,默认开启,缓存失效场景;
- 二级缓存:Mapper 级别,手动开启(@CacheNamespace),缓存实现;
- 二级缓存的使用注意事项(序列化、关联查询缓存);
- MyBatis 与第三方缓存(Redis)的整合;
进阶使用:
- 自定义 TypeHandler:类型处理器的实现与配置;
- 插件开发(Interceptor):核心原理(四大核心对象拦截)、分页插件自定义实现;
- 批量操作:BatchExecutor、foreach 批量插入 / 更新的优化;
- MyBatis-Plus:核心功能(CRUD 封装、分页、条件构造器)、与原生 MyBatis 的整合。
六、分布式基础
1. 微服务核心
服务注册与发现:
- Eureka:
- 核心原理(AP 原则、服务注册 / 发现 / 续约);
- 自我保护机制的触发与作用;
- Eureka 集群的搭建;
- Nacos:
- CP+AP 模式的切换、与 Eureka 的区别;
- 服务注册 / 发现、心跳检测的原理;
- 服务发现的两种模式:客户端发现、服务端发现。
配置中心:
- 配置中心的核心功能:动态配置、配置灰度发布、配置加密;
- Apollo:核心架构(配置服务、管理服务、客户端)、配置加载与热更新;
- Nacos 配置中心:配置发布、监听、持久化的原理;
- 配置中心的使用场景:多环境配置、动态开关、服务配置统一管理。
服务网关:
- Spring Cloud Gateway:
- 核心架构(路由定位、过滤器链);
- 路由配置(静态路由、动态路由)、断言(Predicate)的使用;
- 过滤器(GatewayFilter/GlobalFilter)的编写与使用;
- Zuul 1.x/2.x:核心原理、与 Gateway 的区别;
- 网关的核心功能:鉴权、限流、日志记录、跨域处理、路由转发;
- 限流实现:令牌桶 / 漏桶算法、Redis+Lua 实现网关限流。
服务治理:
- 负载均衡:
- 核心原理、常见策略(轮询、随机、权重、最少活跃数);
- Ribbon、Nacos LoadBalancer 的使用与自定义策略;
- 熔断与降级:
- 熔断的核心原理(打开 / 半开 / 关闭状态);
- Resilience4j、Sentinel 的核心功能与使用;
- 降级的场景(服务不可用、流量高峰、依赖服务故障);
- 服务调用:
- Feign:声明式远程调用,核心原理(动态代理)、自定义配置;
- OpenFeign:与 Feign 的区别、核心功能扩展;
- 链路追踪:Sleuth+Zipkin/SkyWalking 的核心原理、分布式链路追踪的实现。
2. 消息队列
Kafka:
- 核心架构与概念:Producer、Consumer、Broker、Topic、Partition、Replica;
- 高吞吐的核心原因:
- 顺序读写、页缓存、零拷贝、批量发送;
- 分区机制、数据压缩;
- 生产者(Producer):
- 消息发送流程(同步 / 异步)、分区策略(自定义 / 默认);
- 生产者确认(acks 参数)、消息重试机制;
- 消费者(Consumer):
- 消费者组(Consumer Group)的原理、Rebalance 机制(触发条件、过程);
- offset 的提交方式(自动 / 手动)、offset 的持久化;
- 消息的消费模式(点对点、发布订阅);
- 高可用与可靠性:
- ISR 机制(同步副本)、Leader 选举;
- 消息丢失、重复消费的解决办法;
- 其他:Topic 的分区与副本配置、日志清理策略(删除 / 压缩)。
RabbitMQ:
- 核心架构与概念:Producer、Consumer、Broker、Exchange、Queue、Binding;
- 交换机类型及路由模式:
- Direct Exchange:直连路由,点对点场景;
- Topic Exchange:通配符路由,发布订阅场景;
- Fanout Exchange:广播路由,多队列同步场景;
- Headers Exchange:头部匹配,小众场景;
- 消息投递与消费:
- 消息的投递流程(生产者→交换机→队列→消费者);
- 消费者的消息确认机制(手动 ACK/AUTOACK);
- 可靠性保障:
- 生产者确认(Confirm 模式)、返回模式(Return);
- 消息持久化(Exchange/Queue/Message);
- 消费者手动 ACK、死信队列(DLQ)的使用;
- 高级特性:
- 延迟队列的实现(死信队列 + TTL);
- 消息限流、消息优先级;
- 集群模式(普通集群、镜像集群)的搭建与原理;
- 消息丢失、重复消费、消息堆积的解决办法。
3. 分布式理论与实践
分布式理论:
- CAP 理论:一致性(C)、可用性(A)、分区容错性(P)的定义;
- 三者不可兼得,分布式场景下的取舍原则(保证 P,权衡 C/A);
- BASE 理论:基本可用、软状态、最终一致性,CAP 理论的延伸;
- 分布式事务:
- 分布式事务的产生原因(跨库 / 跨服务);
- 常见解决方案:2PC(两阶段提交)、TCC(补偿事务)、SAGA(长事务)、本地消息表、可靠消息最终一致性;
- 各方案的优缺点及适用场景;
分布式实战方案:
- 分布式 ID:
- 常见生成方案:UUID、数据库自增、雪花算法、Redis 自增、美团 Leaf;
- 各方案的优缺点(唯一性、有序性、性能、分布式)及选型;
- 雪花算法的核心(时间戳 + 机器 ID + 序列号)、时钟回拨问题的解决;
- 分布式锁:
- 核心要求:互斥、超时释放、可重入、高可用;
- Redis 实现:setnx+expire、Redlock 算法、Lua 脚本保证原子性;
- ZooKeeper 实现:临时顺序节点、Watcher 机制;
- 两种实现的优缺点及选型;
- 分布式限流:
- 限流的核心指标(QPS、并发数);
- 常见算法:令牌桶、漏桶、计数器;
- 实现层面:网关层限流、应用层限流(Redis+Lua);
- 分布式会话:
- 会话共享的问题、常见解决方案(Redis/Token/JWT);
- JWT 的原理、优缺点、使用场景;
- Redis 实现分布式会话的核心步骤。
七、系统设计与工程能力
1. 设计原则与模式
SOLID 设计原则:
- 单一职责原则:类 / 方法的职责单一,避免职责耦合;
- 开闭原则:对扩展开放,对修改关闭;
- 里氏替换原则:子类可替换父类,不改变原有逻辑;
- 接口隔离原则:细化接口,避免实现类依赖无用方法;
- 依赖倒置原则:依赖抽象,不依赖具体实现;
- 各原则的落地实践与在框架中的应用。
设计模式:
创建型模式
- 单例模式:
- 饿汉式、懒汉式(双重检查锁 + volatile)、静态内部类、枚举;
- 各实现的线程安全性、优缺点及选型;
- 工厂模式:
- 简单工厂模式:核心实现、适用场景;
- 工厂方法模式:接口 + 实现,解耦产品与创建;
- 抽象工厂模式:多产品族、多产品等级,适用场景;
- 建造者模式:核心实现、与工厂模式的区别、适用场景(复杂对象创建);
结构型模式
- 代理模式:静态代理、动态代理(JDK/CGLIB)、在 Spring AOP 中的应用;
- 装饰器模式:核心实现、与代理模式的区别、在 IO 流中的应用;
- 适配器模式:类适配器、对象适配器、接口适配器,适用场景(接口兼容);
- 享元模式:核心实现、池化思想(连接池、线程池)的应用;
- 组合模式:核心实现、适用场景(树形结构);
行为型模式
- 观察者模式:核心实现、发布 - 订阅模型、在 Spring 事件监听中的应用;
- 策略模式:核心实现、与简单工厂的结合、适用场景(算法动态切换);
- 模板方法模式:核心实现、钩子方法、在框架中的应用(Spring JdbcTemplate);
- 责任链模式:核心实现、在网关过滤器、拦截器中的应用;
- 迭代器模式:核心实现、在集合框架中的应用;
- 命令模式:核心实现、适用场景(请求封装、撤销 / 重做);
2. 高并发系统设计
核心设计策略:
- 缓存优化:多级缓存(本地缓存 + Caffeine+Redis)、缓存穿透 / 击穿 / 雪崩解决;
- 异步化:消息队列、线程池、CompletableFuture 实现异步处理;
- 读写分离:主库写、从库读、中间件(Sharding-JDBC)实现;
- 分库分表:水平分表 / 垂直分表、分片策略、分布式 ID;
- 负载均衡:Nginx/LVS、服务端负载均衡、客户端负载均衡;
- 限流降级:网关限流、应用层限流、熔断降级、服务隔离;
- 队列削峰:消息队列(Kafka/RabbitMQ)实现流量削峰;
经典系统设计场景:
- 短链系统:
- 核心需求:长链转短链、短链跳转、高可用、高并发;
- 核心设计:发号器策略(数据库自增 / 雪花算法)、哈希算法(避免冲突)、短链映射存储(Redis/MySQL);
- 优化点:缓存预热、短链过期、分布式部署;
- 秒杀系统:
- 核心痛点:高并发、超卖、流量高峰、接口防刷;
- 核心设计:流量削峰(网关限流 / 消息队列)、库存扣减(Redis 预扣 + 数据库最终一致性)、热点数据隔离;
- 优化点:防重复提交(分布式锁 / 令牌)、静态资源 CDN、服务降级;
- 订单系统:
- 核心需求:订单创建、库存扣减、支付回调、订单超时关闭;
- 核心设计:幂等性设计(唯一订单号 / 令牌)、分布式事务(TCC / 本地消息表)、延迟队列(订单超时);
- 限流系统:
- 核心需求:按 IP / 接口限流、高可用、低延迟;
- 核心设计:令牌桶 / 漏桶算法、Redis+Lua 实现、网关层集成;
3. 工程能力与运维
开发工具与协作:
- Git:
- 核心命令(clone/commit/push/pull/branch/merge/rebase);
- Git Flow 工作流(master/develop/feature/hotfix/release 分支);
- 冲突解决、cherry-pick 的使用、标签管理;
- 构建工具:
- Maven:依赖传递规则、依赖冲突解决(exclusions/force);
- Maven 生命周期、插件配置、私服(Nexus)的使用;
- Gradle:核心特点、与 Maven 的区别(可选);
- Linux 基础:
- 核心命令:grep/awk/sed(日志查询)、ps/top/jps(进程查询);
- netstat/ss(网络查询)、df/du(磁盘查询)、kill(进程杀死);
- shell 脚本编写:批量启停服务、日志切割、定时任务(crontab);
代码质量保障:
- 单元测试:JUnit5、Mockito 模拟测试、单元测试覆盖率;
- 集成测试 / 接口测试:PostMan、Swagger/SpringDoc、JMeter;
- 代码规范:Alibaba Java 开发手册、代码注释规范;
- 静态代码检查:SonarQube、IDEA 代码检查插件;
- 代码重构:提取方法、封装字段、消除重复代码、简化条件表达式;
监控与部署:
- 应用监控:
- APM 工具:SkyWalking/Pinpoint/Prometheus 的核心功能;
- 链路追踪、性能指标监控(QPS、响应时间、错误率);
- 日志收集:ELK 栈(Elasticsearch+Logstash+Kibana)、日志规范、日志分级;
- 容器化与编排:
- Docker:镜像构建、容器创建、Dockerfile 编写、镜像仓库;
- Kubernetes(K8s):核心概念(Pod/Service/Deployment)、简单部署(可选);
- 持续集成 / 持续部署(CI/CD):
- Jenkins 的核心使用、流水线(Pipeline)编写;
- 自动化构建、测试、部署;
- 发布策略:蓝绿发布、灰度发布(金丝雀发布)、滚动发布的原理及适用场景;
八、面试专项准备
1. 项目阐述
STAR 法则落地:
- Situation:清晰描述项目背景、业务场景、项目规模(用户量、QPS、数据量);
- Task:明确自己在项目中的核心职责、承担的任务、面临的挑战;
- Action:详细说明解决问题的具体行动、技术选型的原因、核心实现步骤;
- Result:量化项目成果(性能提升 XX%、QPS 从 XX 提升至 XX、故障率下降 XX%);
重点准备方向:
- 项目的核心架构设计:画出架构图,说明各组件的作用、技术选型的考量;
- 项目中的技术难点:如高并发、数据一致性、性能瓶颈等;
- 问题排查与解决:完整描述问题现象→分析原因→制定方案→落地实现→复盘优化的过程;
- 技术优化点:如 SQL 优化、JVM 调优、缓存优化、接口性能优化等,说明优化前后的对比;
- 分布式场景处理:分布式 ID、分布式锁、分布式事务的实现与选型;
2. 算法与数据结构
基础数据结构:
- 数组:核心特性、增删改查的时间复杂度、双指针 / 滑动窗口技巧;
- 链表:单链表 / 双向链表 / 循环链表、反转 / 环检测 / 合并等核心操作;
- 栈 / 队列:核心特性、栈的括号匹配 / 单调栈、队列的生产者消费者;
- 哈希表:核心原理、哈希冲突解决、常见使用场景;
- 树 / 二叉树:二叉树的遍历(前序 / 中序 / 后序 / 层序,递归 / 迭代);
- 二叉搜索树、平衡二叉树、红黑树的核心特性;
- 堆(大顶堆 / 小顶堆)、堆排序、TopK 问题解决;
- 图:邻接矩阵 / 邻接表、深度优先 / 广度优先遍历(可选);
基础算法:
- 排序算法:
- 基础排序:冒泡 / 选择 / 插入排序(时间复杂度 O (n²));
- 高级排序:快速排序 / 归并排序 / 堆排序(时间复杂度 O (nlogn));
- 各排序的原理、稳定性、时间 / 空间复杂度、手写实现;
- 查找算法:顺序查找、二分查找(递归 / 迭代)、二分查找的变种;
- 递归与回溯:核心思想、适用场景(排列 / 组合 / 子集);
- 动态规划:核心思想(状态定义、状态转移方程、初始条件);
- 常见题型:背包问题、最长递增子序列、最大子数组和、爬楼梯;
- 贪心算法:核心思想、与动态规划的区别、常见题型(活动选择、零钱兑换);
- 分治算法:核心思想、与递归的结合、常见题型(归并排序、快速排序);
刷题策略:
- 刷题平台:LeetCode、牛客网;
- 刷题重点:中等难度题目为主,覆盖数组、字符串、链表、二叉树、动态规划;
- 刷题原则:重思路、重手写、重复盘,不追求数量;
- 面试刷题:重点准备手写题(快排、二分查找、单例模式、生产者消费者);
3. 行为与职业规划
软实力准备:
- 团队协作:介绍在团队中的角色、如何配合团队完成任务、跨团队沟通的经验;
- 冲突处理:描述工作中遇到的团队冲突 / 技术分歧,如何解决的;
- 技术攻坚:介绍遇到的技术难题,如何通过学习、调研解决的(体现学习能力);
- 问题解决:描述工作中遇到的线上问题,如何排查与解决的(体现问题解决能力);
- 抗压能力:介绍在项目紧急上线 / 高压力场景下,如何完成工作的;
职业规划:
- 短期规划(1-2 年):技术深化(如 JVM 调优、分布式架构)、提升架构设计能力、参与核心项目;
- 长期规划(3-5 年):成为领域技术专家 / 架构师、带领小团队、主导核心项目的架构设计;
- 技术视野:对 Java 生态、微服务、云原生(Docker/K8s)、大数据等技术趋势的理解;
其他面试注意事项:
- 基础知识点扎实:避免基础问题答不上来,如 HashMap 原理、synchronized 底层;
- 表达逻辑清晰:回答问题分点说明,先结论后细节;
- 主动展示亮点:介绍自己的技术积累、开源项目、技术博客等;
- 反问环节:向面试官询问团队技术栈、项目规划、技术挑战等问题;
更多推荐




所有评论(0)