Sky's blog

我和我追逐的梦

常用链接

统计

其他链接

友情链接

最新评论

2010年11月29日 #

使用javap命令查看编译版本信息

     摘要: 之前遇到几次现场故障,都是和class文件有关,比如版本不兼容造成Bad Version错误之类,需要检查class文件的编译版本信息。 今天无意中发现, jdk自带的javap 命令其实可以方便的搞定这个事情  阅读全文

posted @ 2013-02-17 15:50 sky ao 阅读(1680) | 评论 (0)编辑 收藏

编码最佳实践(6)--那些年,我们一起建的索引

     摘要: 前几次的编码最佳实践系列,我们都着眼于Java代码,今天我们换个话题,看看另外一个领域,和Java代码大相径庭的SQL。   阅读全文

posted @ 2013-01-04 12:08 sky ao 阅读(2176) | 评论 (1)编辑 收藏

编码最佳实践(5)--小心!这只是冰山一角

     摘要: 本期的案例依然是来自实际项目,很寻常的代码,却意外遭遇传说中的Java"内存溢出"。   阅读全文

posted @ 2012-09-06 15:09 sky ao 阅读(3133) | 评论 (1)编辑 收藏

解决drupal的globalrediect模块的重定向循环问题

     摘要: 昨晚继续折腾俺的小站http://www.javauniversity.net,准备给它加上SEO支持,安装了SEO tools模块和相应的依赖模块。

结果安装完成之后就陷入重定向循环了,每个页面都被重定向到新地址,然后新地址再次被重定向。chrome浏览器会稍后报错说太多重定向,而ie则傻傻的一直在死循环。   阅读全文

posted @ 2012-07-11 07:28 sky ao 阅读(1558) | 评论 (0)编辑 收藏

Java University 网站开通过程吐糟

     摘要: 折腾了两天,终于将Java University这个站点开通,过程真不容易的,决定写下来吐吐 糟,以纪念TIANCHAO和谐之光普照下P民的美好生活  阅读全文

posted @ 2012-06-24 10:34 sky ao 阅读(1916) | 评论 (3)编辑 收藏

编码最佳实践(4)--小心LinkedHashMap的get()方法

     摘要: 这是一个来自实际项目的例子,在这个案例中,有同事基于jdk中的LinkedHashMap设计了一个LRUCache,为了提高性能,使用了 ReentrantReadWriteLock 读写锁:写锁对应put()方法,而读锁对应get()方法,期望通过读写锁来实现并发get()。  阅读全文

posted @ 2012-06-18 12:31 sky ao 阅读(4653) | 评论 (1)编辑 收藏

编码最佳实践(3)--尽量重用昂贵的初始化对象

     摘要: 这里将要讲述的是一系列的类似案例,都是在各个产品进行performance tuning时被发现的,非常具有普适性。可以说在日常开发中,有非常大的概率遇到相同或者类似的情形,因此需要对其保持警惕以便避免陷入类似的性能问题。 我们从JAXBContext这个对象开始...  阅读全文

posted @ 2012-06-17 23:02 sky ao 阅读(2689) | 评论 (0)编辑 收藏

编码最佳实践(2)--推荐使用concurrent包中的Atomic类

     摘要: 这是一个真实案例,曾经惹出硕大风波,故事的起因却很简单,就是需要实现一个简单的计数器,每次取值然后加1......  阅读全文

posted @ 2012-06-16 17:54 sky ao 阅读(2881) | 评论 (5)编辑 收藏

编码最佳实践(1)--小心"数据溢出"

     摘要: 最近在公司内部做了一些收集和整理的工作,关于trouble shooting和performace tuning 中遇到并解决的典型问题,做了一些内部分享。我整理了一下,准备陆续放上来分享给大家。

这些问题,单个看每个问题都不算复杂或高深,但是都是在实际项目开发中出现并一度造成困扰的,而且带有一定的普适性,具体表现为不知道这些问题的同学很容易在日常开发中中招。因此我们开了一个专题,叫做编码最佳实践,似乎名字起的有点大......

先来看看第一个,如何做compare。  阅读全文

posted @ 2012-06-09 23:27 sky ao 阅读(3094) | 评论 (2)编辑 收藏

解决Jetty下EL版本冲突的问题

     摘要: 今天用jetty做嵌入式web container,来做web项目的integration test,结果发现出现在渲染使用EL表达式的jsp页面时出现异常:

javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;

检查了一下,发现javax.el.ExpressionFactory.newInstance()这个方法是EL2.2版本之后才有的方法,而在EL2.1之中是没有这个方法的,问题很明显:org.apache.jasper中试图调用2.2版本的EL,当时提供的EL的版本是2.1版本,所以解决的方式无非就是两个,要不降低org.apache.jasper的版本,要不提升el的版本。考虑到现在使用的jetty已经是最新的版本8.1.2.v20120308,因此提升EL的版本为2.2更为合适。  阅读全文

posted @ 2012-05-25 07:11 sky ao 阅读(11088) | 评论 (2)编辑 收藏

解决jenkins执行sonar时重复执行两次test的问题

     摘要: 在jenkins上建立了一个job,通过标准的maven命令来执行打包测试和上传artifact到nexus仓库。随后发现有些性能问题:sonar的job执行时,需要重新update SCM,然后需要再次执行test,之后才能进行真正属于sonar的任务如代码检测等。明显update SCM 和执行test是重复了原有job,纯属浪费。这个重复执行问题随着测试案例和测试执行时间的增加,会越来越明显。因此需要考虑消除这里的重复问题,减少build的时间,并节约jenkins的资源。  阅读全文

posted @ 2012-02-14 14:53 sky ao 阅读(5646) | 评论 (5)编辑 收藏

搜索maven依赖的网站推荐

    使用maven填写依赖的时候,常会遇到需要查一下groupId/artifactId和version,有时候还要看看有没有新的版本更新。 

    原来一直用http://mvnrepository.com/ 这个网站来搜索,最近发现maven官网也提供了类似的功能,http://search.maven.org/。 

    简单试用了一下search.maven.org,功能基本和mvnrepository.com相同,而且界面更简洁友好。推荐使用。

posted @ 2011-12-02 16:06 sky ao 阅读(10588) | 评论 (4)编辑 收藏

cloudfoundry介绍-(1)申请试用

     摘要: cloudfoundry是vmvare新推出来的开源PaaS平台,我试用了一下,发现还是很不错的,申请过程很简单。发出来分享给大家,有需要的可以去申请,毕竟可以支持java的免费的空间实在太难得了。  阅读全文

posted @ 2011-06-11 13:52 sky ao 阅读(10649) | 评论 (6)编辑 收藏

解决gradle与sonar集成过程中的版本问题

     摘要: 初学gradle,一切都还在摸索的过程中。今天刚刚试图将之前基于ant + ivy的一个小项目转移到gradle下,结果在和sonar集成时出现问题.  阅读全文

posted @ 2011-05-15 13:12 sky ao 阅读(5280) | 评论 (0)编辑 收藏

easymock教程-自定义参数匹配器

     摘要: 虽然easymock中提供了大量的方法来进行参数匹配,但是对于一些特殊场合比如参数是复杂对象而又不能简单的通过equals()方法来比较,这些现有的参数匹配器就无能为力了。easymock为此提供了IArgumentMatcher 接口来让我们实现自定义的参数匹配器。  阅读全文

posted @ 2010-11-30 18:18 sky ao 阅读(3134) | 评论 (0)编辑 收藏

easymock教程-改变同一个方法调用的行为

     摘要: 在easymock中,对于mock对象的同一个方法,可以为每一次的调用定制不同的行为。在record阶段easymock会精确的记录我们录入的行为,基于每一次的方法调用。  阅读全文

posted @ 2010-11-30 17:06 sky ao 阅读(2527) | 评论 (0)编辑 收藏

easymock教程-运行时返回值或者异常

     摘要: 前面的教程中,我们看到easymock可以通过expect方法来设定mock方法的返回值或者异常,但是注意这些案例中设置的返回值都是在调用被测试的类的方法前就已经确定下来的,即我们其实在测试类的代码运行前(实际是在EasyMock.replay()方法调用前)就已经"预知"了返回结果。

但是在某些情况下,我们可能无法预知返回值,比如我们需要根据输入的参数值来决定返回什么,而这个参数可能无法在record阶段获得。因此在mock方法中我们无法在record阶段就决定应该返回什么。

对于这种场景,easymock提供了IAnswer接口和andAnswer()方法来提供运行时决定返回值或者异常的机制。  阅读全文

posted @ 2010-11-30 16:36 sky ao 阅读(3587) | 评论 (0)编辑 收藏

easymock教程-partial class mocking

     摘要: easymock中提供对于类的mock功能,我们可以方便的mock这个类的某些方法,指定预期的行为以便测试这个类的调用者。这种场景下被mock的类在测试案例中扮演的是次要测试对象或者说依赖的角色,主要测试对象是这个mock类的调用者。但是有时候我们需要将这个测试类作为主要测试对象,我们希望这个类中的部分(通常是大部分)方法保持原有的正常行为,只有个别方法被我们mock掉以便测试。  阅读全文

posted @ 2010-11-30 14:23 sky ao 阅读(3102) | 评论 (0)编辑 收藏

easymock教程-参数匹配

     摘要: easymock中提供了非常多的方法来实现参数匹配,基本能满足一般参数匹配的要求。  阅读全文

posted @ 2010-11-29 18:57 sky ao 阅读(4909) | 评论 (2)编辑 收藏

easymock教程-命名mock对象

     摘要: 在创建mock对象的时候,我们可以命名mock对象。
命名mock对象有什么好处呢?其实就是一点,即在当测试案例因为某个mock对象的状态或行为不符合要求而失败的时候,在异常信息里面可以输出这个mock对象的名称。  阅读全文

posted @ 2010-11-29 16:34 sky ao 阅读(2474) | 评论 (1)编辑 收藏

easymock教程-放宽调用次数

     摘要: 对于mock对象上的mock方法的调用,easymock支持指定次数,默认为1.同时easymock提供了其他的方法,用于指定具体调用次数或者放宽调用次数检验。  阅读全文

posted @ 2010-11-29 15:55 sky ao 阅读(1796) | 评论 (0)编辑 收藏