前言
系统架构师是近几年来在国内外迅速成长并发展良好的一个职位,它的重要性及给互联网行业所带来的影响是不言而喻的。很多程序员把成为一名优秀的架构师作为自己职业生涯奋斗的目标,但很多人努力却用不对地方,前段时间我与在阿里的P7架构师谈到了这个问题,并且整理出来,希望对在迷茫期的程序员有所帮助。
1、问:阿里的技术专家P7从招聘层面上来说,比如工作年限、项目经历、技术能力等需要达到什么样的要求?
答:工作年限是5-10年,在技术上有扎实的基础能力,有技术亮点,用过的框架要知道其技术原理,具备分布式系统的开发经验,能独立解决各种技术问题,比较强的实战能力。
阿里的P5要求能独立负责一个模块,P6要求能独立负责一个系统,P7要求能架构和负责多个系统,并规划系统的未来能力,在某个领域达到专家水平,可以是某个业务领域,也可以是某个技术领域。
2、问:工作中,产品方案设计的时候,经常会存在多方分歧,有分歧就会存在妥协,如何合理地坚持自己的观点,如何合理地做出妥协?
答:方案没有对错,每个方案都有它的优点和缺点,要分析别人方案的优缺点,先肯定对方方案的优点,再针对缺点提出如何解决这个问题,还是说不解决这个缺点。一起讨论出最合适的方案,而不是要争论谁对谁错。
3、问:我就是在业务团队,偏技术,框架听起来很酷但遥远,能否分享几个知识点?
答:在业务团队也可以做很多框架,比如可配置化支持业务的框架、自动生成添加删除修改页面的框架、业务数据校验的框架,只要多思考如何快速支持业务,就能找到合适的业务框架。可以从几个点出发:配置化支持业务、页面自动生成、流程标准化等。
4、问:最近在学习Spring源码,看了几本书,可以跟着作者的思路看源码,但是看完不久就忘了,其实是没有太多的应用场景,对于看源码,有什么好的方法吗?
答:可以用这个思路,比如让你来设计一个Spring框架你会如何来设计,Spring Core最重要的就是IOC和AOP。自己可以尝试实现下简单的IOC和AOP功能,然后再去对比看下Spring是如何实现的,这样即使忘记了Spring的代码,但是仍然能基础其实现原理。
5、问:对于三十岁的程度员,如果还想再深入做技术,有什么建议?
答:技术人员一定要有危机感,无论多大年纪仍然要持续地学习,我也已经三十多了,每周会花点时间学习点技术。但是年纪大了,其实时间不会那么多,所以要提高学习的效率,掌握一些学习方法,并且要静下心来学习。
学技术什么时间都不晚,因为总有新技术冒出来,但是一些永远不变的技术可以优先学习,比如各种协议(TCP,HTTP,一致性hash协议)、实现原理、算法等。
6、问:自己也实现过IOC和AOP的一些小案例,但是实现比较简单,IOC是基于一个Map来实现的,AOP使用CgLib实现,但是再看Spring Core的源码时,还是感觉很吃力,嵌套层次太多,Debug多次,还是比较吃力,怎么办?
答:技术人员一定要有个特质就是死磕,有的技术人员可能花2个星期解决一个技术BUG,就是对着源码一点点看,要能入定,带着问题去看源码会更轻松。
另一方面,要给自己制定学习计划,比如要学习哪些技术、每天学习什么、达到什么程度。工作中用一些方法减少杂乱无难度的工作内容,比如白天不答疑,或只在固定的时间答疑,写FAQ减少答疑,少参与一些会议,不实时去回即时通讯软件。
7、问:你觉得成为一个架构师应该具备什么样的技能?
答:我结合自己多年的项目经验总结出来的技能体系,希望能帮助迷茫的程序员,找到正确的学习路线,学习方向大概有七点。
构成架构师的技能体系
一、源码知识点
源码分析对于很多人来说很枯燥,生涩难懂,下图详细介绍了源码中所用到的经典设计思想及常用设计模式,帮助大家找到分析源码的切入点,了解大牛是如何写代码的。
二、分布式架构
分布式系统的任务是把多台机器有机地组合、连接起来,让其协同完成一件任务,可以是计算任务,也可以是存储任务。
从分布式架构原理,到分布式架构策略、分布式架构中间件,最后在加上分布式架构实战,让程序员可以在技术深度和技术广度上得到飞跃的提升。但分布式系统是一个复杂且宽泛的研究领域,学习一两门在线课程,看几本书是不能完全覆盖其所有内容的。
三、微服务架构技能
当今微服务架构非常流行,其核心思想是服务拆分与解耦,降低复杂性。微服务强调将功能合理拆解,尽可能保证每个服务的功能单一, 根据各个服务自身资源需求,单独布署,单独作横向扩展,将各个服务做到灵活、可复用。
微服务架构解决了传统单体式架构的弊端,但其实施的本身面临很多陷阱和挑战,涉及到设计、开发、测试、部署、运行和运维等各个方面,一旦使用不当,则会导致整个微服务架构改造的效果大打折扣,甚至失败。对于这些问题,我总结出微服务需要学习的知识点,如下图所示:
四、并发编程
并发编程几乎是所有互联网公司面试必问问题,并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。目前网上没有系统的全面的并发编程学习大纲,我搜集了很多资料总结出一个较全面的学习大纲:
五、性能优化
大家都知道,性能一直是让程序员比较头疼的问题。当系统架构变得复杂而庞大之后,性能方面就会下降,如果想成为一名优秀的架构师,性能优化就是你必须思考的问题。
必须要明白的是:没有两个应用程序可以使用相同的优化方式,也没有完美的优化 java 应用程序的参考路径,,坚持采用适当的方式处理性能优化。想要达到最高的性能优化,作为一个 Java 开发人员,需要对 Java 虚拟机(JVM)和底层操作系统有正确的理解。而在此之前要理解性能优化的知识体系,如下图所示:
六、实践一个双十一电商项目
电商项目目的是把所学的分布式、微服务、性能调优等知识运用起来,只有在项目中你才能巩固知识,提升自己。实践电商项目会利用云服务器搭建真实的开发和部署环境,让你从零到项目实战,体验真实的企业级项目开发过程,让你具备独立开发和搭建分布架构系统的能力。
七、Java开发必知工具
古语云:工欲善其事必先利其器,不管是小白,还是资深开发,都需要先选择好的工具。特别是一名优秀的架构师必须有适合自己的工具,工程化专题的学习能帮助你和团队提升开发效率,让自己有更多时间来思考。
Git:可以更好地管理你和你团队的代码。
Maven:可以更好地管理jar包和项目的构建等。
Jenkins:可以更好地持续编译,集成,发布你的项目。
Sonar:一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题(提升代码的质量,更加高效地提升开发效率)。
如何学习才能快速入门并精通呢?
当真正开始学习时难免不知从何入手,从而导致效率低下影响继续学习的信心。
但最重要的是不知道需要重点掌握哪些技术,学习时频繁踩坑,最终浪费大量时间。
为了让学习变得轻松高效, 现在给大家提供一个学习平台,让你在实践中积累经验掌握原理。主要方向是JAVA架构师,在这里你可以学习Java工程化、高性能及分布式、深入浅出、性能调优、Spring,MyBatis,Netty源码分析和大数据等知识点。可以加入Java后端技术群:819940388,群里有阿里大牛直播讲解技术,或是关注微信公众号:Java资讯库,回复“架构”,免费的大型互联网Java技术视频分享给大家。