久久久青草青青国产亚洲免观 ,久久久久亚洲精品日久生情,午夜亚洲www湿好大http://m.tkk7.com/mphome/zh-cnMon, 12 May 2025 06:56:01 GMTMon, 12 May 2025 06:56:01 GMT60培訓(xùn)endinghttp://m.tkk7.com/mphome/archive/2009/09/11/294721.html昨夜人生昨夜人生Fri, 11 Sep 2009 06:04:00 GMThttp://m.tkk7.com/mphome/archive/2009/09/11/294721.htmlhttp://m.tkk7.com/mphome/comments/294721.htmlhttp://m.tkk7.com/mphome/archive/2009/09/11/294721.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/294721.htmlhttp://m.tkk7.com/mphome/services/trackbacks/294721.html?????? 爽還是有爽的地方,鼎培培訓(xùn)幾乎就是休假去,吃得好睡的好還有保健按摩,哎腐敗啊。我們zh今年招的人少,到了鼎培才知道什么叫做弱勢(shì)群體啊,人家都是20多,30多人,我們就5個(gè)人,湊一桌麻將打都難。早上培訓(xùn),晚上人家安排唱K,聯(lián)誼,泡吧啊,我們就郁悶啦,訂場(chǎng)都定不到。不行啊,好歹有140快的消費(fèi)卷不用豈不可惜。結(jié)果我們就跑得去保健,說(shuō)起來(lái)還真丟人,洗腳,推拿,面膜,拔火罐我們一個(gè)都沒(méi)落下。我上次問(wèn)推拿的師傅為什么保健這么難定,人家說(shuō)有個(gè)zh公司的人天天來(lái),在推拿的時(shí)候就有電話(huà)叫他去洗腳,洗腳的時(shí)候就有電話(huà)叫他去面膜,天天混在我們這里(PS:因?yàn)樗斜=《际且A(yù)定的),這樣當(dāng)然定不到啦。接下來(lái)人家問(wèn)我是哪個(gè)公司,我那個(gè)汗啊,直接說(shuō)我是省公司的,丟人的事還是攤到省公司去。
?????? 軍訓(xùn)完后,人黑了一大圈本來(lái)就比較黑,現(xiàn)在遠(yuǎn)看基本上就是一堆碳,五官什么幾乎不用考慮啦。上周回了趟廣州,和大家坐一桌吃飯,師妹對(duì)我旁邊的人說(shuō)“我發(fā)現(xiàn)你白了好多哦”,我暈啊明顯是說(shuō)我黑嘛,有資本當(dāng)綠葉做襯托的工作啦。
?????? 終于下個(gè)星期要回部門(mén)歸隊(duì)啦,在商務(wù)吧這里真是閑的無(wú)聊,天天玩那個(gè)弱智到極點(diǎn)的游戲掙積分換飲料,我讀20多年書(shū)不是來(lái)干這個(gè)的,還是給我點(diǎn)事干吧,怎么說(shuō)也得對(duì)得起每個(gè)月的工資啊,我這人還是比較厚道的。
??????






]]>
紅樓夢(mèng)http://m.tkk7.com/mphome/archive/2009/09/02/293647.html昨夜人生昨夜人生Wed, 02 Sep 2009 10:56:00 GMThttp://m.tkk7.com/mphome/archive/2009/09/02/293647.htmlhttp://m.tkk7.com/mphome/comments/293647.htmlhttp://m.tkk7.com/mphome/archive/2009/09/02/293647.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/293647.htmlhttp://m.tkk7.com/mphome/services/trackbacks/293647.html

經(jīng)學(xué)家看見(jiàn)《易》
道學(xué)家看見(jiàn)淫
才子看見(jiàn)纏綿
革命家看見(jiàn)排滿(mǎn)
流言家看見(jiàn)宮闈秘事

]]>
毛瓜瓜征婚記http://m.tkk7.com/mphome/archive/2009/08/09/290473.html昨夜人生昨夜人生Sun, 09 Aug 2009 15:26:00 GMThttp://m.tkk7.com/mphome/archive/2009/08/09/290473.htmlhttp://m.tkk7.com/mphome/comments/290473.htmlhttp://m.tkk7.com/mphome/archive/2009/08/09/290473.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/290473.htmlhttp://m.tkk7.com/mphome/services/trackbacks/290473.html閱讀全文

]]>
強(qiáng)迫自己的三個(gè)程度:堅(jiān)持,習(xí)慣,信仰http://m.tkk7.com/mphome/archive/2009/07/28/288820.html昨夜人生昨夜人生Tue, 28 Jul 2009 15:39:00 GMThttp://m.tkk7.com/mphome/archive/2009/07/28/288820.htmlhttp://m.tkk7.com/mphome/comments/288820.htmlhttp://m.tkk7.com/mphome/archive/2009/07/28/288820.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/288820.htmlhttp://m.tkk7.com/mphome/services/trackbacks/288820.html1.堅(jiān)持,很費(fèi)力。為什么要堅(jiān)持?有點(diǎn)強(qiáng)迫的意思,因?yàn)橐鲂┳屪约焊械讲凰只蛑辽偈遣荒敲辞樵傅氖?,所以需要?jiān)持。
2.習(xí)慣,習(xí)慣更像條件反射,形成了習(xí)慣,不需要理由就會(huì)想要去執(zhí)行,這個(gè)輕松點(diǎn)。
3.信仰,可以為之不惜一切的玩意。這個(gè)比較強(qiáng)悍了,比如舍身炸碉堡,舍身堵?lián)屟?,舍身?dāng)炸彈,舍身開(kāi)飛機(jī)撞大樓之類(lèi)的??梢哉f(shuō)這個(gè)是極端了,有信仰的人,我們有時(shí)候叫他們英雄,有時(shí)候叫他們恐怖分子。

1.如果你在堅(jiān)持做某件事,其實(shí)你很脆弱,你在強(qiáng)迫自己做一件事,因?yàn)槟阈睦镉幸粋€(gè)度,此時(shí)這個(gè)度大于這件需要堅(jiān)持的事,如果有某件事物干擾,超越了這個(gè)度呢?就出現(xiàn)所謂的堅(jiān)持不下去了。
2.如果你習(xí)慣于做某件事,這時(shí)候潛意識(shí)里無(wú)理由就要做這件事,自動(dòng),條件反射,基本上不會(huì)不爽,可是,如果有意識(shí)覺(jué)得某樣?xùn)|西超越這個(gè)習(xí)慣,這個(gè)習(xí)慣就被打破了,所以還是度的問(wèn)題。
3.如果你已經(jīng)形成某種信仰,真正的堅(jiān)信不移,你就可怕了,你的度是無(wú)窮大,給定一個(gè)任意大的理由,卻總存在一個(gè)更大的理由,去執(zhí)行自己的信仰,毫不動(dòng)搖。

所以,信仰>習(xí)慣>堅(jiān)持。
……

傳說(shuō),看客們有70%會(huì)相信以上論調(diào),5%會(huì)因此改變自己,只有若干人會(huì)建立自己的信仰。



]]>
感覺(jué)不再那么younghttp://m.tkk7.com/mphome/archive/2009/07/19/287375.html昨夜人生昨夜人生Sun, 19 Jul 2009 15:08:00 GMThttp://m.tkk7.com/mphome/archive/2009/07/19/287375.htmlhttp://m.tkk7.com/mphome/comments/287375.htmlhttp://m.tkk7.com/mphome/archive/2009/07/19/287375.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/287375.htmlhttp://m.tkk7.com/mphome/services/trackbacks/287375.html???????? 培訓(xùn)的包括技術(shù)線(xiàn)和客戶(hù)線(xiàn),一起加起來(lái)都有35個(gè)人。就我們?nèi)ツ陮?shí)習(xí)留下來(lái)的5個(gè)人算老頭子啦,那些營(yíng)銷(xiāo)經(jīng)理,客戶(hù)經(jīng)理都是20歲出頭,真是年輕啊?,F(xiàn)在的20左右的同學(xué)說(shuō)話(huà)真是雷人,碰到我旁邊的男的一上來(lái)就說(shuō)“你看起來(lái)好老哦,多大啦”,那個(gè)牛啊,這說(shuō)話(huà)直接把人家逼到墻角嘛,還沒(méi)完呢同樣也是跟去年一起實(shí)習(xí)的那個(gè)女的,上來(lái)直接就叫阿姨,有沒(méi)有搞錯(cuò)人家還是靚女啦,說(shuō)話(huà)也分個(gè)對(duì)象嘛。
?????????看到今年過(guò)來(lái)的10屆的實(shí)習(xí)生,就想起了去年我們實(shí)習(xí)的時(shí)候,喳喳眼一年就過(guò)去啦。感覺(jué)這屆來(lái)的整體上好像沒(méi)有我們?nèi)ツ陙?lái)的那么強(qiáng),今年男女分配很和諧嘛,一半男一半女,還是領(lǐng)導(dǎo)有水平。世界還真是小,我老叫成都的同學(xué)來(lái)我這實(shí)習(xí),結(jié)果那頭豬沒(méi)機(jī)會(huì)過(guò)來(lái),他同一個(gè)導(dǎo)師的跑過(guò)來(lái)啦,還有去年實(shí)習(xí)回家火車(chē)上碰上的軟件學(xué)院的師弟,一起聊了會(huì)天以后都沒(méi)怎么來(lái)往,今年也跑過(guò)來(lái)實(shí)習(xí)啦,還一眼就認(rèn)出我來(lái)了,呵我有給他留下這么深的印象嘛,可惜不是個(gè)女的。
??????? 還有記得下一次歡迎新同事時(shí),每個(gè)人先來(lái)三杯酒,雖然不知道以前有沒(méi)有哈(那些人說(shuō)有估計(jì)是騙我的),反正我是喝了,這個(gè)傳統(tǒng)我一定記得發(fā)揚(yáng)光大。
?????????
???????

]]>
【轉(zhuǎn)】忽悠新解http://m.tkk7.com/mphome/archive/2009/07/11/286407.html昨夜人生昨夜人生Sat, 11 Jul 2009 15:25:00 GMThttp://m.tkk7.com/mphome/archive/2009/07/11/286407.htmlhttp://m.tkk7.com/mphome/comments/286407.htmlhttp://m.tkk7.com/mphome/archive/2009/07/11/286407.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/286407.htmlhttp://m.tkk7.com/mphome/services/trackbacks/286407.html政府忽悠百姓,叫政策;  
百姓忽悠政府,叫犯罪;  
領(lǐng)導(dǎo)忽悠百姓,叫號(hào)召;  
百姓忽悠領(lǐng)導(dǎo),叫搗亂;  
領(lǐng)導(dǎo)忽悠領(lǐng)導(dǎo),叫交易;  
百姓忽悠百姓,叫生意;  
男人忽悠女人,叫調(diào)戲;  
女人忽悠男人,叫勾引;

]]>
上班一星期http://m.tkk7.com/mphome/archive/2009/07/11/286389.html昨夜人生昨夜人生Sat, 11 Jul 2009 11:27:00 GMThttp://m.tkk7.com/mphome/archive/2009/07/11/286389.htmlhttp://m.tkk7.com/mphome/comments/286389.htmlhttp://m.tkk7.com/mphome/archive/2009/07/11/286389.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/286389.htmlhttp://m.tkk7.com/mphome/services/trackbacks/286389.html?????????? 不得不罵罵學(xué)院那些吃飯不干正事的老師,發(fā)個(gè)派遣證唄,還紙張打印錯(cuò)誤,弄得我晚報(bào)道一天,來(lái)了后才知道不只是少一天工資啊。早一天來(lái)前半年的超市卡,洗衣卡都有份,哎悔死!總體來(lái)說(shuō)住宿條件還是不錯(cuò),現(xiàn)在一個(gè)人住原來(lái)寢室這么大的一個(gè)單間,有空調(diào)有熱水有木床,就是少了衣柜和洗衣機(jī)??照{(diào)那個(gè)質(zhì)量好啊,搞得晚上冷得都可以洗熱水澡,不錯(cuò)吧。當(dāng)然也有麻煩事,第一天大早起來(lái)就開(kāi)始修馬桶,問(wèn)人家都說(shuō)這個(gè)是獨(dú)立生活的第一課,看來(lái)我趕上得還真是及時(shí)啊。
?????????? 一來(lái)什么東西都不全,就得花錢(qián)買(mǎi)這個(gè)買(mǎi)那個(gè),現(xiàn)在還真是窮,公司也不預(yù)支點(diǎn)工資給我,浪費(fèi)那個(gè)錢(qián)給我們買(mǎi)這個(gè)保險(xiǎn)那個(gè)保險(xiǎn),看得那個(gè)保險(xiǎn)的賠償費(fèi)都是10萬(wàn),20萬(wàn),弄得我都想搞個(gè)工傷直接去領(lǐng)錢(qián)得啦。
?????????????到zh不得不去去它的海濱浴場(chǎng),特別是在天氣不好的時(shí)候去景色更好,海天一線(xiàn)。雖然水不是那么清澈,但對(duì)于我這種不常看海的人還是非常滿(mǎn)足的,我這人要求低嘛。海灘當(dāng)然不能不提到游泳,我就只是去看看,雖然原來(lái)小時(shí)候還學(xué)過(guò)游泳,現(xiàn)在都不怎么愛(ài)游啦,一個(gè)是技巧差不多都忘了,二呢我有近視嘛,游泳又不能帶眼鏡,那人家能看我不能看別人,多吃虧啊,還是帶上眼鏡在旁邊看別人比較爽,嘿。
????????????第一個(gè)星期的工作基本是實(shí)習(xí),斌哥直接把我弄到體驗(yàn)館去了。真的是非常忙碌,第一天同事帶我走了幾遍體驗(yàn)館,發(fā)些資料給我看,第二天就得要我?guī)?lái)賓做講解,俗稱(chēng)接客。要講解完體驗(yàn)館基本要花一個(gè)半鐘頭的時(shí)間,這一個(gè)半時(shí)間內(nèi)基本上是你一個(gè)人再說(shuō),對(duì)于才學(xué)過(guò)一天的人,難度還真是不小,但誰(shuí)叫我是undergraduate呢,還好基本beyong my ability。本人口才還OK,學(xué)習(xí)能力也不錯(cuò),連續(xù)四天接客四次,而且接客對(duì)象的層次也逐步提升,由開(kāi)始的學(xué)生,變成尊敬的vip客戶(hù),某工業(yè)集團(tuán)部長(zhǎng),到最后的地方文化部局長(zhǎng),效果還不錯(cuò),說(shuō)不定我還真的是有導(dǎo)游的潛力。
???????????下星期就開(kāi)始公司培訓(xùn),接下來(lái)應(yīng)該是會(huì)很忙,每天寫(xiě)總結(jié),早上再做匯報(bào),哎這套名堂公司最喜歡搞了,沒(méi)辦法只能自己調(diào)整習(xí)慣啦。先清空大腦,準(zhǔn)備接受洗腦。

]]>
開(kāi)路走人啦http://m.tkk7.com/mphome/archive/2009/06/30/284692.html昨夜人生昨夜人生Mon, 29 Jun 2009 16:58:00 GMThttp://m.tkk7.com/mphome/archive/2009/06/30/284692.htmlhttp://m.tkk7.com/mphome/comments/284692.htmlhttp://m.tkk7.com/mphome/archive/2009/06/30/284692.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/284692.htmlhttp://m.tkk7.com/mphome/services/trackbacks/284692.html??????? 畢業(yè)前幾天精神基本處于恍惚狀態(tài),大部分由于酒精過(guò)度的原因,發(fā)現(xiàn)喝多了竟然大腿都會(huì)生痛,嘿。畢業(yè)聚餐上實(shí)在太高興了,個(gè)人發(fā)言時(shí)基本上講什么都是不太記得啦,毫無(wú)條理性而且站著都是東到西歪的,丟臉?。?br />?????? 最近聽(tīng)到最多的話(huà)就是“一路走好”,不管是老師同學(xué)都這么講,嘿怎么聽(tīng)著像送我上路的感覺(jué),改改口氣啦"一路好走"一點(diǎn)歧義都沒(méi)有的。
?????? 寫(xiě)不了頭好昏啊,總之祝720各位今天許的愿大家都實(shí)現(xiàn)。

?? A DO:
?? 1.好好工作
?? 2.以結(jié)婚為目的找一個(gè)女朋友,解決個(gè)人問(wèn)題。
?? 3.多運(yùn)動(dòng),成為一個(gè)“肌肉男”。
?? 濤哥:
?? 1.租一個(gè)大大的房子,大家來(lái)廣州好好落腳。
?? 2.好好掙錢(qián),為成家做準(zhǔn)備。
?? 3.還債。
?? 濤嫂:
?? 1.掙錢(qián)。
?? 2.掙錢(qián)。
?? 3.還是掙錢(qián)。
?? 韓老大:
?? 1.吃遍公司附近的餐館。
?? 2.還Banner的¥735.00元。
???3.半年內(nèi)保持單身。
?? 老毛:
?? 1.找一女朋友解決單身問(wèn)題,首當(dāng)其沖。
?? 2.繼續(xù)彩票事業(yè),多買(mǎi)多賺,以500W和LAMBORGHINI為目標(biāo)。
?? 3.任勞任怨,踏實(shí)工作。



]]>
哎,真郁悶http://m.tkk7.com/mphome/archive/2009/06/24/283956.html昨夜人生昨夜人生Wed, 24 Jun 2009 08:10:00 GMThttp://m.tkk7.com/mphome/archive/2009/06/24/283956.htmlhttp://m.tkk7.com/mphome/comments/283956.htmlhttp://m.tkk7.com/mphome/archive/2009/06/24/283956.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/283956.htmlhttp://m.tkk7.com/mphome/services/trackbacks/283956.html???????? 昨天打電話(huà)給先上班的同事了解情況,結(jié)果更讓我瘋狂,居然把我掉部門(mén)啦,現(xiàn)在換到的部門(mén)的業(yè)務(wù)我真是一點(diǎn)都不熟悉的,打個(gè)比方就是原來(lái)我是搞軟件的,現(xiàn)在弄得我去搞硬件,原因說(shuō)是現(xiàn)在3G網(wǎng)建設(shè)緊張,某部門(mén)需求人員協(xié)調(diào)工作,老兄啊你們要調(diào)人也調(diào)個(gè)熟悉業(yè)務(wù)的過(guò)去啊,調(diào)我過(guò)去還是不是要花老長(zhǎng)的時(shí)間培訓(xùn)。
???????? 靜下心來(lái)分析一下,換部門(mén)對(duì)我應(yīng)該說(shuō)是有弊有利,好處在于:詳細(xì)了解通信知識(shí),實(shí)踐操作基站,對(duì)以后的發(fā)展應(yīng)該是有好處的,從經(jīng)濟(jì)角度來(lái)看的話(huà)應(yīng)該一年也會(huì)多一兩萬(wàn)塊錢(qián)。敝處:什么都不懂要從頭開(kāi)始學(xué),上手要慢,工作可能會(huì)更辛苦。考,就不是學(xué)新東西嘛,老子也是從小學(xué)一直念過(guò)來(lái)的,怕個(gè)屁啊,學(xué)就學(xué)。
???????? 23號(hào)照了畢業(yè)照,天公不作美,照著照著就下大雨,搞得都沒(méi)怎么和導(dǎo)師照兩張(人家看著下雨就開(kāi)著沃爾沃走人啦),廣東這邊照畢業(yè)照都是拉家里人一起過(guò)來(lái)的,這傳統(tǒng)還正不錯(cuò)看上去挺溫馨的。 畢業(yè)算起來(lái)花費(fèi)還真是不少,去了一趟鳳凰1200多,給導(dǎo)師買(mǎi)個(gè)zippo600元,吃飯估計(jì)又得500多吧。丟說(shuō)的好錢(qián)嘛不是考省出來(lái)的,是考掙出來(lái)的,但問(wèn)題是現(xiàn)在我也掙不出來(lái)啊,嘿嘿。
?????????? 7月1號(hào)走人,得趕緊把該辦的辦完,銷(xiāo)卡,領(lǐng)證,請(qǐng)人吃飯等,最好一個(gè)都不能少!
????

]]>
鳳凰,張家界旅游http://m.tkk7.com/mphome/archive/2009/06/21/283463.html昨夜人生昨夜人生Sun, 21 Jun 2009 09:05:00 GMThttp://m.tkk7.com/mphome/archive/2009/06/21/283463.htmlhttp://m.tkk7.com/mphome/comments/283463.htmlhttp://m.tkk7.com/mphome/archive/2009/06/21/283463.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/283463.htmlhttp://m.tkk7.com/mphome/services/trackbacks/283463.html???????? 苗寨回來(lái)后,人也都走不動(dòng),旅館的老板還想介紹其他的苗寨叫我們?nèi)ネ?,?dāng)我們是白癡啊肯定不去啦。接下來(lái)就分開(kāi)行動(dòng)在古城里亂逛,古城說(shuō)真的true heart是很漂亮。中間一條長(zhǎng)長(zhǎng)的漓江穿過(guò),岸的兩旁都是一些古式的閣樓,要是情侶來(lái)意境就更好。晚上的古城就更加熱鬧,小攤小販啊都跑出來(lái),10點(diǎn)過(guò)后古樓上的酒吧就響個(gè)不停,伴著微風(fēng)喝著啤酒再看看旁邊路過(guò)的美女,一個(gè)字爽啊。反正覺(jué)得來(lái)景點(diǎn)游玩的美女就特別多,看一個(gè)是一個(gè),還很多是幾個(gè)女人一起游玩的。
??????? 在古城待了兩天就覺(jué)得有些膩了,也不是我一個(gè)人有這種看法,大家都這么覺(jué)得,古城有一些商業(yè)開(kāi)發(fā)過(guò)度啦。岸邊兩旁太多商品店,搞得有點(diǎn)像購(gòu)物街,而且買(mǎi)的東西都非常的同質(zhì)化,基本上賣(mài)的就是銀器,刀,襯衫,血耙鴨啦。小商販秉著宰一個(gè)是一個(gè)原則,亂開(kāi)價(jià),你要是想買(mǎi)的話(huà)可以40%就可以拿下。我就買(mǎi)了幾只血耙鴨回家,但后來(lái)去張家界車(chē)上太熱鴨好像都?jí)牧耍俸僮约憾紱](méi)吃全部送人啦,喔吼吼。
????????去張家界本來(lái)不是在我們的旅游計(jì)劃之內(nèi)的,打算是在鳳凰多玩幾天再在回家的。結(jié)算一下總體花費(fèi)大部分是花在路程上了,不去一趟張家界不是很劃不來(lái),粗俗一點(diǎn)形容就是“人都自宮了,還能不練葵花寶典”。張家界之旅于是就在匆促之間決定下來(lái)。
????????有趣的是人家去張家界玩得開(kāi)心是因?yàn)榫包c(diǎn)漂亮,心情愉悅等等之類(lèi),嘿我們不同我們?nèi)埣医缤嬉餐﹂_(kāi)心,但這種開(kāi)心來(lái)自于和導(dǎo)游起哄,抬杠。學(xué)生嘛都沒(méi)什么錢(qián),報(bào)了張家界旅游團(tuán),原來(lái)是440一位,我們講價(jià)搞成了320一位,心里還挺美。到了張家界玩了第一天,就發(fā)現(xiàn)不對(duì)勁了,到了一個(gè)景點(diǎn)還沒(méi)玩兩分鐘,導(dǎo)游就說(shuō)時(shí)間不夠了趕緊拍照,要不下山?jīng)]飯吃了。開(kāi)始我們還真以為是哦可能景點(diǎn)很多,時(shí)間確實(shí)比較緊,趕緊拍玩兩張照就走人。結(jié)果到了山下面,總共游玩時(shí)間3個(gè)鐘頭都不到,接下來(lái)導(dǎo)游就開(kāi)始拉著我們?nèi)ベ?gòu)物啦,還真是種類(lèi)繁多啊,茶葉,洗腳,珠寶,涼果,牛肉,刀具等等。。。。一直搞到下午6點(diǎn)半,我考搞得老子火大發(fā)了。第二天游玩就不那么好說(shuō)了,導(dǎo)游他說(shuō)他的我們搞我們自己的,玩得慢點(diǎn)你還能剁我兩刀。做這個(gè)導(dǎo)游還真是要臉皮厚,當(dāng)然購(gòu)物點(diǎn)他還是要拖我們?nèi)?,我們都不下?chē)他就一個(gè)個(gè)來(lái)說(shuō),這本事哎我是服了。我們也不爽本來(lái)還欠旅行團(tuán)1000多,正好導(dǎo)游也不知道,我們也裝傻,直到最后也沒(méi)給。
???????? 張家界嘛感覺(jué)是沒(méi)有鳳凰好玩,當(dāng)然可能也是我們報(bào)的這個(gè)團(tuán)的問(wèn)題,旅游團(tuán)變成了購(gòu)物團(tuán),整個(gè)一個(gè)變形金剛。有些完全是在扯淡,10步一個(gè)景點(diǎn),你說(shuō)那些山有什么看的,他還硬給每個(gè)山取了個(gè)名字,什么八戒娶親啊,觀音送子啊等,我是一個(gè)都沒(méi)看出來(lái),問(wèn)導(dǎo)游人家說(shuō)這個(gè)嘛“三分靠外形,七分靠想象”。景點(diǎn)照相也很有意思,基本上屬于流水線(xiàn)操作,大家一個(gè)一個(gè)上,“1,2,3好,下一個(gè)”,回來(lái)整理相片都搞得像照相館里出來(lái)的,背景一模一樣的。
????????? 玩完張家界我就直接回家,這里要強(qiáng)烈bs一下某幾個(gè)同學(xué)自己錢(qián)又不帶,都向我借錢(qián)弄得我回家的錢(qián)都不夠。轉(zhuǎn)到長(zhǎng)沙本來(lái)計(jì)劃住一晚,在長(zhǎng)沙逛逛再回南昌的,現(xiàn)在只能買(mǎi)凌晨4點(diǎn)的火車(chē)回家。晚上8點(diǎn)到的長(zhǎng)沙,要坐到早上4點(diǎn)上火車(chē),恩這個(gè)辛苦我記得,那幾個(gè)人都躲不掉。在長(zhǎng)沙逛到12點(diǎn)就郁悶啦,還有4個(gè)多小時(shí)干嘛呢,天氣又熱跑到24小時(shí)KFC躲涼去,買(mǎi)了杯可樂(lè),找靠窗一坐。這世界上還真什么人都有,旁邊的一個(gè)阿哥,咚咚的跑過(guò)來(lái)要跟我聊天,聊就聊北。我想我跟你不熟,聊天的內(nèi)容基本上就是我說(shuō)說(shuō)廣東的發(fā)展啊,你說(shuō)說(shuō)湖南好玩的地方啊等等。那位阿哥不接我話(huà)茬,直接就聊他的感情問(wèn)題,而且聊的內(nèi)容非常細(xì)致,我塞這人這么open的,估計(jì)是憋屈太久啦,這種事找熟人說(shuō)不太好。回南昌后,他還給我打過(guò)電話(huà)匯報(bào)事情進(jìn)展,哎這種真性情男人難得啊,祝好運(yùn)吧!
????????? 好不容易回趟家,把本科同學(xué)約出來(lái)聚聚,4年啊大家都變化不少啊,我還在學(xué)校里混著,慚愧慚愧。特別佩服慶銘老兄敢跳出來(lái)自己?jiǎn)胃?,這份激情沖勁自愧不如,感覺(jué)可能以后最有米的就要算這位老兄啦。"給自己一次機(jī)會(huì)",這句話(huà)反正我現(xiàn)在是不敢說(shuō)。好累好累,跟寫(xiě)論文樣的,就是廢話(huà)多。這天氣還真是熱,在宿舍都像洗桑拿,還是跑地鐵里去躲涼去。學(xué)校趕緊地發(fā)派遣證,我要去zh,我要空調(diào)!!
?????????
?
?????????









?????????
?????????
?????????

]]>
畢業(yè)安排http://m.tkk7.com/mphome/archive/2009/06/09/281013.html昨夜人生昨夜人生Tue, 09 Jun 2009 13:48:00 GMThttp://m.tkk7.com/mphome/archive/2009/06/09/281013.htmlhttp://m.tkk7.com/mphome/comments/281013.htmlhttp://m.tkk7.com/mphome/archive/2009/06/09/281013.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/281013.htmlhttp://m.tkk7.com/mphome/services/trackbacks/281013.html???????? 明天所里的同學(xué)集體去湖南鳳凰旅行,大家興致還是挺濃的,唯一的缺憾就是女生太少,哎這種情況一次次在工科學(xué)生旁邊發(fā)生,慘啊。聽(tīng)說(shuō)苗族的mm還是很水靈的,就近解渴和她們湊合湊合。
??????? 看看玩完后時(shí)間夠不夠,還是回家一趟吧。以后上班時(shí)間就不太好安排了,再說(shuō)還要向大姨夫問(wèn)個(gè)事,白白浪費(fèi)這么好個(gè)機(jī)會(huì),怪不好意思,回去解釋解釋?zhuān)僬f(shuō)有些事也不是我一個(gè)人弄說(shuō)了算的。
??????? 23號(hào)回來(lái)后畢業(yè)照,,接下來(lái)就是請(qǐng)老師,所里同學(xué)大家一起吃飯,還有個(gè)校長(zhǎng)捻絮儀式,學(xué)校還不錯(cuò)這點(diǎn)學(xué)人家外國(guó)的辦得挺像模像樣的,就辛苦啦人家校長(zhǎng)大人,一整天重復(fù)一套動(dòng)作,握手,捻絮,發(fā)證書(shū),微笑,擺pose,最后camera,估計(jì)今年得5000遍,換個(gè)體力不好的不搞慘才怪。還想看看有沒(méi)有機(jī)會(huì)請(qǐng)別人吃個(gè)飯,其實(shí)也不想怎么的,禮貌而已嘛。
??????? 畢業(yè)arrange差不多就這樣啦,很簡(jiǎn)單也有些無(wú)聊,要問(wèn)我讀研期間最大的遺憾是什么你就可以去換個(gè)問(wèn)法“本科期間最大的遺憾是什么"因?yàn)榇鸢付际且粯拥模袝r(shí)我也感到無(wú)語(yǔ),按常理來(lái)說(shuō)真的不至于啊。下次弄個(gè)面試版的調(diào)查,例如研究生期間做過(guò)最成功的一件事什么,最后悔的是什么,當(dāng)然不會(huì)像面試時(shí)那么冠冕彈簧,盡量做到不虛偽,恩這個(gè)一定得做。
??????? 另外蘇打綠的那個(gè)小情歌還正難唱,嚴(yán)重懷疑那個(gè)叫青什么峰的是不是個(gè)男人。


]]>
人物志http://m.tkk7.com/mphome/archive/2009/06/08/280585.html昨夜人生昨夜人生Mon, 08 Jun 2009 03:48:00 GMThttp://m.tkk7.com/mphome/archive/2009/06/08/280585.htmlhttp://m.tkk7.com/mphome/comments/280585.htmlhttp://m.tkk7.com/mphome/archive/2009/06/08/280585.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/280585.htmlhttp://m.tkk7.com/mphome/services/trackbacks/280585.html

澳門(mén)仔自歸大陸后,身形愈發(fā)消瘦,思循古法于入冬時(shí)加以補(bǔ)養(yǎng)。【注意身形愈發(fā)消瘦不是去了澳門(mén)才造成的,沒(méi)看到我天天堅(jiān)持跑步啊,鍛煉結(jié)果Keep Fit,知不知啊】小三川之味,已去數(shù)次,漸厭之,眾人遂奔大巴適。為犒此仔拔毛之舉,夜敲此篇老毛,為RICA人物列傳開(kāi)刀之作【很榮幸啊,看來(lái)錢(qián)沒(méi)有白花啊,雖然錢(qián)也是從萬(wàn)惡的 Casino 拿來(lái)的,但誰(shuí)知下次會(huì)不會(huì)再還回去呢】。
???
吾與此猥物同床異枕二載有余,甚悉之。【這話(huà)說(shuō)的,我是和你對(duì)腳,不是同床。反正我是沒(méi)有gay傾向,至于你有沒(méi)有我就不知啦】老毛悄然行至身后,吾不待轉(zhuǎn)首即感猥瑣之氣鋪天蓋地,料定必是此物,老毛訝之?!緦?duì)我如此之關(guān)切,更加證明你的取向有問(wèn)題,以后注意和我保持距離】
???
此君好戴一寵物圈于項(xiàng),名曰健身,實(shí)未見(jiàn)效,【帶鈦白項(xiàng)圈好處有二:1.防止腰肌勞損,知不知腰對(duì)男人的重要性啊。2.美觀,引領(lǐng)時(shí)尚之風(fēng),君不見(jiàn)劉德華也開(kāi)始學(xué)樣了嘛?!糠从凶璐竽X供養(yǎng)之嫌,何以為證?近日老毛言語(yǔ)迥異于常。濤哥、阿杜皆不堪其擾,存滅其肉體而后快之意。老毛以寡敵眾,慷慨應(yīng)對(duì),屢除其自生大規(guī)模殺傷化學(xué)武器保險(xiǎn),置于寢室上風(fēng)處,隨即頹勢(shì)立轉(zhuǎn)。【我有這么殘忍嘛,要怪就怪安踏不透氣,無(wú)心之作?!坑喔`以為此乃老毛漸歸本性之兆。
???
老毛長(zhǎng)于言辯,眼光敏銳,領(lǐng)風(fēng)氣之先(數(shù)度拉吾下水),思維極為跳躍,擅傷女仔之心(略去數(shù)萬(wàn)言。。。),而討大媽歡心?!痉戳朔戳耍瑥膩?lái)都是我被別人挫傷?!棵湍?span lang="EN-US">CALL
猥瑣毛,頗為傳神。【保留申辯的權(quán)利】此仔將混跡于珠海某著名CM公司,余甚憂(yōu)之。澳門(mén)場(chǎng)暗備此仔諸多劣跡,若這廝任職CM毛總,無(wú)間道恐將由其主演【雖然我玩了5次,大部分是有掙,誰(shuí)知?jiǎng)e人是不是小餌釣大魚(yú)】。。。

PS:
覓兔肉于巴適,半餉而不可得,痛憾之~

【感謝韓老大為我研究生三年做了個(gè)簡(jiǎn)要的總結(jié),雖然大部分不是好話(huà),弄得我都不好到處貼??偸菫槲艺砹讼滤悸?,開(kāi)始寫(xiě)自序了!】



]]>
今天真激動(dòng)http://m.tkk7.com/mphome/archive/2008/05/27/203335.html昨夜人生昨夜人生Tue, 27 May 2008 13:50:00 GMThttp://m.tkk7.com/mphome/archive/2008/05/27/203335.html閱讀全文

]]>
龍應(yīng)臺(tái):你應(yīng)該學(xué)會(huì)不相信---你來(lái)看此花時(shí)(好文)http://m.tkk7.com/mphome/archive/2008/04/27/196492.html昨夜人生昨夜人生Sun, 27 Apr 2008 09:37:00 GMThttp://m.tkk7.com/mphome/archive/2008/04/27/196492.htmlhttp://m.tkk7.com/mphome/comments/196492.htmlhttp://m.tkk7.com/mphome/archive/2008/04/27/196492.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/196492.htmlhttp://m.tkk7.com/mphome/services/trackbacks/196492.html?

二十歲之前相信的很多東西,后來(lái)一件一件變成不相信。

曾經(jīng)相信過(guò)愛(ài)國(guó),后來(lái)知道“國(guó)”的定義有問(wèn)題,通常那循循善誘要你愛(ài)國(guó)的人所定義的“國(guó)”,不一定可愛(ài),不一定值得愛(ài),而且更可能值得推翻。

曾經(jīng)相信過(guò)歷史,后來(lái)知道,原來(lái)歷史的一半是編造。前朝史永遠(yuǎn)是后朝人在寫(xiě),后朝人永遠(yuǎn)在否定前朝,他的后朝又來(lái)否定他,但是負(fù)負(fù)不一定得正,只是累積漸進(jìn)的扭曲變形移位,使真相永遠(yuǎn)掩蓋,無(wú)法復(fù)原。說(shuō)“不容青史盡成灰”,表達(dá)的正是,不錯(cuò),青史往往是要成灰的。指鹿為馬,也往往是可以得逞和勝利的。

曾經(jīng)相信過(guò)文明的力量,后來(lái)知道,原來(lái)人的愚昧和野蠻不因文明的進(jìn)展而消失,只是愚昧野蠻有很多不同的面貌:純樸的農(nóng)民工人、深沉的知識(shí)分子、自信的政治領(lǐng)袖、替天行道的王師,都可能有不同形式的巨大愚昧和巨大野蠻,而且野蠻和文明之間,竟然只有極其細(xì)微、隨時(shí)可以被抹掉的一線(xiàn)之隔。

曾經(jīng)相信過(guò)正義,后來(lái)知道,原來(lái)同時(shí)完全可以存在兩種正義,而且彼此抵觸,冰火不容。選擇其中之一,正義同時(shí)就意味著不正義。而且,你絕對(duì)看不出,某些人在某一個(gè)特定的時(shí)機(jī)熱烈主張某一個(gè)特定的正義,其中隱藏著深不可測(cè)的不正義。

曾經(jīng)相信過(guò)理想主義者,后來(lái)知道,理想主義者往往經(jīng)不起權(quán)力的測(cè)試:一掌有權(quán)力,他或者變成當(dāng)初自己誓死反對(duì)的“邪惡”,或者,他在現(xiàn)實(shí)的場(chǎng)域里不堪一擊,一下就被弄權(quán)者拉下馬來(lái),完全沒(méi)有機(jī)會(huì)去實(shí)現(xiàn)他的理想。理想主義者要有品格,才能不被權(quán)力腐化;理想主義者要有能力,才能將理想轉(zhuǎn)化為實(shí)踐??墒抢硐胫髁x者兼具品格及能力者,幾希。

曾經(jīng)相信過(guò)愛(ài)情,后來(lái)知道,原來(lái)愛(ài)情必須轉(zhuǎn)化為親情才可能持久,但是轉(zhuǎn)化為親情的愛(ài)情,猶如化入杯水中的冰塊---它還是冰塊嗎?

曾經(jīng)相信過(guò)??菔癄€作為永恒不滅的表征,后來(lái)知道,原來(lái)海其實(shí)很容易枯,石,原來(lái)很容易爛。雨水,很可能不再來(lái),滄海,不會(huì)再成桑田。原來(lái),自己腳下所踩的地球,很容易被毀滅。??菔癄€的永恒,原來(lái)不存在。

二十歲之前相信的很多東西,有些其實(shí)到今天也還相信。

譬如國(guó)也許不可愛(ài),但是土地和人可以愛(ài)。譬如史也許不能信,但是對(duì)于真相的追求可以無(wú)止盡。譬如文明也許脆弱不堪,但是除文明外我們其實(shí)別無(wú)依靠。譬如正義也許極為可疑,但是在乎正義比不在乎要安全。譬如理想主義者也許成就不了大事大業(yè),但是沒(méi)有他們社會(huì)一定不一樣。譬如愛(ài)情總是幻滅的多,但是螢火蟲(chóng)在夜里發(fā)光從來(lái)就不是為了保持光。譬如海枯石爛的永恒也許不存在,但是如果一粒沙里有一個(gè)無(wú)窮的宇宙,一剎那里想必也有一個(gè)不變不移的時(shí)間。

那么,有沒(méi)有什么,是我二十歲前不相信的,現(xiàn)在卻信了呢?

有的,不過(guò)都是些最平凡的老生常談。曾經(jīng)不相信“性格決定命運(yùn)”,現(xiàn)在相信了。曾經(jīng)不相信“色即是空”,現(xiàn)在相信了。曾經(jīng)不相信“船到橋頭自然直”,現(xiàn)在有點(diǎn)信了。曾經(jīng)不相信無(wú)法實(shí)證的事情,現(xiàn)在也還沒(méi)準(zhǔn)備相信,但是,有些無(wú)關(guān)實(shí)證的感覺(jué),我明白了,譬如李叔同圓寂前最后的手書(shū):“君子之交,其淡如水,執(zhí)象而求,咫尺千里。問(wèn)余何適,廓爾忘言,華枝春滿(mǎn),天心月圓?!?/p>

相信與不相信之間,彷佛還有令人沉吟的深度。



]]>
<java pitfalls 中文版>讀書(shū)筆記http://m.tkk7.com/mphome/archive/2008/03/03/183563.html昨夜人生昨夜人生Mon, 03 Mar 2008 13:32:00 GMThttp://m.tkk7.com/mphome/archive/2008/03/03/183563.htmlhttp://m.tkk7.com/mphome/comments/183563.htmlhttp://m.tkk7.com/mphome/archive/2008/03/03/183563.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/183563.htmlhttp://m.tkk7.com/mphome/services/trackbacks/183563.html1.父類(lèi)的靜態(tài)方法和最終方法不能被覆蓋。
2.用靜態(tài)方法覆蓋實(shí)例方法是通不過(guò)編譯的
3.String 的intern函數(shù)是將該String放入JVM的常量池中,避免出現(xiàn)String類(lèi)型的多處應(yīng)用。
? 例如 b=a.intern();
?????? a==b 等于TRUE
4.訪(fǎng)問(wèn)被覆蓋的方法,只能用super
5.只能通過(guò)傳遞數(shù)組來(lái)達(dá)到,基本數(shù)據(jù)類(lèi)型數(shù)據(jù)引用的效果。
6.注意clone的深度,當(dāng)要克隆一個(gè)對(duì)象時(shí),若該對(duì)象的內(nèi)部有對(duì)象,則需要將內(nèi)部對(duì)象也clone,也就是主要寫(xiě)clone對(duì)象。
?
?
7.若以對(duì)象作為hashmap的索引值,需要重寫(xiě)該對(duì)象的equal,和hashcode函數(shù)。???????

8.異常,如果對(duì)try{}catch(exception o){}的所有catch情況都考慮到了的話(huà),調(diào)用者就不需要添加catch或throw exception啦

9.文件流: 分為字節(jié)流( 帶Input)和字符流(帶reader)
????????????? 例如FileInputStream??? 例如FileReader
?????????? 字符流不依賴(lài)於編碼,全部采用unicode編碼
?????????? 如果需要支持國(guó)際化的話(huà)就需要采用直接流啦 。
?????????? 示例:? FileInputStream is=new FileInputStream(f);
?????????????????? InputStreamReader r=new InputSteamReader(is,"utf-8");

? 另外可以使用System.getProperty("file.endcoding")來(lái)獲得系統(tǒng)的默認(rèn)編碼
10,數(shù)組和矢量Vector比較? 遍歷Vector比較慢,因?yàn)閂ector是線(xiàn)程安全的,獲取值時(shí)采用了同步化,解決方法在遍歷是toArray()
??? 例外ArrayList具有vector的動(dòng)態(tài)增加長(zhǎng)度的特點(diǎn),但ArrayList是非同步的矢量。
11.在循環(huán)體內(nèi)鏈接字符串,使用StringBuffer效率更高;其他情況下使用+。



]]>
軟件最大的追求是什么? (轉(zhuǎn)載)http://m.tkk7.com/mphome/archive/2008/02/25/181984.html昨夜人生昨夜人生Mon, 25 Feb 2008 06:11:00 GMThttp://m.tkk7.com/mphome/archive/2008/02/25/181984.htmlhttp://m.tkk7.com/mphome/comments/181984.htmlhttp://m.tkk7.com/mphome/archive/2008/02/25/181984.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/181984.htmlhttp://m.tkk7.com/mphome/services/trackbacks/181984.html前段時(shí)間讀了《軟件的最大追求是什么》,擊節(jié)叫好,深以為然,雖然該文章很多地方顯得有點(diǎn)極端。

如今的軟件系統(tǒng)越來(lái)越復(fù)雜,如果軟件的結(jié)構(gòu)不好會(huì)影響軟件的可維護(hù)性,重構(gòu)代碼是一件極其痛苦的事情。

關(guān)于軟件的復(fù)雜性問(wèn)題,我做了一些思考:

1) Cyclomatic Complexity (圈復(fù)雜性 = number of decision points +1    其中number of decision points是指一個(gè)if else之類(lèi)的條件判斷語(yǔ)句 (引自《軟件的最大追求是什么》)

if else 語(yǔ)句可以被行為模式/策略模式代替,不妨看下列的例子:

假設(shè)我們要根據(jù)條件判斷來(lái)完成不同的行為,用if else 是這樣寫(xiě)的:

main() {

if(case A){

//do with strategy A

}else(case B){

//do with strategy B

}else(case C){

//do with strategy C

}

}



用策略模式則如下:

class runner{

do();

}



class A extends runner{

do(){

//do with strategy A

}

}



class B extends runner{

do(){

//do with strategy B

}

}



class C extends runner {

do(){

//do with strategy C

}

}



main(){

runner.do();

}



用了策略模式后main()中的語(yǔ)句的確簡(jiǎn)單多了,再也看不到該死的if else了^_^酷~~~



可實(shí)際上是這樣簡(jiǎn)單嗎???仔細(xì)研究一下上面的代碼就能看出問(wèn)題出來(lái),首先這兩段代碼中的A、B、C的實(shí)際意義是不一樣的:第一段代碼中ABC代表的是某一個(gè)邏輯條件的值而第二段中的ABC則是具體的類(lèi);第二段得到如此簡(jiǎn)化的前提是它得到的邏輯條件就是一個(gè)類(lèi);如果得到的仍然只是一個(gè)邏輯條件,那么為了達(dá)到代碼簡(jiǎn)化的效果,必須由另一個(gè)類(lèi)(或方法)完成這種邏輯條件到具體類(lèi)的轉(zhuǎn)換,會(huì)出現(xiàn)類(lèi)似下列的代碼

class RunnerFactory{

runner getInstante(case){

if (case A) return new A();

else if (case B) return new B();

else if (case C) return new C(); } }



從測(cè)試的角度來(lái)說(shuō),兩者的測(cè)試分支都是3,復(fù)雜度相同,而第二種方法在很多的時(shí)候貌似還要測(cè)試借口的有效性。用策略模式還有一個(gè)缺點(diǎn)就是會(huì)使系統(tǒng)中的類(lèi)的數(shù)量大大的增加,如上的例子,采用if else類(lèi)的數(shù)量為1,而采用策略模式的類(lèi)個(gè)數(shù)為5個(gè)或6個(gè)(主要取決于邏輯映射是否用單獨(dú)的類(lèi))。

如果邏輯判斷的條件有三個(gè),每個(gè)邏輯條件有三種可能的話(huà),用策略模式系統(tǒng)至少會(huì)增加10個(gè)新類(lèi);如果條件更多的話(huà)類(lèi)的個(gè)數(shù)也會(huì)更多 這么看來(lái)GOF的策略模式還要它干嘛??

當(dāng)然不是,策略模式在很多情況下是一種非常好的解決方案。

這還要從if else 語(yǔ)句造成程序復(fù)雜以至難以維護(hù)的真正原因說(shuō)起。就我個(gè)人的感覺(jué)真正造成if else語(yǔ)句難以維護(hù)的原因是每一個(gè)邏輯分支中的處理語(yǔ)句過(guò)長(zhǎng)。比如我現(xiàn)在工作中維護(hù)的代碼,常常一個(gè)條件下面的業(yè)務(wù)處理語(yǔ)句有兩三千行,每次我光確定某個(gè)邏輯分支的結(jié)束位置就要找半天,頭暈-_-!。如果是多層條件的話(huà)情況就更糟了。一個(gè)分支就一千多行,幾個(gè)分支上萬(wàn)行自然很難維護(hù)。 if else 語(yǔ)句本質(zhì)上是程序的流程控制語(yǔ)句,而分支中N長(zhǎng)的代碼通常是業(yè)務(wù)處理語(yǔ)句。

行為模式/策略模式就是把流程判斷和業(yè)務(wù)處理進(jìn)行了一次解耦,將業(yè)務(wù)邏輯封裝成一個(gè)個(gè)單獨(dú)的類(lèi)。換句話(huà)說(shuō),行為模式/策略模式并不是不需要if else 語(yǔ)句(事實(shí)上該判斷的還是要判斷),只不過(guò)的換了地方或者是別的代碼幫你做了。另一方面,進(jìn)行邏輯判斷的語(yǔ)句被集中起來(lái)而不是分散在程序的各個(gè)角落,有利于邏輯本身的維護(hù)。策略模式/行為模式還有一個(gè)明顯的好處就是如果新增加了一種狀態(tài),我們只需要新增加一個(gè)策略類(lèi)(同上的ABC)就可以了,避免了在程序中改動(dòng)那些大段大段讓人厭煩的if else 語(yǔ)句。

所以對(duì)于你的程序來(lái)說(shuō)到底是使用設(shè)計(jì)模式還是簡(jiǎn)單的使用if else 關(guān)鍵在于你的程序是否復(fù)雜,有沒(méi)有必要將控制邏輯和業(yè)務(wù)邏輯進(jìn)行解耦。當(dāng)然如果你可以用別的方式實(shí)現(xiàn)解耦也是非常好的。



2) Response for Class(RFC) 當(dāng)一個(gè)類(lèi)和很多其他類(lèi)存在依賴(lài)時(shí),它就變得復(fù)雜甚至難以修改和維護(hù),這樣,RFC值越大,表示你的系統(tǒng)味道越壞。(引自《軟件的最大追求是什么》)



復(fù)雜性是由類(lèi)與類(lèi)之間的依賴(lài)關(guān)系(dependency)造成的。

具體如下所示:

interface Runner;

class A implement runner{ do(){}; }



一個(gè)大型的系統(tǒng)中很多地方用到了runner接口,于是在很多地方出現(xiàn)了如下的相同代碼:

{

Runner r = new A();

r.do();

}



如果因?yàn)槟撤N原因runner接口的實(shí)現(xiàn)類(lèi)改為B,則在所有用到runner接口的地方代碼都要統(tǒng)統(tǒng)改為:

{

//Runner r = new A();

Runner r = new B(); r.do();

}



這些遍布系統(tǒng)各個(gè)角落的改動(dòng)是繁瑣且容易出錯(cuò)的。

于是出現(xiàn)了各種框架和模式,其中最著名的當(dāng)然是IOC(Inversion of Control)反轉(zhuǎn)控制或者稱(chēng)之為依賴(lài)型注射(Dependency Injection) 那些討厭的代碼變成了如下:

{

ApplicationContext ctx = new FileSystemXmlApplicationContext("spring.xml");

Runner r = (Runner)ctx.getBean("Runner");

r.do();

}



這樣我們就不需要對(duì)各個(gè)角落的代碼進(jìn)行維護(hù)了,容器會(huì)自動(dòng)的為我們選擇合適的類(lèi)。

我到覺(jué)得維護(hù)的工作還是我們的,為了讓容器注射入合適的類(lèi),我們必須要維護(hù)一個(gè)叫Spring.xml的配置文件,或者如果你不喜歡配置文件這個(gè)東東的話(huà)(比如偶)就得自己寫(xiě)一個(gè)注冊(cè)類(lèi),將依賴(lài)關(guān)系一一注冊(cè)進(jìn)去。你還要為使用該接口的類(lèi)定義一個(gè)以該接口為參數(shù)的構(gòu)造函數(shù)或者該接口的setter方法,好讓容器可以將實(shí)現(xiàn)類(lèi)順利的注射進(jìn)來(lái)。

該做的還是要做,只不過(guò)換了一個(gè)地方做而已。但就是換了個(gè)地方,實(shí)現(xiàn)了對(duì)依賴(lài)關(guān)系的集中維護(hù)(又是集中),大大的改善了系統(tǒng)的結(jié)構(gòu),明確了不同職責(zé)單位之間的分工。呵呵,有時(shí)自己也極端的覺(jué)得設(shè)計(jì)的工作說(shuō)到底就是解決代碼結(jié)構(gòu)的問(wèn)題^_^



IOC一直是和輕量級(jí)框架聯(lián)系在一起的。所謂的重量級(jí)框架EJB也有實(shí)現(xiàn)相同功能的解決方案:Service Locator Service Locator就是一個(gè)定位器,它維護(hù)了一個(gè)數(shù)據(jù)結(jié)構(gòu)(比如一個(gè)表),通過(guò)這個(gè)定位器你可以準(zhǔn)確的定位到你的接口想要的實(shí)現(xiàn)類(lèi),Service Locator同樣使你免去了改變接口實(shí)現(xiàn)類(lèi)后的維護(hù)惡夢(mèng):

{

Runner r = (Runner)ServiceLocator.lookup("Runner");

r.do();

}



無(wú)論是IOC還是Service Locator都幫助你維護(hù)了類(lèi)之間的依賴(lài)關(guān)系。那么是否我們?cè)诰幊讨幸欢ㄒ媚?,這又是個(gè)權(quán)衡的問(wèn)題,IOC帶來(lái)了很多的好處,不過(guò)我個(gè)人認(rèn)為它的代碼是讓人費(fèi)解的(你根本不知道它做了什么),并且為了用它,一方面你要借助于容器,另一方面你要編寫(xiě)配置文件,要為依賴(lài)型注射提供合適的途徑。

如果你的系統(tǒng)類(lèi)之間的依賴(lài)型錯(cuò)綜復(fù)雜,需求的變化常常導(dǎo)致實(shí)現(xiàn)類(lèi)的變化,同時(shí)你又希望采用測(cè)試驅(qū)動(dòng)的快速開(kāi)發(fā)模式,IOC毫無(wú)疑問(wèn)是一個(gè)完美的解決方案;如果你的系統(tǒng)不存在上述的問(wèn)題,為什么不簡(jiǎn)簡(jiǎn)單單的在程序中寫(xiě)死呢,何苦去維護(hù)一堆配置文件(我所在的開(kāi)發(fā)部門(mén)貌似都比較痛恨配置文件這個(gè)東東)。Service Locator也有很多缺點(diǎn),被罵的最多的就是沒(méi)法快速測(cè)試。

反轉(zhuǎn)控制,即轉(zhuǎn)換控制權(quán)。依賴(lài)關(guān)系控制權(quán)的轉(zhuǎn)換是對(duì)代碼結(jié)構(gòu)的一次重構(gòu),重構(gòu)的目標(biāo)還是解耦,讓不同的職責(zé)代碼集中放到不同的地方,于是程序員可以更加專(zhuān)注的解決特定的問(wèn)題,比如業(yè)務(wù)邏輯。

程序設(shè)計(jì)的發(fā)展就是對(duì)代碼結(jié)構(gòu)的不斷調(diào)整,不斷解耦,讓特定的代碼解決特定的問(wèn)題而不是什么都混在一起。從面向過(guò)程到面向?qū)ο箅y道不是這樣嗎,封裝的本質(zhì)也是解耦。



在實(shí)際問(wèn)題的解決當(dāng)中,最重要的信條就是合適,要記住任何結(jié)構(gòu)的改進(jìn)都會(huì)付出代價(jià),你的改進(jìn)是否值得你為此付出的代價(jià)。比如當(dāng)你做一個(gè)嵌入式程序的時(shí)候你首要考慮的自然是效率問(wèn)題;而如果你做的是一個(gè)ERP產(chǎn)品,在系統(tǒng)設(shè)計(jì)的時(shí)候,光系統(tǒng)的可維護(hù)性問(wèn)題就讓你不得不絞盡腦汁考慮一下代碼的結(jié)構(gòu)。



一句話(huà),只做最對(duì)的。

程序設(shè)計(jì)的最大追求就是在合適的地方做正確的事。

]]>
利用方法名稱(chēng)執(zhí)行方法行為的源代碼http://m.tkk7.com/mphome/archive/2008/02/25/181951.html昨夜人生昨夜人生Mon, 25 Feb 2008 03:48:00 GMThttp://m.tkk7.com/mphome/archive/2008/02/25/181951.htmlhttp://m.tkk7.com/mphome/comments/181951.htmlhttp://m.tkk7.com/mphome/archive/2008/02/25/181951.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/181951.htmlhttp://m.tkk7.com/mphome/services/trackbacks/181951.html

public static void main(String[] args){

CommandLoader cl=new DefaultCommandLoader(new DefaultShowCommand());
cl.excute("executeShowList",null);
}
}

public interface CommandLoader {

void excute(String commandName,Object[] argument);
}


public class DefaultCommandLoader implements CommandLoader {


private ShowCommand showCommand;

private HashMap subCommandMap=new HashMap();

public DefaultCommandLoader(ShowCommand showCommand){
this.showCommand=showCommand;
init();
}


private void init() {

Method[] allMethod=this.showCommand.getClass().getMethods();
for(int i=0;i<allMethod.length;i++){
Method m=allMethod;
if(m.getName().startsWith("execute")){
subCommandMap.put(m.getName(), m);
}
}
}


public void excute(String commandName, Object[] argument) {

Method m=(Method) this.subCommandMap.get(commandName);

if(m==null){
throw new NullPointerException("not found command");
}
try{
m.invoke(this.showCommand,argument);
}
catch(Exception e){
throw new RuntimeException("Load command["+m.getName()+"error");
}
}
}

public interface ShowCommand {


public void executeShowList();

public void excuteShowString();

public void executeShowInteger();

public void executeShowLong();
}

public class DefaultShowCommand implements ShowCommand {

public void excuteShowString() {
System.out.println(String.class.getName());
}

public void executeShowInteger() {
System.out.println(Integer.class.getName());
}

public void executeShowList() {
System.out.println(List.class.getName());
}

public void executeShowLong() {
System.out.println(Long.class.getName());
}

}


]]>
你還在用if else嗎?(轉(zhuǎn)載)http://m.tkk7.com/mphome/archive/2008/02/25/181927.html昨夜人生昨夜人生Mon, 25 Feb 2008 02:57:00 GMThttp://m.tkk7.com/mphome/archive/2008/02/25/181927.htmlhttp://m.tkk7.com/mphome/comments/181927.htmlhttp://m.tkk7.com/mphome/archive/2008/02/25/181927.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/181927.htmlhttp://m.tkk7.com/mphome/services/trackbacks/181927.html傳統(tǒng)思維習(xí)慣分析

  為什么會(huì)業(yè)務(wù)邏輯層使用if else,其實(shí)使用者的目的也是為了重用,但是這是面向過(guò)程編程的重用,程序員只看到代碼重用,因?yàn)樗吹絠f else幾種情況下大部分代碼都是重復(fù)的,只有個(gè)別不同,因此使用if else可以避免重復(fù)代碼,并且認(rèn)為這是模板Template模式。

  他范的錯(cuò)誤是:程序員只從代碼運(yùn)行順序這個(gè)方向來(lái)看待它的代碼,這種思維類(lèi)似水管或串行電路,水沿著水管流動(dòng)(代碼運(yùn)行次序),當(dāng)遇到幾個(gè)分管(子管),就分到這幾個(gè)分管子在流動(dòng),這里就相當(dāng)于碰到代碼的if else處了。

  而使用OO,則首先打破這個(gè)代碼由上向下順序等同于運(yùn)行時(shí)的先后循序這個(gè)規(guī)律,代碼結(jié)構(gòu)不由執(zhí)行循序決定,由什么決定呢?由OO設(shè)計(jì);設(shè)計(jì)模式會(huì)取代這些if else,但是最后總是由一個(gè)Service等總類(lèi)按照運(yùn)行順序組裝這些OO模塊,只有一處,這處可包含事務(wù),一般就是Service,EJB中是Session bean。

  一旦需求變化,我們更多的可能是Service中各個(gè)OO模塊,甚至是只改動(dòng)Service中的OO模塊執(zhí)行順序就能符合需求。

  這里我們也看到OO分離的思路,將以前過(guò)程語(yǔ)言的一個(gè)Main函數(shù)徹底分解,將運(yùn)行順序與代碼其他邏輯分離開(kāi)來(lái),而不是象面向過(guò)程那樣混亂在一起。所以有人感慨,OO也是要順序的,這是肯定的,關(guān)鍵是運(yùn)行順序要單獨(dú)分離出來(lái)。

  是否有if else可以看出你有沒(méi)有將運(yùn)行順序分離到家。

設(shè)計(jì)模式的切入口

  經(jīng)常有人反映,設(shè)計(jì)模式是不錯(cuò),但是我很難用到,其實(shí)如果你使用if else來(lái)寫(xiě)代碼時(shí)(除顯示控制以外),就是在寫(xiě)業(yè)務(wù)邏輯,只不過(guò)使用簡(jiǎn)單的判斷語(yǔ)句來(lái)作為現(xiàn)實(shí)情況的替代者。

   還是以大家熟悉的論壇帖子為例子,如ForumMessage是一個(gè)模型,但是實(shí)際中帖子分兩種性質(zhì):主題貼(第一個(gè)根貼)和回帖(回以前帖子的帖子),這里有一個(gè)樸素的解決方案:
建立一個(gè)ForumMessage,然后在ForumMessage加入isTopic這樣判斷語(yǔ)句,注意,你這里一個(gè)簡(jiǎn)單屬性的判斷引入,可能導(dǎo)致你的程序其他地方到處存在if else 的判斷。

  如果我們改用另外一種分析實(shí)現(xiàn)思路,以對(duì)象化概念看待,實(shí)際中有主題貼和回帖,就是兩種對(duì)象,但是這兩種對(duì)象大部分是一致的,因此,我將ForumMessage設(shè)為表達(dá)主題貼;然后創(chuàng)建一個(gè)繼承ForumMessage的子類(lèi)ForumMessageReply作為回帖,這樣,我在程序地方,如Service中,我已經(jīng)確定這個(gè)Model是回帖了,我就直接下溯為ForumMessageReply即可,這個(gè)有點(diǎn)類(lèi)似向Collection放入對(duì)象和取出時(shí)的強(qiáng)制類(lèi)型轉(zhuǎn)換。通過(guò)這個(gè)手段我消滅了以后程序中if else的判斷語(yǔ)句出現(xiàn)可能。

  從這里體現(xiàn)了,如果分析方向錯(cuò)誤,也會(huì)導(dǎo)致誤用模式。

  討論設(shè)計(jì)模式舉例,不能沒(méi)有業(yè)務(wù)上下文場(chǎng)景的案例,否則無(wú)法決定是否該用模式,下面舉兩個(gè)對(duì)比的例子:

  第一. 這個(gè)帖子中舉例的第一個(gè)代碼案例是沒(méi)有上下文的,文中只說(shuō)明有一段代碼:

main() {

if(case A){

//do with strategy A

}else(case B){

//do with strategy B

}else(case C){

//do with strategy C

}

}

?

  這段代碼只是純粹的代碼,沒(méi)有業(yè)務(wù)功能,所以,在這種情況下,我們就很難確定使用什么模式,就是一定用策略模式等,也逃不過(guò)還是使用if else的命運(yùn),設(shè)計(jì)模式不是魔法,不能將一段毫無(wú)意義的代碼變得簡(jiǎn)單了,只能將其體現(xiàn)的業(yè)務(wù)功能更加容易可拓展了。

  第二.在這個(gè)帖子中,作者舉了一個(gè)PacketParser業(yè)務(wù)案例,這段代碼是體現(xiàn)業(yè)務(wù)功能的,是一個(gè)數(shù)據(jù)包的分析,作者也比較了各種模式使用的不同,所以我們還是使用動(dòng)態(tài)代理模式或Command模式來(lái)消滅那些可能存在的if else

  由以上兩個(gè)案例表明:業(yè)務(wù)邏輯是我們使用設(shè)計(jì)模式的切入點(diǎn),而在分解業(yè)務(wù)邏輯時(shí),我們習(xí)慣則可能使用if else來(lái)實(shí)現(xiàn),當(dāng)你有這種企圖或者已經(jīng)實(shí)現(xiàn)代碼了,那么就應(yīng)該考慮是否需要重構(gòu)Refactoring了。

if else替代者

  那么實(shí)戰(zhàn)中,哪些設(shè)計(jì)模式可以替代if else呢?其實(shí)GoF設(shè)計(jì)模式都可以用來(lái)替代if else,我們分別描述如下:

  • 狀態(tài)模式 
      當(dāng)數(shù)據(jù)對(duì)象存在各種可能性的狀態(tài),而且這種狀態(tài)將會(huì)影響到不同業(yè)務(wù)結(jié)果時(shí),那么我們就應(yīng)該考慮是否使用狀態(tài)模式,當(dāng)然,使用狀態(tài)模式之前,你必須首先有內(nèi)存狀態(tài)這個(gè)概念,而不是數(shù)據(jù)庫(kù)概念,因?yàn)樵趥鹘y(tǒng)的面向過(guò)程的/面向數(shù)據(jù)庫(kù)的系統(tǒng)中,你很難發(fā)現(xiàn)狀態(tài)的,從數(shù)據(jù)庫(kù)中讀取某個(gè)值,然后根據(jù)這個(gè)值進(jìn)行代碼運(yùn)行分流,這是很多初學(xué)者常干的事情。參考文章:狀態(tài)對(duì)象:數(shù)據(jù)庫(kù)的替代者
      使用傳統(tǒng)語(yǔ)言思維的情況還有:使用一個(gè)類(lèi)整數(shù)變量標(biāo)識(shí)狀態(tài):

    ?

    public class Order{

    private int status;

    //說(shuō)明:

    //status=1 表示訂貨但為查看 ;

    //status=2 表示已經(jīng)查看未處理;

    //status=3 表示已經(jīng)處理未付款

    //status=4 表示已經(jīng)付款未發(fā)貨

    //status=5 表示已經(jīng)發(fā)貨

    }


      上述類(lèi)設(shè)計(jì),無(wú)疑是將類(lèi)作為傳統(tǒng)語(yǔ)言的函數(shù)來(lái)使用,這樣導(dǎo)致程序代碼中存在大量的if else。

  • 策略模式 
      當(dāng)你面臨幾種算法或者公式選擇時(shí),可以考慮策略模式,傳統(tǒng)過(guò)程語(yǔ)言情況是:從數(shù)據(jù)庫(kù)中讀取算法數(shù)值,數(shù)值1表示策略1,例如保存到數(shù)據(jù)庫(kù);數(shù)值為2表示策略2,例如保存到XMl文件中。這里使用if else作為策略選擇的開(kāi)關(guān)。

  • command模式 
      傳統(tǒng)過(guò)程的思維情況是:如果客戶(hù)端發(fā)出代號(hào)是1或"A",那么我調(diào)用A.java這個(gè)對(duì)象來(lái)處理;如果代號(hào)是2或"B",我就調(diào)用B.java來(lái)處理,通過(guò)if else來(lái)判斷客戶(hù)端發(fā)送過(guò)來(lái)的代碼,然后按事先約定的對(duì)應(yīng)表,調(diào)用相應(yīng)的類(lèi)來(lái)處理。

  • MVC模式 
      MVC模式的傳統(tǒng)語(yǔ)言誤用和Command模式類(lèi)似,在一個(gè)Action類(lèi)中,使用if else進(jìn)行前后臺(tái)調(diào)度,如果客戶(hù)端傳送什么命令;我就調(diào)用后臺(tái)什么結(jié)果;如果后臺(tái)處理什么結(jié)構(gòu),再?zèng)Q定推什么頁(yè)面,不過(guò),現(xiàn)在我們使用Struts/JSF這樣MVC模式的框架實(shí)現(xiàn)者就不必范這種低級(jí)錯(cuò)誤。

  • 職責(zé)鏈模式 
      職責(zé)鏈模式和Command模式是可選的,如果你實(shí)在不知道客戶(hù)端會(huì)發(fā)出什么代號(hào);也沒(méi)有一個(gè)事先定義好的對(duì)照表,那么你只能編寫(xiě)一個(gè)個(gè)類(lèi)去碰運(yùn)氣一樣打開(kāi)這個(gè)包看一下就可以。與Command是不同在AOP vs Decorator一文中有分析。

  • 代理或動(dòng)態(tài)代理模式 
      代理對(duì)象可以是符合某種條件的代表者,比如,權(quán)限檢驗(yàn),傳統(tǒng)面向過(guò)程思維是:當(dāng)一個(gè)用戶(hù)登陸后,訪(fǎng)問(wèn)某資源時(shí),使用if else進(jìn)行判斷,只有某種條件符合時(shí),才能允許訪(fǎng)問(wèn),這樣權(quán)限判斷和業(yè)務(wù)數(shù)據(jù)邏輯混亂在一起,使用代理模式可以清晰分離,如果嫌不太好,使用動(dòng)態(tài)代理,或者下面AOP等方式。

  • AOP或Decorator模式
      
      其實(shí)使用filter過(guò)濾器也可以替代我們業(yè)務(wù)中的if else,過(guò)濾器起到一種過(guò)濾和篩選作用,將符合本過(guò)濾器條件的對(duì)象攔截下來(lái)做某件事情,這就是一個(gè)過(guò)濾器的功能,多個(gè)過(guò)濾器組合在一起實(shí)際就是if else的組合。
      所以,如果你實(shí)在想不出什么辦法,可以使用過(guò)濾器,將過(guò)濾器看成防火墻就比較好理解,當(dāng)客戶(hù)端有一個(gè)請(qǐng)求時(shí),經(jīng)過(guò)不同性質(zhì)的防火墻,這個(gè)防火墻是攔截端口的;那個(gè)防火墻是安全檢查攔截等等。過(guò)濾器也如同紅藍(lán)白各種光濾鏡;紅色濾鏡只能將通過(guò)光線(xiàn)中的紅色攔截了;藍(lán)色濾鏡將光線(xiàn)中的藍(lán)色攔截下來(lái),這實(shí)際上是對(duì)光線(xiàn)使用if else進(jìn)行分解。


      如圖,通過(guò)一個(gè)個(gè)條件過(guò)濾器我們立體地實(shí)現(xiàn)了對(duì)信號(hào)的分離,如果你使用if else,說(shuō)明你是將圖中的條件1/2/3/4合并在一起,在同一個(gè)地方實(shí)現(xiàn)條件判斷。
      需要深入了解過(guò)濾器的實(shí)現(xiàn)細(xì)節(jié)和微小區(qū)別,請(qǐng)參考文章:AOP vs Decorator

    OO設(shè)計(jì)的總結(jié)  

      還有一種偽模式,雖然使用了狀態(tài)等模式,但是在模式內(nèi)部實(shí)質(zhì)還是使用if else或switch進(jìn)行狀態(tài)切換或重要條件判斷,那么無(wú)疑說(shuō)明還需要進(jìn)一步努力。更重要的是,不能以模式自居,而且出書(shū)示人。

      真正掌握面向?qū)ο筮@些思想是一件困難的事情,目前有各種屬于揪著自己頭發(fā)向上拔的解說(shuō),都是誤人子弟的,所以我覺(jué)得初學(xué)者讀Thinking in Java(Java編程思想)是沒(méi)有用,它試圖從語(yǔ)言層次來(lái)講OO編程思想,非常失敗,作為語(yǔ)言參考書(shū)可以,但是作為Java體現(xiàn)的OO思想的學(xué)習(xí)資料,就錯(cuò)了。

      OO編程思想是一種方法論,方法論如果沒(méi)有應(yīng)用比較,是無(wú)法體會(huì)這個(gè)方法論的特點(diǎn)的,禪是古代一個(gè)方法論,悟禪是靠挑水砍柴這些應(yīng)用才能體會(huì)。

      那么OO思想靠什么應(yīng)用能夠體會(huì)到了?是GoF設(shè)計(jì)模式,GoF設(shè)計(jì)模式是等于軟件人員的挑水砍柴等基本活,所以,如果一個(gè)程序員連基本活都不會(huì),他何以自居OO程序員?從事OO專(zhuān)業(yè)設(shè)計(jì)編程這個(gè)工作,如果不掌握設(shè)計(jì)模式基本功,就象一個(gè)做和尚的人不愿意挑水砍柴,他何以立足這個(gè)行業(yè)?早就被師傅趕下山。

      最后總結(jié):將if else用在小地方還可以,如簡(jiǎn)單的數(shù)值判斷;但是如果按照你的傳統(tǒng)習(xí)慣思維,在實(shí)現(xiàn)業(yè)務(wù)功能時(shí)也使用if else,那么說(shuō)明你的思維可能需要重塑,你的編程經(jīng)驗(yàn)越豐富,傳統(tǒng)過(guò)程思維模式就容易根深蒂固,想靠自己改變很困難;建議接受專(zhuān)業(yè)頭腦風(fēng)暴培訓(xùn)。

      用一句話(huà)總結(jié):如果你做了不少系統(tǒng),很久沒(méi)有使用if else了,那么說(shuō)明你可能真正進(jìn)入OO設(shè)計(jì)的境地了。(這是本人自己發(fā)明的實(shí)戰(zhàn)性的衡量考核標(biāo)準(zhǔn))。



  • ]]>
    servlet的啟動(dòng)順序http://m.tkk7.com/mphome/archive/2007/12/26/170636.html昨夜人生昨夜人生Wed, 26 Dec 2007 09:02:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/26/170636.htmlhttp://m.tkk7.com/mphome/comments/170636.htmlhttp://m.tkk7.com/mphome/archive/2007/12/26/170636.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/170636.htmlhttp://m.tkk7.com/mphome/services/trackbacks/170636.html當(dāng)一個(gè)web容器產(chǎn)生一個(gè)servlet實(shí)例時(shí),它的基本順序如下:
    1、?servlet容器首先調(diào)用這個(gè)servlet的init()方法,它建會(huì)初始化一個(gè)資源給servlet使用。列如一個(gè)logger。這個(gè)init()方法在整個(gè)servlet的生存周期只會(huì)被調(diào)用一次。
    2、?init()方法初始化了一個(gè)對(duì)象,對(duì)象繼承了java.servlet.ServletConfig接口。這個(gè)對(duì)象使servlet能夠初始化那些被聲明在部署描述符的參數(shù)。ServletConfig也使servlet有權(quán)使用一個(gè) javax.servlet.ServletContext 的對(duì)象,用這個(gè)對(duì)象servlet可以記錄信息,分派請(qǐng)求到其他的web組件上并且能夠使用在同一個(gè)應(yīng)用上的其他web資源。
    3、?servlet容器調(diào)用這個(gè)servlet的service()方法去響應(yīng)servlet的一些請(qǐng)求。根據(jù)HttpServlets,service()自動(dòng)的調(diào)用合適的HTTP方法去處理請(qǐng)求通過(guò)調(diào)用servlet的doGet()或者doPost()方法。幾個(gè)例子,用戶(hù)發(fā)送了個(gè)Post請(qǐng)求這時(shí)servlet通過(guò)doPost()方法的執(zhí)行來(lái)響應(yīng)這個(gè)請(qǐng)求。
    4、?當(dāng)調(diào)用兩個(gè)主要的HttpServlet的doPost(),doGet()方法,這個(gè)servlet容器將產(chǎn)生javax..servlet.http.HttpServletRequest和HttpServletResponse 的對(duì)象并且把它們作為參數(shù)傳到這些處理請(qǐng)求的方法中。
    ?
    5、?管理一個(gè)servlet的生命周期,或者決定這個(gè)servlet實(shí)例對(duì)request請(qǐng)求的處理,在java虛擬機(jī)上的存在時(shí)間。當(dāng)一個(gè)servlet容器開(kāi)始移除一個(gè)servlet的時(shí)候?qū)⒄{(diào)用servlet的destroy()方法,在這個(gè)方法中能夠釋放所有的資源,比如一個(gè)數(shù)據(jù)庫(kù)連接。


    ]]>
    jetty Servlet 技術(shù)http://m.tkk7.com/mphome/archive/2007/12/24/170153.html昨夜人生昨夜人生Mon, 24 Dec 2007 13:00:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/24/170153.htmlhttp://m.tkk7.com/mphome/comments/170153.htmlhttp://m.tkk7.com/mphome/archive/2007/12/24/170153.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/170153.htmlhttp://m.tkk7.com/mphome/services/trackbacks/170153.html???????????? 1.將NIO概念加入到servlet中,(具體的技術(shù)還是不太)
    ???????????? 2.引入了continuation 機(jī)制。說(shuō)白了就是將每個(gè)連接connection從servlet的suspend換到container的suspend,不在占用servlet的資源,此處需要考慮換入繼續(xù)執(zhí)行的問(wèn)題。用通俗的話(huà)來(lái)講就是給serlvet加入了記憶功能。
    ???????????? 3.Split buffers:使用改技術(shù)的前提是采用continuation,也就是在讀寫(xiě)的時(shí)候加入緩存塊
    ???????????? 4.Delayed dispatch:好像這方面的改進(jìn)作用不大,只是對(duì)那些request的請(qǐng)求一起到,在將其發(fā)送到servlet去處理。



    ????????????? 暫時(shí)看懂的就這么多

    ]]>
    12.21 開(kāi)題報(bào)告http://m.tkk7.com/mphome/archive/2007/12/21/169419.html昨夜人生昨夜人生Fri, 21 Dec 2007 10:28:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/21/169419.htmlhttp://m.tkk7.com/mphome/comments/169419.htmlhttp://m.tkk7.com/mphome/archive/2007/12/21/169419.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/169419.htmlhttp://m.tkk7.com/mphome/services/trackbacks/169419.html??????????????????????????????? JGroup
    ??????????????????????????????? XMPP COMETD

    ]]>
    數(shù)據(jù)庫(kù)master/slave模式http://m.tkk7.com/mphome/archive/2007/12/12/167327.html昨夜人生昨夜人生Wed, 12 Dec 2007 12:40:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/12/167327.htmlhttp://m.tkk7.com/mphome/comments/167327.htmlhttp://m.tkk7.com/mphome/archive/2007/12/12/167327.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/167327.htmlhttp://m.tkk7.com/mphome/services/trackbacks/167327.html采用ReplicationConnection鏈接后,設(shè)置Connection.setReadOnly(true)時(shí),讀寫(xiě)可以從master,slave中任意讀寫(xiě)。
    設(shè)置Connection.setReadOnly(false)只能從master中讀取。
    采用此方法可以做到只在master上更新數(shù)據(jù),利用slave來(lái)讀取數(shù)據(jù)。
    詳細(xì)介紹
    http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-replication-connection.html




    ]]>
    java中double運(yùn)算的問(wèn)題http://m.tkk7.com/mphome/archive/2007/12/10/166783.html昨夜人生昨夜人生Mon, 10 Dec 2007 12:47:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/10/166783.htmlhttp://m.tkk7.com/mphome/comments/166783.htmlhttp://m.tkk7.com/mphome/archive/2007/12/10/166783.html#Feedback1http://m.tkk7.com/mphome/comments/commentRss/166783.htmlhttp://m.tkk7.com/mphome/services/trackbacks/166783.htmldouble t1=34.0;
    double t2=2.55
    System.out.println(t1*t2);
    結(jié)果不等于 86.7

    解決方案 采用 java.math.BigDecimal
    此處有一個(gè)通用類(lèi)

    1. import ?java.math.BigDecimal; ??
    2. ??
    3. /**?*/ /** ?
    4. *?由于Java的簡(jiǎn)單類(lèi)型不能夠精確的對(duì)浮點(diǎn)數(shù)進(jìn)行運(yùn)算,這個(gè)工具類(lèi)提供精 ?
    5. *?確的浮點(diǎn)數(shù)運(yùn)算,包括加減乘除和四舍五入。 ?
    6. */ ??
    7. ??
    8. public ? class ?Arith{ ??
    9. ??
    10. //默認(rèn)除法運(yùn)算精度 ??
    11. ??
    12. private ? static ? final ? int ?DEF_DIV_SCALE?=? 10 ; ??
    13. ??
    14. //這個(gè)類(lèi)不能實(shí)例化 ??
    15. ??
    16. private ?Arith(){ ??
    17. ??
    18. } ??
    19. ??
    20. /**?*/ /** ?
    21. *?提供精確的加法運(yùn)算。 ?
    22. *?@param?v1?被加數(shù) ?
    23. *?@param?v2?加數(shù) ?
    24. *?@return?兩個(gè)參數(shù)的和 ?
    25. */ ??
    26. ??
    27. public ? static ? double ?add( double ?v1, double ?v2){ ??
    28. ??
    29. BigDecimal?b1?=? new ?BigDecimal(Double.toString(v1)); ??
    30. ??
    31. BigDecimal?b2?=? new ?BigDecimal(Double.toString(v2)); ??
    32. ??
    33. return ?b1.add(b2).doubleValue(); ??
    34. ??
    35. } ??
    36. ??
    37. /**?*/ /** ?
    38. *?提供精確的減法運(yùn)算。 ?
    39. *?@param?v1?被減數(shù) ?
    40. *?@param?v2?減數(shù) ?
    41. *?@return?兩個(gè)參數(shù)的差 ?
    42. */ ??
    43. ??
    44. public ? static ? double ?sub( double ?v1, double ?v2){ ??
    45. ??
    46. BigDecimal?b1?=? new ?BigDecimal(Double.toString(v1)); ??
    47. ??
    48. BigDecimal?b2?=? new ?BigDecimal(Double.toString(v2)); ??
    49. ??
    50. return ?b1.subtract(b2).doubleValue(); ??
    51. ??
    52. } ??
    53. ??
    54. /**?*/ /** ?
    55. *?提供精確的乘法運(yùn)算。 ?
    56. *?@param?v1?被乘數(shù) ?
    57. *?@param?v2?乘數(shù) ?
    58. *?@return?兩個(gè)參數(shù)的積 ?
    59. */ ??
    60. ??
    61. public ? static ? double ?mul( double ?v1, double ?v2){ ??
    62. ??
    63. BigDecimal?b1?=? new ?BigDecimal(Double.toString(v1)); ??
    64. ??
    65. BigDecimal?b2?=? new ?BigDecimal(Double.toString(v2)); ??
    66. ??
    67. return ?b1.multiply(b2).doubleValue(); ??
    68. ??
    69. } ??
    70. ??
    71. /**?*/ /** ?
    72. *?提供(相對(duì))精確的除法運(yùn)算,當(dāng)發(fā)生除不盡的情況時(shí),精確到 ?
    73. *?小數(shù)點(diǎn)以后10位,以后的數(shù)字四舍五入。 ?
    74. *?@param?v1?被除數(shù) ?
    75. *?@param?v2?除數(shù) ?
    76. *?@return?兩個(gè)參數(shù)的商 ?
    77. */ ??
    78. ??
    79. public ? static ? double ?div( double ?v1, double ?v2){ ??
    80. ??
    81. return ?div(v1,v2,DEF_DIV_SCALE); ??
    82. ??
    83. } ??
    84. ??
    85. /**?*/ /** ?
    86. *?提供(相對(duì))精確的除法運(yùn)算。當(dāng)發(fā)生除不盡的情況時(shí),由scale參數(shù)指 ?
    87. *?定精度,以后的數(shù)字四舍五入。 ?
    88. *?@param?v1?被除數(shù) ?
    89. *?@param?v2?除數(shù) ?
    90. *?@param?scale?表示表示需要精確到小數(shù)點(diǎn)以后幾位。 ?
    91. *?@return?兩個(gè)參數(shù)的商 ?
    92. */ ??
    93. ??
    94. public ? static ? double ?div( double ?v1, double ?v2, int ?scale){ ??
    95. ??
    96. if (scale< 0 ){ ??
    97. ??
    98. throw ? new ?IllegalArgumentException( ??
    99. ??
    100. "The?scale?must?be?a?positive?integer?or?zero" ); ??
    101. ??
    102. } ??
    103. ??
    104. BigDecimal?b1?=? new ?BigDecimal(Double.toString(v1)); ??
    105. ??
    106. BigDecimal?b2?=? new ?BigDecimal(Double.toString(v2)); ??
    107. ??
    108. return ?b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); ??
    109. ??
    110. } ??
    111. ??
    112. /**?*/ /** ?
    113. *?提供精確的小數(shù)位四舍五入處理。 ?
    114. *?@param?v?需要四舍五入的數(shù)字 ?
    115. *?@param?scale?小數(shù)點(diǎn)后保留幾位 ?
    116. *?@return?四舍五入后的結(jié)果 ?
    117. */ ??
    118. ??
    119. public ? static ? double ?round( double ?v, int ?scale){ ??
    120. ??
    121. if (scale< 0 ){ ??
    122. ??
    123. throw ? new ?IllegalArgumentException( ??
    124. ??
    125. "The?scale?must?be?a?positive?integer?or?zero" ); ??
    126. ??
    127. } ??
    128. ??
    129. BigDecimal?b?=? new ?BigDecimal(Double.toString(v)); ??
    130. ??
    131. BigDecimal?one?=? new ?BigDecimal( "1" ); ??
    132. ??
    133. return ?b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); ??
    134. ??
    135. } ??
    136. ??
    137. } ??


    ]]>
    eclipse快捷鍵大全http://m.tkk7.com/mphome/archive/2007/12/03/165021.html昨夜人生昨夜人生Mon, 03 Dec 2007 14:05:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/03/165021.htmlhttp://m.tkk7.com/mphome/comments/165021.htmlhttp://m.tkk7.com/mphome/archive/2007/12/03/165021.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/165021.htmlhttp://m.tkk7.com/mphome/services/trackbacks/165021.htmleclipse快捷鍵大全??????????????????????????????????????

    eclipse快捷鍵大全

    1. 常用快捷鍵
    (1)Ctrl+Space
    說(shuō)明:內(nèi)容助理。提供對(duì)方法,變量,參數(shù),javadoc等得提示,應(yīng)運(yùn)在多種場(chǎng)合,總之需要提示的時(shí)候可先按此快捷鍵。
    注:避免輸入法的切換設(shè)置與此設(shè)置沖突

    (2)Ctrl+Shift+Space
    說(shuō)明:變量提示
    (3)Ctrl+/
    說(shuō)明:添加/消除//注釋,在eclipse2.0中,消除注釋為Ctrl+\

    (4)Ctrl+Shift+/
    說(shuō)明:添加/* */注釋

    (5)Ctrl+Shift+\
    說(shuō)明:消除/* */注釋

    (6)Ctrl+Shift+F
    說(shuō)明:自動(dòng)格式化代碼

    (7)Ctrl+1
    說(shuō)明:批量修改源代碼中的變量名,此外還可用在catch塊上.

    (8)Ctril+F6
    說(shuō)明:界面切換

    (9)Ctril+Shift+M
    說(shuō)明:查找所需要得包

    (10)Ctril+Shift+O
    說(shuō)明:自動(dòng)引入所需要得包

    (11)Ctrl+Alt+S
    說(shuō)明:源代碼得快捷菜單。其中的Generate getters and setters 和 Surround with try/catch
    block比較常用.建議把它們添加為快捷鍵.快捷鍵設(shè)置在windows->preferences->Workbench->Keys

    2. 快捷鍵列表

    編輯
    作用域 功能 快捷鍵
    全局 查找并替換 Ctrl+F
    文本編輯器 查找上一個(gè) Ctrl+Shift+K
    文本編輯器 查找下一個(gè) Ctrl+K
    全局 撤銷(xiāo) Ctrl+Z
    全局 復(fù)制 Ctrl+C
    全局 恢復(fù)上一個(gè)選擇 Alt+Shift+↓
    全局 剪切 Ctrl+X
    全局 快速修正 Ctrl1+1
    全局 內(nèi)容輔助 Alt+/
    全局 全部選中 Ctrl+A
    全局 刪除 Delete
    全局 上下文信息 Alt+?Alt+Shift+?Ctrl+Shift+Space
    Java編輯器 顯示工具提示描述 F2
    Java編輯器 選擇封裝元素 Alt+Shift+↑
    Java編輯器 選擇上一個(gè)元素 Alt+Shift+←
    Java編輯器 選擇下一個(gè)元素 Alt+Shift+→
    文本編輯器 增量查找 Ctrl+J
    文本編輯器 增量逆向查找 Ctrl+Shift+J
    全局 粘貼 Ctrl+V
    全局 重做 Ctrl+Y

    查看
    作用域 功能 快捷鍵
    全局 放大 Ctrl+=
    全局 縮小 Ctrl+-

    窗口
    作用域 功能 快捷鍵
    全局 激活編輯器 F12
    全局 切換編輯器 Ctrl+Shift+W
    全局 上一個(gè)編輯器 Ctrl+Shift+F6
    全局 上一個(gè)視圖 Ctrl+Shift+F7
    全局 上一個(gè)透視圖 Ctrl+Shift+F8
    全局 下一個(gè)編輯器 Ctrl+F6
    全局 下一個(gè)視圖 Ctrl+F7
    全局 下一個(gè)透視圖 Ctrl+F8
    文本編輯器 顯示標(biāo)尺上下文菜單 Ctrl+W
    全局 顯示視圖菜單 Ctrl+F10
    全局 顯示系統(tǒng)菜單 Alt+-

    導(dǎo)航
    作用域 功能 快捷鍵
    Java編輯器 打開(kāi)結(jié)構(gòu) Ctrl+F3
    全局 打開(kāi)類(lèi)型 Ctrl+Shift+T
    全局 打開(kāi)類(lèi)型層次結(jié)構(gòu) F4
    全局 打開(kāi)聲明 F3
    全局 打開(kāi)外部javadoc Shift+F2
    全局 打開(kāi)資源 Ctrl+Shift+R
    全局 后退歷史記錄 Alt+←
    全局 前進(jìn)歷史記錄 Alt+→
    全局 上一個(gè) Ctrl+,
    全局 下一個(gè) Ctrl+.
    Java編輯器 顯示大綱 Ctrl+O
    全局 在層次結(jié)構(gòu)中打開(kāi)類(lèi)型 Ctrl+Shift+H
    全局 轉(zhuǎn)至匹配的括號(hào) Ctrl+Shift+P
    全局 轉(zhuǎn)至上一個(gè)編輯位置 Ctrl+Q
    Java編輯器 轉(zhuǎn)至上一個(gè)成員 Ctrl+Shift+↑
    Java編輯器 轉(zhuǎn)至下一個(gè)成員 Ctrl+Shift+↓
    文本編輯器 轉(zhuǎn)至行 Ctrl+L

    搜索
    作用域 功能 快捷鍵
    全局 出現(xiàn)在文件中 Ctrl+Shift+U
    全局 打開(kāi)搜索對(duì)話(huà)框 Ctrl+H
    全局 工作區(qū)中的聲明 Ctrl+G
    全局 工作區(qū)中的引用 Ctrl+Shift+G

    文本編輯
    作用域 功能 快捷鍵
    文本編輯器 改寫(xiě)切換 Insert
    文本編輯器 上滾行 Ctrl+↑
    文本編輯器 下滾行 Ctrl+↓

    文件
    作用域 功能 快捷鍵
    全局 保存 Ctrl+X Ctrl+S
    全局 打印 Ctrl+P
    全局 關(guān)閉 Ctrl+F4
    全局 全部保存 Ctrl+Shift+S
    全局 全部關(guān)閉 Ctrl+Shift+F4
    全局 屬性 Alt+Enter
    全局 新建 Ctrl+N

    項(xiàng)目
    作用域 功能 快捷鍵
    全局 全部構(gòu)建 Ctrl+B

    源代碼
    作用域 功能 快捷鍵
    Java編輯器 格式化 Ctrl+Shift+F
    Java編輯器 取消注釋 Ctrl+\
    Java編輯器 注釋 Ctrl+/
    Java編輯器 添加導(dǎo)入 Ctrl+Shift+M
    Java編輯器 組織導(dǎo)入 Ctrl+Shift+O
    Java編輯器 使用try/catch塊來(lái)包圍 未設(shè)置,太常用了,所以在這里列出,建議自己設(shè)置。也可以使用Ctrl+1自動(dòng)修正。

    運(yùn)行
    作用域 功能 快捷鍵
    全局 單步返回 F7
    全局 單步跳過(guò) F6
    全局 單步跳入 F5
    全局 單步跳入選擇 Ctrl+F5
    全局 調(diào)試上次啟動(dòng) F11
    全局 繼續(xù) F8
    全局 使用過(guò)濾器單步執(zhí)行 Shift+F5
    全局 添加/去除斷點(diǎn) Ctrl+Shift+B
    全局 顯示 Ctrl+D
    全局 運(yùn)行上次啟動(dòng) Ctrl+F11
    全局 運(yùn)行至行 Ctrl+R
    全局 執(zhí)行 Ctrl+U

    重構(gòu)
    作用域 功能 快捷鍵
    全局 撤銷(xiāo)重構(gòu) Alt+Shift+Z
    全局 抽取方法 Alt+Shift+M
    全局 抽取局部變量 Alt+Shift+L
    全局 內(nèi)聯(lián) Alt+Shift+I
    全局 移動(dòng) Alt+Shift+V
    全局 重命名 Alt+Shift+R
    全局 重做 Alt+Shift+Y



    ]]>
    轉(zhuǎn)載:JAVA如何調(diào)用DOS命令 http://m.tkk7.com/mphome/archive/2007/12/03/165019.html昨夜人生昨夜人生Mon, 03 Dec 2007 14:02:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/03/165019.htmlhttp://m.tkk7.com/mphome/comments/165019.htmlhttp://m.tkk7.com/mphome/archive/2007/12/03/165019.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/165019.htmlhttp://m.tkk7.com/mphome/services/trackbacks/165019.html用Java編寫(xiě)應(yīng)用時(shí),有時(shí)需要在程序中調(diào)用另一個(gè)現(xiàn)成的可執(zhí)行程序或系統(tǒng)命令,這時(shí)可以通過(guò)組合使用Java提供的Runtime類(lèi)和Process類(lèi)的方法實(shí)現(xiàn)。下面是一種比較典型的程序模式:
    ...
    Process process = Runtime.getRuntime().exec(".\\p.exe");
    process.waitfor( );
    ...
    在上面的程序中,第一行的“.\\p.exe”是要執(zhí)行的程序名,Runtime.getRuntime()返回當(dāng)前應(yīng)用程序的Runtime對(duì)象,該對(duì)象的exec()方法指示Java虛擬機(jī)創(chuàng)建一個(gè)子進(jìn)程執(zhí)行指定的可執(zhí)行程序,并返回與該子進(jìn)程對(duì)應(yīng)的Process對(duì)象實(shí)例。通過(guò)Process可以控制該子進(jìn)程的執(zhí)行或獲取該子進(jìn)程的信息。第二條語(yǔ)句的目的等待子進(jìn)程完成再往下執(zhí)行。
    但在windows平臺(tái)上,如果處理不當(dāng),有時(shí)并不能得到預(yù)期的結(jié)果。下面是筆者在實(shí)際編程中總結(jié)的幾種需要注意的情況:
    1、執(zhí)行DOS的內(nèi)部命令
    如果要執(zhí)行一條DOS內(nèi)部命令,有兩種方法。一種方法是把命令解釋器包含在exec()的參數(shù)中。例如,執(zhí)行dir命令,在NT上, 可寫(xiě)成exec("cmd.exe /c dir"),在windows 95/98下,可寫(xiě)成“command.exe /c dir”,其中參數(shù)“/c”表示命令執(zhí)行后關(guān)閉Dos立即關(guān)閉窗口。另一種方法是,把內(nèi)部命令放在一個(gè)批命令my_dir.bat文件中,在Java程序中寫(xiě)成exec("my_dir.bat")。如果僅僅寫(xiě)成exec("dir"),Java虛擬機(jī)則會(huì)報(bào)運(yùn)行時(shí)錯(cuò)誤。前一種方法要保證程序的可移植性,需要在程序中讀取運(yùn)行的操作系統(tǒng)平臺(tái),以調(diào)用不同的命令解釋器。后一種方法則不需要做更多的處理。
    2、打開(kāi)一個(gè)不可執(zhí)行的文件
    打開(kāi)一個(gè)不可執(zhí)行的文件,但該文件存在關(guān)聯(lián)的應(yīng)用程序,則可以有兩種方式。 以打開(kāi)一個(gè)word文檔a.doc文件為例,Java中可以有以下兩種寫(xiě)法:
    exec("start .\\a.doc");
    exec(" c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc");
    顯然,前一種方法更為簡(jiǎn)捷方便。
    3、執(zhí)行一個(gè)有標(biāo)準(zhǔn)輸出的DOS可執(zhí)行程序
    在windows平臺(tái)上,運(yùn)行被調(diào)用程序的DOS窗口在程序執(zhí)行完畢后往往并不會(huì)自動(dòng)關(guān)閉,從而導(dǎo)致Java應(yīng)用程序阻塞在waitfor( )。導(dǎo)致該現(xiàn)象的一個(gè)可能的原因是,該可執(zhí)行程序的標(biāo)準(zhǔn)輸出比較多,而運(yùn)行窗口的標(biāo)準(zhǔn)輸出緩沖區(qū)不夠大。解決的辦法是,利用Java提供的Process類(lèi)提供的方法讓Java虛擬機(jī)截獲被調(diào)用程序的DOS運(yùn)行窗口的標(biāo)準(zhǔn)輸出,在waitfor()命令之前讀出窗口的標(biāo)準(zhǔn)輸出緩沖區(qū)中的內(nèi)容。一段典型的程序如下:
    ...
    String ls_1;
    Process process = Runtime.getRuntime().exec("cmd /c dir \\windows");
    BufferedReader bufferedReader = new BufferedReader( \
    new InputStreamReader(process.getInputStream());
    while ( (ls_1=bufferedReader.readLine()) != null)
    System.out.println(ls_1);

    process.waitfor( );
    ...

    以上內(nèi)容為轉(zhuǎn)載~下面內(nèi)容為原創(chuàng)!

    今天在做客戶(hù)端程序的自動(dòng)更新,簡(jiǎn)單描述一下,就是從服務(wù)器上將更新包下載下來(lái),然后在本地解壓縮,最后刪掉~(yú)功能很簡(jiǎn)單~

    但是問(wèn)題出在使用JAVA的ZIP模塊做文件的解壓縮不是想象的那么簡(jiǎn)單,資源需要釋放,一個(gè)不小心就沒(méi)有辦法刪除掉原有ZIP文件了~資源的占用確實(shí)是個(gè)大問(wèn)題,但是好在,客戶(hù)端程序更新完是要重啟的,一切都煙消云散了~對(duì)于刪除不掉ZIP文件的問(wèn)題,我也流氓一下~用DEL硬刪除~此處一定要注意!

    Process process = Runtime.getRuntime().exec("cmd /c del f:\\aaa.doc");
    這樣的調(diào)用是沒(méi)有問(wèn)題~

    Process process = Runtime.getRuntime().exec("del f:\\aaa.doc");
    這樣寫(xiě)是不可能對(duì)的~

    記錄一下,警告一下后人!


    Ref from:http://m.tkk7.com/leeguannan/archive/2007/11/29/164044.html



    ]]>
    11月12日http://m.tkk7.com/mphome/archive/2007/11/13/160072.html昨夜人生昨夜人生Mon, 12 Nov 2007 16:08:00 GMThttp://m.tkk7.com/mphome/archive/2007/11/13/160072.htmlhttp://m.tkk7.com/mphome/comments/160072.htmlhttp://m.tkk7.com/mphome/archive/2007/11/13/160072.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/160072.htmlhttp://m.tkk7.com/mphome/services/trackbacks/160072.html?????????晚上使用apache的ad壓力測(cè)試竟然把公司的網(wǎng)站給搞癱了,出乎意料.學(xué)了一招以后看誰(shuí)不順眼,給他來(lái)一下。這個(gè)星期要請(qǐng)別人去吃大餐,,唉可憐的我的那點(diǎn)工資還有我的張學(xué)友演唱會(huì)門(mén)票。
    ????????

    ]]>
    菩提本無(wú)樹(shù),明鏡亦非臺(tái),本來(lái)無(wú)一物,何處惹塵埃http://m.tkk7.com/mphome/archive/2007/09/03/142464.html昨夜人生昨夜人生Mon, 03 Sep 2007 15:00:00 GMThttp://m.tkk7.com/mphome/archive/2007/09/03/142464.htmlhttp://m.tkk7.com/mphome/comments/142464.htmlhttp://m.tkk7.com/mphome/archive/2007/09/03/142464.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/142464.htmlhttp://m.tkk7.com/mphome/services/trackbacks/142464.html???? 9月3日是開(kāi)學(xué)的第一天,很多新生都開(kāi)始上課啦,怎么感覺(jué)現(xiàn)在的大一新生長(zhǎng)得都比較成熟啊,看上去和大四的學(xué)生精神面貌,個(gè)頭都差不多。看著他們還真挺懷念都大學(xué)的時(shí)候,讀大學(xué)和讀研究生還真是區(qū)別很大。主要還是人開(kāi)始考慮現(xiàn)實(shí)的東西比較多了。我還真挺佩服那些自由職業(yè)者,需要錢(qián)的時(shí)候就找分工作干兩個(gè)月,掙夠了錢(qián)繼續(xù)開(kāi)始旅游或干自己想做的事,這還真不是普通人能做到的。
    ????

    ]]>
    師弟要來(lái)了,新的學(xué)年http://m.tkk7.com/mphome/archive/2007/08/31/141567.html昨夜人生昨夜人生Thu, 30 Aug 2007 16:02:00 GMThttp://m.tkk7.com/mphome/archive/2007/08/31/141567.htmlhttp://m.tkk7.com/mphome/comments/141567.htmlhttp://m.tkk7.com/mphome/archive/2007/08/31/141567.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/141567.htmlhttp://m.tkk7.com/mphome/services/trackbacks/141567.html???? 每天下班吃飯是一個(gè)大問(wèn)題,要不食堂就是關(guān)門(mén)要不就沒(méi)菜,老吃方便面,太慘啦?;貋?lái)的時(shí)候碰到女同學(xué),問(wèn)到她怎么解決吃飯時(shí),她竟然說(shuō)在寢室弄飯,太強(qiáng)啦。怎么我沒(méi)有分到和她一個(gè)寢室啊。呵呵,這是不可能的?。。?br />??? 項(xiàng)目需求開(kāi)始看JBPM,看了一下午感覺(jué)還是挺簡(jiǎn)單的,網(wǎng)上教程挺多,具體怎樣利用jbpm定制流程是搞清除啦,明天要開(kāi)始結(jié)合strut來(lái)做做簡(jiǎn)單的公文流轉(zhuǎn)看。
    ??? 晚上抽空看了《破綻》,發(fā)覺(jué)里面的女主角羅莎蒙派克(其實(shí)戲份很少的)挺漂亮的,是偶喜歡的類(lèi)型,記錄一下。

    ]]>
    差距不是一日形成的http://m.tkk7.com/mphome/archive/2007/08/29/141100.html昨夜人生昨夜人生Wed, 29 Aug 2007 13:55:00 GMThttp://m.tkk7.com/mphome/archive/2007/08/29/141100.htmlhttp://m.tkk7.com/mphome/comments/141100.htmlhttp://m.tkk7.com/mphome/archive/2007/08/29/141100.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/141100.htmlhttp://m.tkk7.com/mphome/services/trackbacks/141100.html?????????? 最近老在寫(xiě)文檔,為了畫(huà)流程圖到網(wǎng)上找寫(xiě)素材時(shí)無(wú)意中逛到了幾個(gè)在微軟工作人的blog而且還都是做UI設(shè)計(jì)。牛人果然是不同,blog的風(fēng)格非常獨(dú)特,從blog的字里行間中能體會(huì)出他們對(duì)工作的那份激情。看來(lái)在好的工作環(huán)境中對(duì)個(gè)人的提高是巨大的。
    ?????????? 還有件好玩的事,中午的我在廁所方便碰到同事,隨便聊起了上午股票的行情,聊得真起勁的時(shí)候,廁所的單間突然走出老總,我和同事都吃了一驚,但老總也沒(méi)說(shuō)什么,看了我們一眼就走了。頓時(shí)我們無(wú)語(yǔ),我到?jīng)]什么,反正是實(shí)習(xí)生,拿得錢(qián)又少,管他老總怎么想??晌腋杏X(jué)出來(lái)同事肯定要郁悶半天???,現(xiàn)在才感覺(jué)到實(shí)習(xí)生也是有好處的。
    ????????? 無(wú)意中翻看大學(xué)同學(xué)的QQ簽名,發(fā)現(xiàn)原來(lái)一個(gè)比較悶騷的室友的簽名非常有感覺(jué),趕緊copy下來(lái)(不是為了誰(shuí),只是沒(méi)有緣故的傷感,這就像某些人見(jiàn)到一個(gè)和分手戀人很像的背影而潛然淚下。和軟弱無(wú)關(guān)).?有點(diǎn)懷疑是抄的,那天問(wèn)問(wèn)看。
    ?????????

    ]]>
    無(wú)聊的一天http://m.tkk7.com/mphome/archive/2007/08/26/139634.html昨夜人生昨夜人生Sun, 26 Aug 2007 14:08:00 GMThttp://m.tkk7.com/mphome/archive/2007/08/26/139634.htmlhttp://m.tkk7.com/mphome/comments/139634.htmlhttp://m.tkk7.com/mphome/archive/2007/08/26/139634.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/139634.htmlhttp://m.tkk7.com/mphome/services/trackbacks/139634.html??????????明天又開(kāi)始上班,聽(tīng)說(shuō)移動(dòng)的需求又加了不少,媽的又要修改標(biāo)書(shū),什么時(shí)候才能搞完啊 。老大,我是實(shí)習(xí)生不要叫我老寫(xiě)文檔好 不好啊。
    ???????????為什么我老是對(duì)某件事不能專(zhuān)注下去,即時(shí)是玩游戲也很難有非常強(qiáng)的耐心通關(guān),但在沒(méi)有開(kāi)始卻興趣非常的強(qiáng)。我很懷疑是不是? 很少人會(huì)這樣。
    ????????? 公司要進(jìn)新人啦,好像有女的哦,暗喜?。?!要知道我們公司連做美工的都是男的,老總可能是看不過(guò)去啦,調(diào)節(jié)一下男女比例,雖然我也只是想看看,養(yǎng)眼而已。
    ?????????

    ]]>
    死灰復(fù)燃8.24http://m.tkk7.com/mphome/archive/2007/08/24/139129.html昨夜人生昨夜人生Fri, 24 Aug 2007 08:36:00 GMThttp://m.tkk7.com/mphome/archive/2007/08/24/139129.htmlhttp://m.tkk7.com/mphome/comments/139129.htmlhttp://m.tkk7.com/mphome/archive/2007/08/24/139129.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/139129.htmlhttp://m.tkk7.com/mphome/services/trackbacks/139129.html???????????? 8月24日,上班也有一個(gè)月啦,本以為剛來(lái)實(shí)習(xí)就可以立馬做項(xiàng)目,哪知道剛來(lái)開(kāi)始就看文檔,看了一個(gè)星期后,又來(lái)寫(xiě)投標(biāo)書(shū),大失所望啊。每天只好之間看看教程啦。
    ??????????? 今天主要將WAP程序設(shè)計(jì)看了一遍,畢竟下一個(gè)項(xiàng)目是有關(guān)WAP的,臨時(shí)抱佛腳吧。感覺(jué)WAP還是挺簡(jiǎn)單的,只不過(guò)和HTML在標(biāo)簽上有說(shuō)區(qū)別。而且在給變量賦值在=前后竟然不能有空格,不知道那個(gè)傻子設(shè)計(jì)的,怪不得WAP發(fā)展的不是很好。
    ??????????? 最近正在看JBOSS和MySee,關(guān)于JBOSS還真不知道從那里下手,整體的設(shè)計(jì)理念是了解,但具體如何應(yīng)用挺費(fèi)解的。要好好象師兄請(qǐng)教一下。Mysee開(kāi)源的東東,也已經(jīng)看看很久啦 ,同志要加緊啊 。
    ??????????? 提醒:公司空調(diào)很冷,以后要記得帶長(zhǎng)袖衣服。???
    ??????????????? 2007.8.24

    ]]>
    Tomcat 亂碼的最終解決方案http://m.tkk7.com/mphome/archive/2006/12/03/85107.html昨夜人生昨夜人生Sat, 02 Dec 2006 16:01:00 GMThttp://m.tkk7.com/mphome/archive/2006/12/03/85107.htmlhttp://m.tkk7.com/mphome/comments/85107.htmlhttp://m.tkk7.com/mphome/archive/2006/12/03/85107.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/85107.htmlhttp://m.tkk7.com/mphome/services/trackbacks/85107.html1.解決POST傳送亂碼的問(wèn)題.
    <filter>
    ??? <filter-name>Set Character Encoding</filter-name>
    ??? <filter-class>com.util.filters.SetCharacterEncodingFilter</filter-class>
    ??? <init-param>
    ????? <param-name>encoding</param-name>
    ????? <param-value>UTF-8</param-value>
    ??? </init-param>
    ? </filter>
    ? <filter-mapping>
    ??? <filter-name>Set Character Encoding</filter-name>
    ??? <url-pattern>/*</url-pattern>
    ? </filter-mapping>

    SetCharacterEncodingFilter:

    package com.util.filters;

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.UnavailableException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;


    public class SetCharacterEncodingFilter
    ??? implements Filter {


    ? protected String encoding = null;

    ? protected FilterConfig filterConfig = null;

    ? protected boolean ignore = true;

    ? public void destroy() {

    ??? this.encoding = null;
    ??? this.filterConfig = null;

    ? }

    ? public void doFilter(ServletRequest request, ServletResponse response,
    ?????????????????????? FilterChain chain) throws IOException, ServletException {

    ??? // Conditionally select and set the character encoding to be used
    ?? request.setCharacterEncoding("GBK");
    ??? // Pass control on to the next filter
    ??? chain.doFilter(request, response);

    ? }

    ? public void init(FilterConfig filterConfig) throws ServletException {

    ??? this.filterConfig = filterConfig;
    ??? this.encoding = filterConfig.getInitParameter("encoding");
    ??? String value = filterConfig.getInitParameter("ignore");
    ??? if (value == null) {
    ????? this.ignore = true;
    ??? }
    ??? else if (value.equalsIgnoreCase("true")) {
    ????? this.ignore = true;
    ??? }
    ??? else if (value.equalsIgnoreCase("yes")) {
    ????? this.ignore = true;
    ??? }
    ??? else {
    ????? this.ignore = false;
    ??? }

    ? }

    ? protected String selectEncoding(ServletRequest request) {

    ??? return (this.encoding);

    ? }

    }

    2.解決GET方式出現(xiàn)亂碼的方案


    tomcat的server.xml中
    <Connector connectionTimeout="20000" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="8080" redirectPort="8443" uRIEncoding="UTF-8" useBodyEncodingForURI="true">
    </Connector>
    注意其中的useBodyEncodingForURI="true"這句是是解決問(wèn)題的關(guān)鍵,但缺省情況下沒(méi)有,自己加進(jìn)去。
    然后再用Filter方案解決 解決GET的問(wèn)題

    3.亂碼字符轉(zhuǎn)換 
      byte[] bytes = str.getBytes("ISO8859-1");
    ??? String dept=new String(bytes);

    AJAX
    在用XMLHttpRequest發(fā)送請(qǐng)求時(shí)如用post方式傳送數(shù)據(jù),容易出現(xiàn)中文亂碼問(wèn)題!
    在Ajax中,默認(rèn)的編碼方式是UTF-8,所以在服務(wù)器端用request.setCharacterEncoding("UTF-8");(對(duì)于java言,其它語(yǔ)言可能類(lèi)似方法)設(shè)置編碼即可解決大部份的編碼問(wèn)題!

    ?對(duì)于服務(wù)器端返回的XML文件在用responseXML讀取時(shí)也要注意編碼問(wèn)題!

    以下是正確的處理方法:

    response.setCharacterEncoding("UTF-8");-----(1)
    PrintWriter out=response.getWriter();------(2)
    out.println("返回內(nèi)容");

    如上所示,如果1、2的先后順序發(fā)生變化就會(huì)產(chǎn)生亂碼!



    ]]>
    我又來(lái)拉http://m.tkk7.com/mphome/archive/2006/11/29/84197.html昨夜人生昨夜人生Tue, 28 Nov 2006 16:49:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/29/84197.htmlhttp://m.tkk7.com/mphome/comments/84197.htmlhttp://m.tkk7.com/mphome/archive/2006/11/29/84197.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/84197.htmlhttp://m.tkk7.com/mphome/services/trackbacks/84197.html   今天終于有一點(diǎn)想通了 ,路是自己選的,還是盡量將現(xiàn)在的路走好.將來(lái)的事留給明天吧.

       送一段比較現(xiàn)實(shí)的格言,只要有錢(qián),年齡不是問(wèn)題,身高不是距離.

       操作CSV文件有用的兩個(gè)類(lèi):CSVprinter,CsvDriver.

    ?getOutputStream() has already been called for this response問(wèn)題的解決?????

    在jsp向頁(yè)面輸出圖片的時(shí)候,使用response.getOutputStream()會(huì)有這樣的提示:java.lang.IllegalStateException:getOutputStream() has already been called for this response,會(huì)拋出Exception

    原因一:
    ?JSP默認(rèn)的輸出流為PrintWriter ,即<% %>以外的東西所默認(rèn)的輸出方式,如果你嘗試在JSP中使用ServletOutputStream就會(huì)引起錯(cuò)誤.要嘛直接改用Servlet輸出(復(fù)寫(xiě)service方法),要嘛刪除除%><%中的任何東西(包括HTML標(biāo)簽,空格,回車(chē)等東西)應(yīng)該就可以。
    對(duì)于這樣的情況應(yīng)該這樣來(lái)解決,刪除%><%之間的所有內(nèi)容包括空格和換行符,最后也要消除空格和換行符,最好再加上一句response.reset()。
    原因二:
    ?????
    在J2EE的API參考里有這么個(gè):

    ServletResponse的getWriter()方法里會(huì)拋出這個(gè)異常,

    IllegalStateException - if the getOutputStream method has already been called
    for this response object

    而它的getOutputStream()方法里會(huì)拋出這個(gè)異常.

    IllegalStateException - if the getOutputStream method has already been called for this response object

    并且兩者的函數(shù)申明里都有這么樣的一句
    Either this method or getOutputStream() may be called to write the body, not both.
    Either this method or getWriter() may be called to write the body, not both.

    ?以上說(shuō)明也解釋了為什么在往頁(yè)面中寫(xiě)入圖片的時(shí)候要使用如下循環(huán)格式
    OutputStream output=response.getOutputStream();
    ?while((len=in.read(b)) >0)
    ??{
    ??output.write(b,0,len); ?
    ??
    ??}
    ?output.flush();
    而不是把response.getOutputStream().write()放到循環(huán)體內(nèi)


    ]]>
    點(diǎn)滴11月21日http://m.tkk7.com/mphome/archive/2006/11/21/82475.html昨夜人生昨夜人生Tue, 21 Nov 2006 03:25:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/21/82475.htmlhttp://m.tkk7.com/mphome/comments/82475.htmlhttp://m.tkk7.com/mphome/archive/2006/11/21/82475.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/82475.htmlhttp://m.tkk7.com/mphome/services/trackbacks/82475.htmlString s="c:\\dir\\file.txt";
    System.out.println(s.split(\\\\));
    得到c:?? dir?? file.txt

    終于找到了一片好的AOP教程拉,以前看的教程都是一上來(lái)就講Spring關(guān)于AOP的支持,根本看不明白.

    我認(rèn)為講Sping關(guān)于AOP的支持的話(huà)最好先學(xué)習(xí)一下ApestJ.個(gè)人建議,哈哈!

    貼上教程地址:http://www.easyjf.com/spring/spring2-aop.pdf



    ]]>
    記要http://m.tkk7.com/mphome/archive/2006/11/21/82407.html昨夜人生昨夜人生Mon, 20 Nov 2006 16:28:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/21/82407.htmlhttp://m.tkk7.com/mphome/comments/82407.htmlhttp://m.tkk7.com/mphome/archive/2006/11/21/82407.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/82407.htmlhttp://m.tkk7.com/mphome/services/trackbacks/82407.htmljavascript判斷數(shù)字
    function isdigit(s)
    {
    var r,re;
    re = /\d*/i; //\d表示數(shù)字,*表示匹配多個(gè)數(shù)字
    r = s.match(re);
    return (r==s)?1:0;
    }

    request.getParameter("ss") 若ss不存在,值為null
    ??????????????????????????????????????? 若ss的value為空,返回值為""

    明天要看完AOP, 一定一定

    ]]>
    checkbox選取值的獲取http://m.tkk7.com/mphome/archive/2006/11/04/79008.html昨夜人生昨夜人生Fri, 03 Nov 2006 16:49:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/04/79008.htmlhttp://m.tkk7.com/mphome/comments/79008.htmlhttp://m.tkk7.com/mphome/archive/2006/11/04/79008.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/79008.htmlhttp://m.tkk7.com/mphome/services/trackbacks/79008.html? ? ? <input ? type=checkbox ? name="a1" ? value="1">CPU ?
    ? ? ? <input ? type=checkbox ? name="a2" ? value="1">主板 ?
    ? ? ? <input ? type=checkbox ? name="a3" ? value="1">內(nèi)存 ?
    ? 以名稱(chēng)為依據(jù)的判斷: ?
    ? ? ? request.getParameter("a1")==null ?
    ? ?
    ? 二:名稱(chēng)相同,值不同 ?
    ? ? ? <input ? type=checkbox ? name="a" ? value="1">CPU ?
    ? ? ? <input ? type=checkbox ? name="a" ? value="2">主板 ?
    ? ? ? <input ? type=checkbox ? name="a" ? value="3">內(nèi)存 ?
    ? 以值為依據(jù)的判斷: ?
    ? ? ? String[] ? a ? = ? request.getParameterValues("a"); ?
    ? ? ? 看a數(shù)組中是否有相應(yīng)的值。如果選中"CPU",則a[0]="1"??

    ]]>
    commons-fileupload用戶(hù)指南(轉(zhuǎn))http://m.tkk7.com/mphome/archive/2006/11/03/78984.html昨夜人生昨夜人生Fri, 03 Nov 2006 12:51:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/03/78984.htmlhttp://m.tkk7.com/mphome/comments/78984.htmlhttp://m.tkk7.com/mphome/archive/2006/11/03/78984.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/78984.htmlhttp://m.tkk7.com/mphome/services/trackbacks/78984.html根據(jù)你的應(yīng)用需求,fileupload可以有許多不同的使用方式。在最簡(jiǎn)單的情況下,你可以調(diào)用一個(gè)簡(jiǎn)單的方法來(lái)解析servlet請(qǐng)求,然后在他們提交到你的應(yīng)用時(shí)處理表單列表。在其它規(guī)模的終端上,你也可能決定將fileupload進(jìn)行自定義,以完全控制個(gè)別表單項(xiàng)存儲(chǔ)的方法。比如,你或許會(huì)將內(nèi)容流化來(lái)保存到數(shù)據(jù)中。
    在這里。我們將要描述fileupload的基本使用方法,然后解釋一些更簡(jiǎn)單的,以及最常用的使用模式。fileupload的個(gè)性化在這里得到了描述。

    它怎么工作

    一個(gè)文件上傳請(qǐng)求由有序表單項(xiàng)的列表組成,這些表單是根據(jù)RFC1867來(lái)編碼的,是在html中基于表單的文件上傳。fileupload能解析這樣一個(gè)請(qǐng)求然后向你的應(yīng)用提供一個(gè)單獨(dú)的上傳表單項(xiàng)的列表。每一個(gè)這樣的表單項(xiàng)實(shí)現(xiàn)了FileItem接口,而不需要考慮它潛在的實(shí)現(xiàn)方式。每個(gè)文件的表單項(xiàng)擁有一系列可能對(duì)你的應(yīng)用有用的屬性,比如,每個(gè)項(xiàng)目都有一個(gè)名字和文件類(lèi)型,你就可以提供一個(gè)InputStream來(lái)取它的數(shù)據(jù)。從另一方面說(shuō),你可能需要對(duì)這些選項(xiàng)進(jìn)行不同的處理,這個(gè)可以根據(jù)對(duì)這個(gè)選項(xiàng)是不是一個(gè)規(guī)則的表單項(xiàng)來(lái)判斷,即可以根據(jù)這個(gè)數(shù)據(jù)是否來(lái)源于普通的文本框或者一個(gè)簡(jiǎn)單的html表單域,還是一個(gè)能被上傳的文件。FileItem接口提供了多種方法來(lái)判斷它是否是一個(gè)可上傳的文件,然后你就可以用最合適的方式來(lái)處理這些數(shù)據(jù)了。FileUpload使用FileItemFactory來(lái)創(chuàng)建新的文件項(xiàng)目。這正是給FileUpload帶來(lái)靈活性的原因。這個(gè)工廠(chǎng)最終控制每個(gè)項(xiàng)目的創(chuàng)建。默認(rèn)的工廠(chǎng)在內(nèi)存或者磁盤(pán)上保存了項(xiàng)目的數(shù)據(jù),這個(gè)可以根據(jù)項(xiàng)目的大小來(lái)定(例如,字節(jié)數(shù)據(jù))。當(dāng)然,這個(gè)動(dòng)作可以通過(guò)自定義來(lái)滿(mǎn)足你應(yīng)用的需要。

    解析請(qǐng)求

    在你對(duì)要上傳的選項(xiàng)處理之前,很顯然的你得先解析這些請(qǐng)求本身。很直接的就是要確保這個(gè)請(qǐng)求是不是一個(gè)要上傳的文件,然而FileUpload使這一點(diǎn)簡(jiǎn)單化了,你只需提供一個(gè)靜態(tài)的方法來(lái)做到這一點(diǎn)。

    //檢查是否是一個(gè)文件上傳請(qǐng)求
    boolean isMultipart = FileUpload.isMultipartContent(request);


    現(xiàn)在我們就可以準(zhǔn)備解析這個(gè)請(qǐng)求到一個(gè)備選的選項(xiàng)了。解析的結(jié)果是一個(gè)文件選項(xiàng)的List,每個(gè)這樣的選項(xiàng)都實(shí)現(xiàn)了FileItem接口,處理這些選項(xiàng)將在下面得到討論。

    最簡(jiǎn)單的情況

    最簡(jiǎn)單的使用場(chǎng)景可以參照下面:

    • 被上傳得選項(xiàng)必須以適度的大小駐留在內(nèi)存中;
    • 比較大的文件上傳選項(xiàng)必須寫(xiě)入到磁盤(pán)的臨時(shí)文件中去;
    • 大文件上傳請(qǐng)求必須不被允許;
    • 默認(rèn)的駐留內(nèi)存的選項(xiàng)的最大大小,最大允許的上傳文件請(qǐng)求,和臨時(shí)文件的存儲(chǔ)地方是可以接受的;

    在這種情景下處理這樣一個(gè)請(qǐng)求并不是很簡(jiǎn)單的:


    //創(chuàng)建一個(gè)新的文件上傳句柄
    DiskFileUpload upload = new DiskFileUpload();
    //解析請(qǐng)求
    List /* FileItem */ items = upload.parseRequest(request);


    這就是所有我們需要做的,真的!
    解析的結(jié)果是一個(gè)文件項(xiàng)目的List,每一個(gè)都實(shí)現(xiàn)了FileItem接口。處理這些項(xiàng)目將在下面討論。

    練習(xí)更多的控制

    如果你的使用情景非常接近最簡(jiǎn)單的使用方式,在上文中可以看到,但是你需要更多的控制臨界的大小和臨時(shí)文件的駐留地址,你可以使用DiskFileUpload類(lèi)的方法來(lái)自定義這些動(dòng)作,就像這樣:


    //創(chuàng)建一個(gè)新的文件上傳句柄
    DiskFileUpload upload = new DiskFileUpload();
    //設(shè)置上傳參數(shù)
    upload.setSizeThrehold(最大內(nèi)存大小);
    upload.setSizeMax(最大請(qǐng)求大小);
    upload.setRepositoryPath(臨時(shí)目錄);
    //解析請(qǐng)求
    List /* FileItem */ items = upload.parseRequest(request);


    當(dāng)然,每個(gè)配置方法都是獨(dú)立于其它的,但是如果你想一次就配置它們,你可以使用可選的parseRequest()方法,像這樣:


    // 建立一個(gè)新的文件上傳句柄
    DiskFileUpload upload = new DiskFileUpload();
    // 解析請(qǐng)求
    List /* FileItem */ items = upload.parseRequest(request,
    ??????? 內(nèi)存大小, 允許上傳的最大文件, 臨時(shí)目錄);


    如果你想更多地控制請(qǐng)求的解析,比如把上傳選項(xiàng)存儲(chǔ)到其它地方,例如,存到數(shù)據(jù)庫(kù)中-你可以參照自定義FileUpload。

    處理上傳選項(xiàng)

    一旦解析過(guò)程完畢,你就可以獲得一個(gè)文件選項(xiàng)的List,以便進(jìn)一步處理。在大多數(shù)情況下,你將會(huì)根據(jù)規(guī)則的表單域來(lái)不同地處理文件的上傳。所以你可能以這樣的方式來(lái)處理:


    // 處理上傳的選項(xiàng)
    Iterator iter = items.iterator();
    while (iter.hasNext()) {
    ??? FileItem item = (FileItem) iter.next();

    ??? if (item.isFormField()) {
    ??????? processFormField(item);
    ??? } else {
    ??????? processUploadedFile(item);
    ??? }
    }


    對(duì)于一個(gè)規(guī)則的表單域來(lái)說(shuō),你對(duì)它感興趣的可能就只有它的名字以及它的字符串值。你也會(huì)想到,處理它們是簡(jiǎn)單的:


    //處理一個(gè)規(guī)則表單域
    if (item.isFormField()) {
    ??? String name = item.getFieldName();
    ??? String value = item.getString();
    ??? ...
    }


    而對(duì)于一個(gè)文件的上傳,在你處理它的內(nèi)容之前,可以有好多令你想知道的不同的東西,這里有一個(gè)采用了一些你可能感興趣的方法的例子


    // 處理一個(gè)文件上傳
    if (!item.isFormField()) {
    ??? String fieldName = item.getFieldName();
    ??? String fileName = item.getName();
    ??? String contentType = item.getContentType();
    ??? boolean isInMemory = item.isInMemory();
    ??? long sizeInBytes = item.getSize();
    ??? ...
    }


    對(duì)于這些上傳的文件,你一般不想通過(guò)內(nèi)存來(lái)存取它們,除非它們很小,或者你沒(méi)有其它好的方法,更進(jìn)一步,你想將內(nèi)容當(dāng)作文件流來(lái)處理,或者將整個(gè)文件寫(xiě)到最終的地址。FileUpload提供了簡(jiǎn)單的方法來(lái)完成這些 操作。


    // 處理一個(gè)文件上傳的情況
    if (writeToFile) {
    ??? File uploadedFile = new File(...);
    ??? item.write(uploadedFile);
    } else {
    ??? InputStream uploadedStream = item.getInputStream();
    ??? ...
    ??? uploadedStream.close();
    }


    注意到,在默認(rèn)的FileUpload的實(shí)現(xiàn)中,write()方法將嘗試把文件改名以將它保存到特定的地點(diǎn),如果數(shù)據(jù)已經(jīng)在臨時(shí)文件中了,如果重命名失敗,實(shí)際的復(fù)制文件就完成了(?),在其它原因看來(lái),或者數(shù)據(jù)已經(jīng)在內(nèi)存中了。如果你的確需要在內(nèi)存中取上傳的數(shù)據(jù),你只需簡(jiǎn)單的調(diào)用get()方法來(lái)把它當(dāng)作一個(gè)字符數(shù)組來(lái)獲得。



    // 在內(nèi)存中處理一個(gè)上傳的文件
    byte[] data = item.get();
    ...



    和殺毒軟件的相互作用

    當(dāng)web容器在運(yùn)行時(shí),而殺毒軟件又同時(shí)運(yùn)行在同樣的系統(tǒng)上,這種情況下在應(yīng)用中使用FileUpload容易導(dǎo)致一些很難預(yù)料的事情.這部分將描述一些你可能要遇到的情況,我們會(huì)提供一些方法來(lái)處理它們。默認(rèn)的FileUpload實(shí)現(xiàn)將會(huì)使超過(guò)它在內(nèi)存中大小的上傳的選項(xiàng)寫(xiě)入到磁盤(pán)。而當(dāng)這樣的文件關(guān)閉后,任何系統(tǒng)中的殺毒軟件都會(huì)被喚醒,然后去檢查它,然后會(huì)潛在地隔離這個(gè)文件--就是說(shuō),將它移動(dòng)到一個(gè)不產(chǎn)生問(wèn)題的特定地方。這樣一來(lái),對(duì)開(kāi)發(fā)者來(lái)說(shuō)當(dāng)然是一個(gè)意外,因?yàn)閯倓偵蟼鞯奈募⒉荒鼙惶幚砹恕牧硪环矫鎭?lái)說(shuō),小于設(shè)定的內(nèi)存大小的那些上傳的文件將被保持在內(nèi)存中,這樣一來(lái),將不會(huì)被殺毒軟件所檢測(cè)到,這樣就有可能使病毒以某種方式駐留在了系統(tǒng)中了(雖然如果一旦它被寫(xiě)入到磁盤(pán),殺毒軟件就會(huì)定位并檢測(cè)到它)。一個(gè)通用的解決方法是在系統(tǒng)中專(zhuān)門(mén)設(shè)置一個(gè)目錄來(lái)存放這些上傳的文件,然后配置殺毒軟件忽略這個(gè)目錄。這樣將確保上傳的文件在系統(tǒng)中不被隔離,但是這樣就把掃描病毒的責(zé)任交給了應(yīng)用程序的開(kāi)發(fā)者了。掃描這些上傳的文件的任務(wù)可以在外部的處理中實(shí)現(xiàn)。這樣可以將干凈的文件移動(dòng)到一個(gè)“改進(jìn)”過(guò)的地方,或者也可以把殺毒集成到應(yīng)用中去。至于怎么將外部處理或集成病毒掃描到一個(gè)
    應(yīng)用,這個(gè)已經(jīng)超出了本文檔的討論范圍。

    下一步是什么

    希望這個(gè)頁(yè)面能提供給你一個(gè)好的意見(jiàn),讓你在你自己的應(yīng)用中能使用FileUpload。更多關(guān)于這里介紹的方法,以及其它可用的方法,你可以參照api文檔。這里介紹的用法已經(jīng)可以滿(mǎn)足大多數(shù)的文件上傳的需要了,當(dāng)然,如果你還有更多的復(fù)雜的需求,使用它的靈活的自定義配置的能力,F(xiàn)ileUpload一定可以能夠幫助你。

    另一個(gè)實(shí)例:


    commons.fileupload實(shí)現(xiàn)文件的上傳,代碼如下:
    <%!
    ?//服務(wù)器端保存上傳文件的路徑
    ??? String saveDirectory = "g:\\upload\\";
    ??? // 臨時(shí)路徑 一旦文件大小超過(guò)getSizeThreshold()的值時(shí)數(shù)據(jù)存放在硬盤(pán)的目錄
    ??? String tmpDirectory = "g:\\upload\\tmp\\";
    ??? // 最多只允許在內(nèi)存中存儲(chǔ)的數(shù)據(jù)大小,單位:字節(jié)
    ??? int maxPostSize = 1024 * 1024;
    %>
    <%
    ??? // 文件內(nèi)容?
    ??? String FileDescription = null;
    ??? // 文件名(包括路徑)
    ??? String FileName = null;
    ??? // 文件大小
    ??? long FileSize = 0;
    ??? // 文件類(lèi)型
    ??? String ContentType = null;

    %>

    <%
    ?? DiskFileUpload fu = new DiskFileUpload();
    ??? // 設(shè)置允許用戶(hù)上傳文件大小,單位:字節(jié)
    ?? fu.setSizeMax(200*1024*1024);
    ??? // 設(shè)置最多只允許在內(nèi)存中存儲(chǔ)的數(shù)據(jù),單位:字節(jié)
    ?? fu.setSizeThreshold(maxPostSize);
    ??? // 設(shè)置一旦文件大小超過(guò)getSizeThreshold()的值時(shí)數(shù)據(jù)存放在硬盤(pán)的目錄
    ?? fu.setRepositoryPath("g:\\upload\\tmp\\");
    ??? //開(kāi)始讀取上傳信息 得到所有文件
    ?? try{
    ????? List fileItems = fu.parseRequest(request);
    ???? }catch(FileUploadException e){
    ???????? //這里異常產(chǎn)生的原因可能是用戶(hù)上傳文件超過(guò)限制、不明類(lèi)型的文件等
    ???????? //自己處理的代碼
    ???? }
    %>
    <%
    ?? // 依次處理每個(gè)上傳的文件
    ?? Iterator iter = fileItems.iterator();
    ?? while (iter.hasNext()) {
    ???? FileItem item = (FileItem) iter.next();
    ?????? //忽略其他不是文件域的所有表單信息
    ???? if (!item.isFormField()) {
    ?????? String name = item.getName();
    ?????? long size = item.getSize();
    ?????? String? contentType = item.getContentType();
    ???? if((name==null||name.equals("")) && size==0)
    ?????? continue;
    %>
    <%
    ?? //保存上傳的文件到指定的目錄
    ? String[] names=StringUtils.split(name,"\\");? //對(duì)原來(lái)帶路徑的文件名進(jìn)行分割
    ?? name = names[names.length-1];
    ?? item.write(new File(saveDirectory+ name));
    ? }
    }
    %>
    ?下面是其簡(jiǎn)單的使用場(chǎng)景:
    ?A、上傳項(xiàng)目只要足夠小,就應(yīng)該保留在內(nèi)存里。
    ?B、較大的項(xiàng)目應(yīng)該被寫(xiě)在硬盤(pán)的臨時(shí)文件上。
    ?C、非常大的上傳請(qǐng)求應(yīng)該避免。
    ?D、限制項(xiàng)目在內(nèi)存中所占的空間,限制最大的上傳請(qǐng)求,并且設(shè)定臨時(shí)文件的位置。
    ?
    ?可以根據(jù)具體使用用servlet來(lái)重寫(xiě),具體參數(shù)配置可以統(tǒng)一放置到一配置文件
    ?



    ?文件的下載用servlet實(shí)現(xiàn)
    ????? public void doGet(HttpServletRequest request,
    ?????????????????????? HttpServletResponse response)
    ???? {
    ??????? ?String aFilePath = null;??? //要下載的文件路徑
    ???????? String aFileName = null;??? //要下載的文件名
    ???????? FileInputStream in = null;? //輸入流
    ???????? ServletOutputStream out = null;? //輸出流

    ???????? try
    ???{
    ???????? ?
    ???????????? aFilePath = getFilePath(request);
    ???????????? aFileName = getFileName(request);

    ???????????? response.setContentType(getContentType(aFileName) + "; charset=UTF-8");
    ???????????? response.setHeader("Content-disposition", "attachment; filename=" + aFileName);

    ???????????? in = new? FileInputStream(aFilePath + aFileName); //讀入文件
    ??????????? out = response.getOutputStream();
    ??????????? out.flush();
    ?????????? ?int aRead = 0;
    ?????????? while((aRead = in.read()) != -1 & in != null)
    ?????? ?{
    ???????????? out.write(aRead);
    ???????? }
    ?????????? out.flush();
    ????? }
    ?????? catch(Throwable e)
    ???? {
    ???? log.error("FileDownload doGet() IO error!",e);
    ????? }
    ???????? finally
    ???????? {
    ???????????? try
    ???????????? {
    ???????????????? in.close();
    ???????????????? out.close();
    ???????????? }
    ???????????? catch(Throwable e)
    ???????????? {
    ???????????? ?log.error("FileDownload doGet() IO close error!",e);
    ???????????? }
    ???????? }
    ???? }






    ]]>
    轉(zhuǎn)貼 jsp生成隨機(jī)圖片 http://m.tkk7.com/mphome/archive/2006/11/03/78809.html昨夜人生昨夜人生Thu, 02 Nov 2006 16:02:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/03/78809.htmlhttp://m.tkk7.com/mphome/comments/78809.htmlhttp://m.tkk7.com/mphome/archive/2006/11/03/78809.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/78809.htmlhttp://m.tkk7.com/mphome/services/trackbacks/78809.html??? 原型參考ALIBABA http://china.alibaba.com/member/showimage 產(chǎn)生驗(yàn)證碼圖片的文件image.jsp

    <%@ page contentType="image/jpeg" import="java.awt.*,
    java.awt.image.*,java.util.*,javax.imageio.*" %>
    <%!
    Color getRandColor(int fc,int bc){//給定范圍獲得隨機(jī)顏色
    ??????? Random random = new Random();
    ??????? if(fc>255) fc=255;
    ??????? if(bc>255) bc=255;
    ??????? int r=fc+random.nextInt(bc-fc);
    ??????? int g=fc+random.nextInt(bc-fc);
    ??????? int b=fc+random.nextInt(bc-fc);
    ??????? return new Color(r,g,b);
    ??????? }
    %>
    <%
    //設(shè)置頁(yè)面不緩存
    response.setHeader("Pragma","No-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setDateHeader("Expires", 0);

    // 在內(nèi)存中創(chuàng)建圖象
    int width=60, height=20;
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

    // 獲取圖形上下文
    Graphics g = image.getGraphics();

    //生成隨機(jī)類(lèi)
    Random random = new Random();

    // 設(shè)定背景色
    g.setColor(getRandColor(200,250));
    g.fillRect(0, 0, width, height);

    //設(shè)定字體
    g.setFont(new Font("Times New Roman",Font.PLAIN,18));

    //畫(huà)邊框
    //g.setColor(new Color());
    //g.drawRect(0,0,width-1,height-1);

    // 隨機(jī)產(chǎn)生155條干擾線(xiàn),使圖象中的認(rèn)證碼不易被其它程序探測(cè)到
    g.setColor(getRandColor(160,200));
    for (int i=0;i<155;i++)
    {
    ?int x = random.nextInt(width);
    ?int y = random.nextInt(height);
    ??????? int xl = random.nextInt(12);
    ??????? int yl = random.nextInt(12);
    ?g.drawLine(x,y,x+xl,y+yl);
    }

    // 取隨機(jī)產(chǎn)生的認(rèn)證碼(4位數(shù)字)
    String sRand="";
    for (int i=0;i<4;i++){
    ??? String rand=String.valueOf(random.nextInt(10));
    ??? sRand+=rand;
    ??? // 將認(rèn)證碼顯示到圖象中
    ??? g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
    //調(diào)用函數(shù)出來(lái)的顏色相同,可能是因?yàn)榉N子太接近,所以只能直接生成
    ??? g.drawString(rand,13*i+6,16);
    }

    // 將認(rèn)證碼存入SESSION
    session.setAttribute("rand",sRand);

    // 圖象生效
    g.dispose();

    // 輸出圖象到頁(yè)面
    ImageIO.write(image, "JPEG", response.getOutputStream());
    %>


    使用驗(yàn)證碼圖片的文件a.jsp

    <%@ page contentType="text/html;charset=gb2312" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>認(rèn)證碼輸入頁(yè)面</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="0">
    </head>
    <body>
    <form method=post action="check.jsp">
    <table>
    <tr>
    <td align=left>系統(tǒng)產(chǎn)生的認(rèn)證碼:</td>
    <td><img border=0 src="image.jsp"></td>
    </tr>
    <tr>
    <td align=left>輸入上面的認(rèn)證碼:</td>
    <td><input type=text name=rand maxlength=4 value=""></td>
    </tr>
    <tr>
    <td colspan=2 align=center><input type=submit value="提交檢測(cè)"></td>
    </tr>
    </form>
    </body>
    </html>


    驗(yàn)證的頁(yè)面check.jsp

    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <html>
    <head>
    <title>認(rèn)證碼驗(yàn)證頁(yè)面</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="0">
    </head>

    <body>
    <%
    ?String rand = (String)session.getAttribute("rand");
    ?String input = request.getParameter("rand");
    %>
    系統(tǒng)產(chǎn)生的認(rèn)證碼為: <%= rand %><br>
    您輸入的認(rèn)證碼為: <%= input %><br>
    <br>
    <%
    ? if (rand.equals(input)) {
    %>
    <font color=green>輸入相同,認(rèn)證成功!</font>
    <%
    ? } else {
    %>
    <font color=red>輸入不同,認(rèn)證失敗!</font>
    <%
    ? }
    %>
    </body>
    </html>



    ]]>
    Blog開(kāi)題http://m.tkk7.com/mphome/archive/2006/11/02/78785.html昨夜人生昨夜人生Thu, 02 Nov 2006 13:45:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/02/78785.htmlhttp://m.tkk7.com/mphome/comments/78785.htmlhttp://m.tkk7.com/mphome/archive/2006/11/02/78785.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/78785.htmlhttp://m.tkk7.com/mphome/services/trackbacks/78785.html
    ??? 記錄以下今天寫(xiě)程序時(shí)的總結(jié):

    ?????? 1.不要將ResultSet的對(duì)象通過(guò)setAttribute來(lái)傳遞,應(yīng)為如果對(duì)應(yīng)的connection關(guān)閉的話(huà)ResultSet會(huì)失效的。
    ?????? 2.Hibernate中的CreateQuery("from Table as a where a.name =?")? 中的name是其*.bml.htm中定義的字段和數(shù)據(jù)庫(kù)中的字段是不同的。
    ?????? 3.Struts中使用普通的表單元素
    ?????????????<html:form action="/register.do">
    ??????????????????用戶(hù)名:<html:text property="username"/><br/>
    ????????????????? 密碼1: <html:text property="password1"/><br/>
    ??????????????????密碼2:<html:text property="password2"/><br/>
    ????????????
    ?????????????????????????????? <html:submit value="Register"/>
    ???????????</html:form>?? 可以
    ????????????<html:form action="/register.do">
    ??????????????????用戶(hù)名:<input type="button"><br/>
    ?????????????????
    ???????????</html:form>?? 可以

    ??????? <form action="/register.do">
    ??????????? <input type="text" name="username" value="" /><br/>
    ??????????? <input type="text" name="password1" value="" /><br/>
    ??????????? <input type="text" name="password2" value="" /><br/>
    ??????????? <input type="submit" value="ok" />
    ??????? </form>??不可以
    ??
    ???????? 注意Form的action,如果用struts標(biāo)簽的話(huà)"/"表示當(dāng)前web應(yīng)用的根目錄,如果用html標(biāo)記的話(huà)"/"表示localhost的根目錄。第三種
    ??????????? 把/register.do?改成register.do。

    ??? 感覺(jué)自己編寫(xiě)的代碼太沒(méi)有質(zhì)量拉 ,要多看看別人的代碼,學(xué)會(huì)總結(jié)。
    ??
    ?? 還有英語(yǔ)作文要寫(xiě),哦還有車(chē)牌識(shí)別系統(tǒng)? ,事情真多? 。

    ?? 明天繼續(xù).byby

    ]]>
    主站蜘蛛池模板: 2048亚洲精品国产| 久久精品国产精品亚洲艾草网美妙 | 国产亚洲精品国看不卡| 狼色精品人妻在线视频免费| 国产免费人视频在线观看免费| 亚洲av无码专区在线观看下载| 日韩人妻无码免费视频一区二区三区 | 一区在线免费观看| 亚洲一区二区三区在线视频 | 亚洲国产精品18久久久久久| 精品少妇人妻AV免费久久洗澡| 亚洲人成网站在线在线观看| 好爽又高潮了毛片免费下载| 亚洲精品无AMM毛片| 美女被免费视频网站a国产| 亚洲国产成人精品无码一区二区| 好先生在线观看免费播放| 久久99久久成人免费播放| 亚洲午夜激情视频| 精品国产污污免费网站入口在线| 久久亚洲精品无码播放| 你是我的城池营垒免费看| 亚洲AV无码久久| 91大神免费观看| 亚洲影院天堂中文av色| 国产成人精品高清免费| 搜日本一区二区三区免费高清视频| jlzzjlzz亚洲乱熟在线播放| 精品国产免费人成网站| 亚洲邪恶天堂影院在线观看| 无码乱肉视频免费大全合集| 亚洲AV无码一区二区一二区| 亚洲第一页综合图片自拍| 国内精品免费久久影院| 亚洲一区影音先锋色资源| 成人影片麻豆国产影片免费观看| 亚洲AV网一区二区三区| 亚洲熟伦熟女新五十路熟妇| 免费日本一区二区| 亚洲国产91精品无码专区| 国产免费区在线观看十分钟|