当前位置:首页 » 硬盘大全 » java缓存分布式
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

java缓存分布式

发布时间: 2023-02-09 16:13:06

Ⅰ java缓存机制有哪些 m

具体接触过的缓存机制是hibernate的缓存机制。为了避免每次都向数据库中取得数据,我们把用户常常访问到的数据放到内存中,甚至缓存十分大的时候我们可以把内存中的缓存放到硬盘中。还有高级的分布式缓存数据库使用,都可以增加系统的抗压力。

Ⅱ java怎么实现redis分布式锁

一、使用分布式锁要满足的几个条件:

系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现)
共享资源(各个系统访问同一个资源,资源的载体可能是传统关系型数据库或者Nosql
同步访问(即有很多个进程同事访问同一个共享资源。没有同步访问,谁管你资源竞争不竞争)
二、应用的场景例子

管理后台的部署架构(多台tomcat服务器+redis【多台tomcat服务器访问一台redis】+mysql【多台tomcat服务器访问一台服务器上的mysql】)就满足使用分布式锁的条件。多台服务器要访问redis全局缓存的资源,如果不使用分布式锁就会出现问题。 看如下伪代码:

long N=0L;
//N从redis获取值
if(N<5){
N++;
//N写回redis
}
复制代码

Ⅲ Java数据库,哪个更好用

我将推荐给你们10个最高效的Java数据库
1、MongoDB——最受欢迎,跨平台,面向文档的数据库
MongoDB是一个基于分布式文件存储的数据库,使用C++语言编写。旨在为Web应用提供可扩展的高性能数据存储解决方案。应用性能高低依赖于数据库性能,MongoDB则是非关系数据库中功能最丰富,最像关系数据库的,随着MongDB 3.4版本发布,其应用场景适用能力得到了进一步拓展。
MongoDB的核心优势就是灵活的文档模型、高可用复制集、可扩展分片集群。你可以试着从几大方面了解MongoDB,如实时监控MongoDB工具、内存使用量和页面错误、连接数、数据库操作、复制集等。
2、Elasticsearch ——为云构建的分布式RESTful搜索引擎
ElasticSearch是基于Lucene的搜索服务器。它提供了分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是比较流行的企业级搜索引擎。
ElasticSearch不仅是一个全文本搜索引擎,还是一个分布式实时文档存储,其中每个field均是被索引的数据且可被搜索;也是一个带实时分析功能的分布式搜索引擎,并且能够扩展至数以百计的服务器存储及处理PB级的数据。ElasticSearch在底层利用Lucene完成其索引功能,因此其许多基本概念源于Lucene。
3、Cassandra——开源分布式数据库管理系统
最初是由Facebook开发的,旨在处理许多商品服务器上的大量数据,提供高可用性,没有单点故障。
Apache Cassandra是一套开源分布式NoSQL数据库系统。集Google BigTable的数据模型与Amazon Dynamo的完全分布式架构于一身。于2008开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。
因Cassandra是用Java编写的,所以理论上在具有JDK6及以上版本的机器中都可以运行,官方测试的JDK还有OpenJDK 及Sun的JDK。 Cassandra的操作命令,类似于我们平时操作的关系数据库,对于熟悉MySQL的朋友来说,操作会很容易上手。
4、Redis ——开源(BSD许可)内存数据结构存储,用作数据库,缓存和消息代理
Redis是一个开源的使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 有三个主要使其有别于其它很多竞争对手的特点:Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的; Redis相比许多键值数据存储系统有相对丰富的数据类型; Redis可以将数据复制到任意数。Redis 这么火,它都解决了哪些问题?
5、Hazelcast ——基于Java的开源内存数据网格
Hazelcast 是一种内存数据网格 in-memory data grid,提供Java程序员关键任务交易和万亿级内存应用。虽然Hazelcast没有所谓的“Master”,但是仍然有一个Leader节点(the oldest member),这个概念与ZooKeeper中的Leader类似,但是实现原理却完全不同。同时,Hazelcast中的数据是分布式的,每一个member持有部分数据和相应的backup数据,这点也与ZooKeeper不同。
Hazelcast的应用便捷性深受开发者喜欢,但如果要投入使用,还需要慎重考虑。
6、Ehcache——广泛使用的开源Java分布式缓存
主要面向通用缓存、Java EE和轻量级容器。
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是hibernate中默认的CacheProvider。
主要特性有:快速简单,具有多种缓存策略;缓存数据有两级,内存和磁盘,因此无需担心容量问题;缓存数据会在虚拟机重启的过程中写入磁盘;可以通过RMI、可插入API等方式进行分布式缓存;具有缓存和缓存管理器的侦听接口;支持多缓存管理器实例,以及一个实例的多个缓存区域;提供Hibernate的缓存实现。Ehcache介绍及整合Spring实现高速缓存。
7、Hadoop ——用Java编写的开源软件框架
用于分布式存储,并对非常大的数据用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。Hadoop的框架最核心的设计就是:HDFS和MapRece。HDFS为海量的数据提供了存储,MapRece则为海量的数据提供了计算。
8、Solr ——开源企业搜索平台,用Java编写,来自Apache Lucene项目
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
与ElasticSearch一样,同样是基于Lucene,但它对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化。
9、Spark ——Apache Software Foundation中最活跃的项目,是一个开源集群计算框架
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地。
10、Memcached ——通用分布式内存缓存系统
Memcached是一套分布式快取系统,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。Memcached作为高速运行的分布式缓存服务器,具有以下的特点:协议简单,基于libevent的事件处理,内置内存存储方式。
通过以上的分析,相信你就知道怎么选择了

Ⅳ java解决分布式存储计算

一、高性能计算
Hadoop:Hadoop的框架最核心的设计就是:HDFS和MapRece。HDFS为海量的数据提供了存储,则MapRece为海量的数据提供了计算。
Spark:Spark是UC Berkeley AMP lab所开源的类Hadoop MapRece的通用的并行,Spark,拥有Hadoop MapRece所具有的优点;但不同于MapRece的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map rece的算法。
CUDA:CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员现在可以使用C语言来为CUDA架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序于是就可以在支持CUDA的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。
二、Hadoop生态系统
(1)海量数据怎么存,当然是用分布式文件系统——HDFS。
(2)数据怎么用呢,分析、处理MapRece框架,让你通过编写代码来实现对大数据的分析工作。

(3)非结构化数据(日志)收集处理——Fuse、WebDAV、Chukwa、Flume和Scribe。

(4)数据导入HDFS中,RDBMS也可以加入HDFS的狂欢了——HIHO、Sqoop。

(5)MaoRece太麻烦,用熟悉的方式操作Hadoop里的数据——Pig、Hive、Jaql。

(6)让你的数据可见——Drilldown、Intellicus。

(7)用高级语言管理你的任务流——Oozie、Cascading。

(8)Hadoop自己的监控管理工具——Hue、Karmasphere、Eclipse Plugin、Cacti、Ganglia。

(9)数据序列化处理与任务调度——Avro、ZooKeeper。

(10)更多构建在Hadoop上层的服务——Mahout、Elastic Map Rece。

(11)OLTP存储系统——HBase。

(12)基于Hadoop的实时分析——Impala。

Ⅳ 如何用java 建立一个分布式系统

分布式架构的演进

系统架构演化历程-初始阶段架构

初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP

特征:
应用程序、数据库、文件等所有的资源都在一台服务器上。

描述:
通常服务器操作系统使用Linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用MySQL,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。

系统架构演化历程-应用服务和数据服务分离

好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver

特征:
应用程序、数据库、文件分别部署在独立的资源上。

描述:
数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。

系统架构演化历程-使用缓存改善性能

特征:
数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力。

描述:
系统访问特点遵循二八定律,即80%的业务访问集中在20%的数据上。
缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况。

系统架构演化历程-使用应用服务器集群

在做完分库分表这些工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了,突然有一天,发现系统的访问又开始有变慢的趋势了,这个时候首先查看数据库,压力一切正常,之后查看webserver,发现apache阻塞了很多的请求,而应用服务器对每个请求也是比较快的,看来 是请求数太高导致需要排队等待,响应速度变慢

特征:
多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。

描述:
使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,提升系统的并发处理能力,使得服务器的负载压力不再成为整个系统的瓶颈。
系统架构演化历程-数据库读写分离

享受了一段时间的系统访问量高速增长的幸福后,发现系统又开始变慢了,这次又是什么状况呢,经过查找,发现数据库写入、更新的这些操作的部分数据库连接的资源竞争非常激烈,导致了系统变慢

特征:
多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。

描述:
使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,使得服务器的负载压力不在成为整个系统的瓶颈。
系统架构演化历程-反向代理和CDN加速

特征:
采用CDN和反向代理加快系统的 访问速度。

描述:
为了应付复杂的网络环境和不同地区用户的访问,通过CDN和反向代理加快用户访问的速度,同时减轻后端服务器的负载压力。CDN与反向代理的基本原理都是缓存。
系统架构演化历程-分布式文件系统和分布式数据库

随着系统的不断运行,数据量开始大幅度增长,这个时候发现分库后查询仍然会有些慢,于是按照分库的思想开始做分表的工作

特征:
数据库采用分布式数据库,文件系统采用分布式文件系统。

描述:
任何强大的单一服务器都满足不了大型系统持续增长的业务需求,数据库读写分离随着业务的发展最终也将无法满足需求,需要使用分布式数据库及分布式文件系统来支撑。
分布式数据库是系统数据库拆分的最后方法,只有在单表数据规模非常庞大的时候才使用,更常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理服务器上。
系统架构演化历程-使用NoSQL和搜索引擎

特征:
系统引入NoSQL数据库及搜索引擎。

描述:
随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,系统需要采用一些非关系型数据库如NoSQL和分数据库查询技术如搜索引擎。应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。
系统架构演化历程-业务拆分

特征:
系统上按照业务进行拆分改造,应用服务器按照业务区分进行分别部署。

描述:
为了应对日益复杂的业务场景,通常使用分而治之的手段将整个系统业务分成不同的产品线,应用之间通过超链接建立关系,也可以通过消息队列进行数据分发,当然更多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。

纵向拆分:
将一个大应用拆分为多个小应用,如果新业务较为独立,那么就直接将其设计部署为一个独立的Web应用系统

纵向拆分相对较为简单,通过梳理业务,将较少相关的业务剥离即可。

横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务

横向拆分需要识别可复用的业务,设计服务接口,规范服务依赖关系。

系统架构演化历程-分布式服务

特征:
公共的应用模块被提取出来,部署在分布式服务器上供应用服务器调用。

描述:
随着业务越拆越小,应用系统整体复杂程度呈指数级上升,由于所有应用要和所有数据库系统连接,最终导致数据库连接资源不足,拒绝服务。

Q:分布式服务应用会面临哪些问题?

A:
(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。
(2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
(3) 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
(4) 服务多了,沟通成本也开始上升,调某个服务失败该找谁?服务的参数都有什么约定?
(5) 一个服务有多个业务消费者,如何确保服务质量?
(6) 随着服务的不停升级,总有些意想不到的事发生,比如cache写错了导致内存溢出,故障不可避免,每次核心服务一挂,影响一大片,人心慌慌,如何控制故障的影响面?服务是否可以功能降级?或者资源劣化?

Java分布式应用技术基础

分布式服务下的关键技术:消息队列架构

消息对列通过消息对象分解系统耦合性,不同子系统处理同一个消息
分布式服务下的关键技术:消息队列原理

分布式服务下的关键技术:服务框架架构

服务框架通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务启用
服务框架是一个点对点模型
服务框架面向同构系统
适合:移动应用、互联网应用、外部系统

分布式服务下的关键技术:服务框架原理

分布式服务下的关键技术:服务总线架构

服务总线同服务框架一样,均是通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务启用
服务总线是一个总线式的模型
服务总线面向同构、异构系统
适合:内部系统

分布式服务下的关键技术:服务总线原理

分布式架构下系统间交互的5种通信模式

request/response模式(同步模式):客户端发起请求一直阻塞到服务端返回请求为止。

Callback(异步模式):客户端发送一个RPC请求给服务器,服务端处理后再发送一个消息给消息发送端提供的callback端点,此类情况非常合适以下场景:A组件发送RPC请求给B,B处理完成后,需要通知A组件做后续处理。

Future模式:客户端发送完请求后,继续做自己的事情,返回一个包含消息结果的Future对象。客户端需要使用返回结果时,使用Future对象的.get(),如果此时没有结果返回的话,会一直阻塞到有结果返回为止。

Oneway模式:客户端调用完继续执行,不管接收端是否成功。

Reliable模式:为保证通信可靠,将借助于消息中心来实现消息的可靠送达,请求将做持久化存储,在接收方在线时做送达,并由消息中心保证异常重试。
五种通信模式的实现方式-同步点对点服务模式

五种通信模式的实现方式-异步点对点消息模式1

五种通信模式的实现方式-异步点对点消息模式2

五种通信模式的实现方式-异步广播消息模式

分布式架构下的服务治理

服务治理是服务框架/服务总线的核心功能。所谓服务治理,是指服务的提供方和消费方达成一致的约定,保证服务的高质量。服务治理功能可以解决将某些特定流量引入某一批机器,以及限制某些非法消费者的恶意访问,并在提供者处理量达到一定程度是,拒绝接受新的访问。

基于服务框架Dubbo的服务治理-服务管理

可以知道你的系统,对外提供了多少服务,可以对服务进行升级、降级、停用、权重调整等操作
可以知道你提供的服务,谁在使用,因业务需求,可以对该消费者实施屏蔽、停用等操作

基于服务框架Dubbo的服务治理-服务监控
可以统计服务的每秒请求数、平均响应时间、调用量、峰值时间等,作为服务集群规划、性能调优的参考指标。

基于服务框架Dubbo的服务治理-服务路由

基于服务框架Dubbo的服务治理-服务保护

基于服务总线OSB的服务治理-功能介绍

基于服务总线OSB的服务治理

Q:Dubbo到底是神马?
A:
淘宝开源的高性能和透明化的RPC远程调用服务框架
SOA服务治理方案
Q:Dubbo原理是?
A:

-结束-

Ⅵ java ehcache怎么实现分布式

java web开发缓存方案,ehcache和redis各有优劣势,对比如下: 1、适合使用ehcache的场景: 选用Ehcache作为数据存储服务器,Ehcache也是基于内存存储,支持定时持久化功能,非常适合存储像计数器这种小数据类型。处理Http请求使用Tomcat容器

Ⅶ java用户评论缓存在哪里

在java应用中,对于访问频率比较高,又不怎么变化的数据,常用的解决方案是把这些数据加入缓存。相比DB,缓存的读取效率快好不少。java应用缓存一般分两种,一是进程内缓存,就是使用java应用虚拟机内存的缓存;另一个是进程外缓存,现在我们常用的各种分布式缓存。相比较而言,进程内缓存比进程外缓存快很多,而且编码也简单;但是,进程内缓存的存储量有限,使用的是java应用虚拟机的内存,而且每个应用都要存储一份,有一定的资源浪费。进程外缓存相比进程内缓存,会慢些,但是,存储空间可以横向扩展,不受限制。

这里是几中场景的访问时间

-------------------------------------------------------------------

| 从数据库中读取一条数据(有索引) | 十几毫秒 |

| 从远程分布式缓存读取一条数据 | 0.5毫秒 |

| 从内存中读取1MB数据 | 十几微妙 |

-------------------------------------------------------------------

进程内缓存和进程外缓存,各有优缺点,针对不同场景,可以分别采用不同的缓存方案。对于数据量不大的,我们可以采用进程内缓存。或者只要内存足够富裕,都可以采用,但是不要盲目以为自己富裕,不然可能会导致系统内存不够。

下面要分享的是一个代码级别的,对进程内缓存的经验总结。面向jdk1.8版本。

在有效时间内缓存单个对象

@FunctionalInterfacepublic interface LiveFetch<T> { // 刷新缓存接口 T fetch() ;
}
public class LiveManager<T> { // 缓存时间
private int cacheMillis; // 缓存对象
private LiveCache<T> liveCache; // 刷新缓存的对象
private LiveFetch<T> liveFetch ;
private Logger logger = LoggerFactory.getLogger(LiveManager.class) ;
// 刷新缓存开关
private boolean refresh = false ;
public LiveManager(int cacheMillis, LiveFetch<T> liveFetch) { this.cacheMillis = cacheMillis ; this.liveFetch = liveFetch ;
}
/**
* fetch cache ; if cache expired , synchronous fetch
* @return
*/
public T getCache() {

initLiveCache();
if(liveCache != null) {
T t ; if((t= liveCache.getElement()) != null) { return t ;
} else {
t = liveFetch.fetch() ; if(t != null) {
liveCache = new LiveCache<T>(cacheMillis, t) ; return t ;
}
}
}
return null ;
}
/**
* fetch cache ; if cache expired , return old cache and asynchronous fetch
* @return
*/
public T getCacheIfNecessary() {

initLiveCache();
if(liveCache != null) {
T t ; if((t= liveCache.getElement()) != null) { return t ;
} else {
refreshCache() ; return liveCache.getElementIfNecessary() ;
}
}
return null ;
}
/**
* init liveCache */
private void initLiveCache() { if(liveCache == null) {
T t = liveFetch.fetch() ; if(t != null) {
liveCache = new LiveCache<T>(cacheMillis, t) ;
}
}
}
/**
* asynchronous refresh cache */
private void refreshCache() {
if(refresh) return ;
refresh = true ; try {
Thread thread = new Thread(() -> { try {
T t = liveFetch.fetch(); if (t != null) {
liveCache = new LiveCache<>(cacheMillis, t);
}
} catch (Exception e){
logger.error("LiveManager.refreshCache thread error.", e);
} finally {
refresh = false ;
}
}) ;
thread.start();
} catch (Exception e) {
logger.error("LiveManager.refreshCache error.", e);
}
}
}
public class Test {
public static void main(String[] args) { int cacheMilis = 1000 ;
LiveManager<Object> liveManager = new LiveManager<>(cacheMilis,() -> new Test().t1()) ;

liveManager.getCache() ;
liveManager.getCacheIfNecessary() ;
}
public Object t1(){
return new Object() ;
}
}

Ⅷ JAVA目前比较常用的缓存有哪些 集中式缓存与分布式缓存有何区别 它们应用场景是

java目前常用的缓存:
Generic
JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, etc)
EhCache 2.x
Hazelcast
Infinispan
Couchbase
Redis
Caffeine
Guava (deprecated)
Simple
建议使用spring boot集成方式,可插拔,简单。
集中式缓存适用场景:
1、服务器集群部署。
2、数据高一致性(任何数据变化都能及时的被查询到)

分布式缓存适用场景:
系统需要缓存的数据量大
对数据的可用性较高的情况

需要横向扩展,从而达到缓存的容量无限的要求

Ⅸ 我想学java中有关想学分布式、缓存、消息、搜索相关知识 看什么书

如果是没有任何电脑基础的话,建议还是先看点计算机基础方面的资料,要不然直接学编程的话,理解起来会有所偏差,而且事倍功半,得不偿失。

正所谓磨刀不误砍柴工,首先要做好准备工作,就是先要获得一定的计算机基础知识。

建议先了解一下计算机的发展历史,这个阶段可以看看《计算机科学概论》,了解一下大体的情况。
然后了解一下编程语言和软件的发展历史,这些资料网上多的是,取之不尽用之不竭。
接下来就是了解java语言的历史了,这个相对没多少内容,网上也很多资料。

上面的是准备过程,那些基础知识只要了解即可,并不需要花太多时间去记忆。

如果感觉自己准备得差不多了,下面就可以开始真正学习java了,这期间如果遇到不懂的知识依然可以上网查,或者自己找资料。

对于Java的初学者来说,如果找一本比较合适的入门教材的话,完整地介绍Java的语法、面向对象和主要的API核心库等知识,那将对学习起到相当的促进作用。

首先推荐要看的是《21天学通Ja va 2》《循序渐进Java 2教程》《Java2从入门到精通》等书看起来比较浅显易懂,将Java的基本只是都涉及到了,使你在很短的时间内掌握Java的基本内容。

看完这这本书之一以后,你就想对Java全面深入的学习,现在向你推荐《Java大学教程》《Java 2编程指南》等书,这几本书对Java的语法、面向对象的知识和API函数库等介绍的比较详尽。让你能够比较熟练的使用Java来编程,解决一般的问题。

最后推荐的是《Java2核心技术》,这本书主要讲述了Java的核心技术也是J
ava的难点之处,具有很高的参考价值,无论是Java的初学者还是Java编程老手,都能从此书受益。

以上主要针对J2SE的学习进行讲述的,Java主要有J2SE、J2EE、J2ME三个部分,J2SE是基础,但是J2EE用得最多 属于Web开发技术

关于J2EE,以下是JDon的学习建议:

1. 学习web基本技术
http://www.jdon.com/idea.html

2. 学习GoF模式, 结合学习jive中模式处理设计
http://www.jdon.com/designpatterns/index.htm
http://www.jdon.com/jive.htm

3. 学习分层架构:表现层、持久层模式:struts Hibernate
http://www.jdon.com/dl/best/struts.htm

http://www.jdon.com/dl/best/hibernate.htm

4. 学习业务层模式 IOC依赖注射模式及其应用案例,如JdonFramework和JiveJdon3

http://www.jdon.com/AOPdesign/Ioc.htm

5. 学习AOP等复杂应用Spring
http://www.jdon.com/dl/best/spring.htm

6. 学习大型企业应用集群分布式计算 缓存应用 分布式事务处理,并发处理,单例和多例POOL性能解决方案等: EJB2或EJB3

7. 学习Evans DDD,揉合所有J2EE所有组件技术,实现围绕对象的快速有效开发,回归对象设计之初。大道复简!

Jdon开站至今,对于那些长期访问J道网站的人,可以发现以上学习路径。

进入上面每一个阶段都要找一个对应的现成软件代码来修改,先调试运行,然后小修小改,直至大修大改,全部消化,算是完成学习了。JiveJdon2.5(Jive2.5)、JPestore和JiveJdon3.0就是这样三个从易到难的代码。
JiveJdon2.5:
http://www.jdon.com/jive.htm

JPetstore:
http://www.jdon.com/jdonframework/app.htm#jpetstore

JiveJdon3:
http://www.jdon.com/jdonframework/jivejdon3/index.html