Java架构师,应该算是一些Java程序员们的一个职业目标了吧。很多码农码了五六年的代码也没能成为架构师。那成为Java架构师要掌握哪些技术呢,总体来说呢,有两方面,一个是基础技术,另一个就是组织能力和提出解决方案能力了。
如果你是想成为Java架构师,那么你首先要是一个Java高级工程师。也就是说,基础必须牢固,对Java的了解全面而且深入。熟练使用各种框架,并知道它们实现的原理。
Jvm虚拟机原理、调优操作,懂得jvm能让你写出性能更好的代码;池技术也是要掌握的,对象池、连接池、线程池都要会;Java反射技术,写框架必备的技术;Java各种集合对象的实现原理,了解这些可以让你在解决问题时选择合适的数据结构,高效地解决问题,写出代码;nio,注意"直接内存"的特点,使用场景。
还没完,除了上边那些,你还要熟练使用各种数据结构和算法,数组、哈希、链表、排序树等等都是;熟练使用Linux操作系统,也是必备的;熟悉各种协议,比如tcp协议,创建连接三次握手和断开连接四次握手的整个过程,不了解就没法对高并发网络应用做优化,http协议,session和cookie的生命周期与关联;熟悉系统集群、负载均衡、反向代理、动静分离,网站静态化;懂得分布式存储系统nfs,fastdfs,tfs,Hadoop了解他们的优缺点,适用场景,以及分布式缓存技术memcached,redis,提高系统性能必备。
以上这些够了吗?当然不。还有呢,工具nginx必备技能超级好用,高性能,基本不会挂掉的服务器,功能多多,解决各种问题;掌握数据库的设计能力,Mysql必备,最基础的数据工具,主要是免费且好用,对它基本的参数优化,慢查询日志分析,主从复制的配置,至少要成为半个mysql dba,其他数据库也要至少略懂一二;还有队列中间件也要会操作,如消息推送,可以先把消息写入数据库,推送放队列服务器上,由推送服务器去队列获取处理,这样就可以将消息放数据库和队列里后直接给用户反馈,推送过程则由推送服务器和队列服务器完成,好处异步处理、缓解服务器压力,解藕系统。
说了这么多,其实都还是纯粹的基础技术,并且还没有列全。要想成为架构师,除了这些之外,就还要具备我们说的组织能力和解决问题的能力了。
架构师思考的是全局的东西,是如何组织系统,以达到业务要求、性能要求。架构师要针对业务特点、系统的性能要求提出解决问题成本最低的设计方案。为了架构而架构,这是绝对不可取的。你想啊,人家一个几百人用户的系统,访问量不大,数据量也不大,你给人家上集群、分布式储存、高端服务器,肯定能到达性能要求,但是成本高啊。要知道,架构师的作用,一是满足业务需求,二是最低的硬件网络成本和技术维护成本。
架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做到易于升级;否则等系统瓶颈来了,出问题了再去出方案,或现有架构无法扩展直接扔掉重做,或扩展麻烦问题一大堆,这会对企业造成损失。
其实这些最后的统筹能力还是建立在过硬的专业基础和项目经验之上。
Java架构师必须掌握的内容:
宏观方面 一、JAVA。要想成为JAVA(高级)工程师肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA(高级)工程师,您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太多的脑经了。 二、设计模式。其实写代码是很容易的事情,我相信您也有同感。但如何写得好就比较难了。这个“好”字包括代码可重用性,可维护性,可扩展性等。如何写出好的代码往往要借助一些设计模式。当然长期的代码经验积累,只要您用心,会使您形成自己代码风格。相信您的代码也比较符合代码的可重用性,可维护性,可扩展性。但既然前人已经给我们总结出了经验,我们何不踩着前人的肩膀前进? 三、XML。现在的系统中不使用XML几乎是不可能的。XML的功能非常强大,它可以做数据转换、做系统的配置、甚至可保存您的系统业务数据。因此您必须了解XML,包括它的语法,结构。您还需要比较熟练的使用解析XML的一些API,比如JDOM,SAX等,因为在我们一般的项目中,XML往往担当系统配置信息的作用,您需要用这些API解析这些配置信息,开发完美的项目。 四、精通使用一种或两种框架。像在《如何成为java初级程序员》中提到的那样,“框架都会有许多可重用的代码,良好的层次关系和业务控制逻辑,基于框架的开发使你可以省出很多的开发成本”。但我这里希望您能精通,更多的是希望您能通过框架的使用了解框架的思想。这样您在开发一个项目时思路会开阔一些,比如您会想到把SQL语句与您的JAVA代码分开,再比如您会考虑把您的业务逻辑配置到XML或者数据库中,这样整个项目就很容易扩张了。 五、熟悉主流数据库。其实真正比较大的项目都是有人专门做数据库的,但往往很多项目要求作为(高级)工程师的您也参与数据库的设计以及SQL的编写。所以为了更好的为国家做贡献,建议您还是多了解一些主流数据库,比如SQLSERVER,ORACLE,多连接SQL和存储过程以及触发器。如果您不是“科班”出身,您还需要补充一些数据库原理方面的知识。 六、精通一种或两种WEBServer。尽管我再《如何成为java初级程序员》里讲过它,我还是要强调您要精通一种或两种。因为作为JAVA工程师,特别时想成为高级JAVA工程师的您,您不可避免地要部署您的项目到WebServer上,而且只有当您精通一种WebServer,您才可能最大限度地使用它的资源,这往往可以节省很多时间和精力。 七、UML。我知道您肯定想成为高级工程师,因此您有必要了解或熟练或精通UML,这取决于您有多大决心想成为高级工程师和项目经理。在比较正规的开发团队中,UML是讨论项目的交流工具,您要想做一个软件工程师,您至少要能看懂,您要想做高级工程师,您要能通过它来描述您对项目的理解,尽管这不是必须,但却很重要。 八、站在高度分析问题:这不是一个知识点,也不是通过书本就能学得到的。只所以提到这一点,是因为我比您还着急,我希望您更快的成为一个高级的软件工程师,而不是一个一般的软件工程师。希望您在工作中多向您的系统分析员、需求分析员、系统设计员学习,多站在他们角度上去看您在开发的项目。在最好在项目之初先在您的脑海里对项目有个大致的分析、设计,然后和他们进行比较,找找差别,想想缺点。 九、工具。与在《如何成为java初级程序员》里提到的不同,您在这个阶段可能接触到不同的工具了,尽管您还需要使用JB或者IDEA,但能可能对ROSE,Together要多了解一些,因为您要画UML了。不要再对Dreamweaver等HTML编辑器情有独钟了,那些JSP页面让初级程序员去写吧 微观方面 1.Core Java部分 这是最基础的,对于一个java高级开发/设计人员,你需要对这一部分达到精通的水平,重点内容如下: a.面向对象编程思想(封装继承多态接口) b.字符串处理 c.java.lang包,java.util包等常用包 d.java异常处理 2.Java高级部分 a.Java I/O流 b.Java多线程技术 c.Java网络编程 d.Java Swing 后两项可以了解即可,如果项目需要可以深入研究 3.前端基本技能 * HTML + CSS网页开发 * JavaScript * Jquery * 浏览器兼容性 CSS hack(了解) 4.熟练使用JSP + Servlet进行开发 5.MVC设计模式,原理,以及相关框架,如Struts 6.SSH框架 7.缓存技术 session & cookie 8.熟练使用一种以上Java开发工具(Eclipse/MyEclipse/Jbuilder/Jcreator/IntelliJIEDA/NetBeans) 9.熟练使用XML JDOM w3c.dom SAX 10.Java设计模式 工厂模式,单例模式 == 11.Java反射机制 反射的各种用法 12.了解或熟悉 C, C++, .NET 13.熟悉JDK的配置,环境变量 14.数据库oracle必学,其他最好了解一种以上(mysql,sql server,access==) oracle:视图,索引,存储过程,触发器,游标,包,常用函数 == 15.数据库原理 事务的原理,锁机制,表连接,复杂查询语句(工作经验),性能调优,锁表以及解决方案== 16.JDBC,连接池 17.Ajax,反向Ajax 18.HTTP协议,request 和 response的原理,HTTP status(了解常用的),Https原理 19.熟悉Linux基本命令,使用过Linux/Unix系统,可以编写shell脚本,可以在Linux上部署项目 20.了解windows系统批处理脚本bat 21.了解HTML5,最好学习过 22.熟悉一种JS框架,如Prototype 23.J2EE原理 熟悉一种以上web容器如Tomcat,JBoss,websphere,weblogic== 24.熟悉ant或maven 25.熟悉一门脚本语言,如python ,ruby 26.了解php/ asp 27.了解ftp协议及原理 28.熟练使用Junit测试,熟悉Mockito等测试工具 29,熟悉javac,javadoc,native,native2ascii等常用命令 30.熟悉常用的排序算法,如冒泡排序,快速排序等,最好自己研究过一些的算法。 31.了解Flex(不学也没关系) 32.了解敏捷开发模式 33.工作流workflow至少用过一种,如OSworkflow,了解原理 34.使用过VPN了解其原理 35.熟悉jstl表达式和el表达式 36.熟悉webservice,WSDL,SOAP 37.图片处理,如图片上传,预览,限制大小等 38.版本控制工具,CVS VSS SVN 39,JSON技术,JSON+AJAX 40.分页技术,最好自己实现过不仅仅是用过要知道原理 41.Java Mail 42.Java读写txt,excel,JXL技术 43.JVM原理,JVM内存管理,GC,Java堆栈池 44.熟练使用下面的工具: office办公软件,word,excel,ppt等 plsql,sqldevelop 数据库开发工具 outlook大公司都用 ue编辑器 浏览器控制台,调试 SHH/PUTTY 远程 45.UML建模工具Rational Rose等 46. 使用log4j 47.使用过开放Api如百度,腾讯街景,新浪微博等 48.页面静态化技术(伪静态页面) 49.报表技术,使用过报表制作工具,如水晶易表。 50.定时任务,如Spring batch ,学会自定义batch任务(不适用第三方工具) 51.了解uuid 52.b/s 和 c/s架构 53.正则表达式 54.了解jndi jms 55.ERP 56.UNICODE编码,乱码解决 57.开源网络编辑器,如ckEditor 58.二进制原理 59.使用过,了解过开源论坛框架,如discuzz 60.GWT,Closure框架 61.了解大数据,云计算 62.搜索引擎搜索技术 63.软件工程,项目管理