架构师成长之路
想要成为架构师,对技术的深度和广度都有很高的要求,本文列举出成为一个架构师必备的技能和学习路线。
对于学习途径有疑惑或苦恼,或者有优秀资料可以提供的同学,可加微信,共同交流学习1. 阅读源码
说到阅读源码,可能很多同学都尝试过去阅读一些开源框架的源码,但是很难找到一个入口点;即便找到入口点,又会觉得源码中好绕,看着看着把自己都看晕了。其实,阅读源码是需要基础的。开源框架的源码中都使用了大量的设计模式,所以在阅读源码之前,我们首先要熟悉常见的设计模式
1.1 常用设计模式
- Proxy 代理模式
- Factory 工厂模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- Singleton 单例模式
- Delegate 委派模式
- Strategy 策略模式
- Prototype 原型模式
- Template 模板模式
推荐书籍
《大话设计模式》 程杰 著1.2 Spring源码走读
Spring 源码主要又分为一下几大块:
1.2.1 spring-beans包
- 接口示例化
- 代理Bean操作
1.2.2 spring-context包
- IOC容器设计原理及高级特性
- AOP设计原理
- FactoryBean与BeanFactory
1.2.3 spring-tx包
- 声明式事务底层原理
- Spring事务处理机制
- 事务的传播与监控
- 基于SpringJDBC手写ORM框架
1.2.4 spring-webmvc
- MVC原理介绍
- 与IOC容器整合原理
- HandlerMapping实现原理
- HandlerAdapter实现原理
- ViewResolver实现原理
- Controller实现原理
- 动态参数匹配原理
- SpringMVC与Struts2对比分析
- 手写实现SpringMVC框架
1.2.5 Spring5新特性
- Spring 5.x的兼容性
- 分析自带通用日志框架
- 多序列化数据格式绑定API
- 函数式风格的ApplicationContext
- Kotlin表达式的支持
- WebFlux模块介绍
- Testing改进
阅读指引
spring源码学习 - 一个简单bean的实例化过程
spring源码学习 - 注解bean的解析注册过程1.3 MyBatis
- 代码自动生成器:Generator
- MyBatis下1对多,多对多嵌套结果、嵌套查询
- 一级缓存、二级缓存使用场景及选择策略
- MyBatis与Spring集成spring-mybatis.jar分析
- Spring集成下的SqlSession与Mapper
- MyBatis的事务
- 分析MyBatis的动态代理的真正实现
- 一步一步手写实现MyBatis 1.0到2.0
2. 分布式架构
2.1 漫谈分布式架构
- 初识分布式架构及意义
- 如何把应用从单机扩展分布式
- 大型分布式架构演进过程
- 构建分布式架构最重要因素
- CDN加速静态文件访问
- 分布式存储
- 分布式搜索引擎
- 应用发布与监控
- 应用容灾及机房规划
- 系统动态扩容
- 分布式架构设计
- 主流架构模型-SOA架构和微服务架构
- 领域驱动设计及业务驱动划分
- 分布式架构的基本理论CAP、BASE以及其应用
- 什么是分布式架构下的高可用设计
- 分布式架构下的可伸缩设计
- 构建高性能的分布式架构
2.2 分布式架构策略-分而治之
- 从简到难,从网络通信探究分布式通信的原理
- 基于消息方式的系统间通信
- 理解通信协议传输过程中的序列化和反序列化机制
- 基于框架的RPC通信技术
- WebService/Apache CXF
- RMI/Spring RMI
- Hessian
- 传统RPC技术在大型分布式架构下面临的问题
- 分布式架构下的RPC解决方案
- 分布式系统的基石-Zookeeper、
- 从0开始搭建3个节点的zookeeper集群
- 深入分析Zookeeper在disconf配置中心的应用
- 基于Zookeeper的分布式锁解决方案
- Zookeeper Watcher 核心机制深入源码分析
- Zookeeper集群升级、迁移
- 基于Zookeeper实现分布式服务器动态上下线感知
- 深入分析Zookeeper Zab协议及选举机制源码解读
- 使用dubbo对单一应用服务化改造
- dubbo管理中心及监控平台安装部署
- dubbo分布式服务模块划分(领域驱动)
- 基于dubbo分布式系统架构实践
- dubbo负载均衡策略分析
- dubbo服务调试之服务只订阅及服务只注册配置
- dubbo服务接口的设计原则(实战经验分享)
- dubbo设计原理及源码分析
- 基于dubbo构建大型分布式电商平台实战雏形
- dubbo容错机制及高扩展性分析
2.3 分布式架构-中间件
2.3.1 消息中间件(分布式消息通信)
2.3.1.1 消息中间件在分布式框架中的应用
2.3.1.2 消息中间件ActiveMQ
- ActiveMQ高可用集群企业级部署方案
- ActiveMQ P2P及PUB/SUB模型详解
- ActiveMQ消息确认及重发策略
- ActiveMQ基于Spring完成分布式消息队列实战
2.3.1.3 消息中间件Kafka
- Kafka基于Zookeeper搭建高可用集群实践
- Kafka消息处理过程剖析
- Java客户端实现Kafka生产者与消费者实例
- Kafka的副本机制及选举原理剖析
- 基于Kafka实现应用日志实时上报统计分析
2.3.1.4 消息中间件RabbitMQ
- 初步认识RabbitMQ及高可用集群部署
- 详解RabbitMQ消息分发机制及主题消息分发
- RabbitMQ消息路由机制分析
- RabbitMQ消息确认机制
2.3.2 分布式缓存(Redis)
- 从入门到精通,Redis的数据结构分析
- Redis主从复制原理及无磁盘复制分析
- Redis管道模式详解
- Redis缓存与数据库一致性问题解决方案
- 基于Redis实现分布式锁
- 图解Redis中的AOF和RDB持久化策略的原理
- Redis读写分离架构实践
- Redis烧饼架构及数据丢失问题分析
- Redis Cluster 数据分布算法之Hash slot
- 使用Redis常见问题及性能优化思路
- Redis高可用及高伸缩架构实战
- 缓存击穿、缓存雪崩预防策略
- Redis批量查询优化
- Redis高性能集群之twemproxy or codis
2.3.3 数据存储
2.3.3.1 非结构化数据NoSQL
- NoSQL简介及MongoDB基本概念
- MongoDB支持的数据类型分析
- MongoDB可视化客户端及Java API实践
- 手写基于MongoDB的ORM框架
- MongoDB企业级集群解决方案
- MongoDB聚合、索引及基本执行命令
- MongoDB数据分析 、转存及恢复策略
2.3.3.2 mysql数据库
- MySQL主从符合及读写分离实战
- MySQL + keepalived实现双主高可用方案实践
- MySQL 高性能解决方案之分库分表
2.3.3.3 分库分表中间件(Mycat)
- 初识数据库中间件Mycat
- 基于Mycat实现mysql数据库读写分离
- 基于Mycat实战之数据库切分策略剖析
- Mycat全局表、ER表、分片策略分析
2.3.4 后台服务
- 基于OpenResty部署应用层Nginx以及Nginx+lua实践
- Nginx反向代理服务器及负载均衡服务配置实战
- 利用keepalived + Nginx实践Nginx高可用方案
- 基于Nginx实现访问控制、连接限制
- Nginx动静分离实战
- Nginx Location、Rewrite等语法配置及原理分析
- Nginx提供https服务
- 基于Nginx+lua完成访问流量实时上报kafka的实战
2.3.5 高性能的NIO框架(Netty)
- IO的基本概念、NIO、AIO、BIO深入分析
- NIO的核心设计思想
- Netty产生的背景及应用场景分析
- 基于Netty实现高性能IM聊天工具
- 基于Netty实现Dubbo多协议通信支持
- Netty无锁化串行设计及高并发处理机制
- 手写实现多协议RPC框架
2.4 分布式解决方案
- 分布式全局ID生成方案
- session跨域共享及企业级单点登录解决方案实战
- 分布式事务解决方案实战
- 高并发下的服务降级、限流
- 基于分布式架构下分布式锁的解决方案
- 分布式架构下实现分布式定时调度
推荐书籍
《大型网站系统与Java中间件实践》曾宪杰 著
《分布式服务框架原理与实践》 李林峰 著3. 微服务架构
3.1 微框架(Spring Boot)
- Spring Boot与微服务之间的关系
- Spring Boot热部署实战
- 核心组件之starter、actuator、auto-configuration、cli
- Spring Boot集成MyBatis实现多数据源路由实战
- Spring Boot集成Dubbo实战
- Spring Boot 集成Redis实战
- Spring Boot集成Swagger2 构建API管理及测试体系
- Spring Boot实现多环境配置动态解析
3.2 Spring Cloud
- Eureka注册中心
- Ribbon集成REST实现负载均衡
- Fegion声明式服务调用
- Hystrix服务熔断降级方式
- Zuul实现微服务网关
- Config分布式统一配置中心
- Sleuth调用链路跟踪
- BUS消息总线
- 基于Hystrix实现接口降级实战
- Spring Boot集成Spring Cloud实现统一整合分离
3.3 Docker虚拟化
- 了解Docker的镜像、仓库、容器
- Dockerfile构建LNMP环境部署个人博客wordpress
- Docker Compose构建LNMP环境部署个人博客wordpress
- Docker网络组成、路由互联、openvswitch
- 基于swarm构建Docker集群实战
- Kubernetes简介
3.4 漫谈微服务架构
- SOA架构和微服务架构之间的区别与联系
- 如何设计微服务及其设计原则
- 解惑Spring Boot流行因素及能够解决什么问题
- 什么是Spring Cloud,为何要选择Spring Cloud
- 基于全局分析Spring Cloud各个组件所解决的问题
推荐书籍
《Spring Cloud与Docker微服务架构实战》周立 著4. 并发编程
4.1 Java 内存模型(JMM)
- 线程通信
- 消息传递
4.2 内存模型
- 指令重排序
- 顺序一致性
- happens-before
- as-if-serial
4.3 synchronized
- 同步、重量级锁
- synchronized原理
- 锁优化
- 自旋锁
- 轻量级锁
- 重量级锁
- 偏向锁
4.4 volatile
- volatile 实现机制
- 内存语义
- 内存模型
4.5 DCL(Double Check Lock)
- 单例模式
- DCL(双检锁)
- 解决方案
4.6 并发基础
- AQS
- AbstractQueuedSynchronizer同步器
- CLH同步队列
- 同步状态的获取和释放
- 线程阻塞和唤醒
- CAS
- Compare And Swap
- 缺陷
4.7 锁
- ReentrantLoak 可重入锁
- ReentrantLockReadWriteLock 可重入读写锁
- Condition
4.8 并发工具类
- CyclicBarrier
- CountDownLatch
- Semphore
4.9 并发集合
- ConcurrentHashMap
- ConcurrentLinkedQueue
4.10 原子操作
- 基本类型
- AtomicBoolean
- AtomicInteger
- AtomicLong
- 数组
- AtomicIntegerArray
- AtomicLongArray
- AtomicReferenceArray
- 引用类型
- AtomicReference
- AtomicReferenceFieldUpdater
4.11 线程池
- Executor
- ThreadPoolExecutor
- CallableFuture
- ScheduledExecutorService
4.12 其他
- TheadLocal
- Fork/Join
推荐书籍
《深入理解Java虚拟机》周志明 著
《实战Java高并发程序设计》 葛一鸣 郭超 编著 墙裂推荐
《Java并发编程实战》Brian Goetz/ Tim Peierls/ Joshua Bloch/ Joseph Bowbeer/ David Holmes/ Doug Lea 著 董云兰等译5. 性能优化
5.1 理解性能优化
- 性能基准
- 性能优化到底是什么
- 衡量维度
5.2 JVM调优
- 知其然,知其所以然
- 什么是JVM运行时数据区
- 什么是JVM内存模型JMM
- 各种垃圾回收器使用场景(throughput\CMS)
- 理解GC日志,从日志看端倪
- 实战MAT分析dump文件
5.3 Tomcat调优篇
- 分析Tomcat线程模型
- Tomcat系统参数认识及调优
- 基准测试
5.4 MySQL调优
- 理解MySQL低层B+Tree机制
- SQL执行计划详解
- 索引优化详解
- SQL语句优化
6. 团队协作效率
6.1 Maven
- 生成可执行jar、理解Scope生产呢过最精确的jar
- 解决类冲突、包依赖 NoClassDefFoundError问题定位及解决
- 全面理解Maven的Lifecycle\Phase\Goal
- 架构师必备之Maven生成Archetype
- Maven流行插件实战、手写自己的插件
- Nexus使用、上传、配置
- 对比Gradle
6.2 Jenkins
持续集成,一次build解决所有手动工作
6.3 Sonar
减少人为疏漏,静态代码检查,让你的代码更健壮
6.4 Git
- 什么是git以及git的工作原理
- git常用命令best practise(避坑教学)
- git冲突怎么引起的,如何解决
- 架构师职责:git flow规范团队git使用规程
- 团队案例分享(买不到才是最贵的)
7. 项目实战
未完待续...
其他书籍推荐:
《深入分析Java Web技术内幕》
《Java编程思想》
《Effective Java》
《重构 改善既有代码结构》
《高性能MySQL》