2007年2月26日星期一

卡耐基成功之道浓缩版

当命运交给我们一个柠檬的时候,让我们去试着做一杯柠檬水。

算算你的得意事,而不要理睬你的烦恼。

卡耐基告诉我们:不知怎样抗拒忧虑的人都会短命,同理,就事业而言,不知抗拒忧虑同样会失败。

卡耐基称其为万能方式,步骤有三:(1)问你自己“可能发生的最坏情况是什么?”(2)如果是必须接受的话,就准备接受它。(3)然后很镇定的想办法改善最坏的情况。

卡耐即讲了四条改掉忧虑习惯的规则:(1)让我们看看以前的纪录,根据平均率问问自己,我们现在担心发生的事情可能发生的机会如何?(2)让自己不停的忙着,忧虑的人一定要让自己沉浸在工作里,否则只能在绝望中挣扎。(3)适应不可避免的情况。(4)不要让自己因为一些小事烦心,要记住:生命太短暂了,不要再为小事烦恼。

让人愁苦的秘诀就是有空闲来想想自己到底快步快乐。

光用薪水是留不住好员工的。工作本身的竞争以及自我表现的机会,才是每个成功者所喜欢的。

当面指责别人,这只会造成对方顽固的反抗;而巧妙的暗示对方注意自己的错误,则会受到爱戴。

在日常生活的商务活动中,我们判断一个人更多的是依据他的品格而不是根据他的知识、更多的是根据他的心地而不是根据他的智力、更多的是根据他的自制力、耐心和纪律性而不是他的天才。

不敢形成自己的意见、不敢形成自己的观点的人必定是一个懦夫;没有自己的意见、观点的人则必定是一个懒汉;不能形成自己观点意见的人必定是一个笨蛋。

职责伴随每一个人生命的始终。

我们每一个人,不论尊卑贵贱、男女老少,都只是一名普通的服务员。

职责是把整个道德大厦连接起来的粘合剂;如果没有职责这种粘合剂,人们的能力、善良的心、智慧、正直之心、自爱之心和追求幸福之心都难以持久;这样的话,人类的生存结构就会土崩瓦解,人们就只能无可奈何的站立在一片废墟之中、独自哀叹。

唯有经历了苦难这所学校的教育,人们才能获得实际有用的人生智慧。箴言和教育极其有益,但如果没有实际生活的磨练,这些箴言和教导就只能停留在理解层次上。

管理我们金钱的十一条规则:(1)把事实现在纸上;(2)拟出一个真正适合你的预算;(3)学习如何聪明的花钱;(4)不要因为你的收入增加头痛;(5)如果你必须借贷,设法争取银行贷款;(6)投保医药、火灾,以及紧急开销的保险;(7)不要让保险公司以现金将你的人寿保险付给你的受益人;(8)教导子女养成对金钱负责的态度;(9)如果你是家庭主妇,也可以在家中赚得外快;(10)不要赌博—永远不要;(11)如果我们无法改善我们的经济情况,不妨宽恕自己。

寻找自我,保持本色。一个人要想集他人所有的优点于一身,是最愚蠢、荒谬的行为。

生活的快乐与否,完全取决于个人对人、事物的看法如何;因为,生活是思想造成的。

有人骂我是黄狗、毒蛇、臭屁虫…我不会掉转头去看是什么人在说这些话。从来没有人会踢一只死狗。

如果要改变别人,就要挑起他的高贵动机。

想钓到鱼,就要问问鱼像吃什么。

作简短演讲的“魔鬼公式”:(1)举出事例—来自自己生活里的一件事;(2)说出重点,要听众做什么;(3)说出原由或说出听众可能获得的利益。

伸出你的手去援助别人,而不是伸出你的脚去绊倒别人。

不要让丈夫遗落在背后。当丈夫向他的事业王国迈进时,永远不会被落在背后的,是他的“亲善大使”。

为什么男人会离家。太太对丈夫的唠叨,就像水珠侵蚀石头,是最高明的杀人不见血的方法。

许多人在重组自己的偏见时,还以为自己是在思考。

人性最深的本质,在渴望获得尊重。

挫折是整个事情的一部分——是你爬到高峰所必须经过的有益锻炼。

生活中应该有两个目标,第一,要得到你所想要得到的,然后,在得到之后要能够享受它。

尊敬别人的意见,切勿指出别人错了。

自我、自私、急躁是现代社会的通病,管理者也难置身事外。真诚关注别人、是人性化及成熟的表现。

要是我们得不到所希望的东西,最好不要让忧虑和悔恨来苦恼我们的生活,且让我们原谅自己,学的豁达一点。

打破烦恼的三原则:(1)正确查明你烦恼的究竟是什么问题;(2)找出问题的原因;(3)立刻进行一些建设性的行动以解决问题。

用赞扬的方式开始,就好像牙医用麻醉剂一样,病人仍然要受钻压之苦,但麻醉却能消除苦痛。

如果你要得到仇人,就表现的比你的朋友优越吧;但如果你要得到朋友,就要让你的朋友表现得比你优越。

光用薪水是留不住好员工的。工作本身的竞争以及自我表现的机会,才是每个成功者所喜爱的。

记住对方的名字,并把它叫出来,等于给对方一个很巧妙的赞美。

四种良好的工作习惯:(1)消除你桌上所有的纸张,只留下和你正在处理的问题有关的;(2)按事情的重要程度来做事;(3)当你碰到问题时,如果必须作决定,就当场解决,不要迟疑不决;(4)学会如何组织、分层管理和监督。

烹调“成功”的秘方是:把“抱负”放到“努力”的锅中,用“坚韧”的小火炖熬,再加上“判断”作调味料。

工作可以阻止三大坏处:无聊、邪恶及欲求。

使我们不快乐的都是一些芝麻小事,我们可以闪躲大象,却躲不开一只苍蝇。

让上司同意你的观点,请牢记以下几点原则:(1)看准时机;(2)心平气和;(3)说清问题;(4)提出建议;(5)设身处地;(6)运用常识。

让我们将事前的忧虑,换为事前的思考和计划。

我们不可能拥有更多,无论干何事,应保持一份平常的心,保持自己的本色,尽自己的能力去努力。

如果您是对的,就要试着温和的、技巧的让对方同意您;而如果您错了,就要迅速而热诚的承认。这要比争辩有效和有趣的多。

不要让自己因为一些应该丢开和忘记的小事烦心,要记住:生命太短促了,不要再为小事烦恼。

台风与个性,是决定演讲成败的重要因素,唯有自然、真诚,能赢得听众信任。

人的潜能如大海上的冰山,只有20%浮于水面,还有80%有待挖掘、有待激发。只要管理的好、会好好利用,我们每一个人都会成为成功者。

如果一名成功者,能够将他的弱点自然的坦露在你的面前,您肯定会倍感亲切、倍感真实,当然也就不会产生不满。

如果你不能做一条公路,就做一条小径;如果你不能做太阳,就做一颗星星。不能凭大小来断定你的输赢,不论你做什么都要做最好的一名。

挫折是整个事情的一部分——是你爬到主峰所必须经过的有益训练。

如果你的年龄是十八岁以下,那么你可能即将做你生命中作重要的两项决定——这两项决定将深深的改变你的一生,这两项决定对你的幸福、收入、健康可能有深远的影响,这两项决定可能造就你,也可能毁灭你。这两项决定是什么呢?第一,你将如何谋生?即选择职业。第二,你将选择谁做人生伴侣?

当我们恨我们的仇人时,就等于给了他们致胜的力量。那力量能够妨碍我们的睡眠、我们的胃口、我们的血压、我们的健康、快乐,我们的苦恼只会使我们的仇人高兴,我们心中的恨意完全不能伤害他们,却会妨碍我们的正常生活——不要去理会他们。

不会生气的人是笨蛋,而不去生气的人才是聪明人。

世界上最好的三位医生:节食、安静、快乐。

生活中应该有两个目标:第一要得到你想要的;第二,在得到之后要能够享受它。

如果你告诉他他错了,你以为他会同意你吗?绝不会!因为你直接打击了他的智慧、判断力、荣耀、自尊心。这会使他反击,但绝不会使他改变心意;也改变不了他的己见,因为你伤害了他的感情。

跟别人相处的时候,我们要记住:和我们来往的不是逻辑的人物,和我们来往的是充满感情的人物,是充满偏见、骄傲和虚荣的人物。富兰克林成功的秘诀是:我不说任何人的坏话,我只说我所知道的每一个人的长处——不要批评、职责或抱怨。

如果成功有任何秘诀的话,就是了解对方的观点,并且从他的角度和你的角度来看事情的那种才能。

“最重要的就是不要去看远方模糊的,而是要做手边清楚的事”。为明日准备的最好办法,就是集中你所有的智慧、所有的热诚,把今天的工作做的尽善尽美,这就是你应付未来的唯一方法。

对必然的事轻松的承受,就象杨柳承受风雨,水接受一切容器,我们也要接受一切事实。

世上没有天生的演说家,当众说话其实轻而易举,只要遵循以下这些重要的规则就行:(1)借别人的经验鼓起勇气;(2)时刻不忘目标;(3)立下必成的决心;(4)抓住一切机会练习。

是上最难做到的一件事,便是承认自己错了。要解决一种情况,除了坦白承认错误,没有更好的办法。

我发觉,在设法完成重要的事情时,不应太在意别人的说法。他们总是一成不变的声称那是做不成的,而我却以为那正是努力的最佳时机。

如果在自己非常想要做的事情上未能成功,不要立刻放弃并接受失败,试试别的方法。你的弓不会只有一根弦的,只要你愿意去找到那根弦。

天底下只有一种方式,可以使任何人去做任何事。你是否曾停下来想想这点?只有一种方式,那就是使人心甘情愿地去做。

2007年2月8日星期四

statement 执行存储过程,获取返回的多个结果

from : http://www.nk975.com/sswater/myref/index.asp?id=18

Java 中,当 statement 执行存储过程或者一次性执行多条语句时,返回多个结果的处理方法:

boolean moreResult = statement.execute(); // 表示结果是 ResultSet
boolean moreUpdate = statement.getUpdateCount() != -1; // 表示结果是 "UPDATE ..." 或者 "INSERT ..." 的结果

while( moreResult moreUpdate )
{
if( moreResult )
{
ResultSet rs = statement.getResultSet();
// ... 相关操作
}
else
{
int count = statement.getUpdateCount();
// ... 得到的结果是更新了多少行,或者插入了多少行,或者删除了多少行等等
}

moreResult = statement.getMoreResults();
moreUpdate = statement.getUpdateCount() != -1;
}

2007年2月3日星期六

定时自动刷新

过年了,同事们着急着买火车票,网上查询之,欲让结果固定时间后自动刷新,以便及时获得最新消息。

得如下代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Auto Refresh</title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="闲耘">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body style="margin:0 0 0 0;">
<iframe id="piao" src="http://www.xianyun.org/" style="width:100%;height:100%;border:0px;frame-border:0px;margin-width:0px;margin-height:0px;"></iframe>

<script language="JavaScript">
<!--
var AutoRefresh = {
iframe : document.getElementById('piao'),
delay : 60*1000,
timer : null
};
AutoRefresh.refresh = function(){
this.iframe.src = this.iframe.src;
};
AutoRefresh.start = function(){
this.timer = setInterval('AutoRefresh.refresh();', this.delay);
};
AutoRefresh.stop = function(){
clearInterval(this.timer);
this.timer = null;
};

AutoRefresh.start();
//-->
</script>
</body>
</html>

2007年2月2日星期五

(javascript) Module.js


var Module = function(){
this.currentName = '';
this.previousName = '';
this.show = function(module){
if (this.currentName == module){return;};
try{
this[this.currentName].deconstruction();
}catch (e){};
try{
this[module].construction();
}catch (e){};
this.previousName = this.currentName;
this.currentName = module;
};
this.showPrevious = function(){
try{
this[this.currentName].showPreviousModule();
}catch (e){};
};
this.showNext = function(){
try{
this[this.currentName].showNextModule();
}catch (e){};
setTimeout('this.focus()', 10);
};
this.$new = function(){
try{
this[this.currentName].$new();
}catch (e){};
};
this.edit = function(){
try{
this[this.currentName].edit();
}catch (e){};
};
this.$delete = function(){
try{
this[this.currentName].$delete();
}catch (e){};
};
this.refresh = function(){
try{
this[this.currentName].refresh();
}catch (e){};
};
this.search = function(){
try{
this[this.currentName].search();
}catch (e){};
};
this.help = function(){
try{
this[this.currentName].help();
}catch (e){};
};
};

// Demo:
var HTBlog = new Module();
HTBlog.currentName = 'ArticleList';

HTBlog.ArticleList = new Object();
HTBlog.ArticleList.construction = function(){
$('moduleArticleList').style.display = '';
HTBlog.ArticleList.setStyle('on');
HTBlog.ArticleList.setButton();
HTBlog.ArticleList.setTitle();
};
HTBlog.ArticleList.deconstruction = function(){
HTBlog.ArticleList.setStyle('off');
$('moduleArticleList').style.display = 'none';
};

HTBlog.Article = new Object();
HTBlog.Article.construction = function(){
$('moduleArticle').style.display = '';
};
HTBlog.Article.deconstruction = function(){
$('moduleArticle').style.display = 'none';
};

// ...

2007年1月31日星期三

希望

-- 你在逃避什么?

-- 我在寻求。

-- 一个满怀希望的人。

-- 有希望不好么?

-- 希望是对那些状况不太好的人说的。

--

《越狱》 Fernando Sucre

2007年1月30日星期二

富婆找乐子

富婆去夜总会找乐子,老板娘挑了几个帅小伙,富婆不满意.老板娘挑了几个壮小伙,富婆还不满意.老板问那富婆到底想要什么样的,富婆说要体力好、精力旺盛、能加班、能熬夜、随叫随到、吃苦耐劳,老板一下乐了.....张口喊:"
搞程序的,出来接客!

2007年1月27日星期六

关于 Javascript 空语句

前些时候,热血来潮,想“规范”下书写Javascript的风格,其中有一条,所有的语句都必须分号结束。于是写出了如下代码:

if (true) {
// do something...
};

注意最后的分号,其实是没有必要的,浏览器解释的时候,无论在判断的大括号后是否继续有连续的代码,不要这个分号一样不会出错,像这样:

if(true){var b = true;}var s = 'string';

if(true){var b = true;};var s = 'string';

执行效果没有任何差别,但是有一种情况,在赋值操作时,必须在大括号后加分号,否则有连续的代码时会出错。加上分号可以避免压缩源代码时候因为这个分号的原因出错。例如:

var f = function(){};

好,加分号就加分号,但是有一点,会不会因为这个多加的分号,造成性能的影响呢,于是有了如下的测试代码:

<script language="javascript" type="text/javascript">/*<![CDATA[*/

var Empty = new Object();
// 空语句
Empty.Sentence = new Object();
Empty.Sentence.counter = 100000;
Empty.Sentence.getMultSemicolonTime = function(){
var start = new Date();
for(var i = 0; i < this.counter; i++){
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
}
return (new Date() - start);
}
Empty.Sentence.getNoneSemicolonTime = function(){
var start = new Date();
for(var i = 0; i < this.counter; i++){}
return (new Date() - start);
}
Empty.Sentence.test = function(){
var arrMult = new Array();
var sumMult = 0;
var arrNone = new Array();
var sumNone = 0;
var counter = 10;
var sMult = '', sNone = '';
for(var i = 0; i< counter; i++){
var mu = this.getMultSemicolonTime()
var no = this.getNoneSemicolonTime();
sumMult += mu;
sumNone += no;
arrMult.push(mu);
arrNone.push(no);
}
for(var i = 1; i < counter; i++)
sMult += new String(arrMult[i] + ', ');

for(var i = 1; i < counter; i++)
sNone += new String(arrNone[i] + ', ');

document.write(
'多分号:' + sMult + ' = ' + sumMult + '<br />' +
'无分号:' + sNone + ' = ' + sumNone
);
};


Empty.Sentence.test();

/*

Empty.Loop = new Object();
Empty.Loop.getNoneLoopTime = function(){
var start = new Date();
return (new Date() - start);
};
Empty.Loop.getEmptyLoopTime = function(){
var start = new Date();
while(true){}

};*/
/*]]>*/
</script>

经过本机测试,尽管有一些不稳定因素,但是就我的结果看来,结果应该是空语句(;)不执行,或者说执行时间为零,并不影响总体的效果,至少可以说影响相当小。

我的机器并不好,如果有朋友得出不同的结果,请联系闲耘 。不论是否相同,请把您的结果数据发一份给我,谢谢。

另,在Google Docs上发布到Blog上来的空格缩进竟然失效,郁闷。

(转) RMI一步一步来

http://www.it.com.cn/f/edu/061/4/218911.htm (闲耘转自此,发此文时原文链接暂不可用。)
2006-1-4 9:22:00 文/ zhangxhsj 出处:javafan.net
此文是转帖,闲耘作了稍许修改
 
RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI是非常容易使用的,但是它非常的强大。

RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。下面我们通过具体的例子,建立一个简单的远程计算服务和使用它的客户程序

一个正常工作的RMI系统由下面几个部分组成:
    远程服务的接口定义
    远程服务接口的具体实现
    桩(Stub)和框架(Skeleton)文件
    一个运行远程服务的服务器
    一个RMI命名服务,它允许客户端去发现这个远程服务
    类文件的提供者(一个HTTP或者FTP服务器)
    一个需要这个远程服务的客户端程序
下面我们一步一步建立一个简单的RMI系统。首先在你的机器里建立一个新的文件夹,以便放置我们创建的文件,为了简单起见,我们只使用一个文件夹存放客户端和服务端代码,并且在同一个目录下运行服务端和客户端。

如果所有的RMI文件都已经设计好了,那么你需要下面的几个步骤去生成你的系统:

1、 编写并且编译接口的Java代码
2、 编写并且编译接口实现的Java代码
3、 从接口实现类中生成桩(Stub)和框架(Skeleton)类文件
4、 编写远程服务的主运行程序
5、 编写RMI的客户端程序
6、 安装并且运行RMI系统

1、 接口
第一步就是建立和编译服务接口的Java代码。这个接口定义了所有的提供远程服务的功能,下面是源程序:

//Calculator.java
//define the interface

import java.rmi.Remote;

public interface Calculator extends Remote {
    public long add(long a, long b)
        throws java.rmi.RemoteException;

    public long sub(long a, long b)
        throws java.rmi.RemoteException;

    public long mul(long a, long b)
        throws java.rmi.RemoteException;

    public long div(long a, long b)
        throws java.rmi.RemoteException;
}

注意,这个接口继承自Remote,每一个定义的方法都必须抛出一个RemoteException异常对象。

建立这个文件,把它存放在刚才的目录下,并且编译。

>javac Calculator.java

2、 接口的具体实现

下一步,我们就要写远程服务的具体实现,这是一个CalculatorImpl类文件:

//CalculatorImpl.java
//Implementation

import java.rmi.server.UnicastRemoteObject

public class CalculatorImpl
    extends UnicastRemoteObject
    implements Calculator {

    // 这个实现必须有一个显式的构造函数,
    //并且要抛出一个RemoteException异常

    public CalculatorImpl()
    throws java.rmi.RemoteException {
        super();
    }

    public long add(long a, long b)
        throws java.rmi.RemoteException {
        return a + b;
    }

    public long sub(long a, long b)
        throws java.rmi.RemoteException {
        return a - b;
    }

    public long mul(long a, long b)
        throws java.rmi.RemoteException {
        return a * b;
    }

    public long div(long a, long b)
        throws java.rmi.RemoteException {
        return a / b;
    }
}

同样的,把这个文件保存在你的目录里然后编译他。

这个实现类使用了UnicastRemoteObject去联接RMI系统。在我们的例子中,我们是直接的从UnicastRemoteObject这个类上继承的,事实上并不一定要这样做,如果一个类不是从UnicastRmeoteObject上继承,那必须使用它的exportObject()方法去联接到RMI。

如果一个类继承自UnicastRemoteObject,那么它必须提供一个构造函数并且声明抛出一个RemoteException对象。当这个构造函数调用了super(),它久激活UnicastRemoteObject中的代码完成RMI的连接和远程对象的初始化。

3、 桩(Stubs)和框架(Skeletons)

下一步就是要使用RMI编译器rmic来生成桩和框架文件,这个编译运行在远程服务实现类文件上。

>rmic CalculatorImpl

在你的目录下运行上面的命令,成功执行完上面的命令你可以发现一个Calculator_stub.class文件,如果你是使用的Java2SDK,那么你还可以发现Calculator_Skel.class文件。


4、 主机服务器

远程RMI服务必须是在一个服务器中运行的。CalculatorServer类是一个非常简单的服务器。

//CalculatorServer.java
import java.rmi.Naming;

public class CalculatorServer {
    public CalculatorServer() {
        try {
            Calculator c = new CalculatorImpl();
            Naming.rebind("rmi://localhost:1099/CalculatorService", c);
        } catch (Exception e) {
            System .out.println("Trouble: " + e);
        }
    }

    public static void main(String args[]) {
        new CalculatorServer();
    }
}

建立这个服务器程序,然后保存到你的目录下,并且编译它。

5、 客户端

客户端源代码如下:

//CalculatorClient.java

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;

public class CalculatorClient {
    public static void main(String[] args) {
        try {
            Calculator c = (Calculator)
                Naming.lookup("rmi://localhost/CalculatorService");
            System.out.println( c.sub(4, 3) );
            System.out.println( c.add(4, 5) );
            System.out.println( c.mul(3, 6) );
            System.out.println( c.div(9, 3) );
        } catch (MalformedURLException murle) {
            System.out.println();
            System.out.println("MalformedURLException");
            System.out.println(murle);
        } catch (RemoteException re) {
            System.out.println();
            System .out.println("RemoteException");
            System.out.println(re);
        } catch (NotBoundException nbe) {
            System.out.println();
            System.out.println("NotBoundException");
            System.out.println(nbe);
        } catch (java.lang.ArithmeticException ae) {
            System.out.println();
            System.out.println("java.lang.ArithmeticException");
            System.out.println(ae);
        }
    }
}

保存这个客户端程序到你的目录下(注意这个目录是一开始建立那个,所有的我们的文件都在那个目录下),并且编译他。

6、 运行RMI系统

现在我们建立了所有运行这个简单RMI系统所需的文件,现在我们终于可以运行这个RMI系统啦!来享受吧。

我们是在命令控制台下运行这个系统的,你必须开启三个控制台窗口,一个运行服务器,一个运行客户端,还有一个运行RMIRegistry。

首先运行注册程序RMIRegistry,你必须在包含你刚写的类的那么目录下运行这个注册程序。

>rmiregistry

好,这个命令成功的话,注册程序已经开始运行了,不要管他,现在切换到另外一个控制台,在第二个控制台里,我们运行服务器CalculatorService,因为RMI的安全机制将在服务端发生作用,所以你必须增加一条安全策略。以下是对应安全策略的例子 policy.txt :

grant {
    permission java.security.AllPermission "", "";
};

注意:这是一条最简单的安全策略,它允许任何人做任何事,对于你的更加关键性的应用,你必须指定更加详细安全策略。
现在为了运行服务端,你需要除客户类(CalculatorClient.class)之外的所有的类文件。确认安全策略在policy.txt文件之后,使用如下命令来运行服务器。

> java -Djava.security.policy=policy.txt CalculatorServer

这个服务器就开始工作了,把接口的实现加载到内存等待客户端的联接。好现在切换到第三个控制台,启动我们的客户端。
为了在其他的机器运行客户端程序你需要一个远程接口(Calculator.class) 和一个stub(CalculatorImpl_Stub.class)。 使用如下命令运行客户端

 prompt> java -Djava.security.policy=policy.txt CalculatorClient

如果所有的这些都成功运行,你应该看到下面的输出:

1
9
18
3

如果你看到了上面的输出,恭喜你,你成功了,你已经成功的创建了一个RMI系统,并且使他正确工作了。即使你运行在同一个计算机上,RMI还是使用了你的网络堆栈和TCP/IP去进行通讯,并且是运行在三个不同的Java虚拟机上。这已经是一个完整的RMI系统。
 
 
--
闲耘注,我测试了不用 -Djava.security.policy=policy.txt 参数也执行成功,可能是我本机权限足够...