java技术
文章平均质量分 59
liuwei1981
IT技术人,研发技术和研发管理知识分享,分享一个技术人的生活心得
展开
-
总和的玩笑
下面的类计算并缓存了一个总和,并且在另一个类中打印这个总和 class Cache{ static { initializeIfNecessary(); } private static int sum; public static int getSu...2007-04-20 17:22:07 · 155 阅读 · 0 评论 -
tomcat5里配置log4j失败
今天下午原计划将log4j配置到现在正在开发的应用系统中,按照一个博客上的例程,一步一步的配置完毕,可是启动tomcat后却没有任何效果。搞不清楚是什么原因,郁闷中。 原来的系统使用了一套日志系统,是appche的log接口的实现和log4j的混合实现,乱,而且不起作用了。 查找了许多资料,配置上都没有错误,难道是这个系统天生对log4j反应过敏?呵呵,开个...2007-09-11 18:48:15 · 141 阅读 · 0 评论 -
log4j终于在tomcat里正常工作了
今天终于搞定了,呵呵。 昨天是改配置文件改糊涂了,竟然忘记修改log4j.rootCategory这个参数,晕,忘记把A1这个参数和ERROR参数写上,今天来了一下就发现这个错误了,今天还真是顺利啊。 日志也顺利生成了,但觉得如果查看起来还是不太方便,系统里有一部分的操作涉及网上交易,需要更为详细的日志记录,这部分日志如果用log4j对数...2007-09-12 10:32:28 · 113 阅读 · 0 评论 -
java文件操作
1.创建文件: /** * 上传文件 * * @param file 上传文件实体 * @param filename 上传文件新命名 * @param dir 上传文件目录 * @return */ public static boolean uploadFile(File file, String dir, String filename) { ...2008-07-11 14:42:24 · 87 阅读 · 0 评论 -
我的一篇java培训讲稿(非技术方面)
头儿昨天让我准备周五例会上给公司的业务人员讲讲公司项目使用的技术,自然就是java开发技术了,一开始有点没头绪,因为公司的业务人员并不是做营销方面的,也基本不懂软件开发技术,想来想去,也只能讲讲java的一些发展和优点了,准备了一天,也之搜集了不多的资料,现在找java的资料,主要都是java开发方面的,这方面的还真是不多,而且也很旧了,找到的竟然都是停留在jdk1.1版本的,...2007-09-20 10:57:00 · 395 阅读 · 0 评论 -
java使用正则表达式去除字符串的html标签
新闻内容或者博客文章,如果显示摘要,需要去除内容的html格式标签,找到一个正则表达式,实现了: /** * 删除input字符串中的html格式 * * @param input * @param length * @return */ public static String splitAndFilterString(String input, ...2008-07-22 10:20:14 · 128 阅读 · 0 评论 -
java解惑-在循环中
下面的程序计算了一个循环的迭代次数,并且在循环中止时候打印了这个计数值,那么,他打印的是什么呢? public class InTheLoop{ public static final int END = Integer.MAX_VALUE public static final int START = END-100; public static void mai...原创 2008-07-25 10:18:07 · 131 阅读 · 0 评论 -
java解惑--优柔寡断(异常)
下面的这个程序,它的decision方法将返回一个true,但它也返回false,那么,它打印的到底是什么呢?它是合法的么? public calss Indecisive{ public static void main(String[] args){ System.out.println(decision()); } static boo...原创 2008-07-30 10:54:55 · 86 阅读 · 0 评论 -
java解惑--令人混淆的构造器案例
下面的这个类呈现了两个令人混淆的构造器。 main方法调用了一个构造器,但它调用的究竟是哪一个?该程序的输出取决于这个问题的答案。它会打印什么?甚至它是否合法? public class Confusing { private Confusing(Object o){ System.out.println("Object!"); } pr...原创 2008-08-11 16:22:58 · 121 阅读 · 0 评论 -
NetBeans配置编译类文件输入路径的问题
以前一直使用Eclipse开发,在使用rails时候用了netbeans专为ruby开发的IDE,突然想试一试使用netbeans的感觉。 下载了netbeans 5.5,我的机器一直使用的是jdk5 。下载安装后开始试用。 新建一个工程,使用了我以前的一个项目使用的源代码包,建立后,使用感觉还不错。 在配置类文件编译...2007-11-08 09:02:15 · 562 阅读 · 0 评论 -
Quartz的简单示例
Quartz是开源任务调度框架中使用最为广泛的,最近开始学习quartz这方面的东西,看了看quartz的说明,写了个小例子: Job实现类: package com.quartz;import java.util.*;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz...2009-03-03 14:39:05 · 133 阅读 · 0 评论 -
java解惑------奇数性(问题)
奇数性 下面方法的目的是确定其唯一的参数是否为奇数public static boolean isOdd(int i){ return i % 2 ==1;} 奇数可定义为被2整除余数为1的整数。表达式i%2计算的是i除以2时所产生的余数,看起来这个程序可行,看很可惜,它有四分之一的几率返回了错误的答案。...2008-02-17 11:48:28 · 138 阅读 · 0 评论 -
java解惑------奇数性(解惑)
java语言中所有的int数值,有一半是负数,而isOdd方法对所有的负奇数的判断都会失效。在任何负整数上调用该方法都会返回false,无论改整数是偶数还是奇数。这是java取余操作符的定义所产生的后果。该操作符被定义为对所有的int数值a和所有非零int数值b,都满足下面的恒等式:(a/b)*b +(a%b) ==a换句话说,如果用b整除,将商乘以b,然后加上余数,那么就得到了最初的值a,改恒等...2008-02-17 14:14:42 · 147 阅读 · 0 评论 -
java处理图片缩放
public static boolean compressImage(File file, String directoryFileName, int width, int height, boolean proportion) { boolean ret = false; FileOutputStream fileOutputStream = null; try {...2008-02-17 17:08:26 · 243 阅读 · 0 评论 -
java解惑------找零时刻(问题)
问题背景: Tom在一家汽车配件商店购买一个价值1.10美元的火花塞,但是他钱包中都是两美元一张的钞票。如果他用一张两美元的钞票来购买这个火花塞,那么应该找给他多少零钱? 解决上述问题的程序: public class Change{ public static void main(String[] args){ System.out.println(2.00 - 1.10); ...2008-02-18 09:14:14 · 128 阅读 · 0 评论 -
java解惑------找零时刻(分析)
找零程序出错的原因在于,1.1这个数字不能被精确的表示为一个double,因此被表示为最接近它的double值。改程序从2中减去的就是这个值。遗憾的是,这个计算的结果并不是最接近0.9的double值。作为结果的double值的最短表示就是你看到的那个程序输出的可恶的数字。并不是所有的小数都可以用二进制浮点数精确表示。如果使用的是JDK5或者更新的版本,那么您可能会受其诱惑,通过使用printf工...2008-02-18 09:36:28 · 136 阅读 · 0 评论 -
Lucene实现搜索结果命中关键字高亮显示
使用lucene实现搜索结果 命中关键字高亮显示,大致流程与lucene 建立文件索引和针对索引进行搜索(lucene2.2版本)介绍的一致,只需在代码里稍作修改。 1.索引生成过程:(红色为修改部分,针对需要进行高亮显示索引内容,进行分词与关键字位置索引)package demo.example.searcher;import java.io.*;import java....2009-03-24 16:51:33 · 366 阅读 · 0 评论 -
Java对象序列化
将对象转化为一个流对象:public InputStream setObjectAsStream(Object obj) { InputStream ret = null; ByteArrayOutputStream baos = null; ObjectOutputStream ous = null; if (obj == null) { retur...2009-09-12 15:01:09 · 72 阅读 · 0 评论 -
星巴克不适用两阶段提交 Gregor Hohpe 之 Hotto Cocoa Kudasai
看到这么一篇文章,觉得很有意思,也很有启发,转一下: 我刚从日本旅行归来,在那边逗留了两个星期左右。最让我感到亲切的莫过于日本街头星罗棋布的星巴克咖啡馆,尤其是在新宿和六本木附近的那两家。在等候的Hotto Cocoa的过程中,我开始思考星巴克处理订单的方式,和其他生意一样,星巴克最感兴趣的就是将订单的处理能力最大化,因为完成订单越多赚的钱也越多。因此,他们使用异步处理的模式...原创 2009-09-15 17:31:59 · 207 阅读 · 0 评论 -
星巴克不适用两阶段提交 Gregor Hohpe 之 相关性
在利用异步处理优势的同时,星巴克也需要面对异步处理所固有的缺陷。相关性就是其中一个方面。顾客的饮料订单不一定可以按照下单的顺序来完成,这里的原因主要有两点:首先,不同的冲调师用的是不同的设备。例如,混合型饮料所需的冲调时间要比一杯普通的咖啡长。其次,冲调师可以一次性批量处理多张订单,从而节省总的处理时间。 因此,星巴克需要解决相关性的问题:乱“模式”与我们在消息处理体系...原创 2009-09-15 17:33:19 · 213 阅读 · 0 评论 -
星巴克不适用两阶段提交 Gregor Hohpe 之 异常处理
在异步消息处理的模式中,异常处理是个难点。如果您相信实践出真知的话,那么不妨参考一下星巴克是如何处理异常的:如果您无法付账,那么他们会在饮料已经冲调完成的情况下把饮料倒掉,否则就直接吧杯子从队列中拿出来;如果他们把饮料弄错了,或者您觉得不合口味,那么他们会为您重新冲调;如果机器坏了,他们根本无法冲调咖啡,那么他们会把钱退给您。上述的每一个场景都描述了一种不同但十分有趣的异常处理策略:...原创 2009-09-15 17:35:11 · 229 阅读 · 0 评论 -
星巴克不适用两阶段提交 Gregor Hohpe 之 会话
顾客与咖啡馆员工之间的交互也是一个很好的例子,它展示了一种简单而常见的会话模式。双方的交互过程包含了一个短暂的同步阶段(选择饮料及付账),还包含了一个时间较长的异步阶段(店员冲调饮料与顾客收到饮料)。这种类型的会话在各种购买场景中十分常见。例如,当您在Amazon上订购商品时候,短暂的同步交互仅仅是产生了一个订单号,而后续所有的步骤(信用卡扣款、打包、送货)都是异步完成的。当这些后续步...原创 2009-09-15 17:35:52 · 140 阅读 · 0 评论 -
星巴克不适用两阶段提交 Gregor Hohpe 之 真实世界的体系结构
总的来说,在真实世界里常常可以看到异步处理的情况。我们的日常生活中就包含了许多协同的异步交互(阅读及回复email、购买咖啡饮料等等。这就意味着可以使用一种异步的消息处理体系来很自然的模拟这些交互,也说明观察日常生活有助于我们设计成功的消息处理方案。...原创 2009-09-15 17:36:35 · 139 阅读 · 0 评论 -
参数以by value 方式而非 by reference 方式传递
一个普遍存在的误解是:java中的参数以by refrence 方式传递。这是不正确的。 参数实际上是以by value 方式传递。这个误解源于“所有java objects 都是 object refrence”这一事实。 java是以 by value 方式传递object refrence。 如果不要在函数中将传入的对象参数进行修改,则可以以下的解决方法:传递一个对...原创 2008-09-19 16:16:09 · 162 阅读 · 0 评论 -
spring 整合 jbpm
1.web.xml文件 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> ...2009-09-24 17:22:31 · 90 阅读 · 0 评论 -
java操作excel
一个java通过jxl来操作EXCEL的例子,记不清是从哪里找的,实际运行无误,贴出来备忘(包含JAR包) 代码import java.io.FileOutputStream; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; impo...原创 2009-04-09 15:11:23 · 114 阅读 · 0 评论 -
应用barcode4j生成二维码
最近需要完成一个二维码生成功能,使用了barcode4j进行开发。ps:附件即为barcode4j的src包和bin包生成代码如下:public class CodeService { private static CodeService instance; private static DefaultConfiguration cfg; /** * 二维码参数...2009-04-16 16:09:00 · 315 阅读 · 0 评论 -
Java的Serializable处理
java继承serislizable接口,简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。实现了Java对象的序列化。 在一下情况可以考虑使用序列化: a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; b)当你想用套接字在网络上传送对象的时候; c)当你想通过RMI传输对象的时候; ...2009-04-16 16:29:45 · 120 阅读 · 0 评论 -
java解惑------常整除(问题)
常整除的问题:程序是整除两个long型数值,被除数表示一天里的微秒数,而除数表示一天里的毫秒数 public class LongDivision{ public static void main(String[] args){ final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000; final long MILLIS...2008-02-20 11:53:16 · 101 阅读 · 0 评论 -
java解惑------长整除(解惑)
程序没有获得预期的输出,是因为常数MICROS_PER_DAY的计算确实溢出了。虽然计算的结果适合仿佛long中,并且其空间还有富余,但是这个结果并不适合放入int中。这个计算完全是以int运算来执行的,并且只有在运算完成之后,其结果猜被提升为long。而此时已经太迟:计算已经溢出,它返回的是一个小了200倍数的数值。从int提升为long是一种拓宽原生类转换,它保留了不正确的数值。这个值之后被M...2008-02-20 15:23:33 · 129 阅读 · 0 评论 -
java解惑------多重转型(问题)
转型用于将一个数值从一种类型转换到另一种类型,下面的示例程序输出的结果是什么呢?public class Multicast{ public static void main(String[] args){ System.out.println((int)(char)(byte) -1); }}这个程序从int数值-1开始,然后从int转型为byte,之后转型到char,最...2008-02-21 09:40:36 · 109 阅读 · 0 评论 -
java解惑------多重转型(解惑)
这个多重转型的的程序的行为紧密依赖于转型的符号扩展行为。java使用了基于2的补码的二进制运算,因此int类型的数值-1的所有32位都是置位的。从int到byte的转型是简明的,它执行了一个窄化原生类型转换,直接将除低8位之外的所有位全部砍掉。这样留下的是一个8位都是置位的byte,它仍旧表示-1。 从byte到char的转型则稍微麻烦一点,因为byte是有符号类型,而char是无符号类型。在将一...2008-02-21 10:49:09 · 95 阅读 · 0 评论 -
java解惑------半斤
问题:给出一个对变量x和i的声明,使得下面这条语句合法:x += i;但是下面这条不合法:x = x + i; 许多人会认为第一个表达式只是第二个表达式的简写方式。这并不准确。这两个表达式都被称为赋值表达式。第二个表达式使用的是简单赋值操作符,而第一个表达式使用的是复合赋值操作符。 换句话说,复合赋值操作符自动的将所执行的计算的结果转型为其左侧变量的类型。如果结果的类型于改变量的类型相同,那么这个...2008-02-22 09:26:48 · 101 阅读 · 0 评论 -
java解惑------八两
问题:给出变量x和i的声明,是如下语句合法:x = x+i;但是这条语句不合法:x += i; 符合复制操作要求两个操作数都是原生类型的,例如int,或包装了原生类型,例如Integer,但有一个例外:如果在+=操作符左侧的操作数是String类型的,那么它允许右侧的操作数是任意类型,在这种情况下,该操作符执行的是字符串链接操作。简单复制操作符允许其左侧的是对象引用类型,这就更宽松了:可以使用他们...2008-02-25 09:08:34 · 115 阅读 · 0 评论 -
java解惑---最后的笑声
下面的程序打印的内容?public class LastLaugh{ public static void main(String[] args){ System.out.println("H"+"a"); System.out.println('H'+'a'); }} 这个程序不会打印HaHa,它打印的是Ha169.对于第一个输出,调用打印的是Ha,它执行一个字符串连接...2008-02-28 17:48:18 · 105 阅读 · 0 评论 -
java解惑--动物庄园
下面的java程序打印结果是什么?public class AnimalFarm{ public static void main(String[] args){ final String pig = "length: 10"; final String dog = "length: "+pig.length(); System.out.p...2008-05-06 11:34:43 · 171 阅读 · 0 评论 -
java解惑------增量操作
下面的程序对一个变量重复的进行增量操作,然后打印它的值,那么打印输出是什么? public class Increment{ public static void main(String[] args){ int j=0; for(int i=0;i<100;i++){ j = j++; } Sys...2008-05-12 14:30:51 · 236 阅读 · 0 评论 -
构造24小时制的dateformat
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 是12小时制的 到了12点以后是重新从1点开始,而不是从13点继续下去 设置为24小时,需要将hh修改为HH即可。 SimpleDateFormat sdf = new Simpl...2009-11-03 16:38:00 · 104 阅读 · 0 评论 -
double保留两位小数(四舍五入)
public static Double roundDouble(double val, int precision) { Double ret = null; try { double factor = Math.pow(10, precision); ret = Math.floor(val * factor + 0.5) / factor; } catch ...2009-06-02 09:45:19 · 123 阅读 · 0 评论 -
javamail属性
Session需要使用java.util.Properties来构造,常用的用来构造Session的属性:属性名含义mail.smtp.user SMTP的缺省用户名。 mail.smtp.host 要连接的SMTP服务器。 mail.smtp.port 要连接的SMTP服务...原创 2008-12-03 10:28:27 · 345 阅读 · 0 评论