java 互联网 架构 java互联网架构师难学吗?_java队列


java 互联网 架构 java互联网架构师难学吗?_java队列_02


宏观方面
Java架构师,应该算是一些Java程序员们的一个职业目标了吧。很多码农码了五六年的代码也没能成为架构师。那成为Java架构师要掌握哪些技术呢,总体来说呢,有两方面,一个是基础技术,另一个就是组织能力和提出解决方案能力了。

进阶之路不是一个简单的过程,需要你做好以长期的规划,下面大体的划分三个过程:

前三年

前三年对于程序员来说是第一个门槛,是一个打基石的过程,这个阶段将会淘汰掉一批不适合写代码的人。初入社会我们知道如何团队协作、如何使用项目管理工具、项目版本如何控制、我们写的代码如何测试如何在线上运行等等,积累了一定的开发经验,也对代码有了一定深入的认识,是一个比较纯粹的Coder的阶段。

三年到五年

程序员的第二个门槛。有些人在三年里,除了完成工作,在空余时间基本不会研究别的东西,这些人永远就是个Coder,年纪大一些势必被更年轻的人给顶替;有些人在三年里,除了写代码之外,还热衷于研究各种技术实现细节、看了N多好书、写一些博客、在Github上分享技术,这些人在五年后必然具备在技术上独当一面的能力并且清楚自己未来的发展方向,从一个Coder逐步走向系统分析师或是架构师,成为项目组中不可或缺的人物。

五年后

十年又是另一个门槛了,转行或是继续做一名程序员就在这个节点上。如果在前几年就抱定不转行的思路并且为之努力的话,那么在十年的这个节点上,有些人必然成长为一名对行业有着深入认识、对技术有着深入认识、能从零开始对一个产品进行分析的程序员,这样的人在公司基本担任的都是CTO、技术专家、首席架构师等最关键的职位,这对于自己绝对是一件荣耀的事,当然老板在经济上也绝不会亏待你。

如果你是想成为Java架构师,那么你首先要是一个Java高级工程师。也就是说,基础必须牢固,对Java的了解全面而且深入。熟练使用各种框架,并知道它们实现的原理。

Jvm虚拟机原理、调优操作,懂得jvm能让你写出性能更好的代码;池技术也是要掌握的,对象池、连接池、线程池都要会;Java反射技术,写框架必备的技术;Java各种集合对象的实现原理,了解这些可以让你在解决问题时选择合适的数据结构,高效地解决问题,写出代码;nio,注意"直接内存"的特点,使用场景。

还没完,除了上边那些,你还要熟练使用各种数据结构和算法,数组、哈希、链表、排序树等等都是;熟练使用Linux操作系统,也是必备的;熟悉各种协议,比如tcp协议,创建连接三次握手和断开连接四次握手的整个过程,不了解就没法对高并发网络应用做优化,http协议,session和cookie的生命周期与关联;熟悉系统集群、负载均衡、反向代理、动静分离,网站静态化;懂得分布式存储系统storm,Hadoop,elasticsearch了解他们的优缺点,适用场景,以及分布式缓存技术memcached,redis,提高系统性能必备。

以上这些够了吗?当然不。还有呢,工具nginx必备技能超级好用,高性能,基本不会挂掉的服务器,功能多多,解决各种问题;掌握数据库的设计能力,Mysql必备,最基础的数据工具,主要是免费且好用,对它基本的参数优化,慢查询日志分析,主从复制的配置,至少要成为半个mysql dba,其他数据库也要至少略懂一二;还有队列中间件也要会操作,如消息推送,可以先把消息写入数据库,推送放队列服务器上,由推送服务器去队列获取处理,这样就可以将消息放数据库和队列里后直接给用户反馈,推送过程则由推送服务器和队列服务器完成,好处异步处理、缓解服务器压力,解藕系统。

说了这么多,其实都还是纯粹的基础技术,并且还没有列全。要想成为架构师,除了这些之外,就还要具备我们说的组织能力和解决问题的能力了。

架构师思考的是全局的东西,是如何组织系统,以达到业务要求、性能要求。架构师要针对业务特点、系统的性能要求提出解决问题成本最低的设计方案。为了架构而架构,这是绝对不可取的。你想啊,人家一个几百人用户的系统,访问量不大,数据量也不大,你给人家上集群、分布式储存、高端服务器,肯定能到达性能要求,但是成本高啊。要知道,架构师的作用,一是满足业务需求,二是最低的硬件网络成本和技术维护成本。
架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做到易于升级;否则等系统瓶颈来了,出问题了再去出方案,或现有架构无法扩展直接扔掉重做,或扩展麻烦问题一大堆,这会对企业造成损失。
其实这些最后的统筹能力还是建立在过硬的专业基础和项目经验之上。

掌握下图的核心技术,可以说已经很不错了,如下,可以作为后边学习的拓扑图!


java 互联网 架构 java互联网架构师难学吗?_架构师_03


java 互联网 架构 java互联网架构师难学吗?_java 互联网 架构_04


java 互联网 架构 java互联网架构师难学吗?_java队列_05


java 互联网 架构 java互联网架构师难学吗?_java架构师_06


java 互联网 架构 java互联网架构师难学吗?_java 互联网 架构_07


java 互联网 架构 java互联网架构师难学吗?_java 互联网 架构_08


如果有能力最好也要学一些大数据的东西,如下:


java 互联网 架构 java互联网架构师难学吗?_Java_09


主要罗列了下面这些:

  • 工作相关使用到的JDK类及其相关源码、机制
  • 设计模式,设计模式在工作中用到了哪些,具体使用场景
  • 并发类的相关知识,线程安全、锁机制、信号量、闭锁、栅栏、线程池等
  • 框架相关,Spring相关机制、Spring MVC相关机制、MyBatis相关机制、使用的细节点、框架实现原理等
  • JVM,内存布局、垃圾识别算法、垃圾回收算法、垃圾收集器、类加载机制、内存模型、出现内存问题时定位问题的方法等
  • 数据库的基本数据类型、索引机制、各引擎区别、锁机制、慢SQL定位及优化等
  • 缓存机制,这里的机制指的是缓存加载、缓存击穿、缓存雪崩这些机制及其相关应对方案,用过Redis、MemCache的最好理解一下它们的原理或者缓存提供的一些高级功能,集群如何实现
  • 分布式的一些知识,比如CAP理论、数据一致性的几种解决方案、分布式事务如何处理、分库分表怎么做、现有的相关解决方案等
  • NIO的作用,epoll模型是否知道一些,Netty的相关机制、Netty相比原生NIO的优点、半包拆包、断线重连解决方案等
  • Web相关,Get与Post的区别、转发与重定向的区别、跨域问题如何解决、如何保证接口幂等性等
  • 网络层相关,三次握手和四次握手、全连接队列和半连接队列、负载均衡算法等
  • 其他中间件,MQ作用和使用场景、服务化治理框架的作用和使用场景、配置中心的作用和使用场景等
  • 数据结构,数组、链表、栈、队列、树等优缺点,在什么场景下使用什么数据结构
  • Linux相关知识,基本命令的使用,排查日志、定位问题,项目或者第三方组件的基本运维等
  • 基本的大数据工具使用,不求原理了解很深,但要知道使用场景,会用,然后排查解决问题;

结尾赠语:有了计划,剩下的就是执行了,执行了,就是成功了,就是那么简单~~~