架构师 之 理论篇 - 知识图谱

一 大数据架构师

作者:知乎用户DZaCN8
链接:https://www.zhihu.com/question/401095061/answer/1280335966
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

大数据架构就是:在总体框架的大数据处理中的组织。涵盖了数据源存储格式,分析工具和报告方法。

想成为年薪50k的大数据架构师不是没有可能,只要你掌握了以下技能:

1)掌握分布式系统原理,熟悉主流云平台结构及技术特性,对存储、计算、消息队列、集群管理、虚拟化等技术有深入的理解和认识,对IaaS / PaaS/SaaS平台构架有深层次的了解;

2) 系统设计&编码能力,追求优雅的设计和优秀的代码质量,高标准,快速行动;

3) 思路清晰,具备生产系统快速 trouble-shooting 的经验和能力,擅长分析更深层次的原因;

4) 存储方向:Ceph,Swift, HDFS, RocksDB, LevelDB, memcache, redis,HBase,MySQL, Postgresql,mongoDB 其中的一项或多项;

5) 计算方向:对 Spark,MapReduce,Storm,OLAP ,Flume, Kafka的一项或多项;

6) 集群管理方向: YARN,Mesos 熟悉一项或多项;

7) 虚拟化方向:KVM,XEN,VMvare,OpenStack,Cloud Stack 熟悉一项或多项;

8) 了解上述技术的特性,具备按业务场景进行方案设计和核心模块研发的能力;

从程序员进阶成为架构师,并非一蹴而就,需要系统化、阶段性地学习,在实战项目中融会贯通,这如同打怪通关,我们得一关一关突破,每攻破一个关口,就能得到更精良的装备,技能值也随之不断增长,直至大获全胜。

凡事预则立,在开始行动之前,我们有必要先来了解下这个岗位的核心要求,以及必知必会的技术能力,只有目标清晰、方向明确,才能事半功倍。

大纲:

    架构师岗位职责

    架构师必知必会技术

曾有人这样形容架构师的重要性:架构师的工作就像是他打造一棵树的主干和枝干,然后程序员们让这棵树上长出树叶和果实。

架构师,是一个既需要掌控整体又要洞悉局部瓶颈,并依据具体的业务场景给出解决方案的团队领导型人物,他需要参与项目开发的全部过程,包括需求分析、架构设计、系统实现、集成、测试和部署各个阶段,负责在整个项目中对技术活动和技术说明进行指导和协调。

1 架构师职责简单来说有三点:

1、确认需求与拆分系统

在项目开发过程中,架构师需要依据用户需求,将完整的系统拆分为子系统和组件,形成不同的逻辑层或服务,确定各层的接口、层与层相互之间的关系,对整个系统分层进行“纵向”分解,对同一逻辑层分块进行“横向”分解。

2、技术选型

通过对系统的一系列的分解,最终形成了软件的整体架构,依据整体架构需要进行技术选型。

3、制作技术规格说明

在整个研发过程中始终保持与开发人员保持沟通,以保证开发者依照原定的架构意图去实现各项功能。


02 架构师必备能力

1、架构师能力图谱

架构师的技术实力要强,具备技术广度,同时,还要注重其它软实力,譬如抽象能力、应急能力、管理能力、沟通能力、技术实力等。

干货:2019 最新架构师必会的13大技能总结|含架构图谱+面试题

2、架构师必知必会技术

架构师除了能撸一手高质量代码,至少精通1-2门技术,还要具备足够的技术广度,从软件到硬件、开发到测试、运维到安全等等,都要面面俱到去了解掌握。当然了,人的精力是有限的,我们不可能做到每个领域都去深入,但至少需要知道其概念、运行原理、如何运用等。

架构师必知必会技术范围大致如下:

1) 集合框架(源码)

    List

    ArrayList

    LinkedList

    Set:HashSet、TreeSet

    Map:TreeMap、ConcurrentHashMap

    Collection的synchronized等方法

2)、工具类

    Google guava(推荐)

    Apache common lang/BeanUtils/Collctions/IO

    JSON

    fastjson

    gson

    jackson

3) 框架

    Spring:IOC、AOP、常用注解

    SpringMVC

    Spring Boot

    Mybatis

    Shiro

    Netty

4) 安全

    单项散列算法:MD5、SHA

    对称加密:DES

    非对称加密:RSA、HTTPS

5) JVM

    Java虚拟机(Hotspot实现)

    类加载机制

    内存模型

    GC:回收算法、垃圾收集器

    调优

    工具:jstack、jmap、jconsole

6) 并发编程

    Executor框架

    Fork/join

    happen-before

    数据结构:ConcurrentHashMap

    线程池:参数设置、原理、拒绝策略

    线程状态

    Lock/synchronized

    原子操作类

    并发工具类:CountDownLatch、Semaphore、CyclicBarrier、Exchanger

    IO、BIO、AIO、NIO

7) 数据

    NoSQL:MongoDB

    分布式缓存:Memcached、Redis(推荐)

    关系数据库

    MySQL

    引擎

    InnoDB(支持事务)

    分库分表

    Cobar

    Mycat

8) SQL优化

    索引

    主键索引

    组合索引

    explain

    存储过程

    SQL注入:使用#而不使用$

9) 事务隔离级别(ACID)

    原子性

    一致性

    隔离性

    持久性

10) 锁

    表锁

    行锁

    悲观锁

11) 大数据

    Hadoop

    Hbase

    Spark

    Storm/JStorm

12) 算法与数据结构

    数组

    链表

    栈

    队列

    树

    二叉树

    B Tree/B+ Tree

    红黑树

    哈希

13) 分布式系统

    从集中到分布式

    分布式Session:Session复制、Session绑定、Session服务器(靠谱)

    分布式缓存:Redis、一致性Hash算法

    数据库:读写分离、主从热备、分库分表、一致性

    分布式事务、CAP、BASE、2PC/3PC

    分布式锁

    Redisson

    负载均衡、硬件、F5、软件、LVS、Nginx

    消息队列:RabbitMQ、ZeroMQ、ActiveMQ、Kafka(推荐)

    服务化:服务注册与发现、Zookeeper

    架构

    微服务

    Spring Boot

    Dubbo

    RPC

    SOA

    虚拟化

    Docker

03 架构师学习资料包
原文链接:https://blog.csdn.net/m0_60478027/article/details/119116501

扩展阅读1:

混!架构师必备理论和基础_caofeng2012的技术博客_51CTO博客

扩展阅读2:

https://www.jianshu.com/p/73424f99ac5c

Java架构师主要需要做哪些工作呢?

1、负责设计和搭建软件系统架构(平台、数据库、接口和应用架构等),解决开发中各种系统架构问题。
2、优化现有系统的性能,解决软件系统平台关键技术问题攻关、核心功能模块设计、核心代码开发。
3、在项目需求不断细化的工程中校正整体的架构设计,以及详细模块拆分设计。
4、营造技术学习氛围,带领团队不断完善开发开发方法及流程,提升开发效率与质量,加强技术标准及规范。
5、带领团队攻克例如大数据量、高并发、高稳定性等带来的各种挑战及技术难关。
6、责任心强,有团队合作精神,工作认真负责高效并具有一定抗压能力。
7、参与讨论公司产品发展方向,完整的规划和把握产品研发架构。

技能:

1 开发细节类

1、并发编程

JAVA内存模型(JMM)

  • java当中的线程通讯和消息传递
  • 什么是重排序和顺序一致性?Happens-Before?As-If-Serial?

Synchronized的概念和分析

  • 同步、重量级锁以及Synchronized的原理分析
  • 自旋锁、偏向锁、轻量级锁、重量级锁的概念、使用以及如何来优化他们

Volatile和DCL的知识

  • Volatile的使用场景和Volatile实现机制、内存语义、内存模型
  • DCL的单例模式,什么是DCL?如何来解决DCL的问题

并发基础之AQS的深度分析

  • AbstractAueuedSynchronizer同步器的概念、CLH同步队列是什么?
  • 同步状态的获取和释放、线程阻塞和唤醒

Lock和并发常用工具类

  • java当中的Lock、ReentrantLock、ReentrantReadWriteLock、Condition
  • java当中的并发工具类CyclicBarrier、CountDownLatch、Semphore
  • java当中的并发集合类ConcurrentHashMap、ConcurrentLinkedQueue......

原子操作常用知识讲解

  • 基本类型的原子操作比如经典的AtomicBoolean、AtomicLnteger、AtomicLong
  • 数组类型的原子操作代表几个类AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray
  • 引用类型的原子操作的典型AtomicReference、AtomicReferenceFieldUpdater......
  • CAS的概念和知识、Compare And Swap 以及他的缺陷

线程池和并发并行

  • Executor、ThreadPoolExecutor、Callable &Future、ScheduledExecutorService
  • ThreadLocal、Fork & Join?什么是并行?线程池如何保证核心线程不被销毁?

2、框架和源码应用

  • mybatis应用和源码解析
  • mybatis优缺点、spring 与mybatis 集成
  • Config、Sql配置、Mapper配置、有几种注册mapper的方法,优先级如何?
  • mybaits的一级缓存、二级缓存、mybatis的二级缓存为什么是鸡肋?
  • 通用mapper的实现、mybaits编写sql语句的三种方式
  • @MapperScan的源码分析?mapperScan如何生效的?
  • mybatis如何扩展spring的扫描器的、mybatis扫描完之后如何利用FactoryBean的?
  • mybaits底层如何把一个代理对象放到spring容器中?用到了spring的哪些知识?
  • mybaits和spring的核心接口ImportBeanDefinitionRegistrar之间千丝万缕的关系
  • 从原来来说明mybaits的一级缓存为什么会失效?spring为什么把他失效?有没有办法解决?
  • 从mybatis来分析mybatis的执行流程、mybaits的sql什么时候缓存的?缓存在哪里?
  • mybaits当中的方法名为什么需要和mapper当中的id一致?从源码来说明

tomcat源码解析

  • tomat的总体概述和tomcat的启动流程源码分析
  • tomcat当中web请求的源码分析?一个http如何请求到tomcat的?tomcat如何处理的?
  • tomcat的协议分析,从源码来分析tomcat当中的各种详细配置的意义
  • tomcat和apache、nginx等等主流静态服务器的搭配使用
  • tomcat的性能调优?生成环境上如何让你的tomcat容器的性能达到最高

spring源码分析

  • spring的基本应用和spring源码的编译
  • java 混乱的日志系统,Jul、jcl、log4j、slf4j.....
  • spring4和spring在日志方面的源码对比
  • AspectJ和springAop,aspectj的静态织入
  • JDK动态代理的源码分析,JDK是如何操作字节码
  • spring通过cglib完成AOP,cglib如果完成方法拦截
  • AnnotationAwareAspectJAutoProxyCreator如何完成代理织入的
  • BeanDefinition是什么东西,sping当中的各种BeanDefinition的作用
  • BeanDefinition有什么作用?如果来改变一个bean的行为
  • BeanDefinitionRegistry的作用,源码分析
  • BeanNameGenerator如何改变beanName的生成策略
  • BeanPostProcessor如何插手bean的实例化过程、经典的应用场景有哪些?spring内部哪里用到了这个接口
  • BeanFactoryPostProcessor和BeanPostProcessor的区别、经典应用场景、spring内部如何把他应用起来的
  • BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor的关系已经区别,spring底层如何调用他们
  • ConfigurationClassPostProcessor这个类如何完成bean的扫描,如何完成@Bean的扫描、如何完成对@Import的解析
  • @Imoprt的三种类型,普通类、配置类、ImportSelector
  • 如何利用ImportSelector来完成对spring的扩展?
  • @Configuration这注解为什么可以不加?加了和不加的区别,底层为什么使用cglib
  • @Bean的方法是如何保证单例的?如果不需要单例需要这么配置?为什么需要这么配置
  • springFacoryBean和BeanFacory的区别,有哪些经典应用场景?spring的factoryMethod的经典应用场景?
  • ImportBeanDefinitionRegistrar这个接口的作用,其他主流框架如何利用这个类来完成和spring的结合的?
  • spring是什么时候来执行后置处理器的?有哪些重要的后置处理器,比如CommonAnnotationBeanPostProcessor
  • CommonAnnotationBeanPostProcessor如何来完成spring初始化方法的回调。spring内部的各种Procesor的作用分别是什么
  • spring和springBoot当中的各种@Enablexxxx的原理是什么?如何自己实现一个?比如动态开启某某些自定义功能
  • spring如何来完成bean的循环依赖并且实例化的,什么是spring的IOC容器,怎么通过源码来理解?
  • 其他,比如Bean的实例化过程,源码中的两次gegetSingleton的不同和相比如SpringMvc的源码分析等等......

3、Spring微服务

Spring Cloud

  • Eureka的源码分析服务注册和服务发现以及心跳机制和保护机制,对比eureka与zookeeper,什么是CAP原则?
  • Ribbon源码分析和客服端负载均衡,客户端负载均衡?服务端负载均衡? Ribbon核心组件IRule以及重写IRule
  • Fegin源码分析和声明式服务调用,Fegin负载均衡,Fegin如何与Hystrix结合使用? 有什么问题?
  • Hystrix实现服务限流、降级,大型分布式项目服务雪崩如何解决? 服务熔断到底是什么?一线公司的解决方案
  • HystrixDoashboard如何实现自定义接口降级、监控数据、数据聚合等等
  • Zuul统一网关详解、服务路由、过滤器使用等,从源头来拦截掉一些不良请求
  • 分布式配置中心Config详解,如何与github或是其他自定义的git平台结合、比如gitlab
  • 分布式链路跟踪详解,串联调用链,,让Bug无处可藏,如何厘清微服务之间的依赖关系?如何跟踪业务流的处理顺序?

Spring Boot

  • Spring Boot的源码分析和基本应用、利用springmvc的知识模拟和手写一个springboot
  • springmvc的零配置如何实现的?利用servelt3.0的哪些新知识?在springmvc中如何内嵌一个tomcat,如何把web.xml去掉
  • springboot当中的监听器和设计模式中观察者模式的关系、模拟java当中的事件驱动编程模型
  • springboot的启动流程分析、springboot如何初始化spring的context?如何初始化DispacterServlet的、如何启动tomcat的
  • springboot的配置文件类型、配置文件的语法、配置文件的加载顺序、模拟springboot的自动配置
  • springboot的日志系统、springboot如何设计他的日志系统的,有什么优势?如何做到统一日志的?
  • 什么是Docker、为什么要使用他、和开发有什么关系?能否带来便捷、Docker简介、入门,Docker的架构是怎样的?
  • Docker的三大核心概念:镜像(Images)、容器(Containers)、仓库服务注册器(Registry)他们分别是什么?
  • Docker的基础用法以及Docker镜像的基本操作
  • 容器技术入门、Docker容器基本操作、容器虚拟化网络概述以及Docker的容器网络是怎样的?
  • 程序员如何利用Dockerfile格式、Dockerfile命令以及docker build构建镜像
  • Compose和Dockerfile的区别是什么?Compose的配置文件以及使用Compose运行容器、Docker的实战应用

4、性能调优

mysql性能调优

  • mysql中为什么不使用其他数据结构而就用B+树作为索引的数据结构
  • mysql执行计划详解&mysql查询优化器详解
  • mysql索引优化实战,包括普通查询、group by、order by

java数据结构算法

  • hash算法详解、java当中hashmap源码解析、手写一个hashmap
  • 从源码理解hashmapJDK7和JDK8的变化、为什么有这样的变化,Java8新特性
  • 顺序存储、双向链表、单向链表、java当中linkedList的源码分析
  • java当中线性结构、树形结构以及图形结构分析以及应用场景和经典使用
  • 大数字运算和经典排序、二叉树红黑树排序、查找

JVM性能调优

  • java内存模型总体概述、类加载过程和classloader、运行时数据区当中的总体内容、编译原理
  • 内存区域与内存溢出异常、虚拟机对象、程序计数器、java栈、本地方法栈、操作数、方法区、堆内存和元数据等等
  • Classloader的知识详细、默认全盘负责机制、从JDK源码来理解双亲委派模式、如何打破双亲委派?为什么需要打破?
  • 虚拟机性能监控与故障处理、jvm基本命令,jinfo命令的使用jmap命令使用、jstak命令的使用、使用jvisualvm分析
  • 垃圾收集器与内存分配策略、垃圾回收算法与基础、串型收集器、并行收集器、内存分配与回收策略。
  • 程序编译与代码优化、运行期优化、编译期优化、JVM调优的本质是什么?什么是轻gc?什么是Full gc?如何调优
  • JVM执行子系统、类文件结构、类加载机制、字节码执行引擎、字节码编译模式、如何改变字节码编译模式?

5、互联网工程

Maven

  • 整体认知maven的体系结构
  • maven核心命令
  • maven的pom配置体系
  • 搭建Nexus私服

Git

  • 动手搭建Git客户端与服务端
  • Git的核心命令
  • Git企业应用
  • git的原理,git底层指针介绍

Linux

  • Linux原理、启动、目录介绍
  • Linux运维常用命令、Linux用户与权限介绍
  • shell脚本编写

6、分布式

分布式协调框架(Zookeeper)

  • 什么是分布式系统?分布式系统有何挑战?Zookeeper快速入门&集群搭建基本使用
  • Zookeeper有哪些常用命令以及注意事项、zkclient客户端与curator框架有什么功能以及如何使用
  • 手写Zookeeper常见应用场景:分布式配置中心、分布式锁、分布式定时任务
  • Zookeeper核心概念znode、watch机制、序列化、持久化机制讲解及其源码解析
  • Zookeeper怎么解决分布式中的一致性问题?领导选举流程讲解及其源码解析

RPC服务框架(Dubbo)

  • 手写RPC框架以及为什么要使用Dubbo? 传统应用系统如何演变成分布式系统详解
  • Dubbo的六大特性是什么?对企业级开发有何好处?Dubbo的作用简要说明、快速演示Dubbo调用示例
  • Dubbo中协议、注册中心、动态代理机制是怎么达到可扩展的?Dubbo的扩展机制源码解析
  • Dubbo从服务提供者到注册中心到消费者调用服务中间的流程源码解析
  • Dubbo的监控中心以及管理平台的使用,方便企业级开发与管理

分布式数据缓存(Redis)

  • 关系型数据库瓶颈与优化、ehcache和redis的对比?nosql的使用场景
  • Redis基本数据类型、比如map的使用场景?有什么优缺点?什么时候用map等等
  • Redis高级特性、如何来理解redis的单线程但是高性能?如何理解redis和epoll
  • Redis持久化、什么情况下需要持久化?方案是什么?有什么优缺点?如何优雅的选择持久化方案
  • Redis项目中应用、reids的高级命令mget、scan?为什么有scan这条命令,如何理解redis的游标?
  • 单机版redis的安装以及redis生产环境启动方案
  • redis持久化机对于生产环境中的灾难恢复的意义
  • redis主从架构下如何才能做到99.99%的高可用性
  • 在项目中重新搭建一套主从复制+高可用+多master的redis cluster集群
  • redis在实践中的一些常见问题以及优化思路(包含linux内核参数优化)
  • redis的RDB持久化配置以及数据恢复实验
  • redis的RDB和AOF两种持久化机制的优劣势对比

分布式数据存储(mycat)

  • 分库分表场景介绍
  • Mycat原理解析
  • 分库分表实战

分布式Rabbitmq

  • RabbitMQ环境安装&RabbitMQ整体架构与消息流转&交换机详解
  • 消息如何保障 100% 的投递成功方案&企业消息幂等性概念及业界主流解决方案
  • Confirm确认消息详解&Return返回消息详解&消费端的限流策略&消费端ACK与重回队列机制
  • SpringAMQP用户管理组件-RabbitAdmin应用&SpringAMQP消息模板组件-RabbitTemplate实战
  • SpringAMQP消息容器-SimpleMessageListenerContainer详解&SpringAMQP消息适配器-MessageListenerAdapter使用
  • RabbitMQ与SpringBoot2.0整合实战&RabbitMQ与Spring Cloud Stream整合实战
  • RabbitMQ集群架构模式&RabbitMQ集群镜像队列构建实现可靠性存储&RabbitMQ集群整合负载均衡基础组件HaProxy_



作者:为爱放弃一切
链接:https://www.jianshu.com/p/73424f99ac5c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2 运维框架类
操作系统
网络
存储
容器
DevOps
数据库
中间件


作者:为爱放弃一切
链接:https://www.jianshu.com/p/73424f99ac5c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

推荐3,全面,java架构师必会知识清单:

Java架构师必会的知识清单,如何让你技术上的提升面试时的丰收 - 知

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值