Java后端知识树
SryYa Three

Java后端工程师

├── Java基础

├── 并发编程

├── JVM

├── Spring生态

├── 数据库

├── 缓存

├── 消息队列

├── 微服务

└── 工程能力


Java基础

Java基础

├── 基础语法
│ ├─ 面向对象
│ ├─ 继承 / 多态
│ └─ 接口 / 抽象类

├── 集合框架
│ ├─ ArrayList
│ ├─ LinkedList
│ ├─ HashMap
│ ├─ LinkedHashMap
│ └─ TreeMap

├── HashMap源码
│ ├─ hash扰动
│ ├─ index计算
│ ├─ put流程
│ ├─ get流程
│ ├─ 扩容机制
│ └─ 红黑树

├── 泛型
│ ├─ 泛型擦除
│ └─ 通配符

├── 反射
│ ├─ Class对象
│ ├─ Method调用
│ └─ 动态加载

└── 注解
├─ 元注解
├─ 运行时注解
└─ 注解解析


并发编程

并发编程

├── 线程基础
│ ├─ Thread
│ ├─ Runnable
│ └─ Callable

├── 线程池
│ ├─ ThreadPoolExecutor
│ ├─ 核心参数
│ ├─ 拒绝策略
│ └─ 执行流程

├── synchronized
│ ├─ 锁升级
│ ├─ 偏向锁
│ ├─ 轻量级锁
│ └─ 重量级锁

├── volatile
│ ├─ 可见性
│ ├─ 禁止重排序
│ └─ 内存屏障

├── CAS
│ ├─ 乐观锁
│ └─ ABA问题

├── AQS
│ ├─ 队列同步器
│ ├─ ReentrantLock
│ ├─ CountDownLatch
│ └─ Semaphore

└── ThreadLocal


JVM

JVM

├── 内存结构
│ ├─ 堆
│ ├─ 栈
│ ├─ 方法区
│ └─ 程序计数器

├── 垃圾回收
│ ├─ 标记清除
│ ├─ 复制算法
│ └─ 标记整理

├── GC收集器
│ ├─ CMS
│ └─ G1

├── 类加载
│ ├─ 加载
│ ├─ 验证
│ ├─ 准备
│ ├─ 解析
│ └─ 初始化

└── 双亲委派模型


Spring生态

Spring

├── IOC
│ ├─ Bean创建
│ ├─ 依赖注入
│ └─ Bean生命周期

├── AOP
│ ├─ 动态代理
│ ├─ JDK代理
│ └─ CGLIB

├── 自动装配
│ ├─ @EnableAutoConfiguration
│ ├─ spring.factories
│ └─ 条件注解

├── SpringMVC
│ ├─ DispatcherServlet
│ ├─ HandlerMapping
│ └─ HandlerAdapter

└── SpringBoot
├─ starter
├─ 自动配置
└─ 外部配置


MySQL

MySQL

├── 存储引擎
│ ├─ InnoDB
│ └─ MyISAM

├── 索引
│ ├─ B+Tree
│ ├─ 聚簇索引
│ ├─ 覆盖索引
│ └─ 最左匹配

├── 事务
│ ├─ ACID
│ └─ 隔离级别

├── MVCC
│ ├─ undo log
│ ├─ ReadView
│ └─ 快照读

└── 锁
├─ 行锁
├─ 间隙锁
└─ Next-Key Lock


Redis

Redis

├── 数据结构
│ ├─ String
│ ├─ List
│ ├─ Set
│ ├─ Hash
│ └─ ZSet

├── 持久化
│ ├─ RDB
│ └─ AOF

├── 缓存问题
│ ├─ 缓存击穿
│ ├─ 缓存穿透
│ └─ 缓存雪崩

├── 分布式锁
│ └─ Redisson

└── 高可用
├─ 主从复制
├─ 哨兵
└─ Cluster


微服务

微服务

├── 服务拆分

├── 服务注册

├── 配置中心

├── 网关

└── 服务调用


工程能力

工程能力

├── Linux
│ ├─ top
│ ├─ ps
│ ├─ netstat
│ └─ grep

├── Nginx
│ ├─ 反向代理
│ └─ 负载均衡

├── Docker
│ ├─ Dockerfile
│ └─ docker-compose

└── Git

由 Hexo 驱动 & 主题 Keep
总字数 28.1k 访客数 访问量