
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