知道这些知识点的人,据说都已经成为架构师了


成功的反义词不是失败,而是从未行动。有一天你总会明白,遗憾比失败更让你难以面对。

不是所有人都义务忍受你的不足带给他们的痛苦。无论是谁既然选择包容你,那么你就要懂事,知理,懂得感恩。

今天评论了很多博客,突然理解评博客的好处,既有技术上的拓展,又有心灵的洗礼。吾日三省吾身,只说不做,有何价值。

其实回想以往的经历,不是没有改变,只是相比改变的速度比较慢,可是时代就是这样的,都在飞速进步,不用停下脚步,只有脚步稍慢就是自己的错,跟不上速度的那就需要更加努力吧。关于学习,最好的时间就是现在。

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

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

很多问题其实答案很简单,但是背后的思考和逻辑不简单,要做到知其然还要知其所以然。如果想学习Java工程化、高性能及分布式、深入浅出。性能调优、Spring,MyBatis,Netty源码分析的朋友可以加Java进阶群:454377428,群里有阿里大牛直播讲解技术,以及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、并发队列(阻塞队列)

下图是我总结的并发编程的技术攻克点:

五、性能优化

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

每晚晚上八点到十点半,阿里大牛直播授课Java工程化、高性能及分布式、性能调优、Spring,MyBatis,Netty源码分析等知识点讲解。有需要的朋友可以加入我们的Java架构/分布式/高性能群:454377428

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值