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