Java程序员如何快速变成一个优秀架构师,阿里架构师推荐这份文档

如何成为一名架构师?

  想成为一名架构师,首先第一点必然是你的技术足够优秀,知识的深度和广度足够,遇到问题能很快从脑海中寻找出最合适的解决之道.其次,架构师会从整体上领导项目,与人打交道必不可少,因此与人沟通这些软技能也必不可少,当然,这个因人而异,有些人天生更会与人打交道,但无论如何,技术足够优秀是基本条件.当然,想成为一名优秀的架构师,实际开发经验是必不可少的,没有多年架构师的经验也不行,但至少,我们想成为一名架构师,理论知识得先掌握不是吗?否则谈何实践呢?因此,我总结了一张JAVA架构师进阶学习图谱:

  当然还有许多技术和技能也是需要的,比如:架构师要进行文档输出,会需要画相关的图,常见的比如:流程图/用例图/时序图/泳道图/状态图/协作图等等(回忆一下这些课程在大学的时候是不是老师都讲过?只是我们当时不在意罢了,至少笔者是这样的,哈哈~).再比如java反射机制及其相关API,高性能NIO---Netty框架等等.如果是大数据相关还需要我们了解flink/blink/spark/hadoop/hbase,不一定全都要会,但是至少脑子里面要有个概念,这个技术是干嘛用的,以至于别人说的时候能听得懂.至于为什么没有画在上面的图中,是因为笔者后续的文章只准备写图中的内容,其余的留给童鞋们自己去学习吧.当然,因为博客篇幅所限,每种技术不可能百分百把所有知识点都讲到,但是保证讲的全部都是干货,能让读完的童鞋有所收获!

架构师应该关注什么?

  这个问题,换句话说,是我们在进行架构设计的时候应该关注什么,笔者认为从大的层面来讲分两类,功能性需求以及非功能性需求,细分的话有以下六个方面:

1.功能

  记得我的老师曾说过,功能是0,其余的是1,再牛逼的架构师,如果不满足功能,再牛逼的设计也是没用的,只有在满足功能的前提下,其他的设计才有用.

2.性能

  对现代系统来说,响应时间越短就越可能留住用户,毕竟谁会忍受打开一个页面要等待10秒甚至几分钟呢?至少笔者在访问任何网站的时候,一个网页加载5秒以上就直接关了.常用的性能指标有QPS(每秒查询速率)/TPS(每秒事务处理率).当然,性能需要在系统开发完成后进行预发环境(和生产环境一样的环境)测试,常用的性能测试工具有apachebench(简称ab)/http_load/jmeter等等.QPS也遵循28原则,一天中80%的访问量集中在20%的时间内,可以据此估算网站的QPS,从而规划服务器配置,如果性能不达标,则需要优化,常见的优化手段有加机器(简单粗暴),前端优化(CDN/动静分离/减少请求次数/),后端代码优化,缓存(如redis),JVM优化.

3.可用性

  可用性是对现代分布式系统来说,当其子系统有一个或几个节点宕机的时候,是否还能继续提供正常的服务.常用的手段是集群以及自动故障转移,几乎所有分布式系统中使用的技术都支持高可用,比如缓存redis官方提供redis-cluster集群,MongoDB分片集群,消息中间件(ActiveMQ/RabbitMQ/kafka/RocketMQ)集群,数据库MySQL集群等等,如果对以上全部都了解的童鞋,总结一下,会发现它们的核心思想都一样,通过集群提供数据冗余,再通过自动发现并且故障转移机制保证组件的高可用.

4.伸缩性

  伸缩性是指当系统容量不够或者多余的时候,是否能方便的进行扩容/缩容处理,很多大公司这方面都做的很好,比较好的策略是容器化,使用docker+k8s进行部署管理,可以方便的进行扩容或者缩容处理,能更好的合理利用资源.

5.扩展性

  扩展性是指当有需求发生变更或者新增的时候,是否能在不改代码或者改动很少代码的情况下就能实现功能.扩展性相当考验一个架构师的功力,笔者看来,想设计一个扩展性很好的系统,除了事先考虑,在合适的情景下使用设计模式也是相当好的方案,因此对架构师而言,设计模式很重要!举个例子,有一个上传服务,使用FTP协议进行上传,我们基于apach ftpClient封装了一套接口,此时另外有一个需求,是需要使用SFTP协议,我们又使用jsch封装了另一套接口,那假如后续又有新的协议呢?每新增一个协议就需要我们新增代码来适配,这个时候使用适配器模式是不是就能很好的解决问题呢?这也符合设计模式的思想,面向接口编程,以后新增一个协议,我们只需要新增一个实现类,而不会改动原有代码,是不是在代码改动最少的情况下满足了需求呢?

6.安全性

  一个网站,如果是用户访问量很大的情况下,很容易遭到网络黑客的攻击,常见的攻击手段包括:

6.1 XSS攻击

  常见的防御手段是消毒(不信任用户输入,对输入进行严格校验和过滤,比如使用"&lt"代替"<"等等).

6.2 SQL注入攻击

  以前我们使用JDBC的时候,使用Statement会导致SQL注入攻击,因此后面有了PreparedStatement预编译的方式来防止SQL注入攻击,并且大量查询的情况下PreparedStatement 效率更高.

6.3 CSRF攻击

  跨站请求伪造,攻击者盗用受害者cookie,以受害者的名义发送恶意请求,常见的防御方式有:表单提交验证码(用户体验相对不友好),URL带token验证,HTTP referer验证等.

6.4 DDOS攻击

  分布式拒绝服务攻击,DOS攻击的进阶版,防御难度很高,并且方案也相对复杂,业界比较厉害的是阿里,多次双11大促都抗住了,毕竟阿里有道哥(吴翰清,阿里最年轻的P8,神一样的存在)及其领导的安全小组的存在.

福利

小编整理出一篇Java进阶架构师之路的核心知识,同时也是面试时面试官必问的知识点,篇章也是包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等

小编已将文档整理打包好,由于细节内容太多,小编只展示文档的目录内容给大家看,需要整本文档的程序员(媛)小伙伴可以  转发+关注小编  后台回复“文档”免费获取哦

JVM

  1. 线程
  2. JVM内存区域
  3. JVM运行时内存
  4. 垃圾回收与算法
  5. JAVA 四种引用类型
  6. GC分代收集算法 VS 分区收集算法
  7. GC垃圾收集器
  8. JAVA IO/NIO
  9. JVM 类加载机制

由于篇幅限制小编,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙转发+关注私信(文档)获取哦

JAVA集合

  1. 接口继承关系和实现
  2. List
  3. ArrayList(数组)
  4. Vector(数组实现、线程同步)
  5. LinkList(链表)
  6. Set
  7. HashSet(Hash表)
  8. TreeSet(二叉树)

JAVA多线程并发

  1. JAVA并发知识库
  2. JAVA线程实现/创建方式
  3. 4种线程池
  4. 线程生命周期(状态)
  5. 终止线程4种方式
  6. sleep与wait 区别
  7. start与run区别
  8. JAVA后台线程
  9. JAVA锁
  10. 编程基本方法
  11. 同步锁与死锁
  12. 线程池原理
  13. JAVA阻塞队列原理
  14. CyclicBarrier、CountDownLatch、Semaphore的用法
  15. volatile关键字的作用(变量可见性、禁止重排序)
  16. 如何在两个线程之间共享数据

JAVA基础

  1. JAVA异常分类及处理
  2. JAVA反射
  3. JAVA注解
  4. JAVA内部类
  5. JAVA泛型
  6. JAVA序列化(创建可复用的Java对象)
  7. JAVA复制

Spring 原理

  1. Spring 特点
  2. Spring 核心组件
  3. Spring 常用模块
  4. Spring 主要包
  5. Spring 常用注解
  6. Spring第三方结合
  7. Spring IOC原理
  8. Spring APO原理
  9. Spring MVC原理
  10. Spring Boot原理
  11. JPA原理
  12. Mybatis缓存
  13. Tomcat架构

由于篇幅限制小编,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙转发+关注私信(文档)获取哦

微服务

  1. 服务注册发现
  2. API 网关
  3. 配置中心
  4. 事件调度(kafka)
  5. 服务跟踪(starter-sleuth)
  6. 服务熔断(Hystrix)
  7. Hystrix断路器机制
  8. API管理

Netty 与RPC

  1. Netty 原理
  2. Netty 高性能
  3. Netty RPC实现
  4. 关键技术
  5. 核心流程
  6. 消息编解码
  7. 通讯过程
  8. RMI实现方式

网络

  1. 网络7层架构
  2. TCP/IP原理
  3. TCP三次握手/四次挥手
  4. HTTP原理
  5. CDN 原理
  6. 分发服务系统
  7. 负载均衡系统
  8. 管理系统

日志

  1. Slf4j
  2. Log4j
  3. LogBack
  4. Logback优点
  5. ELK

Zookeeper

  1. Zookeeper概念
  2. Zookeeper角色
  3. Zookeeper工作原理(原子广播)
  4. Znode有四种形式的目录节点

Kafka

  1. Kafka概念
  2. Kafka数据存储设计
  3. partition的数据文件(offset,MessageSize,data)
  4. 数据文件分段segment(顺序读写、分段命令、二分查找)
  5. 数据文件索引(分段索引、稀疏存储)
  6. 生产者设计
  7. 负载均衡(partition会均衡分布到不同broker上)
  8. 批量发送
  9. 压缩(GZIP或Snappy)
  10. 消费者设计

RabbitMQ

  1. RabbitMQ概念
  2. RabbitMQ架构
  3. Exchange 类型

负载均衡

  1. 四层负载均衡 vs 七层负载均衡
  2. 负载均衡算法/策略
  3. LVS
  4. Keepalive
  5. Nginx反向代理负载均衡
  6. HAProxy

数据库

  1. 存储引擎
  2. 索引
  3. 数据库三范式
  4. 数据库是事务
  5. 存储过程(特定功能的SQL 语句集)
  6. 触发器(一段能自动执行的程序)
  7. 数据库并发策略
  8. 数据库锁
  9. 基于Redis分布式锁
  10. 分区分表
  11. 两阶段提交协议
  12. 三阶段提交协议
  13. 柔性事务
  14. CAP

JAVA算法

  1. 二分查找
  2. 冒泡排序算法
  3. 插入排序算法
  4. 快速排序算法
  5. 希尔排序算法
  6. 归并排序算法
  7. 桶排序算法
  8. 基数排序算法
  9. 剪枝算法
  10. 回溯算法
  11. 最短路径算法
  12. 最大的数组算法
  13. 最长公共子序算法
  14. 最小生成树算法

Hadoop

  1. Hadoop概念
  2. HDFS
  3. Client
  4. NameNode
  5. Secondary NameNode
  6. DataNode
  7. MapReduce
  8. JobTracker
  9. TaskTracker
  10. Task
  11. Reduce Task 执行过程
  12. Hadoop MapReduce 作业的生命周期
  13. 作业提交与初始化
  14. 任务调度与监控。
  15. 任务运行环境准备
  16. 任务执行
  17. 作业完成

Spark

  1. Spark概念
  2. 核心架构
  3. 核心组件
  4. SPARK编程模型
  5. SPARK计算模型
  6. SPARK运行流程
  7. SPARK RDD流程
  8. SPARK RDD

云计算

  1. SaaS
  2. PaaS
  3. IaaS
  4. Docker
  5. Openstack
  6. Namespaces
  7. 进程(CLONE_NEWPID 实现的进程隔离)
  8. Libnetwork与网络隔离
  9. 资源隔离与CGroups
  10. 镜像与UnionFS
  11. 存储驱动

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙转发+关注私信(文档)获取哦

如何获取免费架构学习资料?

资料获取方式:

关注+转发后,私信关键词 【文档】即可免费获取!

发布了106 篇原创文章 · 获赞 68 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/kxkxyzyz/article/details/104991374