【转】http://www.zhihu.com/question/19937886(里面提到的知识点的连接)java
1. Java 语言基础
谈到Java 语言基础学习的书籍,你们确定会推荐Bruce Eckel 的《Thinking in Java》。它是一本写的至关深入的技术书籍,Java 语言
基础部分基本没有其它任何一本书能够超越它。该书的做者Bruce Eckel 在网络上被称为天才的投机者,做者的《Thinking in C++》在
1995 年曾获SoftwareDevelopment Jolt Award 最佳书籍大奖,《Thinking in Java》被评为1999 年Java World“最爱读者欢迎图书”,
而且赢得了编辑首选图书奖。做者从1986 年至今,已经发表了超过150 篇计算机技术文章,出版了6 本书(其中4 本是关于C++的),并
且在全世界作了数百次演讲。他是《Thinking in Java》、《Thinking in C++》、《C++ Inside & Out》《Using C++》和《Thinking in
Patterns》的做者,同时仍是《Black Belt C++》文集的编辑。他的书被读者称为“最好的Java 参考书……绝对让人震惊”;“购买Java
参考书最明智的选择”;“我见过的最棒的编程指南”。做者的非凡才华,极其跨越语言的能力,使做者被选为Java 发展10 年间与Java
关系最密切的10 我的物之一。
《Thinking in Java》讲述了Java 语言的方方面面,不少Java 语言的老手都评价“这是一本将Java 语言讲得至关丑陋的书”。该书谈
及了java 语言的不少细节,每个方面都是至关深入的。经过本书你能够看到“丑陋的”java 语言。
网络上关于java 语言讲解的视频不少不少,其中不凡是有垃圾。《翁恺—JAVA 语言》多是你学习java 语言基础的惟一选择,该讲座基本
按照《Thinking in Java》这本书讲解,其中不凡是有翁老师的不少有意思的笑话。我很幸运学习就是今后视频开始的。内容包括30 讲,
我总共看了3 遍。
不过,对于初学者我不太推荐使用《Thinking in Java》,我比较推荐Prentice Hall PTR 的《Core Java 2》国内称为《Java 2 核心技
术》,目前是第七版。网络上你们均可如下载到电子版。Oreilly 的《Java in a nutshell》也是一个不错的选择。读完以上两本后,你 程序员
能够看看翁恺老师的视频,接着能够研究《Thinking in Java》了。 算法
2. Java 数据结构
市面上关于Java 数据结构的书自己就不多不多。大体有APress 的《Java Collections》, Jones 和Bartlett 的《Data Structures in
Java》、《Object-oriented Data Structures Using Java》以及Prentice Hall 出版的《Data Structures and Algorithms in Java》
(Dec 19, 2005)还有一本就是《Data Structures And Algorithms With Object-oriented Design Patterns In Java》。很幸运个人第
一本英文书就是APress 的《Java Collections》(本书在国内可能根本就没有中文版――只能下载英文版了),很不错,讲得颇有条例、
很简单,是一本完彻底全Java Collections API 介绍的书籍,其中不凡是有扩展API 的例子。这是我推荐你学习java 数据结构的惟一一
本好书。其它的Jones 和Bartlett 的那两本国内好像有一本中文版,想看你也能够看看。
在学习完API 后,你能够看看java.util 包中对应的类了。不过只有在学习过设计模式后你才有可能彻底理解整个Java Collections
Framework。Java Collections Framework 使用了不少著名的设计模式如:迭代器(Iterator)模式,工厂方法模式、装饰器模式、适配
器模式等等。经过研究java.util 包中数据结构的源代码,你能够知道臭名昭著的Properties 类的设计了,同时可能基本具有设计简单
的数据结构的能力了。
所谓学习无止境,学习完Sun 提供了Java Collections Framework 后,你能够研究Apche 的另外一个Java Collections Framework,颇有
意思哦。互为补充的两个Framework。
在你们学习、研究Java Collections 以前,我提示一下Java Collections 主要包括如下三部分:接口(Interface)、实现( Implemention)
和算法(Algorithm)。
1. 接口主要有List、Set、Queue 和Map。List 、Se t 和Queue 是Collection 接口的子接口。
2. 实现主要是实现这些接口的具体类。如实现List 接口的ArrayList、LinkedList、Stack 和Vector;实现Set 接口的HashSet、TreeSet
和LinkedHashSet;实现Queue 接口的PriorityQueue、SynchronousQueue 等等;实现Map 接口的HashMap、TreeMap、Hashtable、
Properties、WeakHashMap 等等。
3. 算法主要是由Arrays 类和Collections 类提供的,它是整个Java Collection Framework 算法的核心。支持各类类型的排序,查找
等经常使用操做。
Java Collections 中包含两个版本的数据结构,主要是原先的支持同步的数据结构和后来不支持同步的数据结构。
Java Collection Framework 在使用Comparator 和Comparable 接口支持排序。同时提供新旧两个版本的迭代器Iterator 和Enumeraton,
以及它们如何转换等等。
在java.util 包中的Obserable 接口和Observer 类是考察者模式的核心。
……
3. Java IO
市面上关于IO 的书籍也仅仅只有Oreilly 出版社的两本,都是Elliotte Rusty Harold 的著做。两本书的风格基本一致,推荐阅读是第
一版的《Jvava I/O》,讲得比较浅显,内容相对比较集中,实例也不少。第二版今年5 月国外才出版,颇有幸我在网络上下载了第二版,
讲得极其详细――726 页的大块头(我化了两个星期),此次将NIO 和IO 和在一块儿,还包括J2ME 部分的,不过串口、并口通讯部分好像
类库支持不够,本身不能实际操做。
与初版的《Jvava I/O》一块儿的Oreilly 还有一本《Jvava NIO》,也是很不错的哦。
你们在依次阅读完《Jvava I/O》以及《Jvava NIO》后,能够研究java.io 包中的源代码了。在你们研究源代码前我给点提示:
Java 的io 包主要包括:
1. 两种流:字节流(byte Stream)和字符流(character stream),这两种流不存在所谓的谁代替谁、谁比谁高级之说,它们互为补充,
只是侧重点不一样而已。
2. 两种对称:1.字节流、字符流的对称;2.输入、输出的对称。
3. 一个桥梁:将字节流转变为字符流的InputStreamReader 和OutputStreamWriter。
其中必须注意:
1. PipedInputStream 和PipedOutputStrem 是两个比较有趣的类。
2. 支持Buffered 的流是咱们常用的类。
3. 装饰器(Decorator)模式在java 最著名的应用就是用于io 的设计。仔细研究各个Filter 流与具体流的关系,多看设计模式的书籍。
相信你会有所所获。 sql
4. 学习好io 包,是研究net 包,rmi 包……的基础哦! shell
4 . Java 数据库
数据库的书籍太多太多了,也是太烂太烂了!这方面的书我基本都研究过,推荐的你就看看Apress 的《JDBC Recipes A Problem Solution
Approach 》很不错,国外2005 年末才出版,(国内好像没有中文版,不过出了中文版也不必定值得看――国内常常将国外的书翻译得一
塌糊涂、不堪入目)不过咱们真的很幸运,网络上有电子版的。值得一看。推荐我看的第一本比较满意的――Wiley 出版的《Java Database
Bible》,讲得很不错!Sun 公司本身的关于JDBC API 介绍的那一本《JDBC API Tutorial andRefernece》也不错。我第二本JDBC 的就是
研究的这套API。
不过目前这些书都是一些相对比较浮浅的API 应用的书籍。有机会我会给你们带来介绍JDBC API 以及JDBC 实现内部细节的书!我尽快
努力,同时但愿获得你们的支持!
顺便给学习JDBC 的朋友一点提示:
JDBC 的学习和使用主要是这套API,其使用过程也是极其简单,下面是使用JDBC 的通常流程:
1. 加载某个数据库的驱动(Driver 类),一般使用Class.forName(“驱动的类名“);
2. 链接数据库――
Connection con = DriverManager.getConnection(url,username,password) ;
3. 获得会话――Statement stmt = con.createStatement();
4. 执行操做――Result rs = stmt.executeQuery(“SQL 查询语句”);
5. 处理结果――
while(rs.next()){
String col1 = rs.getString(1);
……
}
简单吧!整个JDBC 中能够变化的通常是:
1. 能够由Connection 对象建立Statement、PreparedStatement 和CallableStatement 建立三种类型的Statement。
2. 能够建立多种类型的ResultSet:支持单向移动和个自由移动;可更新的和不可更新的;支持不一样等级的交易的…..
3. 数据输入的批处理。
4. 结果集中特殊类型(Blob、Clob、Arrary 和Ref、Struct)列的操做。
5. 这些特殊类型的录入数据库。
6. javax.sql 包中特殊结果集(CachedRowSet、JdbcRowSet、WebRowSet)的操做。
7. 其它的就是一个DataSource 了,也很简单!一个J2EE 中的被管理对象 数据库
简单吧!相信你们很快就会征服JDBC。 编程
5. Java 网络编程
网络编程――一个神秘的、充满挑战的方向。不过在谈Java 网络编程以前首先感谢Sun 公司的开发人员,由于它们天才的设想,充满智
慧的架构,使广大java 程序员学习java 网络编程变得异常简单。
Java 网络编程方面的书,我推荐O'Reilly 的《Java Network Programming》,目前已经第三版了,之前的版本市面上确定有!网络上早
有第三版的电子版,国外2004 年出版,706 页哦!讲得很全,比较深刻,太深刻的可能因为Sun 有些东西没有彻底公开,因此也就很差
讲了,有兴趣的能够下载看看!第二本仍是O'Reilly 1998 年出版的《Java distributed computing 》,基础部分写得比较详细,后面
的实例仍是值得研究的。
在你们阅读这些书以前,给你们一点提示:
java 网络编程其实相对比较简单,入门也很快很快。java 网络编程主要包括两个部分:1.Socket;2.URL 部分。不过第二部分也彻底建
立在第一部分的基础上。
1. Socket 包括客户端的Socket 和服务器端的ServerSocket。还有就是DatagramSocket 和DatagramPacket,它对应于UDP 通讯协议。总
之,Socket 部分是创建其它高级协议的基础。
2. URL 类是一个网络资源定位器,一般和具体的网络协议如HTTP,FTP,Telnet……相关。经过该类能够链接网络上的资源,经过其
openStream 能够以io 包中的流(InputStream)的形式读取网络资源;经过其OpenConnection 方法,能够打开一个链接,在此链接上可
以不只能够完成读的操做,还能够完成写的操做。
Java 的网络编程大致包括以上两部分。网络编程和IO 以及多线程部分很是密切,在学习此部分前你们必定对这两部分了解比较透彻。
学习了以上部分你能够研究java.net 包中的与此相关的源代码了!研究全部的源代码还为时尚早。在整个net 包中包含:
ContentHandlerFactory、URLStreamHandlerFactory、URLStreamHandler、URLClassLoader 等辅助类,它们构成了java.net 网络编程
的框架,经过研究其源代码,你不只能够快速理解java.net 包,还能够为之后扩展该包打下基础,甚至能够将此思惟方式运用到本身的
项目中。
到此为止你对java.net 包应该才了解60%,还有一部分你可使用JDecompiler 之类的反编译软件打开你JDK 安装目录下\jdkxxx\
jre\lib 目录中的rt.jar,用WinRAR 之类的软件打开它的sun.net 包,反编译全部的文件,它是URL 类工做的细节。当研究完该sun.net
包,你就会对整个网络编程很熟悉很熟悉了。
一切看起来咱们已经对网络编程很精通了。其实否则,刚刚开始而已,要想深刻,请继续吧!网络上不少优秀的网络编程库甚至软件可
觉得咱们“添加功力”。如Apache 的HttpCore 和HTTPConnection 是两个和HTTP 协议相关库;JGroups 是研究分布式通讯、群组通讯的
必读库;接着咱们能够研究P2P 的软件包,如Sun 公司的JXTA,它多是java 平台点对点通讯将来的标准哦!接着你能够研究成熟得
不得了,使用极其普遍得P2P 软件Azureus!www.sourceforge.net 能够下载到!
千里之行始于足下!Just do it !(目前我也只研究了net 包,其它的会在不久的未来继续深刻。Sun 公司由于某些缘由没有公开net
的其它实现细节,在其容许将其源代码以文字的形式加以研究,以及容许将其没有公开的实现写入书中时,我很但愿能出一本java 网络 设计模式
编程的书籍,以飧广大读者!!) 浏览器
6. Servlet 和JSP
Servlet、JSP 的书也是满地都是!值得推荐的也仅仅两三本。实推Addison Wiley 的《Servlets and JavaServer pages :The J2EE
Technology Web Tier》,又是一本很厚的哦!国外2003 年出版、784 页,讲得比较全,例子也不少,特别是第八章Filter,举了几个不
错的例子。其它全部我看到的关于Servlet 和JSP 的书都没有如此深刻的!(可能有我没有看到而已)。O’reilly 的《Java Servlet
Programming》和《Java Server Pages》相对比较好懂一些,能够读读!
在你们学习Servlet 和Jsp 以前我仍是要提醒一下:
本质上说Servlet 就是一个实现Servlet 接口的、部署于服务器端的服务器端的程序罢了!它能够象写其它任何java 应用程序同样编写,
它能够操做数据库、能够操做本地文件、能够链接本地EJB……编写Servlet 程序的通常流程为:
1. 继承一个HttpServlet 类;
2. 覆盖其doGet、doPost 方法;
3. 在覆盖方法的内部操做方法参数HttpServletRequest 和HttpServletResponse。
4. 读取请求利用HttpServletRequest。利用HttpServletRequest 你能够操做Http 协议的协议头、能够获得请求的操做方法、能够获得
请求的路径、能够获得请求的字符串、以及和请求客户相关的信息,更主要的你能够获得Cookie 和HttpSession 这两个对象。
5. 利用Cookie 你能够操做“甜心”对象或者将其写入HttpServletResponse 中。
6. 向客户输出信息可使用HttpServletResponse。使用HttpServletResponse 能够写入各类类型的协议头、能够增长Cookie、能够重
定向其它URL、能够向客户发送Http 协议的状态码。
7. 利用HttpSession 在会话内完成你想实现的任何功能。
同时Servlet 还提供了一些事件和事件监听器(简单的观察者模式而已)。还有就是过滤器(Filter)和包装器(ServletRequestWrapper、
ServletResponseWrapper)――简单的流的使用和装饰器模式的使用。
学习Sevlet、JSP 必然要部署到服务器中,记住一般文件部署的步骤和参数的设置以及在程序中如何使用就能够了。
彻底理解Servlet 后,学习jsp 相对比较容易了!Jsp 彻底创建在Servlet 的基础上,它是为了迎合那些喜欢在Html 文档中嵌入脚本(如:
PHP 之类的网页编程语言)的程序员的须要罢了!学起来也至关的容易!
一切看起来彷佛那么的风平浪静,简单好学!简单的表象背后有其复杂的机理。要想对Servlet 和Jsp 完全研究,你得研究Tomcat 等开
源软件的具体实现。它无非就是一个服务器,在客户利用网页经过HTTP 协议向服务器发送请求后,服务器将此HTTP 请求转化为相应的
HttpServletRequest 对象,调用你编写的Servlet 罢了,在你的Servlet 中你确定操做了此HttpServletRequest 了吧,同时操做了
HttpServletResponse 了吧,服务器就将此HttpServletResponse 按照HTTP 协议的要求利用HTTP 协议发送给你的浏览器了!在服务器
端的Jsp 网页在被客户请求后,Tomcat 会利用编译软件,使用javax.servlet.jsp 包中的模板,编译此jsp 文件,编译后就是一个Servlet!
之后的操做和Servlet 彻底同样哦!
在Servlet 和Jsp 的基础上出现了,所谓的高级技术:JSTL,Struts……无非就是一些标签和MVC 模式的使用。 服务器
继续前进吧!胜利就在前方!!
7. 多线程
一个看起来很神秘,却很容易上手、很难精通的方向!
我推荐两本我感受很好的书籍。首先是我第一本能上手看的这方面的书, Sams 1998 年出版的《Java Thread Programming》, 写得暴好,
很容易读懂,我有空还时常看当时的笔记!要知道怎么好你本身看吧!第二本OReilly 三次出版的《Java Threads》,最新是2004 版,
国内好像有中文版,推荐你仍是看英文版的吧!书中谈到了与多线程相关的N 个方向,如IO、Swing、Collection 等等。
给你们一点提示吧!java 类库中与多线程相关的类不是不少,主要有:Thread、ThreadGroup 以及ThreadLocal 和InheritableThreadLocal
四个类和一个Runnable 接口;关键字synchronize、volatile ;以及Object 对象的wait、notify、notifyAll 方法!
1 Thread 是多线程的核心类,提供了一系列建立和操做多线程的方法。
2 ThreadGroup 是一个管理Thread 的工具类。
3 ThreadLocal 和InheritableThreadLocal 为Thread 提供了一个相似保险箱功能的存储线程对象的类!
4 Runnable 不用说了吧!
5 synchronize 是同步方法和同步块的核心哦!多个线程调用此方法时,只有一个线程可使用此方法,其它方法阻塞,从而保证被操做
对象内部状态完整性。某个线程调用带有synchronize 的方法或块时会获得该对象的对象锁,完成块中的操做后释放此对象锁,从而其
它对象能够继续操做。
6 wait、notify、notifyAll 提供了有效的等待/通知机制。Java 语言中每个对象都有一个休息室,任何线程在其操做的对象的状态不
知足的状况下,在该对象的休息室中休息,释放对象锁;当其它线程操做该对象后,唤醒休息室中的线程,它们再检查条件,当条件满
足后,执行相应的操做。
多线程大体就这么多基础的!简单吗!这对于一个真正的程序员应该是不够的,真正对多线程要有所掌握,请您研究java.util.concurrent
包吧!大师Doug Lea 的做品,原先是一个开源的一致性编程的库,后来被Sun 公司并入java 类库。做者的网站上也有另一个版本的
该类库!值得研究的好东西! Hibernation、OpenJMS 等开源软件都使用了此包!
8. 设计模式
谈到设计模式不少人多会推荐GOF 的那本,该书在Amzon 上是五星级的推荐书籍。不过对于学习java 没多久的、特别是java 初学者,
我很不推荐这本书。主要是该书的例子基本都是C++的,不少细节没有讲述得足够清楚。
我给你们推荐的第一本是阎宏博士的《Java 与模式》,它是第一本中国人本身写的关于设计模式的书籍,写的比较有趣,融合了不少中
华民族的文化和观念,例子、类图都比较多,且相对简单!很是不错的入门书籍――又是大块头哦!
其次我推荐Wiley 出版社出版的《Pattern In Java》一套三本,我才看了第一本,好像第二本不怎么样,第三本还不错!
第三本是中文翻译版的关于多线程模式的(很可贵的中文翻译版)中国铁道出版社2003 年出版的《Java 多线程设计模式》,将多线程模
式讲得很是浅显,配有大量的图例,每章都有习题,最后有答案!我研究多线程模式就是由它开始的!
第四本,今年出版的Head First 系列的《Head First Design Pattern》,秉承Head First 系列图书的优势,大量的类图、丰富的实例、
有趣的注解,值得购买!
其次在J2EE 方向你能够研究阅读Addison Wesley 2002 年出版的《Patterns of Enterprise Application Architecture》,众多大腕的
做品,讲企业消息集成的!Sun 提供的《J2EE PATTERNS SL500》也很好!晚了推荐那一本Amzon 4 星半的《Holub on patterns》, 大师
的做品,提供了,很值得研究的例子,不过对上面四本不是很熟悉的读者,最好不要读它!可能会让你比较累!
我学习设计模式通过一段很曲折的路线,前先后后大约看了20 本,阎宏博士的《Java 与模式》我看了4 遍,还排除我第一次基本没看
懂的看!记得研一时老师给咱们讲了GOF 的那本,做为选修课,我和它们计算机系的硕士、博士们一块儿,到最后一个班40-50 我的,不
超过3 我的明白,我也没有明白任何一点(基础差吧――主要我对C++语言一点都不了解),凭我不伏输的性格,我认为我对java 语言理
解还能够,我就借了《Java 与模式》,结果仍是基本没看懂。颇有幸的是读研三时,听过了上交大饶若楠老师关于Java OOP 语言的讲座,
我懂了组合书籍模式等三种设计模式后,对其它模式有了强烈的兴趣和要征服它的愿望!工做后我买的第一本就是《Java 与模式》,第
一遍花了2 个月研究了这个1000 多页的大块头,后来第三遍15 天左右就能够搞定,笔记记了一大本!今后一发不可收拾。
选对书、埋头研究。相信很快就会入门的!
学习Java 语言8 个简单的部分,这只是咱们研究Java 语言的开始!这些都懂了充其量一个java 程序员而已,后面的路很长很长!咱们
能够继续研究数据库实现的源代码、Servlet 服务器的源代码、RMI、EJB、JNDI、面向方面编程、重构、ANT 工具、Eclipse 工具、Spring
工具、JBoss、JOnAS、Apache Geronimo 等J2EE 服务器!研究了这些你可能会成为一个出色的J2EE Architecture!你能够继续研究剖
析器、编译器、JNODE(java 写的操做系统)
Java 程序员的独孤九剑
总诀式——《Thinking in Java》
破剑式——《Effective Java Programming Language Guide》
破刀式——《Design patterns: Elements of Reusable Object Oriented Software》
破枪式——《Core J2EE Patterns》
破鞭式——《Refactoring: Improving the Design of Existing Code》
破索式——《AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis》
破掌式——《Analysis Patterns: Reusable Object Models》
破箭式——《Extreme Programming Explained: Embrace Change》
破气式——《Data Mining: Concepts and Techniques》
独孤九剑,有进无退!招招都是进攻,攻敌之不得不守。虽只一剑一式,倒是变化多端,学到后来,先后式融会贯通,更是威力大增,
剑法的精要所在:“料敌机先”。
上面提到的设计模式、基础设计原则:http://blog.csdn.net/hguisu/article/details/7571617,http://blog.csdn.net/hguisu/article/details/7571617
Android必备的Java知识点:http://blog.csdn.net/hguisu/article/details/8230427
深刻理解java异常处理机制:http://blog.csdn.net/hguisu/article/details/6155636
操做系统的:http://blog.csdn.net/hguisu/article/category/1253451
JAVA输入输出流:http://blog.csdn.net/hguisu/article/details/7418161
做业、进程、线程:http://blog.csdn.net/hguisu/article/details/1910803
Java线程:http://blog.csdn.net/hguisu/article/details/7490616