程序人生我爱编程

Java技术大牛化身“老司机”带你弯道超车(成为架构师必看知识点

2018-05-12  本文已影响34人  4bfeaf8c2970

“当我活着的时,我要做生命的主宰,而不做它的奴隶。”从小到大我就不相信命这一说。没有别人显赫家庭背景,没有别人做官的父亲,没有别人家产万贯,只有凭自己的双手去创造自己的未来。

现在在一线有了10年行业经验,其中3年外企、7年互联网工作经验。曾就职于惠普、大众点评、互联网金融行业,拥有了丰富的前后台大型项目架构经验。也积累下来了一些感悟,可能有些地方略有偏颇,就当抛砖引玉,聊为笑谈。

行军打仗,你需要一个向导;如果没有向导,你需要一个地图;如果没有地图,至少要学习李广,找一匹识途的老马;而技术学习,你需要有“贵人”带路。

有些人在有1-5工作经验的时候,会面对流行的技术不知从何下手,想要突破现有的技术瓶颈,却不知道从何下手。

有些人在公司待久了之后,过得太安逸,但跳槽时却总是面试碰壁。

有些人会觉得自己很牛B,一般需求都能搞定。但是不经意间却发现所学的知识点没有系统化,很难在技术领域继续突破。

怎么说呢,这些情况相信会有很多人在过程中。不过我不是来揭短的,接下来进入正文

我根据自己的经验总结了一下,一名架构师应该掌握的专业知识点(希望能让大家找到学习技术的一个方向,少走一些弯路。如果需要可以加入我的Java架构/多线程/高性能交流学习群:454377428):

一、分布式专题

分布式计算就是通过计算机网络将计算工作分布到多台主机上,多个主机一起协同完成工作。

我试着列一下相关知识吧。

网络通讯,网络是分布式的基础,对分布式的理解建立在对网络的理解上,包括:

OSI模型的7层

TCP/IP,DNS,NAT

HTTP,SPDY/HTTP2

Telnet

网络编程,是通过程序在多个主机之间通信。包括:

Socket

多线程

非阻塞IO

网络框架

Netty

Mina

ZeroMQ

操作系统的网络部分

RPC,Socket使用不是很方便,很多分布式应用是基于RPC的,包括:

同步RPC

异步RPC

主要的一些RPC协议

RMI

Rest API

Thrift

集群,分布式计算离不开集群。集群就是多台主机被当作一个系统

集群类型

高可用,如主机备机切换,冷备,热备,双活

伸缩性,如Web服务器集群,数据库服务器的Sharding

并行计算,如网格,大数据

集群相关技术,包括:

高可用性,保证服务一直能够被访问,延长MTBF,缩短MTTR

冗余的设备

多副本,为了避免单点失效

负载均衡,如何将大量工作负载分配到多个主机上,最大化吞吐量,最小化平均响应时间,最大化资源利用率。

伸缩性(横向),能够添加计算机和设备来应对增长的计算压力

分片(Sharding),把数据分成多个数据集,由多个服务器来分别处理。

自动分片

容错性,当硬件或软件发生故障,能够继续运转

故障检测,以及故障预测

心跳包

告警

性能预警

故障转移,当出现错误,如何解决,为了高可用性和容错性

分布式一致性,在分布式环境中如何维持状态的一致性,严格一致性,还是最终一致性

集群状态协调,如Zookeeper,etcd等。

分布式锁,在分布式环境中如何进行加锁

选主,当Master宕机,如何选择出新的Master,协议如Raft

一致性哈希,如何将数据分布到集群中的多个主机。

分布式事务,保证在多台服务器上完成的操作符合事务的ACID属性。

安全,网络通常需要保证安全。

身份认证,如何验证人或机器是他们声明的身份

基于用户名/口令

基于数字证书

私密性,如何防止窃听和嗅探

对称加密

非对称加密

完整性,如何保证数据不被篡改

安全散列

消息认证码(MAC)

不可否认性

基于数字证书的数字签名和验签

基于密钥的散列,如HMAC

互联网站的基本架构

页面缓存

负载均衡器,如HAProxy,Nginx

分布式缓存,如Memcache,Redis

消息队列,如ActiveMQ,Kafka

分布式框架

关系型数据库(Sharding,主从同步)

NoSQL

HBase,基于HDFS和Zookeeper的NoSQL

Cassandra,无主集群

大数据

HDFS,分布式文件系统

MapReduce,将数据处理任务拆分为多个工作,通过集群来完成。

Spark,提供分布式的数据集抽象

下图是作为程序员最需要了解的分布式体系:

二、微服务专题

微服务架构分为四大模块,围绕微服务的通用模式,集合微服务必须要掌握的知识点,使微服务的开发更加方便、快捷,让微服务应用更加稳定、可用。

微框架

与微服务之间的关系

热部署实战

核心组件:Starter、Actuator、AutoConfiguration、Cli

集成Mybaits实现多数据源路由实战、集成Dubbo实战、集成Redis缓存实战

集成Swagger2构建API管理及测试体系

实现多环境配置动态解析

Spring Cloud

Eureka注册中心

Ribbon集成REST实现负载均衡

Fegion声明式服务调用

Hystrix服务熔断降级方式

Zuul实现微服务网关

Config分布式统一配置中心

Sleuth调用链路跟踪

BUS消息总线

基于Hystrix实现接口实现降级

集成Spring Cloud实现统一整合方案

Docker虚拟化

Docker的镜像、仓库、容器

Docker File构建的LNMP环境部署个人博客Wordpress

Docker Compose构建LNMP环境部署个人博客Wordpress

Docker网络组成、路由互联、Openvswitch

基于Swarm构建 Docker集群实战

Kubernetes简介

微服务架构

SOA架构和微服务架构之间的区别和联系

如何设计微服务及其设计原理

解惑Spring Boot流行因素及能够解决什么问题

什么事Spring Cloud,为何要选择Spring Cloud

基于全局分析Spring Cloud各个组件所解决的问题

下图是作为程序员最需要了解的微服务体系:

三、并发编程专题

Java线程

线程模型

Java线程池

Future(各种Future)

Fork/Join框架

volatile

CAS(原子操作)

AQS(并发同步框架)

synchronized(同步锁)

并发队列(阻塞队列)

下图是作为程序员最需要了解的并发编程体系:


四、工程化专题

工欲善其事必先利其器,工具对Java程序员的重要性不言而喻现在有很多库、实用工具和程序任Java开发人员选择。下图列出的工具都是程序员必不可少的工具

下图是作为程序员最需要了解的工程化体系:

五、源码分析专题

程序员每天都和代码打交道。经过数年的基础教育和职业培训,大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。这种怪状,真要追究起来,怪不得程序员这个群体本身 —— 它是两个原因造成的。

我们所有的教育和培训都在强调怎么写代码,并没有教大家如何读代码

大多数工作场景都是一个萝卜一个坑,我们只需要了解一个系统的局部便能开展工作,读不相干的代码,似乎没用

我常常把写代码和写作进行类比 —— 二者有很多相通之处;但从培养写代码和写作的过程来看,二者又有很多不同。我们的写作能力,是建立在大量基础阅读的基础上的,是除了学习语法和文法知识外,从小学开始,经年累月,通过阅读各种不同层次的名家的作品,再加上各种各样的写作训练,累积出来的;而我们的写代码的能力,在了解和掌握了语法/文法之后(学习和抄写 example 代码也算语法/文法学习的一部分),跳过了大量阅读名家作品的过程,直接 biu 地一下就自动养成了:学会基础的语法和试验了若干 example 后,我们就火箭般蹿到了自己写代码打怪赞经验的阶段。这样略过大量阅读代码的阶段有三个害处:

写代码的基础是不牢靠的,打怪升级的过程也是最慢的。道理很简单 —— 前辈们踩过的坑,总结的经验教训,你都不得不亲自用最慢的法子一点点试着踩一遍。

很容易养成 stackoverflow driven 的写代码习惯 —— 遇到不知如何写的代码,从网上找现成的答案,找个高票的复制粘贴改吧改吧,凑活着完成功能再说。写代码的过程中遇到问题,开启调试模式,要么设置无数断点一步步跟踪,要么到处打印信息试图为满是窟窿的代码打上补丁,导致整个写代码的过程是一部调代码的血泪史。(见我的文章:你要避免的软件开发模式)

你周围最强的那个工程师的开发水平的上限就是你的上限。

下图是作为程序员最需要了解的源码体系:


六、性能优化

性能优化,简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。性能问题永远是永恒的主题之一,而优化则更需要技巧。

下图是作为程序员最需要了解的性能优化体系:

这些知识点都是我从业多年总结出来的的经验,都是当前最主流的技术。想学习这些技术的朋友可以加群:454377428。群里会分享这些技术知识点供大家学习免费下载

上一篇下一篇

猜你喜欢

热点阅读