既然总有人要成为架构师,为什么不能是你呢?

 

对于任何一个Java开发人员来说,架构师都是一个令人向往的角色。那么从程序员与架构师有没有比较明显的区别呢?其实架构师和程序员的界限并不是很大,比如现在仍然在每天写代码。其实成长首先来自于自身的学习,而阅读成熟项目的代码会使人受益匪浅,其次就是来自于所从事领域的经验,要了解分布式系统的特点,在做项目时,要能够关注性能、扩展性、可靠性、可用性等指标。

既然总有人要成为架构师,为什么不能是你呢?

架构师其实就是一个漫长的积累过程,从准备期到动荡期我们都是不停的探索,学习。大部分的架构师的年龄都是在35岁左右,这个阶段就是程序员的黄金期。那么我们如何以一个架构师的标准来加强自己的能力呢?程序员要成为一名架构师发展,需要进一步加强技能的修养。,对于互联网公司来言,最重要的技能是对网络和分布式系统的理解,网络上面的书籍很多,比较麻烦的是分布式系统,除了分布式在现在大型互联网企业中,对于技术知识,个人推荐还得掌握高性能、深入浅出。性能调优、Spring,JVM等技术。当然了,良好的驾驭管理开发团队的能力,良好的人格修养,能够让架构师在开发项目中游刃有余,不会出现意料之外的干扰,更能从内散发出人格魅力。

很多问题其实答案很简单,但是背后的思考和逻辑不简单,要做到知其然还要知其所以然。如果想学习Java工程化、高性能及分布式、深入浅出。性能调优、Spring,MyBatis,Netty源码分析的朋友可以加Java进阶群:171662117,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

那么一名架构师应该掌握那些基本技能呢?以下是我根据自己十余年工作经验总结出来的一下知识点,相信这些技术你都能掌握,并且熟练使用知道那些底层原理的时候绝对少不了你的offer

一、分布式架构体系

分布式怎么来的。传统的电信、银行业,当业务量大了之后,普通服务器CPU/IO/网络到了100%,请求太慢怎么办?最直接的做法,升级硬件,反正也不缺钱,IBM小型机,大型机,采购了堆硬件。

但是互联网不能这么干,互联网没有那么财大气粗,还有很多初创,能不能赚钱还不知道。所以就有了软件方面的解决方案:分布式系统,简单说,就是一台服务器不行,我用两台、10台、100台...这就要软件系统需要支持。

那么多台机器,我如何让他们协同工作,这就需要一个调度中心(或注册中心);肯定涉及到机器间通信,那么需要一个高效的RPC框架;一个请求过来了,如何分发,需要一个请求分发系统(负载均衡);然后还要考虑每个角色都不能成为性能瓶颈;还有要能方便的进行横向扩展,还有考虑单节点故障。

需要分布式系统,并发量肯定不低,

那么有了上面的还是不够的,还需要考虑cache、mq、job、db等方面的问题。cache,现在第三方缓存也比较成熟,redis/memcache等;mq,rabbitmq,kafka等等也不错;job,现在第三方任务框架有elasticjob和tbschedule,或者你用quartz也支持分布式环境下的任务,不过quartz就没有运维工具了。DB,数据库最好在项目前期就考虑好业务拆分,系统拆分后DB对应的垂直拆分,后期可做读写分离,一主多从,甚至多主多从,业界也有了相应的解决方案。

总结一下,首先要了解分布式原理,然后对应着每个功能区找业界内成熟的产品来实时。互联网行业,基本都有开源的产品供你选择。

二、微服务架构

概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。

定义:围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。

本质:用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。

三、阅读源码、分析源码

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

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

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

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

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

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

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

四、工具的使用

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

五,并发编程

1、Java线程

2、线程模型

3、Java线程池

4、Future(各种Future)

5、Fork/Join框架

6、volatile

7、CAS(原子操作)

8、AQS(并发同步框架)

9、synchronized(同步锁)

10、并发队列(阻塞队列)

五、性能优化

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

作为一名程序员,不管之后你选择什么样的发展路线,在生涯前期你的技术能力一定要是过关的,这就需要达到一定的深度和广度。

END

说到最后给大家免费分享一波福利吧!我自己收集了一些Java资料,里面就包涵了一些BAT面试资料,以及一些 Java 高并发、分布式、微服务、高性能、源码分析、JVM等技术资料

资料获取方式:请加群BAT架构技术交流群:171662117

不要再拿没时间当做欺骗自己的借口,到最后只会发现,别人的工资正在翻倍涨,而你的却是蚂蚁爬爬。

既然总有人要成为架构师,为什么不能是你呢?

既然总有人要成为架构师,为什么不能是你呢?

猜你喜欢

转载自blog.csdn.net/leonardc/article/details/88890760