Appearance
终极总结
Java 知识体系终极总结,以思维导图风格组织,涵盖 Java 核心、并发、JVM、框架、数据库和分布式六大领域。
一、Java 核心
1.1 基础语法
| 知识点 | 核心内容 | 重要程度 |
|---|---|---|
| 数据类型 | 8 种基本类型 + 引用类型,自动装箱拆箱,Integer 缓存(-128~127) | ★★★★ |
| String | 不可变(final),字符串常量池,StringBuilder/Buffer 区别 | ★★★★★ |
| Object 方法 | equals/hashCode 契约,toString,clone(浅拷贝 vs 深拷贝) | ★★★★★ |
| 关键字 | static,final(类/方法/变量),this,super,abstract,transient | ★★★★ |
| 运算符 | == vs equals,& vs &&,>> vs >>>,三目运算符 | ★★★ |
| 控制流 | if-else,switch(支持 String/枚举),for-each,卫语句 | ★★★ |
1.2 面向对象
| 知识点 | 核心内容 | 重要程度 |
|---|---|---|
| 三大特性 | 封装(访问控制),继承(extends,单继承),多态(重写+重载) | ★★★★★ |
| 抽象类 vs 接口 | 抽象类(is-a,模板),接口(like-a,契约),JDK 8+ default 方法 | ★★★★★ |
| 内部类 | 成员内部类,静态内部类,局部内部类,匿名内部类,Lambda | ★★★★ |
| SOLID 原则 | 单一职责,开闭原则,里氏替换,接口隔离,依赖倒置 | ★★★★ |
1.3 异常
| 知识点 | 核心内容 |
|---|---|
| 异常体系 | Throwable -> Error(不可恢复) + Exception(可恢复) |
| 分类 | 受检异常(Checked, 编译时) vs 非受检异常(RuntimeException, 运行时) |
| 处理 | try-catch-finally,try-with-resources(AutoCloseable),throws |
| 最佳实践 | 不吞异常,具体异常,早抛晚捕,异常转换,finally 不 return |
1.4 集合框架
| 类型 | 接口 | 实现类 | 核心特性 |
|---|---|---|---|
| List | List | ArrayList | 动态数组,O(1)随机访问,尾部插入快 |
| List | List | LinkedList | 双向链表,O(1)头尾插入 |
| Set | Set | HashSet | 基于 HashMap,O(1)查找,无序 |
| Set | Set | LinkedHashSet | 保持插入顺序 |
| Set | Set | TreeSet | 红黑树,有序,O(log n) |
| Map | Map | HashMap | 数组+链表+红黑树,O(1) |
| Map | Map | LinkedHashMap | 保持插入顺序,LRU 缓存 |
| Map | Map | TreeMap | 红黑树,键有序 |
| Map | Map | ConcurrentHashMap | 线程安全,CAS+synchronized |
HashMap 核心原理:数组+链表+红黑树,负载因子 0.75,扩容 2 倍,链表长度 >=8 且数组 >=64 时转红黑树。
如何选用集合:
- 需要键值对 -> Map
- 需要去重 -> Set
- 需要顺序 -> List
- 需要线程安全 -> ConcurrentHashMap / CopyOnWriteArrayList / Collections.synchronizedXxx
1.5 IO 与序列化
| 知识点 | 核心内容 |
|---|---|
| 分类 | 字节流(InputStream/OutputStream) vs 字符流(Reader/Writer) |
| 装饰器模式 | BufferedInputStream,DataInputStream,层层包装 |
| NIO | Buffer,Channel,Selector,IO 多路复用 |
| 序列化 | Serializable,transient,serialVersionUID,Externalizable |
| JSON | Jackson,Gson,Fastjson(安全漏洞注意) |
1.6 泛型
| 知识点 | 核心内容 |
|---|---|
| 类型擦除 | 编译时检查,运行时擦除(可通过反射绕过) |
| 通配符 | ?(无界),? extends T(上界,Producer),? super T(下界,Consumer) |
| PECS 原则 | Producer Extends,Consumer Super |
| 泛型方法 | <T> T method(T t),类型推断 |
| 限制 | 不能是基本类型,不能实例化,不能 instanceof |
1.7 注解与反射
| 知识点 | 核心内容 |
|---|---|
| 元注解 | @Target,@Retention,@Documented,@Inherited,@Repeatable |
| 常用注解 | @Override,@Deprecated,@SuppressWarnings,@FunctionalInterface |
| 反射 | Class,Field,Method,Constructor,setAccessible,动态代理 |
| 应用 | Spring 依赖注入,ORM 映射,JUnit 测试,AOP |
二、并发编程
2.1 基础知识
| 知识点 | 核心内容 |
|---|---|
| 线程 vs 进程 | 进程是资源分配单位,线程是 CPU 调度单位,共享堆和方法区 |
| 线程生命周期 | NEW -> RUNNABLE -> BLOCKED/WAITING/TIMED_WAITING -> TERMINATED |
| 线程创建 | Thread,Runnable,Callable(有返回值),Future/FutureTask |
| 线程方法 | start()vs run(),sleep()vs wait(),join(),yield(),interrupt() |
2.2 锁机制
| 锁类型 | 核心内容 | 重要程度 |
|---|---|---|
| synchronized | 偏向锁 -> 轻量级锁 -> 重量级锁(锁升级),对象头 Mark Word | ★★★★★ |
| Lock 接口 | ReentrantLock(可重入),公平锁/非公平锁,Condition 条件变量 | ★★★★★ |
| ReadWriteLock | ReentrantReadWriteLock,读共享写互斥,锁降级 | ★★★★ |
| volatile | 可见性,禁止指令重排(内存屏障),不保证原子性 | ★★★★★ |
| CAS | Compare And Swap,Unsafe 类,ABA 问题(AtomicStampedReference) | ★★★★★ |
| AQS | AbstractQueuedSynchronizer,CLH 队列,state 状态,模板方法 | ★★★★ |
2.3 JUC 工具类
| 分类 | 工具类 | 用途 |
|---|---|---|
| 原子类 | AtomicInteger/AtomicLong/AtomicReference | 无锁原子操作 |
| 集合 | ConcurrentHashMap | 线程安全 Map |
| 集合 | CopyOnWriteArrayList | 读写分离 List |
| 集合 | BlockingQueue(Array/Linked) | 阻塞队列,生产者-消费者 |
| 同步器 | CountDownLatch | 等待多个线程完成 |
| 同步器 | CyclicBarrier | 线程互相等待,可复用 |
| 同步器 | Semaphore | 信号量,限流 |
| 同步器 | Exchanger | 线程间交换数据 |
| 工具 | ThreadLocal | 线程本地变量,用完必须 remove() |
2.4 线程池
| 知识点 | 核心内容 |
|---|---|
| 核心参数 | corePoolSize,maxPoolSize,keepAliveTime,workQueue,threadFactory,handler |
| 执行流程 | 核心线程 -> 队列 -> 最大线程 -> 拒绝策略 |
| 拒绝策略 | AbortPolicy(抛异常),CallerRunsPolicy(调用者执行),DiscardPolicy(丢弃),DiscardOldestPolicy(丢弃最早) |
| 常用线程池 | newFixedThreadPool,newCachedThreadPool,newSingleThreadExecutor,newScheduledThreadPool |
| 最佳实践 | 不用 Executors 创建(队列无界 OOM),用 ThreadPoolExecutor 构造,设置线程名称,监控 |
三、JVM
3.1 内存结构
| 区域 | 线程 | 存储内容 | GC | 异常 |
|---|---|---|---|---|
| 程序计数器 | 私有 | 字节码行号 | 不涉及 | 无 |
| 虚拟机栈 | 私有 | 栈帧(局部变量表,操作数栈) | 不涉及 | StackOverflowError |
| 本地方法栈 | 私有 | Native 方法 | 不涉及 | StackOverflowError |
| 堆 | 共享 | 对象实例 | 主要 GC 区域 | OutOfMemoryError |
| 元空间(JDK 8+) | 共享 | 类信息,常量池,方法数据 | 可配置 | OutOfMemoryError |
堆的分代:新生代(Eden 80% + S0 10% + S1 10%) -> 老年代,Minor GC / Major GC / Full GC。
3.2 垃圾回收
| 知识点 | 核心内容 |
|---|---|
| 判断存活 | 引用计数法(有循环引用问题),可达性分析(GC Roots) |
| GC Roots | 栈帧局部变量,静态变量,JNI 引用,活跃线程,常量池引用 |
| 回收算法 | 标记-清除(碎片),标记-复制(无碎片,浪费空间),标记-整理(无碎片,耗时) |
| 分代收集 | 新生代用复制算法,老年代用标记-清除/整理 |
| 垃圾回收器 | Serial(单线程),Parallel(吞吐量),CMS(低延迟,已废弃),G1(区域化,JDK 9+ 默认),ZGC(超低延迟) |
3.3 类加载
| 知识点 | 核心内容 |
|---|---|
| 加载过程 | 加载 -> 验证 -> 准备 -> 解析 -> 初始化 |
| 类加载器 | Bootstrap(核心类) -> Extension(扩展,JDK 8) -> Application(应用) -> 自定义 |
| 双亲委派 | 向上委派,父加载器找不到才自己加载,保证类型安全 |
| 打破方式 | 重写 findClass()(推荐,如 Tomcat),重写 loadClass()(如 OSGi) |
3.4 JVM 调优
| 知识点 | 核心内容 |
|---|---|
| 常用参数 | -Xms(初始堆),-Xmx(最大堆),-Xss(栈大小),-XX:+UseG1GC |
| GC 日志 | -XX:+PrintGCDetails,-Xlog:gc*(JDK 9+) |
| 内存分析 | jps,jstat,jmap(heap dump),jstack(线程堆栈),jconsole,jvisualvm |
| OOM 排查 | -XX:+HeapDumpOnOutOfMemoryError -> MAT 分析 -> 定位大对象 -> GC Root 引用链 |
| 调优目标 | 减少 Full GC 次数,降低停顿时间,提高吞吐量 |
内存泄漏常见原因:
- ThreadLocal 未 remove()
- 静态集合持续增长
- 连接未关闭(数据库连接池、HTTP 连接池)
- 监听器未注销
- 内部类持有外部类引用
四、框架
4.1 Spring
| 知识点 | 核心内容 | 重要程度 |
|---|---|---|
| IoC/DI | 控制反转,依赖注入(构造器/Setter/字段),@Autowired,@Resource | ★★★★★ |
| Bean 生命周期 | 实例化 -> 属性赋值 -> Aware -> BeanPostProcessor -> init -> 就绪 -> destroy | ★★★★★ |
| Bean 作用域 | singleton,prototype,request,session | ★★★★ |
| AOP | JDK 动态代理(接口) vs CGLIB(类),@Aspect,@Before/@After/@Around | ★★★★★ |
| 事务 | @Transactional,传播行为(REQUIRED/REQUIRES_NEW),隔离级别 | ★★★★★ |
| 事件 | ApplicationEvent,@EventListener,观察者模式 | ★★★ |
| 循环依赖 | 三级缓存(singletonObjects,earlySingletonObjects,singletonFactories) | ★★★★ |
4.2 Spring Boot
| 知识点 | 核心内容 |
|---|---|
| 自动配置 | @SpringBootApplication -> @EnableAutoConfiguration -> spring.factories -> 条件注解 |
| Starter | 场景启动器,依赖管理 |
| 内嵌容器 | Tomcat,Jetty,Undertow |
| 配置管理 | application.yml,@ConfigurationProperties,多环境(profile) |
| 监控 | Actuator,metrics,health,info |
4.3 Spring Cloud
| 组件 | 用途 | 核心原理 |
|---|---|---|
| Nacos | 注册中心 + 配置中心 | AP 模式(最终一致) + CP 模式 |
| OpenFeign | 声明式 HTTP 调用 | 动态代理,@FeignClient |
| Gateway | API 网关 | 路由,过滤器,断言 |
| Sentinel | 流量控制,熔断降级 | 滑动窗口,令牌桶 |
| Seata | 分布式事务 | AT 模式(2PC),TCC,Saga |
| Spring Cloud LoadBalancer | 负载均衡 | 替代 Ribbon |
4.4 MyBatis
| 知识点 | 核心内容 |
|---|---|
| 核心组件 | SqlSessionFactory,SqlSession,Executor,StatementHandler |
| 缓存 | 一级缓存(SqlSession 级别),二级缓存(Mapper 级别,默认关闭) |
| 插件 | 拦截器(Executor,ParameterHandler,ResultSetHandler,StatementHandler) |
| 分页 | PageHelper(物理分页),RowBounds(逻辑分页,不推荐) |
| 动态 SQL | if,choose,foreach,trim,where,set |
| 映射 | resultMap,association(一对一),collection(一对多) |
五、数据库
5.1 MySQL 核心
| 知识点 | 核心内容 | 重要程度 |
|---|---|---|
| 存储引擎 | InnoDB(事务,行锁,B+树) vs MyISAM(无事务,表锁,全文索引) | ★★★★★ |
| 索引 | B+树(聚簇索引 + 二级索引),覆盖索引,最左前缀,索引下推 | ★★★★★ |
| 事务 | ACID,undo log(原子性),redo log(持久性),MVCC(隔离性) | ★★★★★ |
| 隔离级别 | 读未提交,读已提交,可重复读(InnoDB 默认),串行化 | ★★★★★ |
| 锁 | 行锁(Record Lock),间隙锁(Gap Lock),临键锁(Next-Key Lock),表锁 | ★★★★★ |
| MVCC | ReadView,undo log 版本链,快照读 vs 当前读 | ★★★★★ |
| SQL 优化 | EXPLAIN,慢查询日志,索引优化,避免 SELECT *,分页优化 | ★★★★★ |
| 分库分表 | 垂直拆分(按业务),水平拆分(按 ID 哈希),ShardingSphere | ★★★★ |
5.2 Redis
| 知识点 | 核心内容 | 重要程度 |
|---|---|---|
| 数据结构 | String,Hash,List,Set,ZSet,BitMap,HyperLogLog,Geo | ★★★★★ |
| 快的原因 | 纯内存,单线程(命令处理),IO 多路复用,高效数据结构 | ★★★★★ |
| 持久化 | RDB(快照,全量),AOF(追加日志,增量),混合持久化 | ★★★★ |
| 过期策略 | 惰性删除 + 定期删除,内存淘汰策略(LRU,LFU 等 8 种) | ★★★★ |
| 高可用 | 主从复制,哨兵(Sentinel),集群(Cluster,16384 槽位) | ★★★★★ |
| 缓存问题 | 穿透(布隆过滤器/缓存空值),击穿(互斥锁/逻辑过期),雪崩(随机过期/多级缓存) | ★★★★★ |
| 分布式锁 | SET NX EX,Redisson 看门狗,Lua 原子解锁,RedLock 争议 | ★★★★★ |
六、分布式系统
6.1 理论基础
| 知识点 | 核心内容 |
|---|---|
| CAP | 一致性(C),可用性(A),分区容错性(P),P 必选,CP 或 AP 权衡 |
| BASE | Basically Available(基本可用),Soft State(软状态),Eventually Consistent(最终一致) |
| 一致性协议 | 2PC(两阶段提交),3PC,TCC,Paxos,Raft |
| 共识算法 | Raft(Leader 选举 + 日志复制,etcd/Nacos),ZAB(ZooKeeper) |
6.2 分布式关键技术
| 技术 | 方案 | 核心原理 |
|---|---|---|
| 分布式锁 | Redis SET NX + Lua,ZooKeeper 临时顺序节点 | 互斥 + 超时 + 可重入 |
| 分布式事务 | Seata AT/TCC/Saga,RocketMQ 事务消息,本地消息表 | 最终一致性 |
| 分布式 ID | Snowflake(雪花算法),号段模式(Leaf),Redis 自增 | 全局唯一 + 趋势递增 |
| 幂等性 | 唯一索引,Token 机制,状态机,乐观锁 | 重复请求结果一致 |
| 限流 | 令牌桶,漏桶,滑动窗口(Sentinel),Guava RateLimiter | 保护系统 |
| 熔断降级 | 断路器(Hystrix/Sentinel),降级策略,Fallback | 快速失败 |
| 负载均衡 | 轮询,随机,加权,一致性哈希,最少连接 | 请求分发 |
| 配置中心 | Nacos,Apollo,Spring Cloud Config | 动态配置刷新 |
6.3 消息队列 (MQ)
| 知识点 | 核心内容 |
|---|---|
| 核心作用 | 解耦,异步,削峰填谷 |
| 主流 MQ | RocketMQ(阿里,事务消息),Kafka(大数据,高吞吐),RabbitMQ(AMQP,灵活) |
| 消息可靠性 | 生产确认,Broker 持久化,消费手动 ACK |
| 消息顺序 | 全局有序(单分区/单队列),局部有序(分区有序) |
| 消息重复 | 消费端幂等处理 |
| 消息堆积 | 增加消费者,扩容分区,限流生产者 |
6.4 微服务架构
| 知识点 | 核心内容 |
|---|---|
| 服务拆分 | 按业务域,DDD 界限上下文,单一职责 |
| 服务通信 | 同步(REST/RPC/Dubbo),异步(MQ) |
| 服务治理 | 注册发现,配置管理,负载均衡,限流熔断 |
| 可观测性 | 日志(ELK),监控(Prometheus+Grafana),链路追踪(SkyWalking/Zipkin) |
| 容器化 | Docker,Kubernetes,Helm |
| CI/CD | Jenkins,GitLab CI,GitHub Actions,ArgoCD |
七、学习路线图
阶段一:入门基础(1-2 个月)
Java 语法基础 -> 面向对象 -> 集合框架 -> IO 流 -> 异常处理 -> 泛型 -> 注解 -> 反射目标:能独立完成小型 Java 项目,理解面向对象思想。
重点:
- 熟练掌握集合框架(HashMap,ArrayList 源码)
- 理解 equals/hashCode 契约
- 掌握异常处理最佳实践
- 能读写文件和处理 JSON
阶段二:进阶提升(2-3 个月)
并发编程 -> JVM -> 设计模式 -> MySQL -> Redis -> Spring/Spring Boot -> MyBatis目标:能开发企业级后端服务,理解核心原理。
重点:
- 线程池、锁、volatile、CAS 原理
- JVM 内存模型、GC 算法、调优思路
- 23 种设计模式中至少掌握 10 种常用模式
- MySQL 索引优化、事务隔离、MVCC
- Redis 缓存问题解决方案
- Spring IoC/AOP/事务源码级理解
阶段三:架构能力(3-6 个月)
微服务 -> 分布式系统 -> 消息队列 -> 容器化 -> 系统设计目标:能设计分布式系统,具备架构思维。
重点:
- CAP 理论与 BASE 理论
- 分布式事务解决方案对比
- 分布式锁实现与选型
- 分库分表方案
- 高并发场景设计(秒杀、抢购)
- 系统性能优化
技能矩阵
| 阶段 | 核心技能 | 加分技能 |
|---|---|---|
| 初级(0-2年) | Java SE,Spring Boot,MySQL,Git | Linux,Docker,Redis |
| 中级(2-5年) | JVM 调优,并发编程,设计模式,DDD | 微服务,MQ,K8s |
| 高级(5年+) | 分布式系统,系统架构设计,团队管理 | 中间件源码,性能调优,技术选型 |
八、面试高频考点 TOP 20
| 排名 | 考点 | 所属领域 |
|---|---|---|
| 1 | HashMap 原理(数组+链表+红黑树,扩容) | Java 核心 |
| 2 | ConcurrentHashMap 线程安全原理(CAS + synchronized) | 并发 |
| 3 | synchronized 锁升级(偏向锁 -> 轻量级锁 -> 重量级锁) | 并发 |
| 4 | volatile 可见性与禁止指令重排 | 并发 |
| 5 | 线程池参数与执行流程(核心 -> 队列 -> 最大 -> 拒绝) | 并发 |
| 6 | ThreadLocal 原理与内存泄漏 | 并发 |
| 7 | JVM 内存结构(堆,栈,元空间) | JVM |
| 8 | GC 算法与垃圾回收器(CMS vs G1) | JVM |
| 9 | 类加载过程与双亲委派模型 | JVM |
| 10 | Spring IoC 与 AOP 原理 | 框架 |
| 11 | Spring Bean 生命周期 | 框架 |
| 12 | Spring 事务传播行为 | 框架 |
| 13 | MySQL 索引 B+ 树与最左前缀 | 数据库 |
| 14 | 事务隔离级别与 MVCC | 数据库 |
| 15 | SQL 优化思路(EXPLAIN,慢查询) | 数据库 |
| 16 | Redis 缓存穿透/击穿/雪崩 | 中间件 |
| 17 | Redis 分布式锁 | 分布式 |
| 18 | 分布式事务(TCC,Seata,消息) | 分布式 |
| 19 | CAP 理论 | 分布式 |
| 20 | 设计模式(单例,策略,工厂,代理) | 设计 |
九、关键对比速查
| 对比项 | 左 | 右 | 结论 |
|---|---|---|---|
| ArrayList vs LinkedList | 数组,O(1) 随机访问 | 链表,O(1) 头尾操作 | 查询多用 ArrayList |
| HashMap vs ConcurrentHashMap | 非线程安全,快 | 线程安全,CAS + sync | 并发用 CHM |
| synchronized vs Lock | JVM 关键字,自动 | JDK 接口,手动 | 简单用 sync,灵活用 Lock |
| String vs StringBuilder | 不可变,有常量池 | 可变,无常量池 | 拼接用 StringBuilder |
| JDK 代理 vs CGLIB | 基于接口 | 基于继承 | Spring 自动选择 |
| ArrayList vs Vector | 非线程安全,快 | synchronized,慢 | 不用 Vector |
| Error vs Exception | 不可恢复 | 可恢复 | 不 catch Error |
| Redis vs Memcached | 多数据结构,持久化 | 纯 KV,无持久化 | 通用选 Redis |
| CMS vs G1 | 标记-清除,碎片 | 标记-复制+整理,分 Region | 大堆用 G1 |
| RPC vs MQ | 同步 | 异步 | 看场景 |
持续学习建议:每天读一点源码,工作中多思考为什么这样设计,面试前深挖原理而非背诵,保持对技术的热情和好奇心。
