《美國(guó)數(shù)學(xué)月刊》登載了一個(gè)有趣的數(shù)學(xué)問(wèn)題:3名男子參加一個(gè)以氣球?yàn)槟繕?biāo)的投鏢游戲。每個(gè)人都用飛鏢攻擊另外2個(gè)人的氣球,氣球被戳破的要出局,最后幸存的是勝者。
3名選手水平不一,在固定標(biāo)靶的測(cè)試中,老大10投8中,命中率80%。老二和老三的命中率分別為60%和40%。現(xiàn)在,3個(gè)人一起角逐,誰(shuí)最有可能獲勝?
答案看似簡(jiǎn)單,投得準(zhǔn)的會(huì)取勝。而實(shí)際上,一開場(chǎng),每個(gè)人都希望先把另外2個(gè)對(duì)手中的強(qiáng)者滅掉,自己才安全,下面的比賽也輕松。于是,老大專攻老二,老二、老三就攻老大,結(jié)果,水平最高的老大最易出局,水平最差的老三最安全!
老大自然不會(huì)那么蠢,他會(huì)游說(shuō)老二:“我們合伙把老三那小子滅了,這樣,你我勝率都高!”
但是,老二會(huì)這樣想老大:“你想得美!若我們滅了老三,然后對(duì)打,我還不是處在劣勢(shì)?”
老大和老二的合作有了裂痕。
耶魯大學(xué)煺研究所的經(jīng)濟(jì)學(xué)教授馬丁·蘇比克,討論過(guò)另一種策略:“老大會(huì)對(duì)老二保持一種威懾:‘我不攻擊你,你也別攻擊我,否則,我將不顧一切地回?fù)裟悖?#8217;這樣一來(lái),就會(huì)造成新的局面。老二豈肯善罷甘休,也會(huì)以同樣的方式威脅老三,那么,三人的勝率又是……”
若2個(gè)男人比賽,問(wèn)題再簡(jiǎn)單不過(guò);若多出1人,問(wèn)題就復(fù)雜了許多倍。
摒棄復(fù)雜的數(shù)學(xué)和社會(huì)問(wèn)題,還原為一些簡(jiǎn)單的生活道理:面對(duì)一個(gè)強(qiáng)者,弱者只能接受失敗;面對(duì)一群強(qiáng)者,弱者反而有了更多的周旋空間。
posted @
2008-08-09 16:19 x.matthew 閱讀(621) |
評(píng)論 (3) |
編輯 收藏
摘要: 今天在DZone網(wǎng)站看到發(fā)布兩個(gè)新的筆記幫助卡片,下載看一下感覺很不錯(cuò),所以推薦給大家。不過(guò)除了今天要推薦的 Design Patterns和GlassFish以外,DZone RefCards還有很多不錯(cuò)的學(xué)習(xí)筆記卡片可供下載,有興趣的朋友可以去官網(wǎng)下載。
閱讀全文
posted @
2008-07-18 12:58 x.matthew 閱讀(1465) |
評(píng)論 (4) |
編輯 收藏
摘要: 聲明:本博客屬作者原創(chuàng),如果任何網(wǎng)站轉(zhuǎn)載本文,請(qǐng)注明作者及引用來(lái)源,謝謝合作!
關(guān)于Cas實(shí)現(xiàn)單點(diǎn)登入(single sing on)功能的文章在網(wǎng)上介紹的比較多,想必大家多多少少都已經(jīng)有所了解,在此就不再做具體介紹。如果不清楚的,那只能等我把single sign on這塊整理出來(lái)后再了解了。當(dāng)然去cas官方網(wǎng)站也是有很多的文章進(jìn)行介紹。cas官網(wǎng)http://www.ja-sig.org...
閱讀全文
posted @
2008-07-09 22:44 x.matthew 閱讀(31794) |
評(píng)論 (13) |
編輯 收藏
摘要: 推薦一本使用Java開源工具實(shí)踐XP經(jīng)驗(yàn)的書籍,書名有點(diǎn)長(zhǎng)
Java-Tools-for-Extreme-Programming-Mastering-Open-Source-Tools-Including-Ant-JUnit-and-Cactus
全書包括三大部分
1. 介紹敏捷開發(fā)的概念。包括原則和最佳實(shí)踐。
2. 開源工具的介紹。涵蓋的工具應(yīng)用有自動(dòng)化構(gòu)建,持續(xù)集成,自動(dòng)化測(cè)試(功能和壓力性能),部署以及代碼重構(gòu)等。
3. API介紹。從編程方面來(lái)剖析這些開源工具是如何工作的。
閱讀全文
posted @
2008-07-08 21:17 x.matthew 閱讀(1583) |
評(píng)論 (5) |
編輯 收藏
摘要: Eclipse官方網(wǎng)站已經(jīng)正式宣布 Eclipse 3.4發(fā)布,代號(hào)為ganymede (Ganymede (英語(yǔ)發(fā)音"GAN uh meed")為最大的木星已知衛(wèi)星,也是第七顆發(fā)現(xiàn)的木星衛(wèi)星,在伽利略發(fā)現(xiàn)的衛(wèi)星中離木星第三近)。
閱讀全文
posted @
2008-06-25 15:22 x.matthew 閱讀(3514) |
評(píng)論 (5) |
編輯 收藏
摘要: Eclipse官方網(wǎng)站已經(jīng)正式宣布 Eclipse 3.4的發(fā)布日期為2008年6月25日
閱讀全文
posted @
2008-06-23 20:01 x.matthew 閱讀(2249) |
評(píng)論 (2) |
編輯 收藏
期待了好久,firefox3.0已經(jīng)正式發(fā)布了,官方地址及下載鏈接:
http://www.mozilla.com/en-US/firefox/
本人下載后簡(jiǎn)單嘗試了一下,感覺速度上有提升,而且導(dǎo)航欄的自動(dòng)完成功能用起來(lái)很舒服。
有一點(diǎn)需要注意的事,如果是從firefox2.0直接升級(jí)到3.0需要注意一點(diǎn),就是firefox的插件版本兼容問(wèn)題。
我就發(fā)現(xiàn)firebug插件就存在版本的兼容問(wèn)題,firebug是針對(duì) firefox2和firefox3分別開發(fā)的,所以如果升級(jí)完后,會(huì)發(fā)布原來(lái)的firebug插件未被識(shí)別,解決辦法就是
重新下載一下插件并安裝。
接下來(lái)的時(shí)間會(huì)更新的嘗試一下firefox3,也希望能與大家交流一下使用感覺。
Good Luck!
Your Matthew!
posted @
2008-06-19 10:10 x.matthew 閱讀(1162) |
評(píng)論 (0) |
編輯 收藏
交朋友的11個(gè)技巧
交朋友有很多方法,我們有很多人也自覺不自覺地有很多交朋友的技巧,有些人甚至有交往朋友的原則。但是很多人是用樸素的方法與人交往,或者不自覺地運(yùn)用或者不運(yùn)用一些技巧。這里我和大家分享的11個(gè)小技巧,供大家社交參考。
——聊天聊點(diǎn)長(zhǎng)遠(yuǎn)的事。我們一般與人在一起聊天的時(shí)候,除了雞毛蒜皮,家長(zhǎng)里短的事情之外,我們要讓人覺得有一點(diǎn)遠(yuǎn)見,有在考慮未來(lái)的事情,自己是一個(gè)可以有長(zhǎng)期交往價(jià)值的人。讓人感到你是有長(zhǎng)遠(yuǎn)考慮的人才增加人們與你建立雞毛蒜皮以外關(guān)系的空間。
——交往一些眼前無(wú)用的人。有地位有資源的人誰(shuí)都想去交往,但是在人家眼里你可能都不算一根蔥。那些從還看不出誰(shuí)長(zhǎng)誰(shuí)短的時(shí)代發(fā)展的同學(xué)關(guān)系卻在后來(lái)成
為了很長(zhǎng)久的社會(huì)支撐。我們要把一部分精力放在幫助這些現(xiàn)在沒有很多功用的人,從而為未來(lái)積累真正的價(jià)值。實(shí)際上那些只交往有用朋友的人看起來(lái)更象小人。
——注意社交的差異性。有的人說(shuō)我從沒有公務(wù)員的朋友,或者從來(lái)沒有教授的朋友,沒有做投資股票這些方面的朋友,那么我要有意識(shí)的去這些人可能較多出現(xiàn)的場(chǎng)合、講座、活動(dòng)中去交往這些朋友。假如我要交往一個(gè)投資界的朋友的話,說(shuō)不定在投資講座的時(shí)候可以交到這個(gè)人。
——不要隨便給人家承諾。如果承諾的話是指100%可以做到的,你可以不承諾,可能面子上抹不開。我有一個(gè)規(guī)矩第一我不借人錢,親戚朋友只有一個(gè)例外,
你們生了大病我都會(huì)幫助的,我承諾做到的都能做到,我說(shuō)不借的就不借。清晰的承諾可以減少你的麻煩,也可以讓其他人知道怎么和你打交道。
——
接近不知道或不喜歡的知識(shí)或人士。在這個(gè)不知道里面,你可能會(huì)發(fā)現(xiàn)這些人事其實(shí)才是我非常喜歡的。有時(shí)你還要接觸一些不喜歡的人和知識(shí)——中學(xué),高中包括
到大學(xué)是我們?nèi)松铋_放的時(shí)候,一個(gè)很重要的原因,是中小學(xué)到大學(xué)的時(shí)候我們學(xué)到很多知識(shí)是不得不學(xué)的。等到我們工作以后,老得快的一個(gè)重要原因是因?yàn)橹?
選擇自己喜歡的東西,從而變得十分偏執(zhí)。所以如果你選10本書,你選三本你不喜歡的書,七本是你喜歡的。如果你能這樣堅(jiān)持,你將對(duì)未來(lái)保持開放心態(tài)。
——在沒事的時(shí)候聯(lián)絡(luò)老朋友。大家打招呼,說(shuō)有事來(lái)找我,而社交的規(guī)矩是沒事情的時(shí)候找人才能積累情感與彼此的粘合度,有事找人是用人,沒事找人是情感投資。我們要更多在沒有事情的時(shí)候給人電話、吃飯、聚會(huì)與旅行。
——做成本低但讓人感覺到你的關(guān)心的事。過(guò)中秋買三千塊錢的月餅,這個(gè)不見得有必要,而今天這個(gè)時(shí)代還能手寫信,所以你過(guò)一個(gè)節(jié)給你30個(gè)朋友一人寫一
個(gè)小短信的話,比你那個(gè)肉麻的印的卡片要好。所以你哪怕用最樸素的方法報(bào)告一下你的情況,也比轉(zhuǎn)一個(gè)人家已經(jīng)收到過(guò)的定制短信好。
——組織聚會(huì)擴(kuò)大關(guān)系。一家人老公有老公的朋友,太太有太太的朋友,小孩子有小孩子的朋友,如果大家的朋友帶朋友一起聚會(huì),就可以把社交關(guān)系擴(kuò)大很多倍,而且還發(fā)展了與家人可共享的友誼關(guān)系,增加了共同的話題,也在有事情的時(shí)候制造了可以與大家都說(shuō)得上話的人力資源。
——關(guān)心自己給人的第一形象。現(xiàn)在大家不像以往,交往機(jī)會(huì)多了,但其實(shí)人們很難有第二次交往,大部分人連一次見面的機(jī)會(huì)都不會(huì)有,我們?cè)诔?jí)市場(chǎng)推著一
個(gè)貨車,選東西的時(shí)候很多東西不認(rèn)真看的,順手這么一拿,掃一眼就可以判斷,而我們現(xiàn)在人際社交中間很多不是掃一眼就可以判斷的。所以為什么像我們面試
啊,會(huì)議啊,論壇啊,你要認(rèn)真的考慮我的形象怎么樣?第一要吸引人們的注意力,第二個(gè)人們對(duì)我的注意力是正面的。要充分注意形象的修飾。
——
一定要用名片。人初次見面后需有一個(gè)溝通的鏈接,名片就充當(dāng)這樣一個(gè)作用。假如今天是龍永圖在這邊做演講,你說(shuō)龍先生我們能不能換一個(gè)名片,他會(huì)說(shuō)不好意
思我今天沒有帶名片,這是他的虧欠,因?yàn)樗麤]有給你名片。大家在名片上也不要印手機(jī)號(hào),你在他面前寫下了一個(gè)號(hào)碼,你寫這個(gè)東西的姿態(tài)表明你對(duì)他另眼相
看。
——與朋友一起做公益。我們這些朋友我們除了互相幫忙之外,很重要一點(diǎn)就是把我們的友誼和關(guān)系用在幫助第三人和第四人方面。在這一種交往
中間因?yàn)槟銕椭怂麄儯孕碌牡玫綆椭娜藢?duì)你還是負(fù)有社會(huì)債務(wù)的,更重要的是使得我們能夠體驗(yàn)到那種幫助其他人,服務(wù)于其他人,為更多人創(chuàng)造價(jià)值這個(gè)
中間的樂(lè)趣。還不會(huì)減少原來(lái)的友情。
Good Luck!
Yours Matthew!
posted @
2008-06-13 19:24 x.matthew 閱讀(431) |
評(píng)論 (2) |
編輯 收藏
關(guān)于endpoint配置補(bǔ)充
endpoint配置相對(duì)比較靈活,下面再來(lái)看一個(gè)例子:
<endpoint input-channel="inputChannel"
default-output-channel="outputChannel"
handler-ref="helloService"
handler-method="sayHello"/>
<beans:bean id="helloService" class="org.springframework.integration.samples.helloworld.HelloService"/>
1 public class HelloService {
2
3 public String sayHello(String name) {
4 return "Hello " + name;
5 }
6 }
上面這個(gè)例子就演示了把 HelloService配置成一個(gè)MessageEndpoint組件,消息從"inputChannel"隊(duì)列接收后,
調(diào)用HelloService.sayHello方法,等sayHello方法返回后,根據(jù)default-output-channel="outputChannel"的配置
把返回的結(jié)果保存到message.payload屬性后發(fā)送給"outputChannel"隊(duì)列
也可改成Annotation的方式,配置方法如下:
<annotation-driven/>
<message-bus auto-create-channels="true"/>
<context:component-scan base-package="org.springframework.integration.samples.helloworld"/>
<beans:bean id="helloService" class="org.springframework.integration.samples.helloworld.HelloService"/>
1 @MessageEndpoint(input="inputChannel", defaultOutput="outputChannel")
2 public class HelloService {
3
4 @Handler
5 public String sayHello(String name) {
6 return "Hello " + name;
7 }
8 }
設(shè)置并發(fā)操作屬性
xml配置:
<endpoint input-channel="exampleChannel" handler-ref="exampleHandler"/>
<!-- 設(shè)置并發(fā)設(shè)置 core核心線程數(shù) max最大線程數(shù) queue-capacity 隊(duì)列最大消息數(shù) keep-alive idle線程生命時(shí)間-->
<concurrency core="5" max="25" queue-capacity="20" keep-alive="120"/>
</endpoint>
annotation配置
1 @MessageEndpoint(input="fooChannel")
2 @Concurrency(coreSize=5, maxSize=20, queueCapacity=20, keepAliveSeconds=120)
3 public class FooService {
4
5 @Handler
6 public void bar(Foo foo) {
7 
8 }
9 }
下面總結(jié)一下常見的annotation的使用方法
@MessageEndpoint
它表示處理消息對(duì)象的終端節(jié)點(diǎn)。一般與其它的元數(shù)據(jù)標(biāo)記一起使用。
下面會(huì)具體介紹與該元數(shù)據(jù)標(biāo)記一起使用的其它標(biāo)識(shí)的使用方法。
@MessageEndpoint源代碼:
1 @Target(ElementType.TYPE)
2 @Retention(RetentionPolicy.RUNTIME)
3 @Inherited
4 @Documented
5 @Component
6 public @interface MessageEndpoint {
7
8 String input() default ""; //接收消息的隊(duì)列名稱
9 String defaultOutput() default ""; //默認(rèn)發(fā)送消息的隊(duì)列名稱(只有在不設(shè)置@Router情況下才有效)
10 int pollPeriod() default 0; //發(fā)送消息的輪循時(shí)間間隔(只有在不設(shè)置@Router情況下才有效)
11 }
@Handler
消息回調(diào)處理的方法。與@MessageEndpoint一起配置
(只限M3版,M4以及后續(xù)版本可以單獨(dú)使用,具體使用方法還要等具體的實(shí)現(xiàn)出來(lái)),收到input隊(duì)列的消息后,回調(diào)@Handler標(biāo)識(shí)的方法
回調(diào)方法的參數(shù)類型必須與message.payload屬性類型相同
注:如果回調(diào)方法有返回值, 則回調(diào)方法處理完成后,會(huì)將返回值設(shè)置到message.payload屬性后,
發(fā)送消息到@MessageEndpoint的defaultOutput隊(duì)列。如果defaultOutput沒有設(shè)定,則將拋出異常。
@Handler源代碼:
1 @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
2 @Retention(RetentionPolicy.RUNTIME)
3 @Inherited
4 @Documented
5 public @interface Handler {
6
7 }
下面的例子演示了,從"channel1"隊(duì)列接收消息后由@Handler標(biāo)記的方法處理。消息的payload屬性值的類型必須與方法的參數(shù)類型相同
1 @MessageEndpoint(input="channel1")
2 public class FooService {
3
4 @Handler
5 public void bar(Foo foo) {
6 
7 }
8 }
@Polled
必須與@MessageEndPoint 一起使用。但也可以與@Router,@Splitter標(biāo)識(shí)配合使用,后面再分別舉例說(shuō)明。
@Polled 用于開啟一個(gè)輪循的方式調(diào)用方法的功能
它有三個(gè)參數(shù):
period: 輪循時(shí)間間隔(單位:微秒) 默認(rèn)為 1000
initialDelay: 輪循延遲時(shí)間(單位:微秒) 默認(rèn)為0
fixedRate: 默認(rèn)為false
@Polled 源代碼
1 @Target(ElementType.METHOD)
2 @Retention(RetentionPolicy.RUNTIME)
3 @Inherited
4 @Documented
5 public @interface Polled {
6 int period() default 1000;
7 long initialDelay() default PollingSchedule.DEFAULT_INITIAL_DELAY;
8 boolean fixedRate() default PollingSchedule.DEFAULT_FIXED_RATE;
9
10 }
下面來(lái)看幾個(gè)例子:
例子1:
1 @MessageEndpoint(defaultOutput="outputChannel")
2 public class Counter {
3
4 private AtomicInteger count = new AtomicInteger();
5
6 @Polled(period=3000)
7 public int getNumber() {
8 return count.incrementAndGet();
9 }
10 }
這個(gè)例子功能是,MessageBus啟動(dòng)后,由@Polled標(biāo)記 每3秒觸發(fā)getNumber方法,當(dāng)getNumber方法返回后,
把返回值設(shè)置到message.payload屬性后,發(fā)送到outputChannel隊(duì)列中。
例子2:
1 @MessageEndpoint
2 public class Counter {
3
4 private AtomicInteger count = new AtomicInteger();
5
6 @Polled(period=3000)
7 public int getNumber() {
8 return count.incrementAndGet();
9 }
10
11 @Router
12 public String resolveChannel(int i) {
13 if (i % 2 == 0) {
14 return "even";
15 }
16 return "odd";
17 }
18 }
這個(gè)例子功能是,MessageBus啟動(dòng)后,由@Polled標(biāo)記 每3秒觸發(fā)getNumber方法, 當(dāng)getNumber方法返回后,
由于resolveChannel方法設(shè)置了@Router 標(biāo)識(shí),則把有g(shù)etNumber方法返回值都會(huì)傳給resolveChannel方法,最后
會(huì)根據(jù)方法的返回值(即隊(duì)列名稱) (@Router標(biāo)記功能),把消息發(fā)到even隊(duì)列或是odd隊(duì)列
注:如果@MessageEndpoint類中,在方法上標(biāo)記了@Router標(biāo)記后,@MessageEndpoint的defaultOutput就變成無(wú)效了。
@Splitter
必須與@MessageEndPoint 一起使用。
該元數(shù)據(jù)標(biāo)識(shí)用于分解消息內(nèi)容,它所在的方法的返回值必須是一個(gè)集合(collection).如果集合元素不是Message類型
但發(fā)送時(shí),自動(dòng)把集合中的元素對(duì)象保存到Message.payload屬性后發(fā)送。集合中有多少個(gè)元素,則會(huì)發(fā)送多少次消息。
1 @Target(ElementType.METHOD)
2 @Retention(RetentionPolicy.RUNTIME)
3 @Documented
4 @Handler
5 public @interface Splitter {
6 String channel(); //消息發(fā)送的隊(duì)列名
7 }
下面兩個(gè)例子實(shí)現(xiàn)效果是一樣的
例子1
1 @MessageEndpoint(input="inputChannel")
2 public class HelloService {
3
4 @Splitter(channel="outputChannel")
5 public List<String> sayHello(String name) {
6 String s = "Hello " + name;
7 List<String> list = new ArrayList<String>();
8 list.add(s);
9 return list;
10 }
11 }
12
例子2
1 @MessageEndpoint(input="inputChannel")
2 public class HelloService {
3
4 @Splitter(channel="outputChannel")
5 public List<Message> sayHello(String name) {
6 String s = "Hello " + name;
7 List<Message> list = new ArrayList<Message>();
8 Message message = new GenericMessage<String>(s);
9 list.add(message);
10 return list;
11 }
12 }
@Router
消息隊(duì)列路由功能。 必須與@MessageEndPoint 一起使用。
它所在的方法的返回值類型必須是MessageChannle或是String(channel name)類型
具體的例子參考上面。
@Publisher
必須與@MessageEndPoint 一起使用。
說(shuō)明:@Publisher 標(biāo)識(shí)是根據(jù) after-returning 切面的AOP 在方面返回值時(shí),發(fā)送消息到指定消息隊(duì)列 .
下面的例子:說(shuō)明 foo方法調(diào)用后,返回值會(huì)發(fā)送到fooChannel消息隊(duì)列
1 @Publisher(channel="fooChannel")
2 public String foo() {
3 return "bar";
4 }
@Subscriber
必須與@MessageEndPoint 一起使用。
接收指定隊(duì)列的消息內(nèi)容。它實(shí)現(xiàn)的異步的消息監(jiān)聽事件。
一旦有消息接收到,則會(huì)根據(jù)message.payload 值作為參數(shù),回調(diào)@Subscriber 標(biāo)識(shí)標(biāo)記的方法
1 @Subscriber(channel="fooChannel")
2 public void log(String foo) {
3 System.out.println(foo);
4 }
Good Luck!
Yours Matthew!
2008年4月24日
posted @
2008-05-28 21:38 x.matthew 閱讀(2002) |
評(píng)論 (1) |
編輯 收藏
摘要: The Cafe Sample(小賣部訂餐例子)
小賣部有一個(gè)訂飲料服務(wù),客戶可以通過(guò)訂單來(lái)訂購(gòu)所需要飲料。小賣部提供兩種咖啡飲料
LATTE(拿鐵咖啡)和MOCHA(摩卡咖啡)。每種又都分冷飲和熱飲
整個(gè)流程如下:
&nb...
閱讀全文
posted @
2008-05-28 11:49 x.matthew 閱讀(8639) |
評(píng)論 (6) |
編輯 收藏