本书特殊适宜Java Web领域的开拓职员以及刚步入职场的新手。
本书通过讲述Java架构师必备的知识技能,让广大读者在原有知识的根本上更上一个台阶,争取早日实现架构师的梦想。

对付架构师的定义,每个人的意见都不尽相同,我结合自己多年的事情履历,也只是大致定义了一个范围,希望可以帮助到别人。
读者可以结合自己的实际情形,通过阅读本书,不断地扩展和充足这种范围,以达到自己空想中的境界。
“不想当将军的士兵,不是好士兵。
”在软件行业中,也彷佛有这样一句话:“不想当架构师的程序员,不是好程序员。
”虽然这看似是一种调侃,但从学习的角度来说,成为架构师,显然是一个好的目标!
人只有在心里有了目标,才会变得更加幸福。

jsp中显示title的内容可以改变位置法式员到架构师须要的编程基本 AJAX

如果你不肯望一贯勾留在Java的低级阶段,想在未来成为架构师,那么本书非常适宜用来全面提高自己的开拓水平。
如果你想转项目经理,那么本书同样适宜你,由于书中的每个项目都是完全的迭代过程。

1.1 程序员进阶

大学毕业后,初出茅庐的菜鸟经由千辛万苦,总算是找到了人生中的第一份事情。
但是,随着事情的开展,菜鸟所面对的问题越来越多。
有些人坚持了下来,有些人中途放弃,有些人则在职业生涯中选择了转型。
作为一名程序员,不但须要编写大量的代码,还须要对自己的职业生涯做一个方案。
结合前辈们所走过的道路,这个职业方案大致是图1-1所示的这个样子。

​图1-1 程序员职业生涯

一样平常来说,从低级程序员到高等程序员须要经由5年的磨砺,这个韶光段基本上是业界的共识了。
而且,在浩瀚招聘信息中也可以创造程序员的出发点都是须要两年事情履历的。
大概,有些天赋异禀的程序员可能经由3年的刻苦学习也能达到高等阶段,但是,他们的知识技能每每并不全面,可能只是在某些方面比较熟习罢了。
到了高等程序员的阶段,可供选择的方案就比较多了,大概有图1-2所示的这3个走向。

​图1-2 程序员发展方向

如果高等程序员再向上进阶的话,会面临3个选择。
第一种方案是成为项目经理,卖力管理加上部分开拓。
由于高等程序员对公司的项目是非常理解的,对公司目前的开拓过程也驾轻就熟。
如果本人有这方面的意愿,很随意马虎胜任项目经理这个角色。
而且,公司常日会从内部选择项目经理,空降项目经理的办法并不是常态,归其缘故原由便是难以熟习项目架构。

第二种方案是高等程序员可能更喜好专著于技能,不喜好出差和撰写大量的项目文档。
在这种情形下,他可以成为一名架构师,专门卖力掩护公司的项目、产品方面的架构事情。
如果公司有一定的规模,他可能会成为研发平台的卖力人。
当然,这种情形的条件是该程序员没有跳槽。

第三种方案是高等程序员可能经历了多少年的开拓后,对写代码已经切齿腐心,丝毫感想熏染不到任何快乐了,但他对公司的项目和产品又非常熟习,也有深厚的研发积累。
在这种情形下,他可以彻底转型成为一名产品经理,纯粹卖力公司产品的方案、设计、包装,乃至肩负一定的市场职责。
当然,成为产品经理的条件是公司的项目已经产品化或者正在产品化之中。
所谓的产品经理,常日便是向技能部提出一个原型设计:“看吧,这便是我想要的东西,至于怎么实现,你们看着办!
”如果他懂代码还好说,但如果不懂代码,可能会让程序员陷入抓狂状态!

到了高等程序员的阶段,很多人就开始思考:究竟是去做项目经理?产品经理?还是连续写代码成为精良的架构师呢?每个人的想法是不一样的,所作出的选择也是不一样的,这跟自己的能力和性情也有一定的关系。

项目经理:在大型公司里,紧张起折衷资源的浸染,再往上还有项目集经理。
而在一些中小型公司里,项目经理不但要做好管理,还要兼备一部分代码的开拓事情,但与此同时,也会有5年履历旁边的项目组长,来管理不同的项目组。
在软件行业中,常常有这样一个辩论,项目经理到底该当不应该写代码?支持和反对的人都很多,但作者认为,这也是仁者见仁、智者见智的事情。
首先,项目经理自身也是资源,是资源就有花费,有些老板可能会认为:“我花这么多钱,请一个项目经理过来只为了写写文档,是不是太亏本了?”但到了数万人的大公司,该公司的项目常日特殊多,就须要项目经理非常专注地管理项目,而不是分心去写代码。
这种情形下,老板的思路就会转变,你写什么代码?好好地管理好公司的项目,不让它出乱子就可以了。

产品经理:一样平常则是公司已经将项目过渡到了产品后,才能发挥更大的浸染。
如果公司一开始只有项目,则须要大量的韶光来积累,终极实现产品化。
在这个过程中,每每不是很须要专职的产品经理,可能项目中的每个人都会对项目献计献策,来使项目更加通用化。
产品经理自身也是须要积累的,如果他成功地设计了一款App,并且在市场上取得了极大的成功,那么他的职业生涯可能会因此镀金,这个App将会成为他能力的表示。

架构师:专注于公司的研发平台,管理框架方面的东西。
例如,写核心代码,并且辅导底下的开拓职员合理地编码,掩护代码库。
在小公司里可能只有一两名架构师,但是在数万人的公司里,架构师会非常多。
在这种情形下,架构师有可能会成为程序员级别称谓。
例如,你在该公司待了8年,虽然你干的活一贯是普通研发,并不卖力实际上的架构,但是公司有正常的晋升渠道,你的级别就会从高等软件工程师上升到软件架构师。
这种情形,在外包公司比较常见。

全栈工程师:是最近才兴起的一个观点,但全栈工程师说到底还是程序员,类似于高等开拓的角色,只不过是懂的东西比较多,前端和后端都可以做,技能比较全面。
全栈工程师极大地拓展了自己的开拓技能,成为了项目中的骨干成员,类似于技能专家的角色。
一样平常而言,小公司比较喜好这样的人,招募一个可以顶3个。
但从学习的角度来说,全栈依然是不错的目标。
由于只有成了全栈工程师,才更能靠近架构师。

每种开拓措辞,都有自己领域的架构师,如C++架构师、PHP架构师,当然也有Java架构师了。
架构师须要对公司的全体研发平台管窥蠡测,清楚平台中细枝末节的东西。
他极有可能是陪伴着这个公司发展起来的程序员;也极有可能是在别的公司事情多年后跳槽过来的。
前者对公司的项目、产品非常熟习,乃至自己还动手写过业务层。
后者可能只是从大体上理解公司的研发平台,绝不深入,但这并不影响他的发挥,真正的架构师看到代码就有一种亲切感,可以很随意马虎剖析出隐蔽在代码前后的业务过程。

Java架构师,至少须要在Java领域有5年的开拓履历。
他须要节制的内允许多,大略点可以分为前端、后端、数据库、做事器、中间件等。
前端插件可以极大地提高开拓效率,乃至在不须要美工的情形下做出时尚的界面,类似的插件有AngularJS、Avalon、Bootstrap、ExtJS、jQuery EasyUI、jQuery UI等,这些前端插件也可以称作前端组件或者前端框架,各类叫法也看人的习气了,没必要吹毛求疵。
除了这些前端插件外,还须要节制JavaScript、HTML等技能。
后端须要节制的技能紧张是Java、JVM、Servlet、Struts、Spring、Hibernate、MyBatis等,还有最近盛行起来的Spring MVC、Spring Boot等。
这些技能和框架只有综合起来利用,并且合理地搭配才能发挥出最好的效果。
至于效果能够达到什么程度就须要看架构师的本事了。
大概有的架构师可以把这个积木撘得很好,大概有的架构师在搭积木的过程中,这个积木就倒下了。
数据库方面须要节制的内容有Oracle、MySQL、SQL Server,一样平常常用的数据库大概便是这3个。
当然近年来,对付架构师须要节制的数据库又有所增加,它们紧张是代表了NoSQL的MongoDB等差异于传统关系型的数据库。
但是,数据库干系的内容有不少,例如,须要闇练节制SQL的各种语法,还须要节制数据库性能的调优、备份和规复。
做事器并不是重点,但作为Java架构师,仍旧须要有所理解。
做事器包括物理做事器、云做事器,还有Web做事器,包括我们在开拓中利用的Tomcat。
中间件在一些中小型项目中并不怎么常用,如EJB技能、中间件ActiveMQ。
当然,Web做事器也可以算作中间件,如Tomcat、Weblogic、WebShpere和JBoss等。

只有闇练掌这几个方面的技能后,才能算是一个低级架构师。
如果想成为大神级别的架构师,还须要学习更多的知识。
Java架构师须要对这些技能非常熟习,并且能像搭积木一样把他们整合在一起,构建出成熟的、完全的软件开拓平台,以供底下的程序员在此根本上进行业务层的开拓。
但是,随着软件技能日月牙异地发展,越来越多的框架进入眼帘,这对付我们来说既是好处又是坏处。
好处是我们可以选择更好的、更得当的框架来提高项目的性能,降落开拓难度,简化开拓流程。
坏处是可选择的框架太多,以至于让我们难以选择。
以是,本书为大家精心挑选出了一名合格的架构师所必备的专业技能和开拓思想,以供大家学习和参考,争取尽早地成为Java架构师。

1.2选择开拓工具

孔子曰:“工欲善其事,必先利其器。
”这是一个千古不变的哲理,工匠想要使他的事情做好,一定要先让工具锋利,这样才能发挥出最大的效率。
这个哲理见告我们,不管做什么事情,都要选择得当的工具。
那么在软件开拓的道路上,选择一个得当的开拓工具也是极其主要的事情了。
Java的开拓工具有几种,这里不做太多的赘述,我们只须要比拟它们的特点,即可从中选择出一款最适宜自己的。

Java中常用的开拓工具有NetBeans、JBuilder、Eclipse、MyEclipse、IntelliJ IDEA等。
个中,NetBeans是Sun公司开拓的,JBuilder是Borland公司开拓的,这两个开拓工具的功能和界面跟我们常用的Eclipse是没有很大的差异的,之以是在市场霸占率方面输给Eclipse,完备是由于细节方面做得不好,还有在用户感知方面不太好。
曾经有网友也在社区里面说过这样的问题,我考试测验利用过NetBeans或者JBuilder,但总是由于个人习气的缘故原由没有坚持下来。
可能Eclipse是大多数人打仗的第一款开拓工具吧,这种先入为主的觉得会一贯伴随着我们。

Eclipse是完备免费和开源的,它的功能非常强大,开拓起来也很顺手。
MyEclipse是在Eclipse的根本上加上了自己的插件后的企业级集成开拓环境,尤其长于开拓Java、Java EE方面的项目。
于是,在市场霸占率方面Eclipse和MyEclipse非常高,这也在另一方面促进了它们的发展。
这两者实在是一个核心,以是选择哪一个都看自己的习气了。
IntelliJ IDEA是Java开拓的集成环境,在业界被公认为最好的Java开拓工具之一,尤其在代码提示、重构、J2EE支持等方面非常强大。
个中有一点对程序员的帮助非常大,便是调试功能,此外在某些细节方面彷佛比Eclipse做得更好。
而且,IntelliJ IDEA与GIT结合得非常好,而Eclipse与SVN结合得非常好。
韶光久了,这一开拓工具与版本掌握工具相结合的特点,也逐渐被程序员们认可,乃至成了项目选择开拓工具的一种参考。

举个例子,如果A项目列入了开拓操持,为了保持大家代码的同等性,可能项目组内会统一利用开拓工具。
如何选择呢?如果,这个项目利用SVN来管理代码,那么大家就会优先利用Eclipse;如果利用GIT管理代码,那么大家就会优先利用IntelliJ IDEA。
当然,这彷佛只是一种约定俗成的参考,并不是硬性哀求。

在接下来的学习中,我们以MyEclipse和Eclipse为主来开拓项目,并且会讲述SVN和GIT的不同,让大家在往后的事情中更加灵巧地搭配开拓工具和版本掌握工具的组合。
至于IntelliJ IDEA,由于它的入手门槛确实有点高,而且一旦选定,后面对于代码的重构会非常麻烦(指Eclipse和IntelliJ IDEA之间),以是本书暂不做相应的讲解。

其余,本书还会利用Eclipse相对较新的版本来做一些练习。
个中,MyEclipse的版本是10.7,Eclipse的版本是Kepler,IntelliJ IDEA的版本是2016。
SVN和GIT的版本带来的差别并不大,以是并不对版本做详细的规定,MyEclipse10.7的界面如图1-3所示。

​图1-3 MyEclipse 10.7的界面

Eclipse Kepler的界面如图1-4所示。

​图1-4 Eclipse Kepler的界面

IntelliJ IDEA 2016的界面如图1-5所示。

​图1-5 IntelliJ IDEA 2016的界面

1.3 安装JDK

JDK是Java开拓的核心,包含了Java运行环境、工具、根本类库。
如果没有JDK,Java开拓是无法进行的,Java项目也无法运行起来。
以是要做任何项目的开拓,第一件事情便是安装好JDK。
接下来,我们才可以做更多的事情。

常日来说,每一个开拓工具都会携带JDK,例如,MyEclipse 10.7自带的Sun JDK 1.6.0_13,但是IntelliJ IDEA并没有携带,须要自行配置。
鉴于这种情形,我们在安装完开拓工具后紧接着就该当安装得当的JDK。
利用MyEclipse 10.7自带的JDK也可以完成日常的开拓,但这款JDK没有进行环境变量的设置,可能在后续的开拓中会有影响,而且这款JDK是殽杂在MyEclipse 10.7的安装目录下的,给人的直不雅观觉得不太好。
为此,我们须要单独安装一款JDK,而说到安装JDK,就不免要选择得当的版本。
目前,JDK版本已经到了8,但是由于历史缘故原由,利用JDK 8来开拓项目的公司并不多,第一个吃螃蟹的人会有惊喜也有潜在的风险。
利用JDK7也是个不错的选择,但是由于本书中所涉及的项目浩瀚,为了项目的稳定性,还有学习的顺序性,我们仍旧利用久经历史验证的JDK 1.6版本,也可以称作JDK 6,对付这个名称不用纠结,是由于历史缘故原由造成的。
JDK 1.6以上的版本才正式改变了叫法,如JDK 7,也有开拓职员习气叫它JDK 1.7。
读者可以在JDK 1.6版本下闇练节制本书的内容后,自行更用更高等的版本来测试程序的运行性能和代码编译方面的不同。
由于本书的主旨是讲述常规的技能,以是对付JDK的新特性并没有过多讲解。

首先,须要在Oracle官方网站下载JDK 6。
由于Oracle官网常常更新,详细的地址也会常常改变,很难有一个确切的下载地址。
但是,在Oracle官网可以找到Downloads的菜单,基本上Oracle公司所有的产品都可以在这里找到。
另一种方法是可以在其他的网站下载JDK 6,例如,海内的一些网站,下载起来速率也相比拟较快,Oracle官网下载JDK如图1-6所示。

​图1-6 Oracle官网下载JDK

下载完JDK6之后,最好将它安装在非系统盘里。
接着,须要对刚才安装好的JDK进行环境变量的设置,以方便我们在DOS系统下利用JDK命令。
例如,最常用的编译命令javac,显示JDK版本的命令java -version,这些命令的利用都依赖于环境变量的配置。
如果没有配置,是不会生效的。

首先,打开Windows的环境变量界面,新建系统变量JAVA_HOME和CLASSPATH。
编辑JAVA_HOME变量,在变量值里输入JDK6的安装地址,如D:\Program Files\Java\jdk1.6.0_43,点击“确定”保存。
接着,编辑CLASSPATH变量,在变量值里输入

%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar,点击确定保存。
末了,选择系统变量名为Path的环境变量,在原有变量值的根本上追加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin,点击“确定”保存,添加环境变量的界面如图1-7所示。

​图1-7 Windows环境变量设置界面

为了验证Java环境变量是否设置成功,可以运行CMD程序,打开Windows的命令行模式,输入

java -version

命令,如果环境变量设置成功,会不才面输出当前的JDK版本号以及JDK位数,精确的输出结果如图1-8所示。

​图1-8 命令行模式下输出JDK版本

配置好了环境变量,还须要在MyEclipse 10.7中配置JDK,使其可以在开拓工具中利用。
打开MyEclipse 10.7,在Preferences菜单中的Java选项下找到Installed JREs选项,就可以看到当前事情空间中的JDK设置,MyEclipse 10.7默认自带一个JDK6,如图1-9所示。

​图1-9 MyEclipse10.7自带的JDK6

点击Add按钮,在弹出的Add JRE对话框中选择Standard VM点击Next按钮进入下一步,在弹出的对话框中点击Directory按钮,选择JDK6的安装目录,点击确定。
对话框会自动识别出JDK的干系信息,并且在JRE system libraries列表框中显示出来,如图1-10所示。

​图1-10 MyEclipse 10.7中设置JDK6

点击Finish按钮完成设置。
这时,MyEclipse 10.7会自动回到Installed JREs对话框中,刚才的列表中会多出一栏我们刚刚设置好的JDK选项,在勾选框中选择它点击OK。
至此,MyEclipse10.7下的JDK设置就成功了,在往后的开拓事情中,我们全依赖这个JDK供应的根本JAR包来开拓和运行项目。

1.4 安装Tomcat做事器

安装好了JDK,我们就可以在MyEclipse 10.7中进行一系列代码编写事情了。
例如,可以在开拓工具中写一些类,做一些练习。
普通的包含main函数的Java类,我们可以通过Run As菜单下的Java Application命令来运行,输出程序结果。
例如,可以在MyEclipse 10.7下新建一个Java Web工程practise。
详细的过程如下,选择File菜单下的New选项,在弹出的右侧菜单中选择Web Project,在对话框的Project Name文本框中输入

practise

,将J2EE Specification Level选项设置为Java EE 6.0,和安装的JDK保持同等,点击Finish按钮,practise项目就建立好了。

选中practise项目的src目录,右键选择新建Package,在对话框的Name文本框中输入

com.manage.practise

,点击Finish,就可以给这个项目建立一个空包。
接下来,就可以在这个空包里新建类。
选中Java包,右键选择New菜单下的Class,在弹出的对话框中在Name处输入类名

Test

,并且勾选

public static void main(String[] args)

,点击Finish。
这样,在practise包下的第一个类Test就建立成功了。
打开Test类,在main函数中输入第一行Java语句

System. out.println(\"大众Hello World\"大众);

,利用Java Application来运行。
此时,掌握台会在空缺区域输出Hello World。
理论上来说,我们的第一个Java程序就这样出身了,只管这个程序非常大略!

如果只是在MyEclipse 10.7下安装了JDK,这款开拓工具能做的事情无非是编写类,利用Java Application来运行,并且进行程序的测试。
在这种情形下,我们的代码中所设定的数值均是由自己输入的参数;然后再根据程序中的处理逻辑,做一些大略的运算;末了,输出精确的结果。
可是,程序开拓远远不是这么大略的事情,我们须要做的是开拓一个具有交互能力的项目,而不仅仅是写一段大略的程序。
要达成这个目标,我们就必须在MyEclipse 10.7安装Web做事器来运行项目。
在这里,我们选择利用Tomcat做事器,这是由于Tomcat做事用具有大略、易用的优点。

首先,打开Apache的官方网站,不才载Tomcat 6.0的页面找到对应的软件,在Core列表中选择64-bit Windows zip的版本,将Tomcat 6.0保存到本地,并且解压缩到本地的非系统盘内,如E盘的根目录。
下载Tomcat 6.0如图1-11所示。

​图1-11 下载Tomcat 6.0

打开MyEclipse 10.7的Preferences对话框,在MyEclipse的列表中选择Servers,这时,会涌现一个列表,列出MyEclipse 10.7支持的做事器。
选择Tomcat,再选择Tomcat 6.x。
这时,对话框右侧会涌现Tomcat 6.x的配置项,选择Enable,启用Tomcat 6.x。
点击Tomcat home directory对应的Browse按钮,在弹出的磁盘目录列表中选择Tomcat 6.0所在的位置,MyEclipse 10.7会自动补齐其他的两处空缺,点击OK按钮,Tomcat 6.0做事器就配置好了。

我们通过工具栏运行Tomcat 6.0,启动成功后,点击工具栏的Open MyEclipse Web Browser功能的图标,在地址栏中输入http://localhost:8080/,就可以看到Tomcat 6.0运行成功的画面。
接下来,就可以通过在Tomcat做事器里支配Web项目来进行正式地编码事情了,运行界面如图1-12所示。

​图1-12 Tomcat 6.0运行成功

1.5 Hello World程序

完成了前面几节的配置,MyEclipse 10.7 的开拓环境已经正式配置成功了。
这时,我们可以在MyEclipse10.7下完成第一个Hello World程序来结束本章的学习。

在MyEclipse 10.7的界面中,我们可以看到Package Explorer视图下有一个Java Web项目practise,这个项目是之前创建好的,并且在包里建立了一个Test类。
我们通过运行该类,可以在掌握台里输出了Hello World,解释这个类没有问题。
但是,这种大略的编码没有交互性,是不能知足项目的需求的。
如果要开拓一个项目,必须让其在Tomcat做事器里运行,才能起到交互的浸染。
那么我们可以把practise项目支配到Tomcat做事器里试试效果。

选中practise项目,右键弹出功能菜单选择MyEclipse,在弹出的右侧菜单中选择Add and Remove Project Deployments功能,在弹出的对话框中可以看到Deployments列表中为空,解释Tomcat做事器里并没有支配任何项目。
这时,我们点击Add按钮,在Server下拉框中选择Tomcat 6.x,点击Finish,把practise项目正式支配到Tomcat做事器中。
支配好的 practise 项目如图1-13所示。

​图1-13 支配好的practise项目

这时,我们启动Tomcat做事器就会自动加载支配到做事器里的practise项目。
通过掌握台,可以看到做事器的启动日志,如果没有报错的话,解释practise项目没有编译缺点,那么Tomcat做事器启动成功。
打开IE浏览器,在地址栏中输入http://localhost:8080进行访问,可以看到程序运行成功,但显示的仍旧是Tomcat做事器的默认页面,这是由于我们没有输入项目名称。

打开practise项目的WebRoot文件夹下的index.jsp文件,把title标签里的内容修正成First Page,把body标签里的内容修正成Hello World,保存index.jsp文件。
再次打开IE浏览器,访问http://localhost: 8080/practise,可以看到页面上已经发生了变革,如图1-14所示。

​图1-14 practise项目运行

1.6 小结

本文我们全面阐述了程序员的职业发展方案,从而为广大读者供应一个晋级的参考。
从程序员到项目经理、产品经理、架构师的过程至少须要5年。
这5年是一个学习期,5年后就可以进行转型了。
以是,建议大家在事情的前5年不要频繁跳槽,还是须要系统地节制知识技能,积累履历才是硬道理。
频繁跳槽不但让自己的知识会涌现断层,也可能影响到自己在HR心中的形象。

接着先容了Java开拓中常用的工具,并且做了大略的比拟,相信读者可以根据自己的喜好选择个中的一款。
由于本书紧张采取MyEclipse 10.7作为开拓工具,以是读者最好先利用这款开拓工具,其他的工具会在后面的章节中先容。
等对这些工具驾轻就熟的时候,再随意切换。
每个开拓工具都有自己的优缺陷,但不要人云亦云,选择自己最习惯用的才是最好的。
末了先容了安装JDK、Tomcat做事器的过程,并且开拓了第一个Hello World程序。
如果读者已经牢牢节制了本章的内容,这便是万里长征迈出了坚实的第一步,相信在往后的学习当中大家的收成会更多。

本文摘自《Java架构师指南》​

​《Java架构师指南》

王波 著

资深Java专家多年履历总结,全程项目驱动,首本完全先容Java入门进阶到架构师的编程技能图书。

程序员走向架构师是必经之路,本书基于官方API的完美解读,从架构师的角度来讲解Java知识技能,并且从搭建虚拟机开始,学习常用的Linux命令,力争做到使程序员在较短的韶光内成功迈入架构师的殿堂。