架构师成长之路(内附推荐书籍)

转: https://www.jianshu.com/p/f661f098b88a

想要成为架构师,对技术的深度和广度都有很高的要求,本文列举出成为一个架构师必备的技能和学习路线。
对于学习途径有疑惑或苦恼,或者有优秀资料可以提供的同学,可加留言,共同交流学习

1. 阅读源码

说到阅读源码,可能很多同学都尝试过去阅读一些开源框架的源码,但是很难找到一个入口点;即便找到入口点,又会觉得源码中好绕,看着看着把自己都看晕了。其实,阅读源码是需要基础的。开源框架的源码中都使用了大量的设计模式,所以在阅读源码之前,我们首先要熟悉常见的设计模式。
PS:如果对 开源框架源码看起来困难比较大,可以先看看JDK API的源码,比如 HashMap的源码,从put(K key, V value)get(Object key) 方法入手,了解HashMap的实现原理;慢慢熟练了带着问题去看开源框架的源码

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中间件实践》曾宪杰 著
《分布式服务框架原理与实践》 李林峰 著
《深入理解Kafka:核心设计与实践原理》朱忠华 著

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实现统一整合分离

推荐书籍
《Spring Boot编程思想(核心篇)》小马哥 著

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》



作者:味道_3a01
链接:https://www.jianshu.com/p/f661f098b88a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 虚拟环境_理解Python虚拟环境

什么是环境既然有所谓的 虚拟环境(Virtual Environment),那么首先有必要解释一下,什么是环境。这里的环境,指的就是 Python 代码的运行环境。它应该包含以下信息:Python 解释器,用哪个解释器来执…

java.util.concurrent.locks.Lock文档说明

【1】Lock接口文档描述 1.相比于使用synchronized方法和代码块,锁的出现提供了更广泛的锁操作。 锁允许更灵活的代码结构,具有许多不同的属性,还支持多个关联的Condition条件对象。 2.锁是用于控制多个线程访问共享资源的工具。通常&#…

20 个使用 Java CompletableFuture的例子

转载自 20 个使用 Java CompletableFuture的例子这篇文章介绍 Java 8 的 CompletionStage API和它的标准库的实现 CompletableFuture。API通过例子的方式演示了它的行为,每个例子演示一到两个行为。既然CompletableFuture类实现了CompletionStage接口,首…

fastreport 打印两个list_Smaller And Smarter Python数据结构:合并两个有序链表

原创: 老表 简说Python 今日问题 :翻转链表k个相邻结点"""目标:写一段程序,合并两个有序链表例如:输入-> 1->2->3输入-> 2->5->6->8输出-> 1->2->2->3->5->6-&…

java.util.concurrent.locks.Condition文档说明

【1】Condition接口文档描述 1.Condition类把Object监视器方法(wait,nofify, notifyAll)分解为不同对象,通过与Lock实现类的合并使用,Condition可以产生每个object都有多个等待集的效果。在Lock实现类替代synchronized方法或语句…

谈谈HashMap线程不安全的体现

转载自 谈谈HashMap线程不安全的体现HashMap的原理以及如何实现,之前在JDK7与JDK8中HashMap的实现中已经说明了。那么,为什么说HashMap是线程不安全的呢?它在多线程环境下,会发生什么情况呢?1. resize死循环我们都知道…

手机打开python文件_使用python在计算机和手机之间通过wifi进行简单的文件传输...

我会使用 paramiko.它安全快速而且非常简单.怎么回事? 所以我们首先导入模块,然后指定日志文件: import paramiko paramiko.util.log_to_file(/tmp/paramiko.log) 我们打开一个SSH传输: host "example.com" port 22 transport p…

10人以下小团队管理手册-学习笔记

【README】 本文总结于《10人以下小团队管理手册》,很nice的一本书,有兴趣的同学可以翻下; 【0】序章 作者作为咨询师发现, 1.下属对主管有不满,主管对下属有怨言; 2.10人以下小团队主管经常会为 如何用…

JavaWeb项目:简易小米商城系统

Web项目:MyShop简易小米商城系统一.系统概述二.系统开发环境三.涉及技术四.系统功能及使用说明五.作者杂谈六.尾声七.gitee地址:(源码见文末) 一.系统概述 本系统是一个电商系统,可供用户注册,登录&#…

HashMap的实现与优化

转载自 HashMap的实现与优化HashMap的优化与实践 本文是基于作者在github上的Android 问题交流讨论坛提问而产生的一篇文章,也是自己早打算开坑的一篇文章。文章首先介绍了hashMap的一些基本知识,然后介绍了它在JDK8下的实现原理,最后着重介绍…

如何确定python开发环境已经配置好_搭建 python 开发环境 前面安装选位置我直接回车了现在我想测试查看目录该怎么办...

展开全部 1 ubuntu中一般安装e5a48de588b662616964757a686964616f31333431343036后的默认路径如下#!/usr/bin/env python #!/usr/locat/bin/python 如果没有找到,可以通过命令查询python路径whereis python which python 2 Windows一般可以进入python>>> i…

转- java单例模式几种实现方式

转自: https://www.cnblogs.com/ngy0217/p/9006716.html ; 单例模式的五种实现方式 1、饿汉式(线程安全,调用效率高,但是不能延时加载): 1 2 3 4 5 6 7 public class ImageLoader{ private static ImageLoade…

IDEA集成maven流程图详细介绍

前言 最近利用两天时间学习了MyBatis以及maven,避免经典的学过就忘记,我打算做出点总结以便日后复习,当然如果能帮到需要的人也是极好的。 一. 初识maven 1.maven是什么 maven是用来帮助我们快速搭建项目结构与开发环境的好工具。回想一下每次新建项…

pythonnumpy教程_Python教程:numpy的基本介绍

标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显…

Java8系列之重新认识HashMap

转载自 Java8系列之重新认识HashMap简介 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示:下面针对各个实现类的特点做…

mysql-on duplicate key update实现insertOrUpdate官方文档

【README】 mysql 基于 on duplicate key update filedvalue ; 实现有则更新,没有则插入; 以下内容总结于 https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html 【1】api 描述 如果指定 ON DUPLICATE KEY UPDATE 子句并且要插入的行…

python统计段落单词词频_使用Python统计文件中词频,并且生成词云

wordcloud Table of Contents 1 怎样使用Python产生词云 from wordcloud import WordCloud import matplotlib.pyplot as plt import jieba # Now, There is no word.txt under this path path_txt "/home/alan/Desktop/word.txt" f open(path_txt, r, encoding U…

IDEA中maven配置MyBatis简单流程

前言 刚学完javaweb,对自己的Dao层代码很不满意的话,可得来学学MyBatis。学习MyBatis既可以改进JDBC的使用,实现Dao层也会变得很简便,下面我将介绍IDEA中maven配置MyBatis简单流程。 如果想了解maven请转到我的上一篇文章中&…

(转)构建微服务:Spring boot 入门篇

转自: Spring Boot(一):入门篇 - 纯洁的微笑 - 博客园 ; 什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#…

python参数_python参数的介绍

一、函数 1.为什么要使用函数? 减少代码的冗余 2.函数先定义后使用(相当于变量一样先定义后使用) 3.函数的分类: 内置函数:python解释器自带的,直接拿来用就行了 自定义函数:根据自己的需求自己…