坚信科学,分享技术

2018全新版本,未来在blog.54chen.com更新博客!

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

Author Archives: 54chen

ruby快速学习手记(ubuntu)

ruby 1993年诞生于日本。rails是用ruby写的web framework,所谓的ROR正是这一搭档。 ruby安装 ubuntu 10.04很简单,安装ruby和rails: sudo apt-get install ruby sudo apt-get install rails 小试牛刀 rails first_rails cd first_rails/ ruby script/server 浏览器打开127.0.0.1:3000 it's works! IDE:eclipse 语法特点 解释型 适合文本处理,类似perl 完全面向对象 无分号 方法定义关键字:def+end 木有大括号({}) 无需指定类型 局部变量用小写字母或下划线开头即可 全局变量用美元符作为前缀 $;而实例变量用 @ 开头;类变量用 @@ 开头;类名、模块名和常量应该用大写字母开头 …

Continue reading

1 Comment

Testing and Mocking in spring2.5: Static class、maven site、cobertura

spring 2.5 与 junit 4.4 Spring 2.5.x不能用JUnit 4.5+.如果把使用了spring-test 2.5 的testcase升级到 junit 4.5会得到NoClassDefFoundError: org.apache.maven.surefire.booter.SurefireExecutionException: org/junit/Assume$AssumptionViolatedException; nested exception is java.lang.NoClassDefFoundError: org/junit/Assume$AssumptionViolatedException java.lang.NoClassDefFoundError: org/junit/Assume$AssumptionViolatedException 这是spring-test 2.5.x的一个bug. 其与JUnit 4.5不一致. 只能使用4.0-4.4. 或者就是自己打patch. http://jira.springframework.org/browse/SPR-5145 EasyMock 与 static Class EasyMock未提到是否支持static methods.功能类经常是static的,是因为没有上下文环境依赖,但如果一定要mock他们,可以选择powerMock. PowerMock、static Class、junit、spring PowerMock 需要你添加 '@RunWith(PowerMock

Continue reading

Leave a comment

利用h2database和easymock轻松不依赖环境单元测试(rose等spring环境万能)

前言 写java时间久了,慢慢就变得自信了,也可能是变得懒了,或者是项目进度的原因,test case越写越少,越来越不写了。 还有一个很大的原因是,DB环境不好搞,老是有垃圾数据,依赖的东西太多,有memcache、有别人的服务,等等等等,都是没有test case良好的理由。 下面将以rose环境下,使用easy mock搞写第三方依赖和h2database搞写DB环境为例子,简单讲述如何轻松测试。 完整代码可以在 https://github.com/XiaoMi/rose 下载到。 依赖的包介绍 spring-test:提供一些基础的spring环境的支持,如果你不是spring环境,可能不需要。 h2:一个内存数据库,使用它的原因是,我们的业务大多数时候使用的都是mysql,而h2有一个mysql模式,可以支持绝大多数的mysql的SQL语句。 easymock:以前在五四陈科学院提到过的利器,用来模拟各种调用的工具。 pom定义为:       <dependency>       <groupId>org.springframework</groupId>       <artifactId>spring-test</artifactId>       &l

Continue reading

5 Comments

zookeeper客户端curator使用手记

一、简介 curator是Netflix公司开源的一个Zookeeper client library,用于简化zookeeper客户端编程,包含一下几个模块: curator-client - zookeeper client封装,用于取代原生的zookeeper客户端,提供一些非常有用的客户端特性 curator-framework - zookeeper api的高层封装,大大简化zookeeper客户端编程,添加了例如zookeeper连接管理、重试机制等 curator-recipes - zookeeper recipes 基于curator-framework的实现(除2PC以外) 从github和maven上的消息来看,1.0.1的版本已经十分稳定,相对应的zk版本是3.3.x,还在开发中的版本是1.1.x,对应的版本是zk3.4.x。 二、依赖 <dependency>               <groupId>com.netflix.curator</groupId>               <artifactId>curator-framework</artifactId

Continue reading

3 Comments

redis 测试办法tclsh入门手记

一 什么是tclsh tool command language terminal control language 看上去两个都是。tcl和c语言有着天然的亲缘关系,相近的数据类型与控制结构,通过规范的 api,可以比较方便的用c进行tcl的扩展开发,当然不在本文的讨论范围。 二 变量 任何字符串均可作变量名。甚至空格也可以作为变量名。 三 变量赋值 set Name xxxxx set Name "xxxxxxx" 四 数据类型 实际上只有一种数据类型:字符串 数值计算只能用在expr命令中: %expr abs(sin($x)) 输出时非常类似C语言:set x [format "hello %-8.2f!" $y] 五 特殊的字符 $ 异常变量的值 [] 展开一个命令的值 "" …

Continue reading

3 Comments

rose手册第三章C节:DAO层:分表设置

欢迎顺利进入本章,如果您的企业需要这一节的内容,那么说明用户量很有前途,如果使用了本节的内容,不防向czhttp@gmail.com发信一封以表谢意,我们会很高兴收到各种反馈。 3.C.1 mysql分表的常规做法 以下是个人从业经验中的分表规则: 按照 id % 100 分为一百份 按照 id % 16 分为十六份 按照 id/10 % 10 分为十份 按照 id%10 分为十份 以上分表规则特别在mysql中使用机会比较多,各有优势,没有对错,只有最好与最不好用。 3.C.2 使用分表第一步:添加新的依赖 要使用分表,需要添加新的依赖,由bmw提供的bmwutils。 <dependency>       <groupId>com.54chen</groupId>       <artifactId>bmwutils</artifactId>       <version>0.0.2</version>   </dependency>   3.C.3 使用分表第二步:设置applicationContext.xml分表规则 在开写代码之前,需要告诉DAO是哪个表需要分表,按照什么规则分,分多少份。 <!

Continue reading

12 Comments

rose手册第三章B节:DAO层:DAO进阶:SQLParm支持和表达式SQL

3.B.1 SQLParam介绍:DAO方法传递参数 SQLParam作为DAO支持中的参数传递使者,可以传递一个常见的变量,也可以是一个自定义的对象。 比如: @SQL("insert into test (id,msg) values (:t.id,:t.msg)")    public void insertTest(@SQLParam("t") Test test);   上列中Test对象通过t传递到sql执行中去,并且可以分别使用其中的属性。这感觉是不是很自然? 当然,如果是一个int、long、String等自在不言中。 当是list时,会有自动的batch操作,将sql拆为多条sql执行。这个小技巧会在后面的章节里讲。平时很少用到。 3.B.2 ReturnGeneratedKeys介绍:返回刚刚插入的ID号 特别是使用mysql开发的广大劳苦大众,常常会使用到auto_increament的字段。 当一条insert语句在执行的时候,我们常常会去需要拿它的当前的自增id是多少。 @ReturnGeneratedKeys   @SQL("insert into test (id,msg) values (:t.id,:t.msg)")   public&nbs

Continue reading

35 Comments

rose手册第三章A节:DAO层:DAO的基本配置与使用

本章开始进入对DB层的支持,同进也是日常开发用得最多的章节。 3.A.1 什么是jade? jade大概是java access data layer的意思吧,具体的来由,在章节写到末尾的时候,我再找qieqie和liaohan大侠们写一写编年史。 用jade的好处在于,尽可能减少重复的从db把数据对bean进行装配的过程,统一入口,隔离业务逻辑,方便review。 jade是在spring完成的数据层的良好实践总结,无缝接入rose中,可以算得上是rose亲密无间的好模块。 3.A.2 引入基础配置 要开始使用jade,一定要先引用jade的基础包: pom.xml <dependency>       <groupId>com.54chen</groupId>       <artifactId>paoding-rose-jade</artifactId>       <version>1.1</version>   </dependency>   除了需要jade的包外,还需要引入数据源连接池的jar,这里使用了dbcp,还是在pom.xml中: <dependency>   &

Continue reading

28 Comments

rose手册第三章九节:controller层:上传文件

3.9.1 其实很简单 添加依赖包:commons-io.jar html中使用 enctype="multipart/form-data",method="POST" 直接看后端代码吧。 @Post("/doUpload")      public String doUpload(@Param("file") MultipartFile file) {          return "@ upload ok!" + file.getOriginalFilename();      }   3.9.2 其他 可以同时接收所有的文件 // 不声明@Param   // files可以是一个数组或者List   public String upload(MultipartFile[] files) {       return "@ok-" + Arrays.toString(files);   } &nbs

Continue reading

8 Comments

rose手册第三章八节:controller层:门户必备pipe支持

3.8.1 什么是pipe? ------------------ * pipe起源于facebook的工程师对他们网页提速的方案:将网页分解为Pagelets的小块(在rose叫做window的小块),然后通过后端多重管道运行,以达到性能的最佳。 * pipe巧妙使用了http 1.1连接有timeout的机制,充分使用一次http连接来传递数据。 * pipe可使用户在大多数浏览器中感受到延迟减少了一半。 3.8.2 与facebook的bigpipe相比rose pipe如何? -------------------------------------------- * fb并未在开源项目中公布过使用方法 * bigpipe神似是php+js搞定的 * rose pipe可以自由选择线程池大小,完全出自上一节的portal的基础 * 完全实现bigpipe功能,天然的对业务开发者透明 3.8.3 看实例 ------------ HelloController.java @Get("/3.8")   public String pipe(Pipe pipe) {       pipe.addWindow("p1", "/wp1");       pipe.addWindow("p2", "/wp2");      &

Continue reading

13 Comments
Page 5 of 16« First...3456710...Last »