文章转自:糖疯子 <https://www.jianshu.com/u/4a62d157ead3> (文末有彩蛋)

 

说到程序员的薪资我想也就只有“传说中的架构师”的薪资是足够诱惑到大家的,年薪40W-80W对于他们来说是比较简单的一件事,今天我们就来聊聊“架构师”。


架构师是一个充满挑战的职业,知识面的宽窄往往决定着一个架构师的架构能力。阅读大量的技术书籍能够提升知识面,但我希望你不要仅限于软件相关的书籍,可以经常泡技术论坛,一方面可以结交朋友,一方面可以增加自己的知识面,还可以加入一下技术博客。当然如果你的身边有一位这方面的大神大牛给你指导或者教你经验,那么肯定你会少走一半的弯路。



在我们行业内,我们大致把程序员分为四级

初级Java程序员的重心在编写代码、运用框架

中级Java程序员重心在编写代码和框架

高级Java程序员技术攻关、性能调优-

架构师 解决业务和技术问题


今天我们主要讲的就是架构师。目前我们国内Java行业是越来越火进入的程序员也是越来越多,但是不得不说,能够称之为架构师的真的是少之又少,这也造成了目前架构师的年薪比普通的程序员年薪会高那么多。难道架构师真的那么难当吗?我想是你们没找到方法。

也为大家推荐了课程:

精通 S T L https://edu.csdn.net/course/detail/9153?utm_source=blog11xk
<https://edu.csdn.net/course/detail/9153?utm_source=blog11xk>
Three.js视频教程(WebGL) https://edu.csdn.net/course/detail/9273?utm_source=blog11xk
<https://edu.csdn.net/course/detail/9273?utm_source=blog11xk>
java反射、泛型、注解、代理精讲 https://edu.csdn.net/course/detail/9344?utm_source=blog11xk
<https://edu.csdn.net/course/detail/9344?utm_source=blog11xk>
【各类java系统教程】:https://edu.csdn.net/courses/o280_s348_k?utm_source=blog11xk
<https://edu.csdn.net/courses/o280_s348_k?utm_source=blog11xk>

 

 

架构师工作职能


软件架构师在整个软件开发过程中都起着重要的作用,并随着开发进程的推进而其职责或关注点不断地变化,在需求阶段,软件架构师主要负责理解和管理非功能性系统需求,比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等等,此外,架构师还要经常审查客户及市场人员所提出的需求,确认开发团队所提出的设计;在需求越来越明确后,架构师的关注点开始转移到组织开发团队成员和开发过程定义上;在软件设计阶段,架构师负责对整个软件体系结构、关键构件、接口和开发政策的设计;在编码阶段,架构师则成为详细设计者和代码编写者的顾问,并且经常性地要举行一些技术研讨会、技术培训班等;随着软件开始测试、集成和交付,集成和测试支持将成为软件架构师的工作重点;在软件维护开始时,软件架构师就开始为下一版本的产品是否应该增加新的功能模块进行决策。

 

成为java架构师所需要具备那些技能?

首先你要是一个高级java攻狮城,熟练使用各种框架,并知道它们实现的原理。

JVM虚拟机原理、调优,懂得jvm能让你写出性能更好的代码

池技术,什么对象池,连接池,线程池

Java多线程同步异步

Java各种集合对象的实现原理

熟练使用各种数据结构和算法,数组、哈希、链表、排序树

熟练使用linux操作系统

熟悉tcp协议

熟悉http协议

系统集群、负载均衡、反向代理、动静分离,网站静态化

分布式存储系统nfs,fastdfs,tfs,Hadoop了解他们的优缺点,适用场景

分布式缓存技术memcached,redis,提高系统性能必备

数据库的设计能力,mysql必备

还有队列中间件。如消息推送

 

想成为架构师不是懂了一大堆技术就可以了,这些是解决问题的基础、是工具,不懂这些怎么去提解决方案呢?这是成为架构师的必要条件。


架构师还要针对业务特点、系统的性能要求提出能解决问题成本最低的设计方案才合格,人家一个几百人用户的系统,访问量不大,数据量小,你给人家上集群、上分布式存储、上高端服务器为了架构而架构,这是最扯淡的,架构师的作用就是第一满足业务需求,第二最低的硬件网络成本和技术维护成本。


架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做到易于升级;否则等系统瓶颈来了,出问题了再去出方案,或现有架构无法扩展直接扔掉重做,或扩展麻烦问题一大堆,这会对企业造成损失。

 


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

下面是我总结出的几个系统学习图谱:











 

充电宝典:

精通 S T L https://edu.csdn.net/course/detail/9153?utm_source=blog11xk
<https://edu.csdn.net/course/detail/9153?utm_source=blog11xk>
Three.js视频教程(WebGL) https://edu.csdn.net/course/detail/9273?utm_source=blog11xk
<https://edu.csdn.net/course/detail/9273?utm_source=blog11xk>
java反射、泛型、注解、代理精讲 https://edu.csdn.net/course/detail/9344?utm_source=blog11xk
<https://edu.csdn.net/course/detail/9344?utm_source=blog11xk>
【各类java系统教程】:https://edu.csdn.net/courses/o280_s348_k?utm_source=blog11xk
<https://edu.csdn.net/courses/o280_s348_k?utm_source=blog11xk>