Java 最初是以网络、安全和多线程著称的,因此对于下面这些 JDK 的基础知识如果有超过一半以上没听说过,或者不知道是什么的话,那可以说 Java 还处于蹒跚学步阶段!
多线程(multi-threading and concurrent)
1:关键词:volatile, sychronized
2:传统的线程 API:java.lang.Thread, java.lang.Runnable, java.lang.ThreadGroup, Object#wait, Object#notify, Object#notifyAll
3:JDK 5 并发包(java.util.concurrent)API:线程池、执行器、信号量、倒计数门闩、并发集合(并发 Map,阻塞队列等)、原子 API(java.util.concurrent.atomic)、锁 API(java.util.concurrent.lock)
4:同步锁策略:自旋锁、分离锁、分拆锁、可重入锁、读写锁、锁的公平性等
涉及多线程及并发的 API 在 java.lang 中及 java.util.concurrent.* 中。
网络(network communication)
1:阻塞 TCP 通信、阻塞 UDP 通信、组播
2:非阻塞 TCP 通信、非阻塞 UDP 通信
3:客户端通信 API(java.net.URL, java.net.URLConnection 等类库)
涉及网络通信的 API 都在 java.net 和 java.nio.channels 包中。这里的网络已经将 RMI 相关包 java.rmi, javax.rmi 都排除了。
安全(security, cryptography and AAA)
1:Java 加密类库 JCA
2:Java 加密类库扩展 JCE
3:涉及密码学知识点的消息摘要、消息认证码、对称加密、非对称加密、数字签名
4:涉及网络通信证书管理工具(keytool)及 API
5:基于 SSL/TLS 的安全网络通信 API(JSSE)。阻塞 SSL 通信和非阻塞 SSL 通信
6:Java 认证及授权服务(JAAS)API
涉及安全的东西都在:
java.security 包(JCA、JCE、数字证书、SPI)
javax.net 包(SSL/TLS)
javax.security 包(JAAS)
javax.crypto 包(密码学)
keytool 的 JDK 工具
-----------------------------------------
另外,对于一些 SSH(Struts, Spring, Hibernate)控的建议:
如果对下面这些知识点不熟悉的话,那就先把 SSH 放一下!
在使用 Struts 等 MVC 框架之前,我认为应该先掌握:
* 了解 application, session, request, page 四种范围的特点,以及使用时的注意事项
* 熟练使用 Servlet,以及 Servlet 相关的 Filter、Listener 等
* 使用 Servlet + JSP + JDBC 至少做过一个有 10 个功能的应用
* 了解前端控制器、视图助手、组合视图、分配器视图等 J2EE 中涉及视图层的模式
在使用 Hibernate 等 ORM 框架之前,应是相当熟悉 JDBC 操作,并且知道一些理论性东西:
* 使用 JDBC 的时候,是否使用了数据库连接池,如何使用开源的数据库连接池?
* JDBC 中的行集(RowSet)是做什么用的?
* JDBC 如何实现对象/关系映射,也就是 O/R Mapping
* 为什么 JDBC 规范推荐首选从 DataSource 中获得数据库连接对象(JDBC 4.0 Specification, p.51.),
而不是首选从 DriverManager 中获得连接对象?
* 使用 DriverManager 获得连接对象时,虽然从实现 JDBC 4.0 规范的驱动程序开始,不需要使用
Class.forName("xxx.xxx.xxx.Driver"); 了,但我们也有必要了解一下这句话的作用是什么?
* 单纯地使用 JDBC 时如何实现低耦合性的事务管理?也就是说事务边界在业务层,一个业务层调用
多个数据库操作的方法完成一个事务,在这种情况下如何进行事务控制?
在使用 Spring 等 IoC 框架之前,我认为应先掌握:
* 熟练地使用 JAXP、jdom, dom4j 等工具解析/生成 XML 文件,并能使用 XPath 进行 XML 查找
* 掌握 Java 中的反射,以及 JavaBeans 规范中的内省类,了解 JavaBeans 规范对于方法名、属性
的要求(别看这个很简单,实际上很少有人知道)
* 了解 JDK 的动态代理和 Cglib 的动态代理,了解 JDK 动态代理的限制,以及与 Cglib 动态代理
的优缺点,并且了解一下动态代理是做什么用的
* 熟练地使用日志工具,比如:JDK 日志工具、log4j 工具等,以及在使用时需要注意些什么
* 能善于使用开源框架中已经实现的东西,比如 Apache Commons 中很多实用的方法,像实现了 LRU
算法的 Map 等等之类的
==========================================
◆ 设计模式:可复用面向对象软件的基础
—— Design Patterns:Elements of Reusable Object-Oriented software
本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。本书适合大学计算机专业的学生、研究生及相关人员参考。
◆ 深入浅出设计模式
—— Head First Design Pattern
你不想重新发明车轮(或者更差的是,没有充气车胎的轮子),所以你从设计模式中寻求帮助——设计模式是过去人们面对同样的软件设计问题所得到的经验。 有了设计模式,就可以利用其他人的实践经验的精华,因此省下的时间可以用在其他的事情上,如:更有挑战性的事情、更复杂的事情以及更有趣的事情。你想要学习:
·重要的模式
·何时使用某个模式,为何使用该模式
·如何在你自己的设计中马上采用这些模式
·何时不该使用该模式(如何避免滥用模式)
·某个模式是依据哪些面向对象设计原理而设计出来的
更重要的是,你想在学习设计模式的过程中,不感觉到昏昏欲睡。如果你曾经读过任何一本深入浅出(Head First)系列书籍,你就会知道能够从本书中得到的是:透过丰富的视觉效果让你的大脑充分地运作。本书的编写运用许多最新的研究,包括神经生物学、认知科学以及学习理论,这使得这本书能够将这些设计模式深深地烙印在你的脑海中,不容易被遗忘。你将会更擅长于解决软件设计中的问题,并能够和你的团队成员用模式的语言来更好地沟通。
◆ 设计模式解析
—— Design Pattern Explained
本书从一个新的视角描述面向对象设计,将面向中对象编程的原则与运用设计模式力量创建健壮、可靠的软件开发环境结合起来。书中采用实用、恰当的例子,指导读者用模式解决普通的编程问题,并且解释现代软件设计模式的优越性。本书适用于学习面向中对象设计和设计模式的学生、程序员以及从事软件开发的人士。 本书要点包括: ·对象、封装和继承的新观点 ·设计模式的思想、起源及其在软件设计学科中的应用 ·模式基础以及使用统一建模语言(UML)进行面向对象软件开发 ·如何实现关键模式——Strategy(策略)、Observer(观察者)、Bridge(桥接)、Decorator(装饰)等等 ·共同点/变化点分析、设计模式以及它们如何帮助理解抽象类
◆ 代码大全第二版
—— Code Complete,Second Edition
代码大全(第二版)是著名IT畅销书作者Steve McConnell十一年前的经典著作的全新演绎:第二版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。本书中所论述的技术不仅填补 了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益的。可以说,无论你是什么背景,阅读本书都会让你在更短的时间内、更容易地写出更好的程序。
◆ 人月神话
—— The Mythical Man-Month:Essays on Software Engineering,Anniversary Edition
本书自第一版以来,畅销20余年不衰,是软件领域绝无仅有的必读经典。本文作者为人们管理复杂项目提供了颇具洞察力的见解,既有很多发人深省的观点,也有大量的软件工程实践。本书内容来自布鲁克斯在IBM公司 System/360 家族和OS/360中的项目管理经验。在本书第一次出版20年后的今天,布鲁克斯重新审视了他原先的观点,增加了一些新的想法和建议。既方便了熟悉原有内容的人们,也方便了许多第一次阅读它的读者。
◆ 人件
—— Peopleware:Productive Projects and Teams,2nd Ed
《人件》第1版于1987 年出版,专门讨论了软件开发和维护团队的管理问题,并向人们的传统认识提出了挑战。作者在书中推崇人本管理思想,正确指出知识型企业的核心是人,而不是技术,呼吁给予软件工作者充分的自由和信任。本书推出后,立即在西方引起了轰动,被誉为"几十年来对美国软件业影响最大的理念"。与《人月神话》一样,《人件》现已成为软件团队管理的经典之作。它和《人月神话》共同被誉为软件图书中"两朵最鲜艳的奇葩"。人们认为,《人月神话》关注"软件开发"本身,《人件》则关注软件开发中的"人",因此,在成千上万的书架上,《人件》永远和《人月神话》并列在一起。1999 年 2 月,《人件》第2版出版,增补了8 章新内容。这些新内容拥有更加宽广的视角,对大中型组织中的团队如何运作进行了深入探讨。《人件》最新版的中文译本由UMLChina组织翻译,清华大学出版社将于2003 年5月出版。
◆ 程序员修炼之道 —— 从小工到专家
—— The Pragmatic Programmer
本书主要介绍了软件开发的原则和方法。本书直指编程前沿,透过日益增长的现代软件开发 规范和技术,对软件开发的核心过程进行了审视——以满足用户为本,针对用户需求来产出高效、可维护的优秀代码。全书涵盖内容广博,从个人责任和职业发展,到保持代码灵活性并使之易于改动和重用,多而不杂。本书采用了有趣的轶事、详实的例子以及诙谐的对话等方式,描述了软件开发方方面面的最佳实践方案和各种缺陷。您从本书所学到的开发技巧、开发习惯以及职业态度,必将帮助您修炼成为一名真正的Pragmatic Programmer!
多线程(multi-threading and concurrent)
1:关键词:volatile, sychronized
2:传统的线程 API:java.lang.Thread, java.lang.Runnable, java.lang.ThreadGroup, Object#wait, Object#notify, Object#notifyAll
3:JDK 5 并发包(java.util.concurrent)API:线程池、执行器、信号量、倒计数门闩、并发集合(并发 Map,阻塞队列等)、原子 API(java.util.concurrent.atomic)、锁 API(java.util.concurrent.lock)
4:同步锁策略:自旋锁、分离锁、分拆锁、可重入锁、读写锁、锁的公平性等
涉及多线程及并发的 API 在 java.lang 中及 java.util.concurrent.* 中。
网络(network communication)
1:阻塞 TCP 通信、阻塞 UDP 通信、组播
2:非阻塞 TCP 通信、非阻塞 UDP 通信
3:客户端通信 API(java.net.URL, java.net.URLConnection 等类库)
涉及网络通信的 API 都在 java.net 和 java.nio.channels 包中。这里的网络已经将 RMI 相关包 java.rmi, javax.rmi 都排除了。
安全(security, cryptography and AAA)
1:Java 加密类库 JCA
2:Java 加密类库扩展 JCE
3:涉及密码学知识点的消息摘要、消息认证码、对称加密、非对称加密、数字签名
4:涉及网络通信证书管理工具(keytool)及 API
5:基于 SSL/TLS 的安全网络通信 API(JSSE)。阻塞 SSL 通信和非阻塞 SSL 通信
6:Java 认证及授权服务(JAAS)API
涉及安全的东西都在:
java.security 包(JCA、JCE、数字证书、SPI)
javax.net 包(SSL/TLS)
javax.security 包(JAAS)
javax.crypto 包(密码学)
keytool 的 JDK 工具
-----------------------------------------
另外,对于一些 SSH(Struts, Spring, Hibernate)控的建议:
如果对下面这些知识点不熟悉的话,那就先把 SSH 放一下!
在使用 Struts 等 MVC 框架之前,我认为应该先掌握:
* 了解 application, session, request, page 四种范围的特点,以及使用时的注意事项
* 熟练使用 Servlet,以及 Servlet 相关的 Filter、Listener 等
* 使用 Servlet + JSP + JDBC 至少做过一个有 10 个功能的应用
* 了解前端控制器、视图助手、组合视图、分配器视图等 J2EE 中涉及视图层的模式
在使用 Hibernate 等 ORM 框架之前,应是相当熟悉 JDBC 操作,并且知道一些理论性东西:
* 使用 JDBC 的时候,是否使用了数据库连接池,如何使用开源的数据库连接池?
* JDBC 中的行集(RowSet)是做什么用的?
* JDBC 如何实现对象/关系映射,也就是 O/R Mapping
* 为什么 JDBC 规范推荐首选从 DataSource 中获得数据库连接对象(JDBC 4.0 Specification, p.51.),
而不是首选从 DriverManager 中获得连接对象?
* 使用 DriverManager 获得连接对象时,虽然从实现 JDBC 4.0 规范的驱动程序开始,不需要使用
Class.forName("xxx.xxx.xxx.Driver"); 了,但我们也有必要了解一下这句话的作用是什么?
* 单纯地使用 JDBC 时如何实现低耦合性的事务管理?也就是说事务边界在业务层,一个业务层调用
多个数据库操作的方法完成一个事务,在这种情况下如何进行事务控制?
在使用 Spring 等 IoC 框架之前,我认为应先掌握:
* 熟练地使用 JAXP、jdom, dom4j 等工具解析/生成 XML 文件,并能使用 XPath 进行 XML 查找
* 掌握 Java 中的反射,以及 JavaBeans 规范中的内省类,了解 JavaBeans 规范对于方法名、属性
的要求(别看这个很简单,实际上很少有人知道)
* 了解 JDK 的动态代理和 Cglib 的动态代理,了解 JDK 动态代理的限制,以及与 Cglib 动态代理
的优缺点,并且了解一下动态代理是做什么用的
* 熟练地使用日志工具,比如:JDK 日志工具、log4j 工具等,以及在使用时需要注意些什么
* 能善于使用开源框架中已经实现的东西,比如 Apache Commons 中很多实用的方法,像实现了 LRU
算法的 Map 等等之类的
==========================================
◆ 设计模式:可复用面向对象软件的基础
—— Design Patterns:Elements of Reusable Object-Oriented software
本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。本书适合大学计算机专业的学生、研究生及相关人员参考。
◆ 深入浅出设计模式
—— Head First Design Pattern
你不想重新发明车轮(或者更差的是,没有充气车胎的轮子),所以你从设计模式中寻求帮助——设计模式是过去人们面对同样的软件设计问题所得到的经验。 有了设计模式,就可以利用其他人的实践经验的精华,因此省下的时间可以用在其他的事情上,如:更有挑战性的事情、更复杂的事情以及更有趣的事情。你想要学习:
·重要的模式
·何时使用某个模式,为何使用该模式
·如何在你自己的设计中马上采用这些模式
·何时不该使用该模式(如何避免滥用模式)
·某个模式是依据哪些面向对象设计原理而设计出来的
更重要的是,你想在学习设计模式的过程中,不感觉到昏昏欲睡。如果你曾经读过任何一本深入浅出(Head First)系列书籍,你就会知道能够从本书中得到的是:透过丰富的视觉效果让你的大脑充分地运作。本书的编写运用许多最新的研究,包括神经生物学、认知科学以及学习理论,这使得这本书能够将这些设计模式深深地烙印在你的脑海中,不容易被遗忘。你将会更擅长于解决软件设计中的问题,并能够和你的团队成员用模式的语言来更好地沟通。
◆ 设计模式解析
—— Design Pattern Explained
本书从一个新的视角描述面向对象设计,将面向中对象编程的原则与运用设计模式力量创建健壮、可靠的软件开发环境结合起来。书中采用实用、恰当的例子,指导读者用模式解决普通的编程问题,并且解释现代软件设计模式的优越性。本书适用于学习面向中对象设计和设计模式的学生、程序员以及从事软件开发的人士。 本书要点包括: ·对象、封装和继承的新观点 ·设计模式的思想、起源及其在软件设计学科中的应用 ·模式基础以及使用统一建模语言(UML)进行面向对象软件开发 ·如何实现关键模式——Strategy(策略)、Observer(观察者)、Bridge(桥接)、Decorator(装饰)等等 ·共同点/变化点分析、设计模式以及它们如何帮助理解抽象类
◆ 代码大全第二版
—— Code Complete,Second Edition
代码大全(第二版)是著名IT畅销书作者Steve McConnell十一年前的经典著作的全新演绎:第二版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。本书中所论述的技术不仅填补 了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益的。可以说,无论你是什么背景,阅读本书都会让你在更短的时间内、更容易地写出更好的程序。
◆ 人月神话
—— The Mythical Man-Month:Essays on Software Engineering,Anniversary Edition
本书自第一版以来,畅销20余年不衰,是软件领域绝无仅有的必读经典。本文作者为人们管理复杂项目提供了颇具洞察力的见解,既有很多发人深省的观点,也有大量的软件工程实践。本书内容来自布鲁克斯在IBM公司 System/360 家族和OS/360中的项目管理经验。在本书第一次出版20年后的今天,布鲁克斯重新审视了他原先的观点,增加了一些新的想法和建议。既方便了熟悉原有内容的人们,也方便了许多第一次阅读它的读者。
◆ 人件
—— Peopleware:Productive Projects and Teams,2nd Ed
《人件》第1版于1987 年出版,专门讨论了软件开发和维护团队的管理问题,并向人们的传统认识提出了挑战。作者在书中推崇人本管理思想,正确指出知识型企业的核心是人,而不是技术,呼吁给予软件工作者充分的自由和信任。本书推出后,立即在西方引起了轰动,被誉为"几十年来对美国软件业影响最大的理念"。与《人月神话》一样,《人件》现已成为软件团队管理的经典之作。它和《人月神话》共同被誉为软件图书中"两朵最鲜艳的奇葩"。人们认为,《人月神话》关注"软件开发"本身,《人件》则关注软件开发中的"人",因此,在成千上万的书架上,《人件》永远和《人月神话》并列在一起。1999 年 2 月,《人件》第2版出版,增补了8 章新内容。这些新内容拥有更加宽广的视角,对大中型组织中的团队如何运作进行了深入探讨。《人件》最新版的中文译本由UMLChina组织翻译,清华大学出版社将于2003 年5月出版。
◆ 程序员修炼之道 —— 从小工到专家
—— The Pragmatic Programmer
本书主要介绍了软件开发的原则和方法。本书直指编程前沿,透过日益增长的现代软件开发 规范和技术,对软件开发的核心过程进行了审视——以满足用户为本,针对用户需求来产出高效、可维护的优秀代码。全书涵盖内容广博,从个人责任和职业发展,到保持代码灵活性并使之易于改动和重用,多而不杂。本书采用了有趣的轶事、详实的例子以及诙谐的对话等方式,描述了软件开发方方面面的最佳实践方案和各种缺陷。您从本书所学到的开发技巧、开发习惯以及职业态度,必将帮助您修炼成为一名真正的Pragmatic Programmer!