java
dennis_zane
这个作者很懒,什么都没留下…
展开
-
yanf4j引入了客户端非阻塞API
yanf4j发布一个0.50-beta2版本,这个版本最重要的改进就是引入了客户端连接非阻塞API,主要最近的工作要用到,所以添加了。两个核心类TCPConnectorController和UDPConnectorController分别用于TCP和UDP的客户端连接控制。例如,现在的UDP echo client可以写成: //客户端echo handler ...2009-02-19 00:15:00 · 164 阅读 · 0 评论 -
memcached分布测试报告(一致性哈希情况下的散列函数选择)
一、背景资料 memcached本身是集中式的缓存系统,要搞多节点分布,只能通过客户端实现。memcached的分布算法一般有两种选择:1、根据hash(key)的结果,模连接数的余数决定存储到哪个节点,也就是hash(key)%sessions.size(),这个算法简单快速,表现良好。然而这个算法有个缺点,就是在memcached节点增加或者删除的时候,原有的缓存数据将大规模失效...2009-03-10 16:30:37 · 212 阅读 · 0 评论 -
xmemcached发布1.0-BETA版
xmemcached发布1.0-beta,从0.60直接到1.0-beta,主要改进如下:1、支持更多协议,在已有协议支持的基础上添加了append、prepend、gets、批量gets、cas协议的支持,具体请查看XMemcachedClient类的实例方法。重点是cas操作,下文将详细描述下。2、memcached分布支持,支持连接多个memcached server,支持...2009-03-09 15:32:00 · 130 阅读 · 0 评论 -
Xmemcached vs Spymemcached 3th(linux下测试结果和多节点下表现)
翠花,上图,首先是容器类和自定义对象的get、set在不同并发下的表现 很明显,在linux下,spymemcached读写复杂对象的效率远远超过在windows下的表现,xmemcached在两个平台之间表现平稳,在linux上get效率低于spymemcached,差距比较大,准备再优化下;set效率略高于spymemcached。 xmemcached 0....2009-03-07 10:43:00 · 220 阅读 · 0 评论 -
xmemcached 0.60 优化过程
充分利用jprofile等工具观察性能瓶颈,才能对症下药,盲目的优化只是在浪费时间,并且效果可能恰恰相反1、观察到CountDownLatch.await占据最多CPU时间,一开始认为是由于jprofiler带来的影响,导致这个方法调用时间过长,从而忽略了这一点,导致后面走了不少弯路。实际上await方法占用50%的CPU,而网络层和序列化开销却比较低,这恰恰说明这两者的效率低下,没...2009-03-06 14:37:00 · 122 阅读 · 0 评论 -
基于java nio的memcached客户端——xmemcached
1、xmemcached是什么?xmemcached是基于java nio实现的memcached客户端API。 实际上是基于我实现的一个简单nio框架 http://code.google.com/p/yanf4j/的基础上实现的(目前是基于yanf4j 0.52),核心代码不超过1000行,序列化机制直接挪用spymemcached的Transcoder。 性能方面,在读写简单类型上...2009-03-03 16:31:00 · 149 阅读 · 0 评论 -
介绍一个轻量级java的swf处理库
提取swf文件元信息、压缩swf、解压swf都可以处理,来自于http://www.brooksandrus.com/blog/category/java/,或者直接这里下载。一个小例子: SWFHeader header = new SWFHeader("G:\\mplayer\\test.swf"); System.out.println("sig...2008-01-07 15:34:55 · 770 阅读 · 0 评论 -
PPT转图片
小结下最近做的东西吧。因为是做一个素材管理的东西,因此需要处理各种各样的素材,音频、视频、图片、pdf、ppt等等。遇到一个需求就是将PPT转成图片组,google一下,在java里是可以jcom之类的开源库实现,本质上都是通过jni调用office的COM接口来实现。我们就需要这么一个小功能,拖这么大个开源库进来实在没有必要。最后决定自己写个动态链接库,通过jni来调用。 先...2008-01-07 15:33:38 · 454 阅读 · 0 评论 -
视频站点的搭建
挺久没动笔写blog了,换了新工作比较忙是一个原因。最近的工作是做一个素材管理的系统,其中有个要求做视频预览,将用户上传的视频转换并在网页上预 览。在网页上看视频,现在大多数视频网站都是采用flv流媒体文件,用flash做的播放器播放,我们也采用了这种方式。流程大概主要:用户上传文件- >后台转换文件成flv格式->flv播放器调用flv文件。 转换视频、音频文件到fl...2007-12-19 16:51:16 · 207 阅读 · 0 评论 -
抽取网页数据的不同思路
客户要求从Internet上的网页上抽取一定的数据,用来显示或者其他用户,这个需求很常见。这两天我们也遇到了这个需求,本来我一开始想是试用正则表达式去匹配需要的文本数据,后来经验丰富的经理给出了一个更好的思路,就是使用jtidy将 不符合xhtml的HTML文件转化成标准的xhtml文件——本质上就是XML文件,然后利用xsl抽取并转换成我们所需要的数据的一定格式的xml文 件。这样做其实...2007-11-22 12:38:34 · 203 阅读 · 0 评论 -
再谈java的内存泄露
这两天看了一本老书《bitter java》,第一次系统地了解了所谓“反模式”。就书的内容来说已经过于陈旧,书中提到的magic servlet、复合jsp等等反模式已经是早就熟知的编程禁忌,而如web页面不能有太多元素这样的反模式也因为ajax的出现(异步加载)变的不是那么“反模式”了,其中又讲述了很多ejb的反模式,这些在轻量级框架流行的今天也早已经过时。不过书中有一个章节倒是挺有价值...2007-11-11 20:21:16 · 101 阅读 · 0 评论 -
线程池池
这个题目比较怪,听俺道来。俺一直在负责公司游戏服务器的开发和维护,日积月累下来终于将原本混乱的代码和结构重构的比较清晰了,在此过程中的体会就是,重构啊,不仅仅是技术活,更多是要克服不情愿的、得过且过的心理去做,去做了才发现麻烦并没有想象中的大。 改造过程中遇到这么个问题,我想将对某个创建的游戏的操作都固定在一个线程执行,与其他游戏可以并发地处理;或者说依据游戏id派发到某个固...2008-09-01 19:39:53 · 104 阅读 · 0 评论 -
java package的设计原则
典型的J2EE项目,package的设计有成熟的套路可循,如分为domain、dao、service、action等等,职责已经分解的比较单一和清晰,循环依赖这样的情况出现并不多。而在一般的java项目,如服务器程序、客户端程序和通用性框架的开发中,包的设计并没有套路可循,毕竟由于应用和业务种类的不同,想得出通用性的设计套路是不大可能的。这时候遵循一些原则比之生搬硬套更为重要。在《敏捷...2008-09-06 00:15:55 · 237 阅读 · 0 评论 -
阻塞队列的性能对比
阻塞队列的性能对比主要是比较offer跟poll两个方法的性能,开N个线程,每个线程往队列里写或者取500个整数。线程数20501002005001000LinkedBlockingQueue 15,031,1532,1663,32203,47563,110Arr...2008-09-08 10:06:15 · 647 阅读 · 0 评论 -
山寨nio框架yanf4j发布0.50-alpha
俺的山寨nio框架yanf4j发布0.50-alpha版本,下载地址在这里,更新了wiki。本测试版本主要修改如下:1、Controller接口引入了两个新方法:a)接受InetSocketAddress类型参数的系列open方法,用以在多宿主机上绑定到不同网络接口 public void open(InetSocketAddress inetSocketA...2009-02-04 19:28:00 · 164 阅读 · 0 评论 -
再谈Selector的wakeup方法
过去推荐过两篇blog《Java NIO类库Selector机制解析》(上,下),感叹java为了跨平台似乎“很傻很天真”。最近学习使用ACE,才知道这个解决办法倒不是java开创的,ACE也是这样搞的。java nio中Selector的wakeup方法,类似于ACE_Select_Reactor的notify机制,可以从非select调用的线程去唤醒阻塞在select调用上的select线...2009-02-01 11:15:00 · 1568 阅读 · 0 评论 -
yanf4j-0.41 beta发布
项目名称:yanf4j (yet another nio framework for java)项目网址:http://code.google.com/p/yanf4j/下载网址:http://code.google.com/p/yanf4j/downloads/list0.41 beta版的主要修改:1、引入流量控制,通过Controller的setReceivePacketRat...2009-01-20 14:01:00 · 141 阅读 · 0 评论 -
Java字符串的最大长度
在cpp中为了可移植性,string的长度是string::size_type,突然就想知道java允许的最大字符串长度为多少。看String的源码:public final class String 110 implements java.io.Serializable, Comparable<String>, CharSequence ...2009-01-15 01:37:00 · 1619 阅读 · 0 评论 -
使用yanf4j写个简单聊天室
yanf4j简介,请看这里。 这里俺要介绍下用yanf4j写个最简单的聊天室,可以直接telnet上去聊天。请先下载common-logging和yanf4j-0.40-stable-bin.tar.gz。 聊天室嘛,肯定要维护一个聊天者聊表:List<Session> sessionList = new CopyOnWriteArrayList...2008-11-26 11:36:00 · 195 阅读 · 0 评论 -
使用Rope来高效处理长字符串
前段时间看了这篇文章《Ropes:理论与实践》。这两天为了提高工作中某个系统对外接口的效率,才认真学习了一番。本质上Ropes是将字符串表示为一棵二叉树,特别适用于长字符串的处理,貌似c++ STL库中也有这么个实现。具体实现和原理还是看这篇paper。《Ropes:理论与实践》一文中给出的测试数据相当惊人,Ropes比之String和StringBuffer在append,ins...2008-05-05 18:49:03 · 333 阅读 · 0 评论 -
一切为了跨平台
推荐两篇blog:《java NIO 类库selector机制解析(上)》《java NIO 类库selector机制解析(下)》 有一个奇怪的现象引出的话题,为了Selector.wakeup功能做到跨平台,每个Selector.open()时,在Windows会建立一对自己和自己的loopback的TCP连接;在Linux上会开一对pip...2008-04-22 18:13:32 · 84 阅读 · 0 评论 -
Grizzly——不走寻常路的nio框架
在《程序员》最新一期有个专题介绍java开源nio框架,其中谈到了mina和grizzly。mina我还算比较熟悉,写过一些代码,也尝试去读过源码。而grizzly是第一次听说,这个项目是sun的一个开源nio框架,是2004年在GlassFish项目中诞生的,一开始是一个httpweb server,用于取代Tomcat的Coyote Connector和SunWebServer,2...2008-02-23 19:15:32 · 399 阅读 · 0 评论 -
保持java线程间可见性的5种方式
Primitive Writes up to and including… ...are made visible to… Object the end of a synchronized bloc...2008-02-23 11:38:18 · 572 阅读 · 0 评论 -
Yet another nio framework for java
项目名称:Yanf4j(Yet another nio framework for java)项目地址:http://code.google.com/p/yanf4j/,当前版本0.30-beta1协议:Apache License, Version 2.0 简单描述: 有这么多nio框架了,为什么要another?重复造轮子也罢,这框架脱胎于一个服务器项目的网络层代码,期间参考了...2008-10-11 14:25:00 · 178 阅读 · 0 评论 -
写一个简单的工作流(四)资源的处理
昨天晚上搞到深夜,终于将资源模块搞定。到今天已经完成的功能包括:1.四种基本路由:顺序、选择、并行、循环2.流程定义文件和系统配置文件的读取和解析3.使用内存作为流程数据和案例数据存储的MemoryWorkFlowDAO的开发4.资源模块的开发5.并发情况下的正确性测试等 计划中的功能:1.一个GUI的流程定义工具,这个不急,也还没想好用什么做,web还是桌面?2....2007-10-13 17:20:18 · 217 阅读 · 0 评论 -
第一个MapReduce任务
前两天在公司内网上搭了个2个节点hadoop集群,暂时没有多大实际意义,仅用作自己的测试。遇到的问题在阿里巴巴这位仁兄的《Hadoop集群配置和使用技巧》都有提到的。也遇到了reduce任务卡住的问题,只需要在每个节点的/etc/hosts将集群中的机器都配置上即可解决。 今天将一个日志统计任务用HadoopMapReduce框架重新实现了一次,数据量并不大,每天分析一个2G...2008-08-23 11:10:58 · 164 阅读 · 0 评论 -
从HDFS看分布式文件系统的设计需求
分布式文件系统的设计目标大概是这么几个:透明性、并发控制、可伸缩性、容错以及安全需求等。我想试试从这几个角度去观察HDFS的设计和实现,可以更清楚地看出HDFS的应用场景和设计理念。 首先是透明性,如果按照开放分布式处理的标准确定就有8种透明性:访问的透明性、位置的透明性、并发透明性、复制透明性、故障透明性、移动透明性、性能透明性和伸缩透明性。对于分布式文件系统,最重要的是希望能达...2008-08-15 22:39:59 · 339 阅读 · 0 评论 -
对org.springframework.beans.CachedIntrospectionResults的再次解读
这个类在spring2.01前没有被改写,spring2.06似乎已经改写了,还未看源码。不过这不是我所在意的问题。我在《org.springframework.beans简单解读》中的对这个类的理解是不正确的。我们先看看Guillaume Poirier对这个类中为什么使用WeakHashMap的解释:WeakHashMap is implemented with WeakRefer...2007-06-26 10:42:05 · 1164 阅读 · 0 评论 -
iText操作PDF问题总结
这个星期我的任务就是处理一些报表的打印问题,因为我算项目组里对jasperreport比较熟悉的了,这个东东也是我引进到这个项目。ireport画报表,使用struts的action输出PDF到浏览器,这是我们目前的解决方案。今天遇到一个ireport解决不了的要求——合并单元格。类似下面这样的表结构:-------------------------------------------...2007-04-02 15:52:00 · 723 阅读 · 0 评论 -
单元测试,测试什么?
我们一直强调单元测试的重要性,但是有一个问题可能没有认真去想过,测试是重要的,但是我们测试什么呢?最近重读《单元测试之道》,书中给出了答案:Right-BICEP1.Right——正确很显然,如果代码运行的结果与你预期的不符合,那么这段代码肯定是有问题的。需要注意的是,Right并意味着正确,因为正确只是相对你所期望的结果而言,而对于用户需求也许就是错误的。2.B——边界条件寻找边界条...2007-03-31 19:18:00 · 180 阅读 · 0 评论 -
websphere5.1上使用普通client调用EJB需要注意的问题
在websphere server上的jsp、servlet中调用EJB很简单了: Context ctx = new InitialContext(); MessageSender msgSender = null; MessageSenderHome home = (MessageSenderHome) javax...2007-03-04 19:57:00 · 113 阅读 · 0 评论 -
使用javamail通过代理发送邮件
我们是没办法使用javamail通过一般的代理服务器发送邮件的,比如下面的代码是没有效果的: Properties props = System.getProperties(); props.setProperty("proxySet","true"); props.setProperty("ProxyHost","192.168.155.1...2007-03-04 11:50:00 · 1672 阅读 · 0 评论 -
Plug memory leaks in enterprise Java applications
The Java automatic garbage collection process typically operates as a low-priority thread that constantly searches memory for unreachableobjects, objects not referenced by any other object reachab...2007-02-12 08:49:00 · 170 阅读 · 0 评论 -
dozer与BeanUtils
呵呵,在《develope J2EE without EJB》中,DTO被狠很地批判了一把,rod说这完全是反模式。可实际项目当中,我们还是不得不在使用。VO,PO,一牵扯到概念总是多么复杂。。。把一个PO从头传到尾??从页面到数据库,一捅到底?NO,NO,万一你要显示给用户的是几个PO的结合怎么办?万一我们只是需要某几个属性组合在一起显示怎么办?一捅到底的策略是多么丑陋,而且你完全把你的数...2007-02-06 12:45:00 · 669 阅读 · 0 评论 -
使用javassist对.class文件进行修改
最近重新再看<Inside JVM>,对JAVA编译成的字节码结构很感兴趣,希望找个工具能够对.class文件进行的解析和查看。没找到,倒发现javaassist可以对字节码进行操作和修改。此工具是JBOSS项目的一部分,JBOSS实现AOP的基础。呵呵,开眼界了,原来我们可以直接对字节码文件进行修改,哪怕不知道源文件(跟反编译完全不同)。一个简单例子: import jav...2007-02-06 12:44:00 · 250 阅读 · 0 评论 -
解析XML字符串
怎么解析一个xml字符串?我不是第一次看到有人问这个问题了..汗 1.使用StringReader Document doc = builder.parse( new java.io.StringReader(str)); 2.使用DocumentHelper.parseText() ...2007-02-06 12:39:00 · 111 阅读 · 0 评论 -
判断email格式的正则表达式
常用的几个: ^[_/.0-9a-z-]+@([0-9a-z][0-9a-z-]+/.)+[a-z]{2,3}$^[_a-z0-9-]+(/.[_a-z0-9-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)*$^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-z...2007-02-06 12:33:00 · 735 阅读 · 0 评论 -
谈NullObject模式
知道这个模式还是通过《重构》,这个模式的出现还是了为了解决代码重复的坏味道。在项目中很经常见到类似下面这样的代码:java 代码 if(prj.getProjectId==null) plan.setCost(0.0); else plan.setCost(prj.getCost()); 我们在很多地方有...2007-08-03 07:51:23 · 320 阅读 · 0 评论 -
java求值字符串型逻辑表达式
这是最近在项目中的一个需求,已知a=3,求字符串"a<=2"的值,也就是应该返回false。这个问题可大可小,就我们的应用场景也就是用来让用户自定义变量区间,比如类似下面这样的规则:a<=2 返回积分系数1.02<=5 返回积分系数1.1a>5 返回积分系数1.2 如果用switch写死在代码中,以后要修改规则实在是很麻烦的事情,用户也希望能自...2007-08-06 12:41:14 · 688 阅读 · 0 评论 -
线程任务的取消
当外部代码能够在活动自然完成之前,把它的状态更改为完成状态,那么这个活动被称为可取消(cancellable)。取消任务是一个很常见的需求,无论 是由于用户请求还是系统错误引起的服务关闭等等原因。最简单的任务取消策略就是在线程中维持一个bool变量,在run方法中判断此变量的bool值来决 定是否取消任务。显然,这个bool变量需要声明为volatile,以保持多线程环境下可见性(所谓可见...2007-09-03 15:50:37 · 87 阅读 · 0 评论