20 十月 2008

郭德纲的话 笑死人不偿命

1.要不是打不过你,我早跟你翻脸了

2.不想当厨子的裁缝不是好司机。

3.龙虾,海蟹,!我就爱吃带壳的!服务员,给他来盘瓜子

4.牛肉面大排面便饭一曰本人过来,吃点什么?这个,曰本人用手一指 :牛大便!

5.我终究没能飙得过那辆宝马,只能眼看着它在夕阳中绝尘而去,不是我的引擎不好,而是我脚蹬子坏了!

6.901次航班,由打西直门开往中关村,票价5元,请您登机。你说这多有意思。乘务员站那儿得喊,快上快上有大座儿,有大座儿。

7. 接了一活儿,完事能挣三十万……拿过图纸一看,盖一40米的烟囱,等盖好了,人家来一看,把我打了一通,图纸看倒了,人家让挖口井。

8.流氓会武术,谁也挡不住……科学家会武术,流氓也挡不住!

9.一些女演员为了上戏和男导演 ,太无耻了!女导演太少,让我们这些个男演员怎么办?

10. 你拿的什么?我妈给带的鸡蛋。给我吃。不给……你猜,猜有几个。我猜出来你给我一个。你要猜出来我把这两个都给你。5个?

11.曾经有一个赚钱的机会摆在我的面前,但是我没有珍惜。机会过去了,我追悔莫及。假如上天再给我一个机会的话,我希望跟那个村长说:我愿意去。假如非让我在那工资前面加一个限额的话,我希望是:400元~

12.住的房子千疮百孔,一下雨算要了亲命了:外边小雨屋里中雨,外边大雨屋里暴雨,有时候雨实在太大了,全家人都上街上避雨去了。

13.英语、日语、韩语、南斯拉夫语、北斯拉夫语、西斯拉夫语...会7、8国外国话,和八国联军对着骂街都不带重样的~

14.你无耻的样子,颇有我年轻时候的神韵。

15.谁要不认识他,谁就没吃过猪肉。

16.有困难要帮,没有困难制造困难也要帮。

17.上次喝多了,拿筷子当鸡爪子,吃了一根半。

18.小妞,给大爷笑一个,不笑,那大爷给你笑一个 ~

19.那锁拿根面条一捅就开,一包方便面能开一小区。

20.你叫什么名字?你别说出来啊!你说出来就是骂街!

21.我扔铅球扔得可远了,教练说了,人出去了不算啊!

22.今天说的这故事,离现在不远,家里有老人的可以回去问问,在春秋战国时期啊 ……

23.遛累了,他坐这,狗坐这,一边高,谁过来都纳闷:这是谁家双胞胎啊?

24.我买50辆好车--奥拓、奥拓、奥拓……!用铁丝镖起来,开起来跟火车一样!

25.小学上了十年,中学十二年,我被评为全校最熟悉的面孔,新老师来了都跟我打听学校内幕……

26.我要了份鱼翅炒饭,用三双筷子楞没找着鱼翅,你能告诉我鱼翅在哪吗?厨师说,我叫鱼翅。

27. 你们千万别打他,也别骂他,不就是要钱么,咱好商量。不过丑话说头里,要是超过100块钱,你们就撕票得了。

28.中国北京有一军事奇才,叫郭德纲,文能提笔安天下,武能上马定乾坤;上炕认识娘儿们,下炕认识鞋。

29.跳楼死多可乐,我研究过,二十层和二层效果不一样,二层是啪、啊!二十层是啊~~~~~啪

26 九月 2008

GET和POST提交方式在web容器中的编码区别

当然,最主要的区别大家都知道

1、在发送请求时,安全性有区别

2、在提交数据时,数据量的大小有区别

但是两者在提交数据时,编码是不同的。GET在提交的时候不进行编码,提交的数据作为查询字符串附加到URL的末尾,然后发送到服务器。POST方式在提交时,会将数据进行编码(WEB容器默认的编码是ISO-8859-1)。所以要输出表单提交的数据,此时应该注意提交的方式以及编码的影响,否则如果存在中文,会出现乱码。

对于POST方式,如果需要得到表单提交的中文数据,不能直接通过request.getParameter()获取,否则得到的是以ISO-8859-1编码返回的字符串(中文会产生乱码);应该在读取数据前调用request.setCharacterEncoding()方法指定中文编码方式(GBK,GB2312)。在浏览器显示中文数据前,也应该调用respongse.setContentType()来指定字符编码方式为中文编码。

对于get方式,则必须拿到数据后自己指定编码重新构造字符串。如果用post那样的方式会发现毫无作用。为什么会这样?查了一下相关资料,貌似setCharacterEncoding方法是服务器支持的,所以有局限性;但是自己编码确实通用的。

21 七月 2008

一个面试题

用1、2、2、3、4、5这六数,打印出所有不同的排列,要求:"4"不能在第三位,"3"与"5"不能相连。

要求用Java做,我试着用C语言做了下。

#include <stdio.h>
int checkNum(int num);//检查是否是122345五个数字构成
int checkCondition1(int num);//先判断除了2可以重复两次以外,其它各位不能存在重复的情况
int checkCondition2(int num);//判断4是否在第三位
int checkCondition3(int num);//判断3与5是否相连
int checkIsMyNum(int num);

void main()
{
int num=122345;
int i=0;
int count=0;

for(;num<=543221;num++)
{
if(checkNum(num))
{
if(checkCondition1(num)&&checkCondition2(num)&&checkCondition3(num))
{
printf("%d ",num);
i++;
count++;
if(i==10)
{
i=0;
printf("\n");
}
}
}
}

printf("\n%d",count);
}

int checkCondition3(int num)//判断35相连
{
int temp1=num%10;
int temp2=num%10;
while(1)
{
num=num/10;
temp1=temp2;
temp2=num%10;
if((temp1==3&&temp2==5)||(temp1==5&&temp2==3))
{
return 0;
}
if(num/10==0)
{
break;
}
}

return 1;
}

int checkCondition2(int num)
{
int i=0;
while(1)
{
int temp=num%10;
i++;
if(i==3)//如果是第三位
{
if(temp==4)
{
return 0;
}
else
{
return 1;
}
}
if(num/10==0)
{
break;
}
num=num/10;
}
}

int checkIsMyNum(int num)
{
if(num==1||num==2||num==3||num==4||num==5)
{
return 1;
}
else
{
return 0;
}
}

int checkNum(int num)
{
int temp;
do
{
temp=num%10;
if(!checkIsMyNum(temp))
{
return 0;
}

if(num/10==0)
{
break;
}
num=num/10;
}while(1);

return 1;
}

int checkCondition1(int num)
{
int criterion[6]={1,2,2,3,4,5};
int i=0;


//先判断除了2可以重复两次以外,其它各位不能存在重复的情况
while(1)
{
int temp=num%10;


for(i=0;i<6;i++)
{
if(criterion[i]==temp)
{
criterion[i]=0;
break;
}
}

if(num/10==0)
{
break;
}

num=num/10;
}


for(i=0;i<6;i++)
{
if(criterion[i]>0)
{
return 0;
}
}

return 1;
}

因为限时做的,所以有点乱,没有考虑流程的优化和效率问题。最后答案是198种。

18 七月 2008

AutoHotkey——小巧强大的脚本软件

AHK 是一款叫做 AutoHotKey 的脚本软件的缩写,它是改造 Windows 必备的软件!用了它你可以替换掉很多软件。(俺是程序员,不是文学家,所以这句话照抄别人的,但是软件确实是好软件)

AHK可以做什么?从应用的角度来说,可以编写脚本实现屏幕取色,编写脚本实现时间定时……(反正功能太强了),对于我来说有什么好处?

平常使用MyEclipse编写JavaEE的东西,经常需要web服务器的重新部署,通过AHK来录制宏命令,这样每次需要类似的重新部署的时候,运行宏,全部自动搞定o(∩_∩)o...(当然ant也可以,但是东西小的时候ant就有点大材小用了)。

这里有很多AHK的具体应用实例:http://www.appinn.com/tag/ahk/

AHK官方网站:www.autohotkey.com

11 七月 2008

SwingUtilities.invokeLater()和SwingUtilities.invokeAndWait()介绍

今天看了下MP3在线搜索器的源代码,发现里面出现了SwingUtilities.invokeLater()和SwingUtilities.invokeAndWait()这两个方法。以前做Swing事件响应的时候从来没有用过,所以网上查了下,大概明白他们的作用。

举个例子,比如单击按钮实现某些操作,我们一般使用ActionListener监听器来调用actionPerformed方法来完成按钮的功能。这样的做法一般来说没有问题,但是某些情况下会出现问题。比如单击按钮要执行很费时的操作,此时你的按钮就会始终处于按下的状态,而且导致界面其他的组件无法正常使用,好像界面死了一样。这是由于Swing不是线程安全的,它是单线程的设计,因此如果它处于某种费时的操作,由于单线程设计的缘故,会导致其他操作在当前功能未完毕之前无法启动。如何解决这类问题,就可以考虑使用SwingUtilities.invokeLater()和SwingUtilities.invokeAndWait()这两个方法。其效果是允许事件派发线程调用另一个线程中的任意一个代码块,即当前费时的操作不会影响Swing中的其他操作。如果你希望部件能够立即显示或重画,而处理代码在后台运行,那么你就可以使用invokeLater。invokeAndWait指的是当前线程阻塞,一直等待invokeAndWait中指定的代码执行完毕之后,才接着运行,这种方式用的不多。