- 博客(61)
- 收藏
- 关注
oscache源代码阅读(四) -- JSP/Servlet缓存CacheFilter
oscache对于jsp/servlet的缓存是使用Filter来实现的,对应的类是com.opensymphony.oscache.web.filter.CacheFilter,既然是Filter那么要看的自然主要有三个方法:init、doFilter和destroy,这里#destroy()并没有具体实现,只关注前两个即可,首先看一下#init()方法,[code="java"] pu...
2010-12-20 08:45:03 290 1
oscache源代码阅读(三) -- 基本缓存实现
oscache的默认缓存实现是由4个类组成的,如下图所示:[img]http://dl.iteye.com/upload/attachment/368741/18d227e3-aaef-3806-9ba6-3a96c7216aa1.png[/img]首先来看一下是如何放入缓存的操作吧,也就是AbstractConcurrentReadCache类的#put()方法:[cod...
2010-12-16 09:14:31 180 2
oscache源代码阅读(二) -- 从缓存中读取pojo
现在开始要介绍的从缓存中读取数据的过程,还是在GeneralCacheAdministrator#getFromCache(),这里有3个同名方法,还是找一个参数最多的:[code="java"] /** * Get an object from the cache * * @param key * The key entered by th...
2010-12-15 08:38:37 162
oscache源代码阅读(一) -- 将pojo放入缓存
其实之前我完全没有接触过oscache,今天突发奇想,准备看看缓存是怎么实现的,google了一下,决定看看oscache的源码,简单的写了个TestCase:[code="java"] @Test public void testPojoCache() throws Exception { TestPojo pojo = new TestPojo("0001"); poj...
2010-12-14 08:34:39 128
Tomcat NIO源代码分析(三) -- Protocol和Processor
现在请求到了Protocol(Http11NioProtocol)的#process()方法了,由于方法较长,很多代码没有列出:[code="java"] public SocketState process(NioChannel socket) { // 得到Processor Http11NioProcessor processor = connections.remove...
2010-12-09 09:39:00 162
Tomcat NIO源代码分析(二) -- Poller
接着上面的流程,现在请求到了Poller的#register()方法[code="java"] public void register(final NioChannel socket) { socket.setPoller(this); // KeyAttachment是对NioChannel信息的包装,同样是非GC KeyAttachment key = keyCac...
2010-12-08 08:46:57 132
Tomcat NIO源代码分析(一) -- Acceptor
这里主要讲一下Tomcat使用NIO启动和进行请求处理的大致流程,使用的源码版本是7.0.5,对于其他处理等流程就不写了,我在别的文章里已经大致写过了,不过是用的6.0版本:[url]http://zddava.iteye.com/category/53603[/url]。当Tomcat配置成使用NIO时,启动过程其实和过去差不多,也是Connector#startInternal -> ...
2010-12-07 09:11:05 207
原创 2009年回顾
2009年也过去一段时间了,不过最近一直很忙,都没来得及更新blog。09年换了一次工作,之后就感觉日子过的很快,还没来得及有什么感想,日子就已经匆匆的过去了。前段时间还在看Derby的源代码,看到SQL层真的是看不下去了,动不动一个类2w多行,里边定义了很多矩阵型的数据,完全不知道是做什么的。本来还想着能读到执行计划的部分,看来是不行了。09年开始看一些软件架构的书,比如温昱的《...
2010-01-17 00:59:27 115
Derby源代码分析 -- SQL层实现(一) -- LanguageConnectionContext
前段时间事情太多,一直没有继续看Derby的源代码。国庆过去了,闲暇的时间多了些了,终于可以接着把这个系列写完了。不过也过了很长时间了,自己前面看的东西都忘的差不多了...... 慢慢找回来吧!前面的文章提到了Derby的JDBC层,不敢说仔细的读,也就是大概的过了一遍,下面的文章主要是讲的SQL层,前面的JDBC实现(二)这篇文章中提到了JDBC层的sql语句执行的代码,其中在执行SQL...
2009-10-15 10:36:44 300
Derby源代码分析 -- JDBC实现(三)
在开始下面的分析前,先补一下课,插播下Derby的代码结构,Derby主要是分四个部分来组织代码的:JDBC, SQL, Store and Services。JDBC层处于最顶端,是与应用程序进行交互的部分。JDBC的下面是SQL层,SQL层主要是负责编译和执行这两种工作,生成SQL执行计划并返回执行结果。再向下的一层是Store层,主要负责访问数据和存储。最后是Service,...
2009-08-31 08:46:30 257
Derby源代码分析 -- JDBC实现(二)
前面已经知道了对于JDBC4.0,java.sql.Connection的网络服务器和嵌入式的实现类分别为NetConnection40和EmbedConnection40。下面就以就以嵌入式方式为例来说明下ResultSet的获取过程。一个一般的调用过程应该是如下这样的,[code="java"] Connection conn = DriverManager.get...
2009-08-19 09:11:21 241
Derby源代码分析 -- JDBC实现(一)
谈起JDBC的实现,还是从获取Connection开始吧。下面这句就是一般的获取Connection的代码了, [code="java"]DriverManager.getConnection(url, "username", "password");[/code]当每个Driver初始化的时候,都会在DriverManager中注册下自己,就是调用这个registerDr...
2009-08-02 01:28:31 311
Derby源代码分析 -- 服务器启动(三)
看过#getImplementations()之后,来看一下#startServices()方法,这个方法就是启动服务了,前面看到的JDBC服务就是在这里启动的(addProperty("derby.service.jdbc", "org.apache.derby.jdbc.InternalDriver");)[code="java"] public void startServices(...
2009-07-28 22:41:27 156
Derby源代码分析 -- 服务器启动(二)
[size=medium][color=blue][b]2. 嵌入式方式[/b][/color][/size]在开始这部分前,有一些必须的Derby架构的东西需要好好的了解下,可以在Derby的官方网站看一下,地址是http://db.apache.org/derby/papers/derby_arch.html首先,Derby是由monitor和一系列的module组成的,每个m...
2009-07-23 23:57:11 220
Derby源代码分析 -- 服务器启动(一)
一直以来都想研究下数据库的实现原理,Derby在我眼里绝对是一个完美的切入点。首先它是100%纯Java实现,对于我这种Java程序员来说简直完美的,不需要去懂C,C++...等等无疑减少了很大的难度;其次,它是开源的,当然这个就是废话,不然我去哪里弄它的源码去。废话少说,首先简单的介绍下Derby。Derby的启动方式有两种,一种是网络服务器的方式,这种方式就和大家平时用的Oracle,...
2009-07-13 13:54:39 478
深入了解Java泛型(五) -- 类型令牌
可以考虑下这样的场景:假设我的一个应用中有很多类都是"无状态"的,并且实例化一个这种类是很费资源的,更糟的是发现这些类没有一个是单例的,这个时候可以考虑在外部编写一个单例的缓存,使用这个缓存来维护这些类的实例。考虑到类型安全性,我想使用泛型去实现这个缓存,但是泛型一般只能有有限的类型参数,比如Set和List有1个,Map有2个,这个时候就可以考虑不将缓存泛型化,而将缓存的键泛型化。说了这...
2009-05-10 09:09:47 359
深入了解Java泛型(四) -- 有限制通配符
大概有限制通配符的使用是源于Java的泛型的不可变性,所谓的不可变性就是说对于两个Set和Set,不管T1和T2谁是谁的父类,Set和Set都不会是父子类的关系。Java泛型的不可变性在应用中可能会遇到一些不方便的地方,尽管它很安全,比如一段这样的代码,加入我们要自己实现一个简单的List类如下:[code="java"]public class MyList { priv...
2009-05-10 02:03:23 138
深入了解Java泛型(三) -- 泛型方法
前面提到的都是与类的泛型化相关的话题,不过方法也可以从泛型中受益,尤其是Helper类的工具方法这种"无状态"的方法更加合适。还是有几个话题可以进一步讨论下的。1. 类型推导所谓类型推导,就是编译器可以通过判断参数的类型来推导类型参数(泛型)的类型。这句话初看会发现非常绕口,举个例子就能很好的理解了。[code="java"]public class GenericHelper...
2009-04-28 10:17:00 114
了解设计模式 之 行为模式(一) -- 责任链模式
下面的一系列文章主要是描述设计模式中的行为模式,也是本系列文章的最后一个部分了。按照在网络上搜到的定义:行为模式是对在不同对象之间划分算法和职责的抽象化,行为模式不仅描述对象或类本身,还描述了他们之间的交互。行为模式是设计模式中最大的一类了,个人感觉行为模式来自于现实生活中的某些行为的抽象,也是在实际应用中使用的比较多的一类模式。行为模式主要包括责任链模式(Chain of...
2009-04-27 22:33:08 139
深入了解Java泛型(二) -- 泛型列表与数组
记得以前面试的时候曾被问过一个问题:数组和List的区别是什么?当时答的无非就是效率,容量固定,List不能存基本类型等等。当Java发展到了1.5之后,出现了泛型版本的List,又为这个问题的解答加入了一笔。下面就来讲一下与这个话题相关的内容。1. 数组的协变性。数组的协变性(covariant)是指如果类Base是类Sub的基类,那么Base[]就是Sub[]的基类。而泛型是不可变...
2009-03-21 19:45:01 191
深入了解Java泛型(一) -- 泛型与原生态类型
Java1.5引入了泛型之后,为程序的安全性又增加了一个新的保障,减少了发生运行时类型错误的可能性,这篇文章并不是要讲述泛型的基本操作,而是要了解一些在进行泛型处理时可能会遇到的一些稍微复杂些的问题。在第一篇文章中,主要了解一些泛型和原生态类型的关系问题。何为原生态类型(raw type),就是不带有类型信息的"泛型",比如相对于List的List就是原生态类型。实际上原生态类型的List...
2009-03-20 12:48:35 198
了解设计模式 之 结构模式(七) -- 代理模式
7. 代理模式(Proxy Pattern)代理模式是一种很重要和常用的设计模式,就像它的名字一样,是关于对象的代理的,代理对象可以控制被代理对象的访问,实现某些特定的功能。按照功能来划分,代理模式可以分为以下三种:(1) 远程代理(Remote Proxy)可以控制对远程对象的访问,Java平台的RMI就是这种代理方式的典型应用。(2) 虚代理(Virtual...
2009-03-05 18:00:04 81
了解设计模式 之 结构模式(六) -- 享元模式
6. 享元模式(Flyweight Pattern)享元模式也并不复杂,它的作用主要是为了节省开销而设计的,它避免了产生拥有相同内容的大量的"小类",改为大家都共用同一个类。享元模式将系统中的对象的装态分为内蕴状态(intrinsic)和外蕴状态(extrinsic)两种,内蕴状态是可以不会随着运行环境的变化而变化的,而外蕴状态则相反,所以,内蕴状态可以用来共享,而外蕴状态只能由客...
2009-03-04 18:53:33 84
原创 疯狂的赛车和疯狂的广告
疯狂的赛车在我硬盘里也躺了1周了,一直想不起来看,昨天下VS2008,带宽都被占了,就开始翻硬盘里的电影看。电影的素质还是不错的,和"石头"一样的"多线程"叙事方式(记得当初超喜欢《两杆老烟枪》)的。那个台湾来的老大比较出彩,那两个"杀手"的出场也比较搞笑,还有那句"不烧不专业"。另外,好像宁浩也在电影里客串了出租车司机,不过感觉有点失败,哪有那么傻的人啊,黑社会也敢笑话,不管怎么说,他过了会当演...
2009-03-03 16:28:24 186
了解设计模式 之 结构模式(五) -- 外观模式
5. 外观模式(Facade Pattern)外观模式在结构上并不复杂,就是给内部的子系统提供一个统一的接口,来举一个现实点的例子。还是举方便面厂的例子吧(其实我不喜欢吃方便面的)。方便面的生产流程是很复杂的,包括和面机去和面,面饼要压片,蒸熟,然后是切割面饼,然后油炸,之后是冷却,然后加入调料包等等自动包装。这个过程如果用Java语言描述的话是很复杂的,会包括很多类和方法。就上边...
2009-02-27 19:12:23 99
了解设计模式 之 结构模式(四) -- 装饰模式
4. 装饰模式(Decorator Pattern)装饰模式顾名思义,就是给对象进行一些装饰,让他在原有的基础上动态的添加额外的职责。就好象一个女人,你可以给她"装饰"上漂亮的衣服,做好护肤,买漂亮的首饰然后让他成为一个美女;也可以不给她一顿饱饭,让她天天干活成为黄脸婆,这就是装饰的作用,在原来的基础上附加职责。而不用单独的去定义美女和黄脸婆两个类(世界上的女人那么多种,怎么定义的过来)。...
2009-02-26 19:10:28 103
了解设计模式 之 结构模式(三) -- 组合模式
3. 组合模式(Composite Pattern)组合模式可以让我们把对象按照树状结构进行组织,可以想象成菜单的概念,菜单下面有子菜单,也会有菜单项,使用了组合模式,我们可以在"子菜单"(组合对象)和"菜单项"(个体对象)上使用相同的操作,也就是说在多数的情况下是不用去区分它们的。我们还是来举个例子,就是上边说的菜单的例子,我们来建立的一个结构来表示菜单,子菜单和菜单项的组合。...
2009-02-26 11:49:05 82
了解设计模式 之 结构模式(二) -- 桥接模式
2. 桥接模式(Bridge)桥接模式是一种很有意思的模式,它的结构确实像一座桥一样,与桥相连的两端都可以各自独立的变化,让一组实现与另外一组使用它们的对象分离。我们可以举个例子来说明:还是回到先前的方便面厂那个例子,还是要构建一个生产北京,杭州两种地方口味的方便面,同样是牛肉面也就有了北京口味的牛肉面和杭州口味的牛肉面,西红柿打卤面也分北京口味和杭州口味之分。这里为了便于理解,口...
2009-02-24 15:31:35 83
了解设计模式 之 结构模式(一) -- 适配器模式
设计模式中的结构模式是关于结构的,包括聚合,组合,继承等等,主要使用这些结构来表示程序的逻辑,主要包括下面这些模式:适配器模式(Adapter),桥接模式(Bridge),组合模式(Composite),装饰模式(Decorator),外观模式(Facade),享元模式(Flyweight),代理模式(Proxy)。下面的一些列文章将会逐个讲述。首先来了解一下适配器模式。1. 适配...
2009-02-20 16:08:52 109
Spring源代码分析 -- IOC容器(四)
接着说IOC容器的实例化Bean的过程,上次说到了#doCreateBean()方法,这个方法的流程很长,本节主要讲的就是它的实现[code="java"] protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[] args) { // S...
2009-02-20 12:08:34 93
Spring源代码分析 -- IOC容器(三)
IOC容器的基接口提供了三个获取Bean的方法:[code="java"] Object getBean(String name) throws BeansException; Object getBean(String name, Class requiredType) throws BeansException; Object getBean(String name, Obje...
2009-02-19 14:57:40 93
了解设计模式 之 创建模式(四) -- 单例模式
4. 单例模式(Singleton Pattern)单例模式顾名思义,就是实现了单例,保证了在一个应用中只存在某个类的唯一实例。单例模式包括3个变种:饿汉式,懒汉式和登记式。下边来一一的说明(1) 饿汉式单例[code="java"]public class EagerSingleton { // 单例 private static final Eag...
2009-02-18 10:35:15 77
Spring源代码分析 -- IOC容器(二)
上一篇文章讲到了对,,标签处理的方法org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#parseDefaultElement()。[code="java"] private void parseDefaultElement(Element ele, BeanDefinitionParserDe...
2009-02-17 17:32:42 105
原创 Google Talk的Dictman回来了
印象中Dictman已经down了快半年时间了,今天突然发现好友列表里又出现它熟悉的身影了,给他随便发了一个词让他翻译,不过告诉我要加imdict@imdict.net为好友,以前的帐号退休了。不管怎么样,熟悉的翻译机器人又回来了。google和msn的翻译机器人真的不是很好,翻译的辞典小,结果也一般。 周末去买了彩票,机选了5注,结果最多的1注对了2个数,哈哈!这就...
2009-02-17 14:20:16 78
了解设计模式 之 创建模式(三) -- 原型模式
3. 原型模式(Prototype Pattern)原型模式,顾名思义,就是有一个原型,可以根据这个原型来创建其他的对象,当要创建一些列相似的对象时,使用原型来克隆总比直接创建一个新的对象要来的直接。还是举个例子吧,比如说一个配钥匙的过程,不过使用一个非常笨的方法。首先是一个钥匙的类:[code="java"]public class Key { // 使用一个整形...
2009-02-16 18:57:17 80
了解设计模式 之 创建模式(二) -- 建造者模式
下面来看看第二个创建模式,建造者模式。2. 建造者模式(Builder Pattern)建造者模式是为了把创建复杂对象的过程与构建它的各个部件的过程解耦和而产生的。单说这个感觉很抽象,还是用例子来说明吧。还是举上边的那个方便面厂的例子吧。这里主要不是讲怎么创建不懂地域口味的方便面了,主要描述制作方便面的过程。首先,应用建造者模式需要三个基本元素,Builder、Di...
2009-02-12 10:04:58 83
Spring源代码分析 -- IOC容器(一)
Spring是知道很久了,一直断断续续在看,不过用到它的机会不是很多,于是想阅读一下Spring的源代码来更深入的了解下这个框架(源代码的版本是2.5.6)。首先,当然是从Spring的IOC容器开始了,最基本的IOC容器就是org.springframework.beans.factory.BeanFactory了,这个接口定义了一个基本的IOC容器应该具有的行为,其源代码如下所示:[c...
2009-02-12 09:58:02 83
了解设计模式 之 创建模式(一) -- 工厂模式
最近突发奇想,觉得学会了再多的框架、技术标准,很多因为没有什么机会使用,过段时间就全都忘掉了,还是真正感悟一些方法性的东西比较合适,有很多东西需要用的时候再学是完全来得及的。说实话,设计模式的书也看过两遍了,不过总感觉还是记不住,最近发现一个好方法,把学习的心得贴出来,在写文章的时候可以更深入的了解要学习的知识,这也算我的一个学习方法吧。闲话少说,进入正题。设计模式总的来说...
2009-02-10 17:01:13 90
原创 累...
最近偶感风寒,再加上公司的工作太紧,导致身心疲惫,脖子和腰都疼,太TMD难受了。感觉过年回来还没休息过一天。真想突然中了个大奖什么的,给我5、6百万米,然后大家过上幸福快乐的生活.... 哈哈!不过梦想就是梦想,和理想都是有本质差别的。我长这么大还没中过一次奖呢,引用单田芳老先生在评书里的一句话:福也,命也,运也... 没那个命啊!不过周末还是准备去买一下的,万一能过上幸福快乐的生...
2009-02-09 12:17:43 86
原创 2008年回顾
大事记: 2008年1月 第一次坐飞机。回家,看到久违的家人。 2008年2月 找到了一生中最珍贵的东西。 2008年3月 去了美丽的西塘。在北京找到了工作。离开NEC,离开杭州。 2008年4月 进入YiCHA北京。 2008年5月 提职为技术主管。GF第一次来北京看我,游历了以后再也不想去的故宫 2008年6月 来...
2009-01-30 22:16:15 218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人