<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zyskm用夢(mèng)想丈量人生,用奔跑丈量激情

    2012年6月19日 #

    分布式模式之Broker模式

    轉(zhuǎn)發(fā) http://blog.chinaunix.net/uid-23093301-id-90459.html 問題來源: 創(chuàng)建一個(gè)游戲系統(tǒng),其將運(yùn)行在互聯(lián)網(wǎng)的環(huán)境中。客戶端通過WWW服務(wù)或特定的客戶端軟件連接到游戲服務(wù)器,隨著流量的增加,系統(tǒng)不斷的膨脹,最終后臺(tái)數(shù)據(jù)、業(yè)務(wù)邏輯被分布式的部署。然而相比中心化的系統(tǒng),復(fù)雜度被無可避免的增大了,該如何降低各個(gè)組件之間的耦合度。 挑戰(zhàn): 需要保證可伸縮性、可維護(hù)性、可更新性,需要將服務(wù)劃分為各個(gè)相對(duì)獨(dú)立的組件,組件被分布式的部署,它們之間通過進(jìn)程間通信方式實(shí)現(xiàn)交互。服務(wù)的增加、刪除、改變都應(yīng)該被支持。理想情況,以開發(fā)者的角度看,集中化的系統(tǒng)和分布式的系統(tǒng)在中心邏輯上沒有什么不同。為實(shí)現(xiàn)這個(gè)目標(biāo): l 可以遠(yuǎn)程的訪問服務(wù),而對(duì)于訪問者,服務(wù)的位置應(yīng)該是透明的。 l 提供服務(wù)的組件可以增加、刪除、改變,而且這些在運(yùn)行期同樣應(yīng)該被支持。 l 訪問服務(wù)的客戶端不應(yīng)該關(guān)心服務(wù)的實(shí)現(xiàn)細(xì)節(jié)。 解決方案: 引入一個(gè)Broker組件,解耦客戶端和服務(wù)端。服務(wù)端注冊(cè)自己到Broker,通過暴露接口的方式允許客戶端接入服務(wù)。客戶端是通過Broker發(fā)送請(qǐng)求的,Broker轉(zhuǎn)發(fā)請(qǐng)求道服務(wù)端,并將請(qǐng)求的結(jié)果或異常回發(fā)給客戶端。通過使用Broker模式,應(yīng)用可以通過發(fā)送消息訪問遠(yuǎn)程的服務(wù)。 這一架構(gòu)模式允許動(dòng)態(tài)的改變、添加、刪除服務(wù)端,從客戶端的角度,這些都是透明的。 結(jié)構(gòu): Broker模式定義了6中類:Client,Server,Client_Proxy,Server_Proxy,Broker,Bridge。 Server: l 責(zé)任:處理特定領(lǐng)域的問題,實(shí)現(xiàn)服務(wù)的細(xì)節(jié),注冊(cè)自己到Broker,處理請(qǐng)求并返回結(jié)果或異常。 l 協(xié)作類:Server_Proxy,Broker Client: Client是需要訪問遠(yuǎn)程服務(wù)的應(yīng)用程序,為此,Client發(fā)送請(qǐng)求到Broker,并從Broker上接收響應(yīng)或異常。Client和Server只是邏輯上相關(guān)而已,實(shí)際上Client并不知道Server的確切位置。 l 責(zé)任:1. 實(shí)現(xiàn)用戶端功能,2. 發(fā)送請(qǐng)求到Broker,3. 接收相應(yīng)和異常。 l 協(xié)作類:Broker,Client_Proxy Broker: Broker可以被看成消息轉(zhuǎn)發(fā)器。Broker也負(fù)責(zé)一些控制和管理操作。它能夠定位服務(wù)端的位置,若發(fā)生異常,能夠?qū)惓2东@傳給Client。Broker需要提供注冊(cè)服務(wù)的接口給Server。如果請(qǐng)求來自其他的Broker,本地的Broker需要轉(zhuǎn)發(fā)請(qǐng)求并最終將結(jié)果或異常回應(yīng)給相應(yīng)的遠(yuǎn)程Broker。Broker提供的服務(wù)和name service非常相像(如DNS、LDAP)。 l 責(zé)任:1. 注冊(cè)服務(wù)。2. 提供服務(wù)API。3. 轉(zhuǎn)發(fā)消息。4. 容錯(cuò)處理。5. 與其他Broker的交互。6。 定位服務(wù)。 l 協(xié)作類:Client_Proxy,Server_Proxy,Bridge Client_Proxy: 連系Client和Broker,這一層保證了通訊的透明性,使Client調(diào)用遠(yuǎn)程服務(wù)就像調(diào)用本地的服務(wù)一樣。 l 責(zé)任:1. 封裝特定的系統(tǒng)調(diào)用。2. 封裝通訊的參數(shù)、控制信息等。 l 協(xié)作類:Client,Broker。 Server_Proxy: Server_proxy是與Client_Proxy相對(duì)應(yīng)的,它接受請(qǐng)求,解包消息,解析出參數(shù)并調(diào)用服務(wù)的實(shí)現(xiàn)接口。 l 責(zé)任:1. 封裝特定的系統(tǒng)調(diào)用。2. 封裝通訊的參數(shù)、控制信息等。3. 調(diào)用server的服務(wù)接口。 l 協(xié)作類:Server,Broker。 Bridge: Bridge用來連接各個(gè)Broker,一般這個(gè)組件是可選的。當(dāng)系統(tǒng)是發(fā)雜的網(wǎng)絡(luò)組成時(shí),有可能需要這一角色。 l 責(zé)任:1. 封裝特定的網(wǎng)絡(luò)特性。2. 傳遞Broker之間的通訊。 l 協(xié)作類:Broker。 應(yīng)用場(chǎng)景一: 直接通訊方式。Client和Server相互理解他們之間的通訊協(xié)議。Broker主要完成Client和Server之間的握手。之后所有的消息、異常都是由Client與Server直接交互。(想象DNS)。簡(jiǎn)單對(duì)象交互如圖: 應(yīng)用場(chǎng)景二: l Broker啟動(dòng),完成自身的初始化,之后進(jìn)入事件循環(huán),等待消息到來。 l Server啟動(dòng),首先執(zhí)行自身的初始化,然后注冊(cè)自己到Broker。 l Broker接收Server的注冊(cè)請(qǐng)求,將其加入到可使用服務(wù)的列表,并回應(yīng)Ack給Server。 l Server接收Ack,進(jìn)入事件監(jiān)聽循環(huán),等待消息到來。 l Client調(diào)用遠(yuǎn)程服務(wù)對(duì)象的方法,Client_Proxy封裝消息請(qǐng)其發(fā)送給Broker。 l Broker查詢可使用的Server,將請(qǐng)求轉(zhuǎn)發(fā)給Server。 l Server_Proxy解析消息,分離出參數(shù)和控制信息,并調(diào)用特定的Server實(shí)現(xiàn)接口。Server處理完的結(jié)果通過Server_proxy封裝成消息轉(zhuǎn)發(fā)到Server。 l Broker將相應(yīng)消息轉(zhuǎn)發(fā)給正確的Client_Proxy,Client受到響應(yīng)繼續(xù)其他邏輯。 簡(jiǎn)單對(duì)象交互如圖: 應(yīng)用場(chǎng)景三: l Broker A接收到請(qǐng)求,交由Server處理,但是發(fā)現(xiàn)該Server位于其他的網(wǎng)絡(luò)節(jié)點(diǎn)。 l Broker A將請(qǐng)求轉(zhuǎn)發(fā)給Bridge A,Bridge A將請(qǐng)求進(jìn)行必要的格式化,傳送給Bridge B。 l Bridge B將請(qǐng)求進(jìn)行必要的格式化,轉(zhuǎn)化成Broker B可以理解的格式,并轉(zhuǎn)發(fā)給Broker B。Broker B執(zhí)行場(chǎng)景二中的過程,處理的結(jié)果按如上逆序返回。 簡(jiǎn)單對(duì)象交互如圖: 部署示意圖: 總結(jié): u 優(yōu)點(diǎn): 1. 服務(wù)的位置透明性。 2. 組件的可變性及擴(kuò)展性。由于Server是注冊(cè)到Broker上的,所以Server可以動(dòng)態(tài)的增加、刪除、改變。 3. Broker之間可交互。 4. 可重用性。 5. 由于組件的耦合度較小,調(diào)試和測(cè)試的工作也是可控的。 u 缺點(diǎn): 1. 效率;增加了一層Broker的消息轉(zhuǎn)發(fā),效率有所降低。 2. 容錯(cuò)能力必須要特別考慮。 3. 調(diào)試和測(cè)試的工作加大。

    posted @ 2015-10-26 10:32 zyskm 閱讀(257) | 評(píng)論 (0)編輯 收藏

    專家思維

    大師的非凡能力來源于何處?思維方式是關(guān)鍵。科學(xué)證據(jù)告訴人們,沒有天生的大師,只有煉就的專家。只要擁有專家的思維,你就能成為大師! 1909年的一天。多張象棋桌圍成了一個(gè)圈,一個(gè)男子在圈內(nèi)慢慢踱步。他的雙眼不斷掃描周圍的棋局,每隔兩三秒鐘就會(huì)下一步棋。而在圈外,數(shù)十位象棋迷不停地搔頭、苦想對(duì)策。這個(gè)人是誰(shuí)?為什么他能以一人之力抗衡數(shù)十人的智慧?他就是國(guó)際象棋界的傳奇人物,古巴象棋大師卡帕布蘭卡(José Raúl Capablanca)。比賽結(jié)果毫無懸念,卡帕布蘭卡28局全勝。這只是他巡回表演賽中的一站,在整個(gè)巡回表演賽中,卡帕布蘭卡贏了168局。 為什么眨眼間他就能作出最正確的決定?面臨巨大的壓力,他能提前計(jì)算幾步?卡帕布蘭卡輕描淡寫地說:“我只提前看一步,但總是最正確的一步。” 這句話再簡(jiǎn)單不過,卻開創(chuàng)了心理學(xué)研究的新紀(jì)元:象棋大師優(yōu)于新手的地方就在于那電光火石間的思考。這種快速的、由知識(shí)引導(dǎo)的知覺,有時(shí)叫做“領(lǐng)悟”。在其他領(lǐng)域,專家們同樣具有“領(lǐng)悟”的本領(lǐng)。一次比賽完畢,象棋大師能記住自己走過的每一步棋;對(duì)于一段音樂,哪怕只聽過一遍,資深音樂家也能寫出樂章的曲譜。無論多么困難,象棋大師也能在瞬間想到最妙的棋著;不管多么復(fù)雜,經(jīng)驗(yàn)豐富的專業(yè)內(nèi)科醫(yī)生有時(shí)只須瞥上病人幾眼,就能作出準(zhǔn)確的診斷。 專家們的非凡技藝從何而來?源于天賦,還是得益于強(qiáng)化訓(xùn)練?通過對(duì)象棋大師的研究,心理學(xué)家找到了答案。一個(gè)世紀(jì)的探索積累了大量研究成果,新的理論應(yīng)運(yùn)而生,人腦處理信息(信息的組織與提取)之謎也由此破解。這項(xiàng)研究的意義還不僅在于此,人類的教育事業(yè)也將從中受益:象棋棋手提高棋藝的技巧,可否用于提高學(xué)生們的閱讀、寫作和計(jì)算能力呢? 象棋是最好的研究對(duì)象 人類何時(shí)開始擁有專業(yè)技術(shù)?這也許要從祖先們的狩獵說起。對(duì)于他們而言,狩獵技術(shù)是維系生命的重要工具,不掌握它就難以生存。經(jīng)驗(yàn)豐富的獵人不僅知道獅子在哪里出沒,而且還能推斷出獅子的行蹤。從孩提時(shí)代開始,他們就得跟隨長(zhǎng)輩練習(xí)追蹤技術(shù)。隨著年齡的增長(zhǎng),追蹤技術(shù)也日益嫻熟。“技術(shù)的熟練程度隨著年齡的增長(zhǎng)而增長(zhǎng),35歲左右達(dá)到技術(shù)的巔峰,”美國(guó)加利福尼亞大學(xué)富勒頓分校的人類學(xué)家約翰?博克(John Bock)說道。練習(xí)追蹤技術(shù)要花費(fèi)很多時(shí)間,可能比培養(yǎng)優(yōu)秀的腦外科醫(yī)生還要費(fèi)事。 相對(duì)于新手,如果在技術(shù)上沒有絕對(duì)優(yōu)勢(shì),那就難稱專家,只不過是多了一張唬人的文憑。這種披著專家外衣的人比比皆是。過去20年的研究結(jié)果表明,所謂的專業(yè)炒股者并不比業(yè)余者賺的錢多;知名品酒家對(duì)酒類的鑒別能力并不比饞酒的老農(nóng)強(qiáng);高學(xué)歷的精神病醫(yī)生并不比低文憑的同行出色……即使真的存在專業(yè)技術(shù),如教學(xué)、工商管理,都很難去衡量,更別提如何去闡釋。 不過,棋藝卻可以度量、可以分解、可以接受試驗(yàn)研究,并且十分直觀,尤其在比賽時(shí),任何人都能隨時(shí)觀看。正是基于以上原因,認(rèn)知科學(xué)家如獲至寶,將象棋作為研究思維理論的最佳試驗(yàn)對(duì)象。于是象棋被稱作“認(rèn)知科學(xué)的果蠅”。 對(duì)象棋手棋藝的度量,已經(jīng)走在了其他任何比賽、運(yùn)動(dòng)或競(jìng)技活動(dòng)的前面。運(yùn)用統(tǒng)計(jì)學(xué)公式,對(duì)棋手曾獲得的所有成績(jī)進(jìn)行分析,就可以得到棋手的實(shí)力等級(jí)。然后根據(jù)棋手的等級(jí)與對(duì)手的實(shí)力,即可準(zhǔn)確地推算出棋手的獲勝幾率。如果A棋手的等級(jí)分高于B棋手200點(diǎn),那么在比賽中,A戰(zhàn)勝B的平均幾率為75%。不管棋手是頂級(jí)的還是普通的,這種預(yù)測(cè)都很準(zhǔn)確。例如,俄羅斯特級(jí)象棋大師加里?卡斯帕羅夫(Garry Kasparov),他的等級(jí)分是2812點(diǎn),而荷蘭象棋大師揚(yáng)?蒂曼(Jan Timman)的等級(jí)分是2616點(diǎn)。如果二者對(duì)弈,那么卡斯帕羅夫就有75%的勝算。同樣,中等水平的棋手(1200點(diǎn))與另一個(gè)1000點(diǎn)的棋手對(duì)弈,前者亦有75%的勝算。選手的等級(jí)分代表著他們的真正實(shí)力,以選手的等級(jí)為標(biāo)準(zhǔn),心理學(xué)家就可以客觀地評(píng)估他們的專業(yè)技術(shù),動(dòng)態(tài)追蹤他們整個(gè)象棋生涯,而不會(huì)受到選手名氣的影響。 為什么認(rèn)知科學(xué)家沒有選擇臺(tái)球或橋牌作為研究模型,而偏偏選擇象棋呢?可能是因?yàn)橄笃灞荣愖羁简?yàn)人的智慧。正如德國(guó)詩(shī)人歌德所言,象棋是“智慧的試金石”。象棋大師的技藝出神入化,令人嘆為觀止,人們將他們的能力歸因于他們“擁有魔力”的大腦。這種魔力在下盲棋時(shí)體現(xiàn)得淋漓盡致。法國(guó)心理學(xué)家阿爾弗雷德?比奈(Alfred Binet)是首個(gè)智力測(cè)驗(yàn)的發(fā)明人之一。1894年,他曾請(qǐng)象棋大師描述他們下棋的過程。起初,他認(rèn)為棋盤就像照片一樣存在于象棋大師的大腦中,但是他很快斷定,大師們大腦中的圖像還要抽象得多。他們整體把握棋子的位置關(guān)系而不注重具體細(xì)節(jié),就像只關(guān)心馬而不關(guān)心馬的鬃毛一樣。 通過把握比賽的即時(shí)細(xì)節(jié)以及回想走過的棋步,盲棋大師能將腦海中的棋局補(bǔ)充完整。假設(shè)大師忘記了卒的準(zhǔn)確位置,該怎么辦呢?他立即開始回想開局時(shí)的套路,因?yàn)樵陂_局時(shí),套路相對(duì)固定,而且已經(jīng)爛熟于胸,因此很容易找到卒曾經(jīng)所在的位置。他也可以回憶走過的棋步,通過推理來找到卒的位置――“前兩步我沒能抓住他的相,所以當(dāng)時(shí)一定有卒在擋路……”他不必糾纏細(xì)節(jié)不放,利用組織完善的連接系統(tǒng),可以重獲任何想要的細(xì)節(jié)。 如果大師們的魔力――超凡的計(jì)算、計(jì)劃能力都是以復(fù)雜的知識(shí)結(jié)構(gòu)為基礎(chǔ),那么就可以肯定,專業(yè)技術(shù)多半來源于刻苦訓(xùn)練,而非上天的恩賜。荷蘭心理學(xué)家阿德里安?德赫羅特(Adriaan de Groot)是一位象棋大師。1938年,荷蘭舉行了一場(chǎng)國(guó)際象棋錦標(biāo)賽,他利用主場(chǎng)之便,對(duì)普通棋手、專業(yè)棋手與世界頂級(jí)大師進(jìn)行比較后,進(jìn)一步鞏固了上述觀點(diǎn)。他曾使用的一種方法就是請(qǐng)棋手觀看節(jié)選自比賽的棋局,然后說出自己的想法。他發(fā)現(xiàn),盡管專業(yè)棋手的分析能力要比普通棋手強(qiáng),但是當(dāng)他們的實(shí)力提升至大師級(jí)時(shí),反而不會(huì)去思索更多的下法。因?yàn)樵诟呤值男闹校粫?huì)留下最妙的棋著――正如卡帕布蘭卡聲稱的那樣。 近來研究表明,德赫羅特的發(fā)現(xiàn)只展示了象棋大師的部分實(shí)力。在一場(chǎng)對(duì)弈中,如果大量而精確的計(jì)算無法避免時(shí),大師們就會(huì)拿出真功夫,深入研究各種可能的棋步走法。這種能力,會(huì)讓普通棋手望塵莫及。同樣,知識(shí)淵博的物理學(xué)家遭遇難題時(shí),也會(huì)比他的學(xué)生想出更多的解決辦法。然而在上述兩種情況下,專家依靠的不是與生俱來的強(qiáng)大的分析能力,而是多年來逐漸建立起來的知識(shí)結(jié)構(gòu)。面對(duì)困難的棋局,一個(gè)實(shí)力平平的棋手可能會(huì)耗費(fèi)大半個(gè)小時(shí)去計(jì)算、提前看許多步,然而總是錯(cuò)過最正確的一步。相反,一個(gè)大師級(jí)的棋手根本不用有意識(shí)地去分析,立即就能看到精妙入微的一步。 德赫羅特還讓參加試驗(yàn)的棋手在短時(shí)間內(nèi)審視棋局,然后憑記憶重建棋局。在這樣的試驗(yàn)條件下,任何棋手的實(shí)力都會(huì)暴露無遺。就算用長(zhǎng)達(dá)30秒鐘的時(shí)間去回憶棋局,新手能記起的細(xì)節(jié)也是支離破碎的。而象棋大師,即使只瞟上幾眼,也能輕松重建棋局。這種差別源于一種特殊記憶,也就是對(duì)棋局的特異性記憶。特殊記憶是訓(xùn)練的結(jié)果,因?yàn)樵谝话阈缘挠洃洔y(cè)試中,大師的表現(xiàn)并不比其他人好。 同樣的現(xiàn)象還能從橋牌牌手(多場(chǎng)牌局后,仍記得出過的牌)、計(jì)算機(jī)程序設(shè)計(jì)師(能重組大量的計(jì)算機(jī)編碼)和音樂家(能記住大段大段的樂章)身上看到。在特殊領(lǐng)域,對(duì)主題事務(wù)的記憶能力,是衡量專業(yè)技術(shù)水平的重要標(biāo)準(zhǔn)。 一個(gè)不常見的案例也能證明,知識(shí)結(jié)構(gòu)才是專家們戰(zhàn)無不勝的法寶。一個(gè)叫D.H(姓名不全)的業(yè)余棋手,經(jīng)過9年的訓(xùn)練,終于在1987年成為了加拿大一流的象棋大師。美國(guó)佛羅里達(dá)州立大學(xué)的心理學(xué)教授尼爾?蔡內(nèi)斯(Neil Charness)指出,盡管這個(gè)棋手的實(shí)力已經(jīng)今非昔比,但是他對(duì)棋局的分析范圍并不比從前廣泛,反而是日益精深的棋局知識(shí)和相關(guān)策略幫助他連連告捷。 非凡能力來自何方 在上世紀(jì)60年代,美國(guó)卡耐基-梅隆大學(xué)的心理學(xué)家赫伯特?西蒙(Herbert Simon,1978年諾貝爾獎(jiǎng)得主)和威廉?蔡斯(William Chase),試圖通過研究專家的記憶局限性來更好地洞察專家的記憶能力。按照德赫羅特的研究思路,他們請(qǐng)各個(gè)級(jí)別的棋手重建曾被人動(dòng)過的棋局。不過這盤棋局不是大師對(duì)弈后的殘局,而是一盤亂擺的棋局。在重建這盤隨機(jī)棋局時(shí),棋手間的差距并不明顯。 因此,象棋運(yùn)動(dòng)中的特異性記憶不只取決于象棋這項(xiàng)運(yùn)動(dòng),還取決于棋局的類型。這些實(shí)驗(yàn)驗(yàn)證了早期的研究結(jié)果,有力地證明了能力的非通用性,不同的領(lǐng)域需要不同的能力。早在一個(gè)世紀(jì)前,美國(guó)心理學(xué)家愛德華?桑代克(Edward Thorndike)就首先提出了上述理論。當(dāng)時(shí)他指出,拉丁語(yǔ)說得好不等于英語(yǔ)水平高,幾何證明也不能教會(huì)人們?cè)谌粘I钪羞\(yùn)用邏輯思維。 象棋大師要處理的信息,數(shù)量極其龐大,似乎已經(jīng)超越了人類記憶的極限。為了解釋他們這種超凡的能力,西蒙引入了模塊理論。1956年,美國(guó)普林斯頓大學(xué)的心理學(xué)家喬治?米勒(George Miller)曾發(fā)表過一篇著名的論文――《非凡的數(shù)字7±2》。米勒在論文中指出,人的記憶有一定的限度,每次只能處理5~9條信息。西蒙強(qiáng)調(diào)說,通過把不同層次的信息構(gòu)建成一個(gè)一個(gè)模塊,大師就能突破記憶的極限。通過這種方法,他們會(huì)去捕捉5~9個(gè)模塊,而不是5~9個(gè)具體細(xì)節(jié)。 以“Mary had a little lamb”(瑪麗有一只小羊羔)這句詩(shī)為例。詩(shī)里的信息模塊數(shù)取決于讀者對(duì)詩(shī)歌與英語(yǔ)的熟悉程度。對(duì)于以英語(yǔ)為母語(yǔ)的人,這句詩(shī)是一個(gè)非常大的模塊――著名詩(shī)歌的一部分;對(duì)于懂英語(yǔ)卻不懂詩(shī)歌的人,這就是一句話――一個(gè)完整的模塊;對(duì)于記得單詞卻不明白含義的人,這句話是5個(gè)模塊(單詞);而對(duì)于認(rèn)得字母,卻不認(rèn)識(shí)單詞的人,這句詩(shī)就是18個(gè)模塊(字母)! 在象棋新手和象棋大師之間就能清楚地看到這種差別。假如有一個(gè)擺著20個(gè)棋子的棋局放在面前,新手和大師會(huì)怎么處理其中的信息呢?新手滿眼都是棋格,而棋子又有多種擺法,因此他獲取的信息模塊遠(yuǎn)多于20個(gè)。那么大師呢?他會(huì)將棋局整體化,然后把整個(gè)棋局分割成5~6個(gè)模塊,這樣記起來不就輕松多了!根據(jù)獲取一個(gè)新的記憶模塊所花掉的時(shí)間,以及普通棋手成長(zhǎng)為大師級(jí)選手所需要的時(shí)間,西蒙估算出了象棋大師的大腦中存儲(chǔ)的信息模塊數(shù):5萬(wàn)~10萬(wàn)個(gè)!就像我們聽?zhēng)讉€(gè)字就能背出一首古詩(shī)一樣,象棋大師只要看一眼棋局,就能從記憶中提取出相應(yīng)的信息模塊。 但是模塊理論還有缺陷。對(duì)一些記憶現(xiàn)象,例如當(dāng)大師們精力分散時(shí),他們的表現(xiàn)并沒有受到明顯影響,模塊理論就無法給出合理的解釋。佛羅里達(dá)州立大學(xué)的K?安德斯?埃里克森(K. Anders Ericsson)與蔡內(nèi)斯認(rèn)為,可能還存在另外一種機(jī)制,使得專家可以把長(zhǎng)時(shí)記憶當(dāng)作暫存區(qū)使用。埃里克森說:“訓(xùn)練有素的棋手在不看棋盤的情況下,能以幾乎正常的水平下棋,要用模塊理論來解釋這樣的事例,幾乎不可能。因?yàn)槟惚仨毾攘私馄寰郑缓蟛拍茉谟洃浿邪阉鰜怼?#8221;這一處理過程需要改變已有的信息模塊,就像倒背 “Mary had a little lamb”,雖然可以做到,但是很難,而且還會(huì)錯(cuò)誤不斷。然而在下盲棋的時(shí)候,象棋大師仍然可以精準(zhǔn)快速地下棋,讓對(duì)手無所適從。 埃里克森還引證了內(nèi)科醫(yī)生的學(xué)習(xí)過程。醫(yī)生們先把信息變?yōu)殚L(zhǎng)時(shí)記憶,當(dāng)需要使用這些信息來診斷疾病時(shí),再把它從記憶中提取出來。埃里克森還列舉了一個(gè)最普通、最常見的例子――閱讀。1995年,他在研究中發(fā)現(xiàn),越是熟練的讀者越不容易受到干擾。就算閱讀被打斷,熟練的讀者也能在幾秒鐘的時(shí)間內(nèi)恢復(fù)原有的閱讀速度。研究人員用長(zhǎng)時(shí)工作記憶來解釋這一現(xiàn)象。這一說法似乎自相矛盾,因?yàn)殚L(zhǎng)時(shí)記憶與工作記憶是兩個(gè)相互對(duì)立的概念。不過在2001年,德國(guó)康斯坦茨大學(xué)進(jìn)行的大腦成像研究卻為這一說法提供了依據(jù)。研究結(jié)果表明,較之新手,專業(yè)棋手的長(zhǎng)時(shí)記憶顯然更容易激活。 上世紀(jì)90年代末期,西蒙曾提出過一種競(jìng)爭(zhēng)理論。英國(guó)倫敦布魯內(nèi)爾大學(xué)的費(fèi)爾南德?戈貝特(Fernand Gobet)對(duì)它推崇備至。競(jìng)爭(zhēng)理論實(shí)際上是模塊理論的延伸,它引入了“模板”的概念,也就是一種極其典型并包含了大約12只棋子的大型布局。模板擁有許多插口,大師可以插入卒或者相這樣的變量。再以詩(shī)句“Mary had a little lamb”為例,如果某個(gè)詞的韻律與詩(shī)句中的詞等同,那么就可以用這個(gè)詞來替換詩(shī)中的詞。例如,用“Larry”替代“Mary”,用“pool”來替代“school”等等。任何知道原始模塊的人,都能在瞬間插入另一個(gè)詞。 天才是怎樣“煉”成的 要想在大腦中建立復(fù)雜的知識(shí)結(jié)構(gòu),就得不斷努力。西蒙提出了“十年規(guī)則”,他認(rèn)為要掌握任何技藝,十年的艱辛歷程是無法避免的。即便是數(shù)學(xué)天才高斯,音樂奇才莫扎特,象棋神童菲舍爾,也得去拼搏、去奮斗,也許他們所付出的努力是常人難以想象的。 近年來,象棋天才似乎不斷涌現(xiàn),但這都?xì)w因于計(jì)算機(jī)的強(qiáng)大功能。計(jì)算機(jī)能讓孩子們研究海量的大師級(jí)比賽,頻繁地與大師級(jí)程序?qū)梗谑窃谳^短的時(shí)間內(nèi),他們就能積累豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)。1958年,15歲的菲舍爾獲得了象棋大師的稱號(hào),當(dāng)時(shí)這一消息震驚了全世界。而目前的記錄保持者、烏克蘭的謝爾蓋?卡爾亞金(Sergey Karjakin)獲得大師稱號(hào)時(shí),僅有12歲零7個(gè)月! 埃里克森認(rèn)為,光是練習(xí)遠(yuǎn)遠(yuǎn)不夠,還需要全身心投入,不斷挑戰(zhàn)極限、超越自我。就像業(yè)余愛好者,他們可能會(huì)用大量的時(shí)間來練習(xí)下棋、打高爾夫球、演奏樂器,卻始終達(dá)不到專業(yè)水平;然而一個(gè)經(jīng)過正規(guī)訓(xùn)練的學(xué)生,卻能在較短的時(shí)間內(nèi)超過他們。這是一個(gè)很有趣的現(xiàn)象,說明練習(xí)和比賽對(duì)棋手的幫助似乎不如踏踏實(shí)實(shí)地學(xué)習(xí)。訓(xùn)練和比賽的主要價(jià)值在于,新手可以從中發(fā)現(xiàn)自己的缺陷,從而在以后逐漸彌補(bǔ)。 在學(xué)習(xí)初期,新手往往興趣濃厚,鉆研勁兒十足。他們剛開始學(xué)習(xí)打高爾夫球或者開車時(shí),技術(shù)的進(jìn)步速度可用“神速”二字來形容。但是技術(shù)一旦攀升到一定的階段,例如跟上了高爾夫球友的節(jié)奏,或者考取了駕照,大多數(shù)人就松懈了。于是,他們變得懶散,技術(shù)也被荒廢。相反,訓(xùn)練專家總是讓人不停地思考,因此參與學(xué)習(xí)的人就會(huì)自覺自律地去鉆研、不斷提高技術(shù),從而縮小與高手之間的差距。 人類在進(jìn)步,衡量專業(yè)水平的技術(shù)標(biāo)準(zhǔn)也在不斷提高。現(xiàn)在的高中生能在4分鐘內(nèi)跑完一英里(約合1.6公里);學(xué)音樂的學(xué)生敢于演奏曾經(jīng)只有名家才敢嘗試的曲子。如果說上述比較還不能讓人信服,那么我們?cè)賮砜纯聪笃迳系淖C據(jù)。英國(guó)人約翰?納恩(John Nunn)既是數(shù)學(xué)家,又是象棋大師。他利用計(jì)算機(jī),比較了1911年和1993年舉行的兩屆國(guó)際象棋錦標(biāo)賽。結(jié)果發(fā)現(xiàn),現(xiàn)代棋手出錯(cuò)的幾率要小很多,換言之,他們比前輩們下得更準(zhǔn)確。納恩還研究了1911年的一個(gè)棋手下過的所有棋局。在當(dāng)時(shí),這個(gè)棋手算是一個(gè)中等級(jí)別的選手。按照今天的標(biāo)準(zhǔn),他的等級(jí)分不會(huì)多于2100點(diǎn),離大師級(jí)標(biāo)準(zhǔn)還有一大段距離。與普通棋手相比,百年前的大師仍然實(shí)力強(qiáng)勁,不過與今天的大師相比,可能就有一定的差距。 在卡帕布蘭卡的那個(gè)時(shí)代,計(jì)算機(jī)、象棋數(shù)據(jù)庫(kù)都還沒有出現(xiàn),他們只能靠自己解決一切問題,正如巴赫、莫扎特和貝多芬。如果說今天的大師在技術(shù)上已經(jīng)超越了曾經(jīng)名滿天下的先輩們,然而在創(chuàng)造力方面他們卻難以望其項(xiàng)背。今天,剛畢業(yè)的物理學(xué)博士掌握的物理知識(shí),恐怕連牛頓也要自嘆弗如,但是在這些博士中,有誰(shuí)能像當(dāng)年的牛頓一樣發(fā)現(xiàn)萬(wàn)有引力定律? 說到這里,很多懷疑論者的耐心可能會(huì)蕩然無存。他們肯定會(huì)說,要步入卡耐基殿堂,除了練習(xí)、練習(xí)、再練習(xí)之外,還要付出更多的東西。雖然相信天資的重要性,尤其是專家和他們的學(xué)生對(duì)此深信不疑,然而奇怪的是,沒有任何證據(jù)來支持這一觀點(diǎn)。2002年,戈貝特曾做過一項(xiàng)研究。研究中,他用圖形記憶測(cè)驗(yàn)衡量各級(jí)別棋手的視覺空間智能。結(jié)果發(fā)現(xiàn),棋藝的高低與視覺空間智能的強(qiáng)弱根本沒有聯(lián)系。還有研究人員發(fā)現(xiàn),職業(yè)裁判預(yù)見賽馬結(jié)果的能力與他們的數(shù)學(xué)能力也沒有什么關(guān)系。 ... ...

    posted @ 2014-10-16 15:32 zyskm 閱讀(252) | 評(píng)論 (0)編輯 收藏

    信息熵

         摘要: 熵是信息理論中非常重要的一個(gè)概念,用來度量信息,在實(shí)踐中大量使用。
    信息檢索最重要的概念TF/IDF(term frequency/inverse document frequency)就是基于信息熵理論。搜索引擎、新聞分類、文本相似度計(jì)算都使用這個(gè)概念。  閱讀全文

    posted @ 2014-06-12 14:45 zyskm 閱讀(1855) | 評(píng)論 (6)編輯 收藏

    Chomsky文法

    看Chomsky的書是因?yàn)樵诰幾g原理課程中多次提到這個(gè)人,這是個(gè)變態(tài)天才,神一般的存在,而且還是活的。
    Chomsky的語(yǔ)言學(xué)理論觀點(diǎn)在語(yǔ)言學(xué)、心理學(xué)和哲學(xué)領(lǐng)域都產(chǎn)生了廣泛而深刻的影響。Chomsky的哲學(xué)思想是一個(gè)貫穿了唯實(shí)論、自然主義和心智主義的連貫的、完整的體系。這一體系的核心是內(nèi)在語(yǔ)言理論。但是這一理論觀點(diǎn)與傳統(tǒng)觀點(diǎn)分歧很大 ,因此遭受到哲學(xué)界的強(qiáng)烈攻擊。Chomsky正是在這些爭(zhēng)論的過程中不斷地發(fā)現(xiàn)問題并對(duì)自己的理論和觀點(diǎn)進(jìn)行修改和補(bǔ)充 ,從而使其哲學(xué)系統(tǒng)乃至語(yǔ)言學(xué)理論系統(tǒng)更趨完善。哲學(xué)問題咱不關(guān)心這么無聊的問題留給哲學(xué)家們?nèi)コ丁?/p>

    理論方法
    Chomsky語(yǔ)言學(xué)的理論方法概況起來講,是自然科學(xué)中形式主義的演繹方法,用Chomsky自己的話講,叫伽利略研究風(fēng)格(Galileo Style),像伽利略為宇宙建立抽象的數(shù)學(xué)模型一樣,構(gòu)建有關(guān)語(yǔ)言知識(shí)的抽象數(shù)學(xué)模型,相信類似數(shù)學(xué)一樣的形式主義的演繹推理模型具有自足自明的真理性。Chomsky的語(yǔ)言研究所追求的是從世界各種語(yǔ)言五花八門的句子樣式中抽象出幾個(gè)簡(jiǎn)單的句法規(guī)則。

    Chomsky的句法結(jié)構(gòu)一書中把語(yǔ)言學(xué)看成跟自然科學(xué)中的其他科學(xué)一樣,可以從假設(shè)出發(fā),進(jìn)行推演并形式化。換句話說,非經(jīng)驗(yàn)主義是可能的。《句法結(jié)構(gòu)》有一半篇幅用于英語(yǔ)語(yǔ)法的形式化。非經(jīng)驗(yàn)主義和形式化是轉(zhuǎn)換生成語(yǔ)法的首要標(biāo)志。
     
    把句法關(guān)系作為語(yǔ)言結(jié)構(gòu)的中心并以此說明語(yǔ)句的生成是這場(chǎng)革命的又一表現(xiàn)。為了描寫和解釋語(yǔ)言現(xiàn)象,Chomsky在《句法結(jié)構(gòu)》中論證了語(yǔ)法的生成能力,認(rèn)為應(yīng)該把語(yǔ)法看成是能生成無限句子的有限規(guī)則系統(tǒng)。
     
    它以"核心句"為基礎(chǔ),通過轉(zhuǎn)換規(guī)則描寫和分析不同句式之間的內(nèi)在聯(lián)系。該書分析了以"馬爾可夫過程"為基礎(chǔ)的通訊理論,認(rèn)為它只能生成有限狀態(tài)的語(yǔ)法,而這種"有限狀態(tài)的語(yǔ)法"不能生成象英語(yǔ)這種語(yǔ)言里含有不連續(xù)結(jié)構(gòu)的所有合乎語(yǔ)法的句子。基于此,喬姆斯基提出了轉(zhuǎn)換語(yǔ)法模式,認(rèn)為它才能生成所有合乎語(yǔ)法的句子而不會(huì)生成不合乎語(yǔ)法的句子。轉(zhuǎn)換語(yǔ)法模式由短語(yǔ)結(jié)構(gòu)規(guī)則、轉(zhuǎn)換規(guī)則、語(yǔ)素音位規(guī)則三套規(guī)則構(gòu)成。
     
    短語(yǔ)結(jié)構(gòu)規(guī)則有三種:合并、遞歸、推導(dǎo)式,其基本形式是x→y 。→讀作"改寫",這個(gè)公式就是將x改寫成y。短語(yǔ)結(jié)構(gòu)規(guī)則生成的是"核心語(yǔ)符列",不經(jīng)過轉(zhuǎn)換直接由這種語(yǔ)符列得出的基本句型叫"核心句"。
     
    轉(zhuǎn)換規(guī)則包括:移位、刪略、添加。最后運(yùn)用語(yǔ)素音位規(guī)則得出實(shí)際說出的句子。這三套規(guī)則中,最引人注目的是轉(zhuǎn)換規(guī)則,因?yàn)槎陶Z(yǔ)結(jié)構(gòu)規(guī)則和語(yǔ)素音位規(guī)則實(shí)際上繼承了描寫語(yǔ)言學(xué)的"直接成分分析"和語(yǔ)素音位的分析,轉(zhuǎn)換是一種創(chuàng)新,它使語(yǔ)法具有更強(qiáng)的解釋力。
     
    《句法結(jié)構(gòu)》把語(yǔ)義排除在語(yǔ)法之外,這一時(shí)期的理論框架不包括語(yǔ)義部分。喬姆斯基認(rèn)為,語(yǔ)法理論不應(yīng)該建立在語(yǔ)義的基礎(chǔ)上,而應(yīng)該用某種嚴(yán)格的、客觀的方法去代替對(duì)于模糊的語(yǔ)義的依賴。不過這一理論在后來的發(fā)展中做了重大的修正。

    Chomsky 定義的四種形式語(yǔ)言文法中, 0 型文法又稱為 ( A )文法; 1 型文法又稱為 ( C ) 文法; 2 型語(yǔ)言可由 ( G ) 識(shí)別。
    A .短語(yǔ)結(jié)構(gòu)文法 B 前后文無關(guān)文法 C 前后文有關(guān)文法 D 正規(guī)文法
    E 圖靈機(jī) F 有限自動(dòng)機(jī) G 下推自動(dòng)機(jī)
    文法是用來定義語(yǔ)言的一個(gè)模型,常用的文法體系為Chomsky文法體系。
     
    文法定義
     
    文法G(Grammar)是一個(gè)四原組,G=(N,T,P,S),N(Non-terminator)是非終結(jié)符集合,T(Terminator)是終結(jié)符集合,P(Production)是產(chǎn)生式集合,S(Start)是起始符
     
    其中:
     
    N 交 T = 空集
     
    P 是形式為 α -> β 的產(chǎn)生式
     
       α ∈  (N∪T)*N+(N∪T)*,也就是說α中必須有一個(gè)非終結(jié)符
     
       β ∈  (N∪T)* ,也就是說β可以是空串
     
    S∈N
     
     
     
    分類
     
    0型文法(短語(yǔ)文法或無限制文法),識(shí)別0語(yǔ)言的機(jī)器叫做圖靈機(jī)

      定義:P中產(chǎn)生式a-->b,其中a屬于V正閉包且至少含有一個(gè)非終結(jié)符,b屬于V星閉包

      注:任何0型文法都是可遞歸可枚舉的

        對(duì)0型文法作某些限制,可以得到其他文法的定義

    1型文法 又稱上下文有關(guān)文法。生成式形式為 α->β, 且 |α| < |β| 并且不存在 A->ε
     
    2型文法 又稱上下文無關(guān)文法。生成式形式為 A->α,即左邊必須只有一個(gè)非終結(jié)符
     
    3型文法 又稱正則文法。
     
                 生成式 A->wB或A->w,稱為右線性文法
     
                 生成式 A->Bw或A->w,稱為左線性文法
     
    0型文法 對(duì)生成式?jīng)]有任何限制的文法稱為0型文法。從0到3都是包含的關(guān)系,但是有特例,包含  A->ε 產(chǎn)生式的2,3型文法不屬于1型文法。
     
    四種文法產(chǎn)生的語(yǔ)言分別稱為 上下文有關(guān)語(yǔ)言,上下文無關(guān)語(yǔ)言,正則語(yǔ)言,無限制性語(yǔ)言。
     
     
     
    2型語(yǔ)言的表示法
     
    2型語(yǔ)言是很重要的一種語(yǔ)言,除了用四元組的方法表示,此處再介紹兩種表示方法。
     
    當(dāng)人們要解釋或者討論程序設(shè)計(jì)語(yǔ)言本身時(shí),經(jīng)常又需要一種語(yǔ)言,被討論的語(yǔ)言叫做對(duì)象語(yǔ)言,即某種程序設(shè)計(jì)語(yǔ)言,討論對(duì)象語(yǔ)言的語(yǔ)言稱為元語(yǔ)言,即元語(yǔ)言是描述語(yǔ)言的語(yǔ)言。BNF范式通常被作為討論某種程序設(shè)計(jì)語(yǔ)言語(yǔ)法的元語(yǔ)言,而語(yǔ)法圖是與BNF范式的描述能力等價(jià)的另一種文法表示形式,因其直觀性而經(jīng)常采用。
     
    (1)巴科斯范式(Backus Normal Form,BNF)
     
    2型文法生成式左端只有一個(gè)非終結(jié)符,所以可以把左端相同的生成式合并在一起,右端用|隔開,用::=代替->,所有非終結(jié)符用<>括起來,這是Backus為了描述AIGOL語(yǔ)言首次提出并使用的。
     
    用BNF描述十進(jìn)制整數(shù)的生成語(yǔ)法:
     
    <無符號(hào)整數(shù)> ::= <數(shù)字>|<數(shù)字><無符號(hào)整數(shù)>
     
    <數(shù)字> ::= 0|1|2|3|4|5|6|7|8|9
     
    (2)語(yǔ)法圖
     
    語(yǔ)法圖有四種基本形式
     
    (3)推導(dǎo)樹
     
    2型文法還經(jīng)常用推導(dǎo)樹表示

    posted @ 2013-06-24 11:25 zyskm 閱讀(2562) | 評(píng)論 (0)編輯 收藏

    通過antlr語(yǔ)法文件學(xué)習(xí)java---strictfp

      節(jié)選自java.g
    modifiers 
        :
        (    annotation
        |   'public'
        |   'protected'
        |   'private'
        |   'static'
        |   'abstract'
        |   'final'
        |   'native'
        |   'synchronized'
        |   'transient'
        |   'volatile'
        |   'strictfp'
        )*
        ;Strictfp —— Java 關(guān)鍵字。
      strictfp, 即 strict float point (精確浮點(diǎn))。
      strictfp 關(guān)鍵字可應(yīng)用于類、接口或方法。使用 strictfp 關(guān)鍵字聲明一個(gè)方法時(shí),該方法中所有的float和double表達(dá)式都嚴(yán)格遵守FP-strict的限制,符合IEEE-754規(guī)范。當(dāng)對(duì)一個(gè)類或接口使用 strictfp 關(guān)鍵字時(shí),該類中的所有代碼,包括嵌套類型中的初始設(shè)定值和代碼,都將嚴(yán)格地進(jìn)行計(jì)算。嚴(yán)格約束意味著所有表達(dá)式的結(jié)果都必須是 IEEE 754 算法對(duì)操作數(shù)預(yù)期的結(jié)果,以單精度和雙精度格式表示。
      如果你想讓你的浮點(diǎn)運(yùn)算更加精確,而且不會(huì)因?yàn)椴煌挠布脚_(tái)所執(zhí)行的結(jié)果不一致的話,可以用關(guān)鍵字strictfp.

    posted @ 2013-06-09 10:27 zyskm 閱讀(1973) | 評(píng)論 (0)編輯 收藏

    java靜態(tài)導(dǎo)入

    import語(yǔ)句可以導(dǎo)入一個(gè)類或某個(gè)包中的所有類

    import static語(yǔ)句導(dǎo)入一個(gè)類中的某個(gè)靜態(tài)成員(方法或?qū)傩裕┗蛩徐o態(tài)成員

    語(yǔ)法舉例:

    import static java.lang.Math.sin;

    import static java.lang.Math.*;

    例子:


    //導(dǎo)入Math類中的所有static方法和屬性。 
    //這樣我們?cè)谑褂眠@些方法和屬性時(shí)就不必寫類名。 
    import static java.lang.Math.*;//import static java.lang.Math;//這樣寫報(bào)錯(cuò)  
    public class StaticImport { 
           public static void main(String[] args) { 
    //            System.out.println(Math.max(3, 5));//沒有使用靜態(tài)導(dǎo)入 
    //            System.out.println(Math.abs(1-9));//沒有使用靜態(tài)導(dǎo)入 
                  System.out.println(max(3, 5)); 
                  System.out.println(abs(1-9)); 
           }

    注意:1默認(rèn)包無法用靜態(tài)導(dǎo)入。

    2如果導(dǎo)入的類中有重復(fù)的方法和屬性則需要寫出類名,否則編譯時(shí)無法通過。

     
    }

    posted @ 2013-06-09 10:23 zyskm 閱讀(2043) | 評(píng)論 (0)編輯 收藏

    dbcompare---數(shù)據(jù)庫(kù)結(jié)構(gòu)比較工具

    概述:
    在設(shè)計(jì)開發(fā)過程中經(jīng)常會(huì)出現(xiàn)開發(fā)庫(kù)與測(cè)試庫(kù)不一致,測(cè)試庫(kù)與生產(chǎn)庫(kù)不一致,每次手工比對(duì)是個(gè)辛苦的活。
    以前用java寫過一個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)比較工具,最近騰出功夫來學(xué)習(xí)了一下python,用python重寫了一下,已經(jīng)提交到了github和sourceforage.
    版本控制使用github
    https://github.com/zhengys/dbcompare.git
    sourceforage上邊放了exe文件(用pyinstaller打包的程序發(fā)現(xiàn)在部分win7上不能正常工作,又用py2exe打包了一個(gè)64位版本的,已經(jīng)上傳sourceforage  , 感謝itshu的反饋)
    http://sourceforge.net/projects/databasecompare/files/
    通過這個(gè)工具可以做到簡(jiǎn)單明了的看出區(qū)別。
    對(duì)于數(shù)據(jù)庫(kù)和設(shè)計(jì)文檔不一致的情況,目前只能是先根據(jù)文檔生成數(shù)據(jù)庫(kù),再和原來的庫(kù)做比對(duì)。未來考慮增加powerdesinger和數(shù)據(jù)庫(kù)的間直接比較。
    目前只支持oracle,mysql,sqlserver,要是用的人多了再增加其它類型的數(shù)據(jù)庫(kù)。

    使用:
    功能類似文本比較工具,分別輸入數(shù)據(jù)庫(kù)連接信息,在結(jié)果頁(yè)面顯示比對(duì)結(jié)果。
    操作很簡(jiǎn)單看圖就知道怎么用了。
    如圖:


    打包說明
    一開始用py2exe打包,發(fā)現(xiàn)在winxp下用不了
    改用pyinstaller打包,360會(huì)誤認(rèn)為是木馬攔截,文件夾形式打包,比較占地方,壓縮后也得36MB.
    可根據(jù)源碼自行打包。


    posted @ 2013-05-14 23:49 zyskm 閱讀(4396) | 評(píng)論 (3)編輯 收藏

    SOCKS5協(xié)議的原理和應(yīng)用(轉(zhuǎn)載)

    首先解釋一下為什么它被稱之為SOCKS。其實(shí)該協(xié)議設(shè)計(jì)之初是為了讓有權(quán)限的用戶可以穿過過防火墻的限制,使得高權(quán)限用戶可以訪問一般用戶不能訪問的外部資源。當(dāng)時(shí)設(shè)計(jì)者考慮到幾乎所有使用TCP/IP通信的應(yīng)用軟件都使用socket(套接字,實(shí)際上是一組應(yīng)用程序接口)完成底層的數(shù)據(jù)通信。為了方便軟件開發(fā)者使用該協(xié)議,協(xié)議設(shè)計(jì)者就刻意對(duì)應(yīng)了幾組socket編程最經(jīng)典的操作,并且將協(xié)議定名為SOCKS。


    最先被廣泛使用的SOCKS協(xié)議是其第四版本,就是SOCKS4。IE和一些其他應(yīng)用程序直接用“Socks”表示SOCKS4協(xié)議。該版本支持TCP的connect(作為客戶端連接)和listen(打開一個(gè)監(jiān)聽端口),不支持UDP協(xié)議。SOCKS4A對(duì)SOCKS4作了一點(diǎn)增強(qiáng),即允許客戶端將域名發(fā)送給SOCKS服務(wù)器,讓SOCKS服務(wù)器進(jìn)行域名解析。


    SOCKS5是第五版,相對(duì)第四版作了大幅度的增強(qiáng)。首先,它增加了對(duì)UDP協(xié)議的支持;其次,它可以支持多種用戶身份驗(yàn)證方式和通信加密方式;最后,修改了SOCKS服務(wù)器進(jìn)行域名解析的方法,使其更加優(yōu)雅。經(jīng)過這次脫胎換骨的升級(jí),SOCKS5于1996年被IETF確認(rèn)為標(biāo)準(zhǔn)通信協(xié)議,RFC編號(hào)為1928。經(jīng)過10余年的時(shí)間,大量的網(wǎng)絡(luò)應(yīng)用程序都支持SOCKS5代理。


    SOCKS5雖然可以支持多種用戶身份驗(yàn)證方式,但是應(yīng)用程序真正實(shí)現(xiàn)的一般也只有兩種:不驗(yàn)證和用戶名密碼驗(yàn)證。所以大多數(shù)應(yīng)用程序SOCKS5代理設(shè)置也只有用戶名/密碼這一種可選驗(yàn)證方法。另外,盡管從SOCKS4開始,就支持打開TCP監(jiān)聽端口,但是直到SOCKS5,也只允許這個(gè)端口接收一個(gè)客戶端連接。因此網(wǎng)絡(luò)服務(wù)提供者(如http服務(wù)器)不能使用SOCKS。實(shí)際上,很多SOCKS服務(wù)器的實(shí)現(xiàn)也不支持打開TCP監(jiān)聽端口。


    由于SOCKS5實(shí)際上仍然對(duì)應(yīng)了socket的經(jīng)典操作,所以有人利用這一點(diǎn)編寫了一種通用軟件,可以讓不支持SOCKS5協(xié)議的應(yīng)用軟件也能通過SOCKS5服務(wù)器進(jìn)行網(wǎng)絡(luò)通信,而應(yīng)用軟件則對(duì)此一無所知。這類軟件最著名的莫過于SocksCap32了,它是Permeo公司(其前身是NEC北美公司的一個(gè)部門,而SOCKS最初就是NEC北美公司的工程師開發(fā)并維護(hù)的)早期推出的一款產(chǎn)品。用戶可以免費(fèi)使用其試用版。試用版和正式版相比,沒有功能上的限制,只有使用時(shí)間的限制。但是到目前為止,Permeo總是會(huì)在老版本到期之前推出一個(gè)延后了期限的“新”版本,所以用戶實(shí)際上可以免費(fèi)使用。SocksCap32是利用API鉤子,截獲應(yīng)用軟件對(duì)socket函數(shù)的調(diào)用來實(shí)現(xiàn)對(duì)SOCKS5客戶端的模擬。盡管SocksCap32很有名,但是由于推出的時(shí)間較早,對(duì)很多現(xiàn)代應(yīng)用軟件時(shí)常表現(xiàn)的力不從心,所以Permeo又提供了Permeo
    Security
    Driver(以下稱為PSD)。這款產(chǎn)品使用了驅(qū)動(dòng)技術(shù)從底層直接截獲應(yīng)用軟件的socket通信,因此幾乎可以為所有應(yīng)用軟件提供SOCKS5客戶端的支持。PSD不提供試用版,但是可以找到其早期版本的注冊(cè)碼。


    雖然說設(shè)計(jì)SOCKS協(xié)議的初衷是在保證網(wǎng)絡(luò)隔離的情況下,提高部分人員的網(wǎng)絡(luò)訪問權(quán)限,但是國(guó)內(nèi)似乎很少有組織機(jī)構(gòu)這樣使用。一般情況下,大家都會(huì)使用更新的網(wǎng)絡(luò)安全技術(shù)來達(dá)到相同的目的。但是由于SocksCap32和PSD這類軟件,人們找到了SOCKS協(xié)議新的用途——突破網(wǎng)絡(luò)通信限制,這和該協(xié)議的初衷實(shí)際上正好相反。比如某些網(wǎng)游的部分服務(wù)器設(shè)置為只接收部分地區(qū)的IP地址的連接。為了突破這種限制,可以找一個(gè)該地區(qū)的SOCKS5代理服務(wù)器,然后用PSD接管網(wǎng)游客戶端,通過SOCKS5代理服務(wù)器連接游戲服務(wù)器。這樣游戲服務(wù)器就會(huì)認(rèn)為該客戶端位于本地區(qū),從而允許進(jìn)行游戲。還有一種情況是:防火墻僅允許部分端口(如http的80端口)通信,那么可以利用SOCKS5協(xié)議和一個(gè)打開80端口監(jiān)聽的SOCKS5服務(wù)器連接,從而可以連接公網(wǎng)上其他端口的服務(wù)器。利用一些額外的技術(shù)手段,甚至可以騙過內(nèi)部的http代理服務(wù)器,這時(shí)在使用內(nèi)網(wǎng)http代理上網(wǎng)的環(huán)境下也可以不受限制的使用網(wǎng)絡(luò)服務(wù),這稱之為SOCKS
    over HTTP。通通通([url]www.tongtongtong.com[/url])是老牌SOCKS over
    HTTP代理提供商,實(shí)現(xiàn)了所有的SOCKS5的連接功能,且有多組國(guó)內(nèi)外服務(wù)器。信天游([url]www.xtyproxy.com[/url]),則是最近剛剛出現(xiàn)的代理服務(wù)提供商,功能和通通通相比還有差距,但是目前完全免費(fèi)。當(dāng)然,使用代理服務(wù)器后,將不可避免的出現(xiàn)通信延遲,所以應(yīng)該盡量選擇同網(wǎng)絡(luò)(指網(wǎng)通/
    電信),距離近的服務(wù)器。

    sock5代理的工作程序是:

    1.需要向代理方服務(wù)器發(fā)出請(qǐng)求信息。
    2.代理方應(yīng)答
    3.需要代理方接到應(yīng)答后發(fā)送向代理方發(fā)送目的ip和端口
    4.代理方與目的連接
    5.代理方將需要代理方發(fā)出的信息傳到目的方,將目的方發(fā)出的信息傳到需要代理方。代理完成。
    由于網(wǎng)上的信息傳輸都是運(yùn)用tcp或udp進(jìn)行的,所以使用socks5代理可以辦到網(wǎng)上所能辦到的一切,而且不輿目的方會(huì)查到你的ip,既安全又方
    便
    sock5支持UDP和TCP,但兩種代理是有區(qū)別的,以下分類說明
    如何用代理TCP協(xié)議
    1.向服務(wù)器的1080端口建立tcp連接。
    2.向服務(wù)器發(fā)送
    05 01 00 (此為16進(jìn)制碼,以下同)
    3.如果接到 05 00 則是可以代理
    4.發(fā)送 05 01 00 01 + 目的地址(4字節(jié)) +
    目的端口(2字節(jié)),目的地址和端口都是16進(jìn)制碼(不是字符串!!)。 例202.103.190.27 -7201 則發(fā)送的信息為:05 01 00 01 CA
    67 BE 1B 1C 21 (CA=202 67=103 BE=190 1B=27
    1C21=7201)
    5.接受服務(wù)器返回的自身地址和端口,連接完成
    6.以后操作和直接與目的方進(jìn)行TCP連接相同。
    如何用代理UDP連接
    1.向服務(wù)器的1080端口建立udp連接
    2.向服務(wù)器發(fā)送
    05 01 00
    3.如果接到 05 00 則是可以代理
    4.發(fā)送 05 03 00 01 00 00 00 00 +
    本地UDP端口(2字節(jié))
    5.服務(wù)器返回 05 00 00 01 +服務(wù)器地址+端口
    6.需要申請(qǐng)方發(fā)送 00 00 00 01
    +目的地址IP(4字節(jié))+目的端口 +所要發(fā)送的信息
    7.當(dāng)有數(shù)據(jù)報(bào)返回時(shí) 向需要代理方發(fā)出00 00 00 01 +來源地址IP(4字節(jié))+來源端口
    +接受的信息
    注:此為不需要密碼的代理協(xié)議,只是socks5的一部分,完整協(xié)議請(qǐng)RFC1928

    posted @ 2013-03-01 14:18 zyskm 閱讀(9827) | 評(píng)論 (0)編輯 收藏

    linux 怎么完全卸載mysql數(shù)據(jù)庫(kù)

    在linux下開發(fā),mysql數(shù)據(jù)庫(kù)是經(jīng)常用到的,對(duì)于初學(xué)者來說,在linux怎么安裝卸載mysql數(shù)據(jù)庫(kù),也許可能比較痛苦,這里簡(jiǎn)單介紹下,怎么卸載msql數(shù)據(jù)庫(kù)。

    a)查看系統(tǒng)中是否以rpm包安裝的mysql

    1. [root@linux ~]# rpm -qa | grep -i mysql 
    2. MySQL-server-5.1.49-1.glibc23 
    3. MySQL-client-5.1.49-1.glibc23 
    卸載MySQL-server-5.1.49-1.glibc23和MySQL-client-5.1.49-1.glibc23
    1. [root@linux ~]# rpm -e MySQL-client-5.1.49-1.glibc23 
    2. [root@linux ~]# rpm -e MySQL-server-5.1.49-1.glibc23 
    b)查看有沒有mysql服務(wù)

     

    1. [root@linux ~]# chkconfig --list | grep -i mysql 
    2. mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off 
    刪除mysql服務(wù)
    1. [root@linux ~]# chkconfig --del mysql 
    c)刪除分散mysql文件夾
    1. [root@linux ~]# whereis mysql 
    2. mysql: /usr/lib/mysql /usr/share/mysql 
    分別刪除
    1. [root@linux lib]# rm -rf /usr/lib/mysql/ 
    2. [root@linux lib]# rm -rf /usr/share/mysql 

    通過以上幾步,mysql應(yīng)該已經(jīng)完全卸載干凈了
    原文地址:http://blog.csdn.net/love__coder/article/details/6894566

    posted @ 2012-11-29 17:13 zyskm 閱讀(22113) | 評(píng)論 (0)編輯 收藏

    linux 安裝應(yīng)用程序

    一、 解析Linux應(yīng)用軟件安裝包:

         通常Linux應(yīng)用軟件的安裝包有三種:

         1) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系統(tǒng)的打包工具tar打包的。
         2) rpm包,如software-1.2.3-1.i386.rpm。它是Redhat Linux提供的一種包封裝格式。
         3) dpkg包,如software-1.2.3-1.deb。它是Debain Linux提供的一種包封裝格式。
          而且,大多數(shù)Linux應(yīng)用軟件包的命名也有一定的規(guī)律,它遵循:
         名稱-版本-修正版-類型
         例如:
         1) software-1.2.3-1.tar.gz 意味著:
         軟件名稱:software
         版本號(hào):1.2.3
         修正版本:1
          類型:tar.gz,說明是一個(gè)tar包。
         2) sfotware-1.2.3-1.i386.rpm
         軟件名稱:software
         版本號(hào):1.2.3
         修正版本:1
         可用平臺(tái):i386,適用于Intel 80x86平臺(tái)。
         類型:rpm,說明是一個(gè)rpm包。
         注:由于rpm格式的通常是已編譯的程序,所以需指明平臺(tái)。在后面會(huì)詳細(xì)說明。
         而software-1.2.3-1.deb就不用再說了吧!大家自己練習(xí)一下。
       二、 了解包里的內(nèi)容:
         一個(gè)Linux應(yīng)用程序的軟件包中可以包含兩種不同的內(nèi)容:
         1) 一種就是可執(zhí)行文件,也就是解開包后就可以直接運(yùn)行的。在Windows中所 有的軟件包都是這種類型。安裝完這個(gè)程序后,你就可以使用,但你看不到源程序。而且下載時(shí)要注意這個(gè)軟件是否是你所使用的平臺(tái),否則將無法正常安裝。
         2) 另一種則是源程序,也就解開包后,你還需要使用編譯器將其編譯成為可執(zhí)行文件。這在Windows系統(tǒng)中是幾乎沒有的,因?yàn)閃indows的思想是不開放源程序的。
         通常,用tar打包的,都是源程序;而用rpm、dpkg打包的則常是可執(zhí)行程序。一般來說,自己動(dòng)手編譯源程序能夠更具靈活性,但也容易遇到各種問題和困難。而相對(duì)來說,下載那些可執(zhí)行程序包,反而是更容易完成軟件的安裝,當(dāng)然那樣靈活性就差多了。所以一般一個(gè)軟件總會(huì)提供多種打包格式的安裝程序的。你可以根據(jù)自己的情況來選擇。
       三、 搞定使用tar打包的應(yīng)用軟件
         1. 安裝:
         整個(gè)安裝過程可以分為以下幾步:
         1) 取得應(yīng)用軟件:通過下載、購(gòu)買光盤的方法獲得;
         2)解壓縮文件:一般tar包,都會(huì)再做一次壓縮,如gzip、bz2等,所以你需要先解壓。如果是最常見的gz格式,則可以執(zhí)行:“tar –xvzf 軟件包名”,就可以一步完成解壓與解包工作。如果不是,則先用解壓軟件,再執(zhí)行“tar –xvf 解壓后的tar包”進(jìn)行解包;
         3) 閱讀附帶的INSTALL文件、README文件;
         4) 執(zhí)行“./configure”命令為編譯做好準(zhǔn)備;
         5) 執(zhí)行“make”命令進(jìn)行軟件編譯;
         6) 執(zhí)行“make install”完成安裝;
         7) 執(zhí)行“make clean”刪除安裝時(shí)產(chǎn)生的臨時(shí)文件。
         好了,到此大功告成。我們就可以運(yùn)行應(yīng)用程序了。但這時(shí),有的讀者就會(huì)問,我怎么執(zhí)行呢?這也是一個(gè)Linux特色的問題。其實(shí),一般來說, Linux的應(yīng)用軟件的可執(zhí)行文件會(huì)存放在/usr/local/bin目錄下!不過這并不是“放四海皆準(zhǔn)”的真理,最可靠的還是看這個(gè)軟件的 INSTALL和README文件,一般都會(huì)有說明。
         2. 卸載:
         通常軟件的開發(fā)者很少考慮到如何卸載自己的軟件,而tar又僅是完成打包的工作,所以并沒有提供良好的卸載方法。
         那么是不是說就不能夠卸載呢!其實(shí)也不是,有兩個(gè)軟件能夠解決這個(gè)問題,那就是Kinstall和Kife,它們是tar包安裝、卸載的黃金搭檔。它們的使用方法,筆者會(huì)另行文介紹。在此就不加贅述了。
       四、 搞定使用rpm打包的應(yīng)用軟件
         rpm可謂是Redhat公司的一大貢獻(xiàn),它使Linux的軟件安裝工作變得更加簡(jiǎn)單容易。
         1. 安裝:
         我只需簡(jiǎn)單的一句話,就可以說完。執(zhí)行:
       rpm –ivh rpm軟件包名
         更高級(jí)的,請(qǐng)見下表:
       rpm參數(shù) 參數(shù)說明
       -i 安裝軟件
       -t 測(cè)試安裝,不是真的安裝
       -p 顯示安裝進(jìn)度
       -f 忽略任何錯(cuò)誤
       -U 升級(jí)安裝
       -v 檢測(cè)套件是否正確安裝
         這些參數(shù)可以同時(shí)采用。更多的內(nèi)容可以參考RPM的命令幫助。
         2. 卸載:
         我同樣只需簡(jiǎn)單的一句話,就可以說完。執(zhí)行:
        rpm –e 軟件名
         不過要注意的是,后面使用的是軟件名,而不是軟件包名。例如,要安裝software-1.2.3-1.i386.rpm這個(gè)包時(shí),應(yīng)執(zhí)行:
        rpm –ivh software-1.2.3-1.i386.rpm
         而當(dāng)卸載時(shí),則應(yīng)執(zhí)行:
        rpm –e software。
         另外,在Linux中還提供了象GnoRPM、kpackage等圖形化的RPM工具,使得整個(gè)過程會(huì)更加簡(jiǎn)單。這些軟件的具體應(yīng)用,筆者會(huì)另行文介紹。

      五、 搞定使用deb打包的應(yīng)用程序
         這是Debian Linux提供的一個(gè)包管理器,它與RPM十分類似。但由于RPM出現(xiàn)得更早,所以在各種版本的Linux都常見到。而debian的包管理器dpkg則只出現(xiàn)在Debina Linux中,其它Linux版本一般都沒有。我們?cè)诖司秃?jiǎn)單地說明一下:
         1. 安裝
        dpkg –i deb軟件包名
          如:dpkg –i software-1.2.3-1.deb
         2. 卸載
        dpkg –e 軟件名
         如:dpkg –e software

    posted @ 2012-11-29 15:53 zyskm 閱讀(403) | 評(píng)論 (0)編輯 收藏

    linux find

    Linux中find常見用法示例·find    path    -option    [    -print ]    [ -exec    -ok    command ]    {} \;
                #-print 將查找到的文件輸出到標(biāo)準(zhǔn)輸出
    #-exec    command    {} \;       -----將查到的文件執(zhí)行command操作,{} 和 \;之間有空格
    #-ok 和-exec相同,只不過在操作前要詢用戶            ====================================================            -name    filename               #查找名為filename的文件
    -perm                         #按執(zhí)行權(quán)限來查找
    -user     username              #按文件屬主來查找
    -group groupname              #按組來查找
    -mtime    -n +n                 #按文件更改時(shí)間來查找文件,-n指n天以內(nèi),+n指n天以前
    -atime     -n +n                #按文件訪問時(shí)間來查GIN: 0px">-perm                          #按執(zhí)行權(quán)限來查找
    -user     username              #按文件屬主來查找
    -group groupname              #按組來查找
    -mtime    -n +n                 #按文件更改時(shí)間來查找文件,-n指n天以內(nèi),+n指n天以前
    -atime     -n +n                #按文件訪問時(shí)間來查找文件,-n指n天以內(nèi),+n指n天以前
    -ctime     -n +n                #按文件創(chuàng)建時(shí)間來查找文件,-n指n天以內(nèi),+n指n天以前
    -nogroup                      #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在
    -nouser                       #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存
    -newer    f1 !f2                找文件,-n指n天以內(nèi),+n指n天以前
    -ctime     -n +n                #按文件創(chuàng)建時(shí)間來查找文件,-n指n天以內(nèi),+n指n天以前
    -nogroup                      #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在
    -nouser                       #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存
    -newer    f1 !f2                #查更改時(shí)間比f(wàn)1新但比f(wàn)2舊的文件
    -type      b/d/c/p/l/f          #查是塊設(shè)備、目錄、字符設(shè)備、管道、符號(hào)鏈接、普通文件
    -size       n[c]                #查長(zhǎng)度為n塊[或n字節(jié)]的文件
    -depth                        #使查找在進(jìn)入子目錄前先行查找完本目錄
    -fstype                       #查更改時(shí)間比f(wàn)1新但比f(wàn)2舊的文件
    -mount                        #查文件時(shí)不跨越文件系統(tǒng)mount點(diǎn)
    -follow                       #如果遇到符號(hào)鏈接文件,就跟蹤鏈接所指的文件
    -cpio                         #對(duì)匹配的文件使用cpio命令,將他們備份到磁帶設(shè)備中
    -prune                        #忽略某個(gè)目錄            ====================================================
    $find    ~    -name    "*.txt"    -print      #在$HOME中查.txt文件并顯示
    $find    .     -name    "*.txt"    -print

                $find    .     -name    "[A-Z]*"    -pri26nbsp;     #對(duì)匹配的文件使用cpio命令,將他們備份到磁帶設(shè)備中
    -prune                                #忽略某個(gè)目錄            $find    .     -name    "[A-Z]*"    -print    #查以大寫字母開頭的文件
    $find    /etc    -name    "host*"    -print #查以host開頭的文件
    $find    .    -name    "[a-z][a-z][0--9][0--9].txt"     -print    #查以兩個(gè)小寫字母和兩個(gè)數(shù)字開頭的txt文件
    $find .    -perm    755    -print
                $find    .    -perm -007    -exec ls -l {} \;    #查所有用戶都可讀寫執(zhí)行的文件同-perm 777
    $find    . -type d    -print   打印目錄結(jié)構(gòu)
    $find    .  !    -type    d    -print  打印非目錄文件find /usr/include -name '*.h' -exec grep AF_INEF6 {} \; 因grep無法遞歸搜索子目錄,故可以和find相結(jié)合使用。 在/usr/include 所有子目錄中的.h文件中找字串AF_INEF6
    $find    .    -type l    -print            $find    .    -size    +1000000c    -print         #查長(zhǎng)度大于1Mb的文件
    $find    .    -size    100c          -print        # 查長(zhǎng)度為100c的文件
    $find    .    -size    +10    -print               #查長(zhǎng)度超過期作廢10塊的文件(1塊=512字節(jié))            $cd /
                $find    etc    home    apps     -depth    -print    | cpio    -ivcdC65536    -o    /dev/rmt0
                $find    /etc -name "passwd*"    -exec grep    "cnscn"    {}    \;    #看是否存在cnscn用戶
    $find . -name "yao*"    | xargs file
                $find    . -name "yao*"    |    xargs    echo     "" > /tmp/core.log
                $find    . -name "yao*"    | xargs    chmod    o-w            ======================================================            find    -name april*                        在當(dāng)前目錄下查找以april開始的文件
    find    -name    april*    fprint file          在當(dāng)前目錄下查找以april開始的文件,并把結(jié)果輸出到file中
    find    -name ap* -o -name may*    查找以ap或may開頭的文件
    find    /mnt    -name tom.txt    -ftype vfat    在/mnt下查找名稱為tom.txt且文件系統(tǒng)類型為vfat的文件
    find    /mnt    -name t.txt ! -ftype vfat     在/mnt下查找名稱為tom.txt且文件系統(tǒng)類型不為vfat的文件
    find    /tmp    -name wa* -type l             在/tmp下查找名為wa開頭且類型為符號(hào)鏈接的文件
    find    /home    -mtime    -2                   在/home下查最近兩天內(nèi)改動(dòng)過的文件
    find /home     -atime -1                    查1天之內(nèi)被存取過的文件
    find /home -mmin     +60                    在/home下查60分鐘前改動(dòng)過的文件
    find /home    -amin    +30                    查最近30分鐘前被存取過的文件
    find /home    -newer    tmp.txt               在/home下查更新時(shí)間比tmp.txt近的文件或目錄
    find /home    -anewer    tmp.txt              在/home下查存取時(shí)間比tmp.txt近的文件或目錄
    find    /home    -used    -2                    列出文件或目錄被改動(dòng)過之后,在2日內(nèi)被存取過的文件或目錄
    find    /home    -user cnscn                  列出/home目錄內(nèi)屬于用戶cnscn的文件或目錄
    find    /home    -uid    +501                   列出/home目錄內(nèi)用戶的識(shí)別碼大于501的文件或目錄
    find    /home    -group    cnscn                列出/home內(nèi)組為cnscn的文件或目錄
    find    /home    -gid 501                     列出/home內(nèi)組id為501的文件或目錄
    find    /home    -nouser                      列出/home內(nèi)不屬于本地用戶的文件或目錄
    find    /home    -nogroup                     列出/home內(nèi)不屬于本地組的文件或目錄
    find    /home     -name tmp.txt     -maxdepth    4    列出/home內(nèi)的tmp.txt 查時(shí)深度最多為3層
    find    /home    -name tmp.txt    -mindepth    3    從第2層開始查
    find    /home    -empty                       查找大小為0的文件或空目錄
    find    /home    -size    +512k                 查大于512k的文件
    find    /home    -size    -512k                 查小于512k的文件
    find    /home    -links    +2                   查硬連接數(shù)大于2的文件或目錄
    find    /home    -perm    0700                  查權(quán)限為700的文件或目錄
    find    /tmp    -name tmp.txt    -exec cat {} \;
                find    /tmp    -name    tmp.txt    -ok    rm {} \;            find     /    -amin     -10         # 查找在系統(tǒng)中最后10分鐘訪問的文件
    find     /    -atime    -2           # 查找在系統(tǒng)中最后48小時(shí)訪問的文件
    find     /    -empty                # 查找在系統(tǒng)中為空的文件或者文件夾
    find     /    -group    cat          # 查找在系統(tǒng)中屬于 groupcat的文件
    find     /    -mmin    -5           # 查找在系統(tǒng)中最后5分鐘里修改過的文件
    find     /    -mtime    -1          #查找在系統(tǒng)中最后24小時(shí)里修改過的文件
    find     /    -nouser               #查找在系統(tǒng)中屬于作廢用戶的文件
    find     /    -user     fred         #查找在系統(tǒng)中屬于FRED這個(gè)用戶的文件

                查當(dāng)前目錄下的所有普通文件
    --------------------------------------------------------------------------------            # find . -type f -exec ls -l {} \;
    -rw-r--r--      1 root       root          34928 2003-02-25    ./conf/httpd.conf
    -rw-r--r--      1 root       root          12959 2003-02-25    ./conf/magic
    -rw-r--r--      1 root       root            180 2003-02-25    ./conf.d/README
    查當(dāng)前目錄下的所有普通文件,并在- e x e c選項(xiàng)中使用ls -l命令將它們列出           
    =================================================
    在/ l o g s目錄中查找更改時(shí)間在5日以前的文件并刪除它們:
    $ find logs -type f -mtime +5 -exec    -ok    rm {} \;           
                =================================================
    查詢當(dāng)天修改過的文件
    [root@book class]# find    ./    -mtime    -1    -type f    -exec    ls -l    {} \;           
                =================================================
    查詢文件并詢問是否要顯示
    [root@book class]# find    ./    -mtime    -1    -type f    -ok    ls -l    {} \; 
                < ls ... ./classDB.inc.php > ? y
    -rw-r--r--      1 cnscn      cnscn         13709    1月 12 12:22 ./classDB.inc.php
                [root@book class]# find    ./    -mtime    -1    -type f    -ok    ls -l    {} \; 
                < ls ... ./classDB.inc.php > ? n
                [root@book class]#            =================================================
    查詢并交給awk去處理
    [root@book class]# who    |    awk    '{print $1"\t"$2}'
                cnscn     pts/0            =================================================
                awk---grep---sed            [root@book class]# df    -k |    awk '{print $1}' |    grep    -v    'none' |    sed    s"/\/dev\///g"
    文件系統(tǒng)
    sda2
                sda1
                [root@book class]# df    -k |    awk '{print $1}' |    grep    -v    'none'
    文件系統(tǒng)
    /dev/sda2
                /dev/sda1


                1)在/tmp中查找所有的*.h,并在這些文件中查找“SYSCALL_VECTOR",最后打印出所有包含"SYSCALL_VECTOR"的文件名            A) find    /tmp    -name    "*.h"    | xargs    -n50    grep SYSCALL_VECTOR
                B) grep    SYSCALL_VECTOR    /tmp/*.h | cut     -d':'    -f1| uniq > filename
                C) find    /tmp    -name "*.h"    -exec grep "SYSCALL_VECTOR"    {}    \; -print           
                2)find / -name filename -exec rm -rf {} \;
                     find / -name filename -ok rm -rf {} \;           
                3)比如要查找磁盤中大于3M的文件:
    find . -size +3000k -exec ls -ld {} ;           
                4)將find出來的東西拷到另一個(gè)地方
    find *.c -exec cp '{}' /tmp ';'            如果有特殊文件,可以用cpio,也可以用這樣的語(yǔ)法:
    find dir -name filename -print | cpio -pdv newdir           
                6)查找2004-11-30 16:36:37時(shí)更改過的文件
    # A=`find ./ -name "*php"` |    ls -l --full-time $A 2>/dev/null | grep "2004-11-30 16:36:37           

    二、linux下find命令的用法

    1. 基本用法:
          find / -name 文件名                 find ver1.d ver2.d -name '*.c' -print    查找ver1.d,ver2.d *.c文件并打印     find . -type d -print 從當(dāng)前目錄查找,僅查找目錄,找到后,打印路徑名。可用于打印目錄結(jié)構(gòu)。
    2. 無錯(cuò)誤查找:
          find / -name access_log 2 >/dev/null
                3. 按尺寸查找:
          find / -size 1500c (查找1,500字節(jié)大小的文件,c表示字節(jié))
          find / -size +1500c (查找大于1,500字節(jié)大小的文件,+表示大于)   
                      find / -size +1500c (查找小于1,500字節(jié)大小的文件,-表示小于)   
    4. 按時(shí)間:
          find / -amin n 最后n分鐘
          find / -atime n 最后n天
          find / -cmin n 最后n分鐘改變狀態(tài)
          find / -ctime n 最后n天改變狀態(tài)
    5. 其它:
          find / -empty 空白文件、空白文件夾、沒有子目錄的文件夾
          find / -false 查找系統(tǒng)中總是錯(cuò)誤的文件
          find / -fstype type 找存在于指定文件系統(tǒng)的文件,如type為ext2
                      find / -gid n 組id為n的文件
          find / -group gname 組名為gname的文件
          find / -depth n 在某層指定目錄中優(yōu)先查找文件內(nèi)容
          find / -maxdepth levels 在某個(gè)層次目錄中按遞減方式查找
    6. 邏輯
          -and 條件與 -or 條件或
    7. 查找字符串
          find . -name '*.html' -exec grep 'mailto:'{}

    posted @ 2012-11-29 15:45 zyskm 閱讀(283) | 評(píng)論 (0)編輯 收藏

    linux上ln命令詳細(xì)說明

    ln是linux中又一個(gè)非常重要命令,它的功能是為某一個(gè)文件在另外一個(gè)位置建立一個(gè)同不的鏈接,這個(gè)命令最常用的參數(shù)是-s,具體用法是:ln –s 源文件 目標(biāo)文件。
      當(dāng)我們需要在不同的目錄,用到相同的文件時(shí),我們不需要在每一個(gè)需要的目錄下都放一個(gè)必須相同的文件,我們只要在某個(gè)固定的目錄,放上該文件,然后在 其它的目錄下用ln命令鏈接(link)它就可以,不必重復(fù)的占用磁盤空間。例如:ln –s /bin/less /usr/local/bin/less
      -s 是代號(hào)(symbolic)的意思。
      這里有兩點(diǎn)要注意:第一,ln命令會(huì)保持每一處鏈接文件的同步性,也就是說,不論你改動(dòng)了哪一處,其它的文件都會(huì)發(fā)生相同的變化;第二,ln的鏈接又 軟鏈接和硬鏈接兩種,軟鏈接就是ln –s ** **,它只會(huì)在你選定的位置上生成一個(gè)文件的鏡像,不會(huì)占用磁盤空間,硬鏈接ln ** **,沒有參數(shù)-s, 它會(huì)在你選定的位置上生成一個(gè)和源文件大小相同的文件,無論是軟鏈接還是硬鏈接,文件都保持同步變化。
      如果你用ls察看一個(gè)目錄時(shí),發(fā)現(xiàn)有的文件后面有一個(gè)@的符號(hào),那就是一個(gè)用ln命令生成的文件,用ls –l命令去察看,就可以看到顯示的link的路徑了。
      指令詳細(xì)說明
      指令名稱 : ln
      使用權(quán)限 : 所有使用者
      使用方式 : ln [options] source dist,其中 option 的格式為 :
      [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
      [--help] [--version] [--]
      說明 : Linux/Unix 檔案系統(tǒng)中,有所謂的連結(jié)(link),我們可以將其視為檔案的別名,而連結(jié)又可分為兩種 : 硬連結(jié)(hard link)與軟連結(jié)(symbolic link),硬連結(jié)的意思是一個(gè)檔案可以有多個(gè)名稱,而軟連結(jié)的方式則是產(chǎn)生一個(gè)特殊的檔案,該檔案的內(nèi)容是指向另一個(gè)檔案的位置。硬連結(jié)是存在同一個(gè)檔 案系統(tǒng)中,而軟連結(jié)卻可以跨越不同的檔案系統(tǒng)。
      ln source dist 是產(chǎn)生一個(gè)連結(jié)(dist)到 source,至于使用硬連結(jié)或軟鏈結(jié)則由參數(shù)決定。
      不論是硬連結(jié)或軟鏈結(jié)都不會(huì)將原本的檔案復(fù)制一份,只會(huì)占用非常少量的磁碟空間。
      -f : 鏈結(jié)時(shí)先將與 dist 同檔名的檔案刪除
      -d : 允許系統(tǒng)管理者硬鏈結(jié)自己的目錄
      -i : 在刪除與 dist 同檔名的檔案時(shí)先進(jìn)行詢問
      -n : 在進(jìn)行軟連結(jié)時(shí),將 dist 視為一般的檔案
      -s : 進(jìn)行軟鏈結(jié)(symbolic link)
      -v : 在連結(jié)之前顯示其檔名
      -b : 將在鏈結(jié)時(shí)會(huì)被覆寫或刪除的檔案進(jìn)行備份
      -S SUFFIX : 將備份的檔案都加上 SUFFIX 的字尾
      -V METHOD : 指定備份的方式
      --help : 顯示輔助說明
      --version : 顯示版本
      范例 :
      將檔案 yy 產(chǎn)生一個(gè) symbolic link : zz
      ln -s yy zz
      將檔案 yy 產(chǎn)生一個(gè) hard link : zz
      ln yy xx

    posted @ 2012-11-29 14:31 zyskm 閱讀(193) | 評(píng)論 (0)編輯 收藏

    Linux的變量

    1.Linux的變量種類

      按變量的生存周期來劃分,Linux變量可分為兩類:
      1.1 永久的:需要修改配置文件,變量永久生效。

      1.2 臨時(shí)的:使用export命令聲明即可,變量在關(guān)閉shell時(shí)失效。

    Linux 的變量可分為兩類:環(huán)境變量和本地變量
     
    環(huán)境變量,或者稱為全局變量,存在與所有的shell 中,在你登陸系統(tǒng)的時(shí)候就已經(jīng)有了相應(yīng)的系統(tǒng)定義的環(huán)境變量了。Linux 的環(huán)境變量具有繼承性,即子shell 會(huì)繼承父shell 的環(huán)境變量。
     
    本地變量,當(dāng)前shell 中的變量,很顯然本地變量中肯定包含環(huán)境變量。Linux 的本地變量的非環(huán)境變量不具備繼承性。
     
    Linux 中環(huán)境變量的文件
     
        當(dāng)你進(jìn)入系統(tǒng)的時(shí)候,linux 就會(huì)為你讀入系統(tǒng)的環(huán)境變量,這些環(huán)境變量存放在什么地方,那就是環(huán)境變量的文件中。Linux 中有很多記載環(huán)境變量的文件,它們被系統(tǒng)讀入是按照一定的順序的。
     
    1.    /etc/profile :
     
    此文件為系統(tǒng)的環(huán)境變量,它為每個(gè)用戶設(shè)置環(huán)境信息,當(dāng)用戶第一次登錄時(shí),該文件被執(zhí)行。

      2.設(shè)置變量的三種方法

      2.1 在/etc/profile文件中添加變量【對(duì)所有用戶生效(永久的)】

      用VI在文件/etc/profile文件中增加變量,該變量將會(huì)對(duì)Linux下所有用戶有效,并且是“永久的”。

      例如:編輯/etc/profile文件,添加CLASSPATH變量

      # vi /etc/profile

      export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

      注:修改文件后要想馬上生效還要運(yùn)行# source /etc/profile不然只能在下次重進(jìn)此用戶時(shí)生效。

      2.2 在用戶目錄下的.bash_profile文件中增加變量【對(duì)單一用戶生效(永久的)】

      用VI在用戶目錄下的.bash_profile文件中增加變量,改變量?jī)H會(huì)對(duì)當(dāng)前用戶有效,并且是“永久的”。

      例如:編輯guok用戶目錄(/home/guok)下的.bash_profile

      $ vi /home/guok/.bash.profile

      添加如下內(nèi)容:

      export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

      注:修改文件后要想馬上生效還要運(yùn)行$ source /home/guok/.bash_profile不然只能在下次重進(jìn)此用戶時(shí)生效。

      2.3 直接運(yùn)行export命令定義變量【只對(duì)當(dāng)前shell(BASH)有效(臨時(shí)的)】

      在shell的命令行下直接使用[export 變量名=變量值]
    定義變量,該變量只在當(dāng)前的shell(BASH)或其子shell(BASH)下是有效的,shell關(guān)閉了,變量也就失效了,再打開新shell時(shí)就沒有這個(gè)變量,需要使用的話還需要重新定義。

      3.環(huán)境變量的查看

      3.1 使用echo命令查看單個(gè)環(huán)境變量。例如:

      echo $PATH

      3.2 使用env查看所有環(huán)境變量。例如:

      env

      3.3 使用set查看所有本地定義的環(huán)境變量。

      unset可以刪除指定的環(huán)境變量。

      4.常用的環(huán)境變量

      PATH 決定了shell將到哪些目錄中尋找命令或程序

      HOME 當(dāng)前用戶主目錄

      HISTSIZE 歷史記錄數(shù)

      LOGNAME 當(dāng)前用戶的登錄名

      HOSTNAME 指主機(jī)的名稱

      SHELL   當(dāng)前用戶Shell類型

      LANGUGE  語(yǔ)言相關(guān)的環(huán)境變量,多語(yǔ)言可以修改此環(huán)境變量

      MAIL   當(dāng)前用戶的郵件存放目錄

      PS1   基本提示符,對(duì)于root用戶是#,對(duì)于普通用戶是$

    posted @ 2012-11-29 14:11 zyskm 閱讀(440) | 評(píng)論 (0)編輯 收藏

    linux chmod,chown

    指令名稱 : chmod
    使用權(quán)限 : 所有使用者
     
    使用方式 : chmod [-cfvR] [--help] [--version] mode file...
     
    說明 : Linux/Unix 的檔案存取權(quán)限分為三級(jí) : 檔案擁有者、群組、其他。利用 chmod 可以控制檔案如何被他人所存取。
    只能文件屬主或特權(quán)用戶才能使用該功能來改變文件存取模式。mode可以是數(shù)字形式或以who opcode permission形式表示。who是可選的,默認(rèn)是a(所有用戶)。只能選擇一個(gè)opcode(操作碼)。可指定多個(gè)mode,以逗號(hào)分開。

    options:

    -c,--changes
    只輸出被改變文件的信息

    -f,--silent,--quiet
    當(dāng)chmod不能改變文件模式時(shí),不通知文件的用戶

    --help
    輸出幫助信息。

    -R,--recursive
    可遞歸遍歷子目錄,把修改應(yīng)到目錄下所有文件和子目錄

    --reference=filename
    參照filename的權(quán)限來設(shè)置權(quán)限

    -v,--verbose
    無論修改是否成功,輸出每個(gè)文件的信息

    --version
    輸出版本信息。

    who

    u
    用戶

    g

    o
    其它

    a
    所有用戶(默認(rèn))

    opcode

    +
    增加權(quán)限

    -
    刪除權(quán)限

    =
    重新分配權(quán)限

    permission

    r

    w

    x
    執(zhí)行

    s
    設(shè)置用戶(或組)的ID號(hào)

    t
    設(shè)置粘著位(sticky bit),防止文件或目錄被非屬主刪除

    u
    用戶的當(dāng)前權(quán)限

    g
    組的當(dāng)前權(quán)限

    o
    其他用戶的當(dāng)前權(quán)限

    作為選擇,我們多數(shù)用三位八進(jìn)制數(shù)字的形式來表示權(quán)限,第一位指定屬主的權(quán)限,第二位指定組權(quán)限,第三位指定其他用戶的權(quán)限,每位通過4(讀)、2(寫)、1(執(zhí)行)三種數(shù)值的和來確定權(quán)限。如6(4+2)代表有讀寫權(quán),7(4+2+1)有讀、寫和執(zhí)行的權(quán)限。

    還可設(shè)置第四位,它位于三位權(quán)限序列的前面,第四位數(shù)字取值是4,2,1,代表意思如下:

    4,執(zhí)行時(shí)設(shè)置用戶ID,用于授權(quán)給基于文件屬主的進(jìn)程,而不是給創(chuàng)建此進(jìn)程的用戶。

    2,執(zhí)行時(shí)設(shè)置用戶組ID,用于授權(quán)給基于文件所在組的進(jìn)程,而不是基于創(chuàng)建此進(jìn)程的用戶。

    1,設(shè)置粘著位。

    實(shí)例:

    $ chmod u+x file                      給file的屬主增加執(zhí)行權(quán)限
    $ chmod 751 file                      給file的屬主分配讀、寫、執(zhí)行(7)的權(quán)限,給file的所在組分配讀、執(zhí)行(5)的權(quán)限,給其他用戶分配執(zhí)行(1)的權(quán)限
    $ chmod u=rwx,g=rx,o=x file      上例的另一種形式
    $ chmod =r file                     為所有用戶分配讀權(quán)限
    $ chmod 444 file                   同上例
    $ chmod a-wx,a+r   file          同上例
    $ chmod -R u+r directory           遞歸地給directory目錄下所有文件和子目錄的屬主分配讀的權(quán)限
    $ chmod 4755                            設(shè)置用ID,給屬主分配讀、寫和執(zhí)行權(quán)限,給組和其他用戶分配讀、執(zhí)行的權(quán)限。


    指令名稱 : chown
     使用權(quán)限 : root
     
    使用方式 : chown[-cfhvR] [--help] [--version] user[:group] file...
     
    說明 : Linux/Unix 是多人多工作業(yè)系統(tǒng),所有的檔案皆有擁有者。利用 chown 可以將檔案的擁有者加以改變。一般來說,這個(gè)指令只有是由系統(tǒng)管理者(root)所使用,一般使用者沒有權(quán)限可以改變別人的檔案擁有者,也沒有權(quán)限可以自己的檔案擁有者改設(shè)為別人。只有系統(tǒng)管理者(root)才有這樣的權(quán)限。
     

    posted @ 2012-11-29 14:02 zyskm 閱讀(303) | 評(píng)論 (0)編輯 收藏

    eclipse中xsd的驗(yàn)證問題cvc-complex-type error with xsd

    基于spring開發(fā)了個(gè)自定義標(biāo)簽,功能測(cè)試正常,在myeclipse中提示編譯錯(cuò)誤:
    Multiple annotations found at this line:
        - cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'fw:annotation-handler'.
        - schema_reference.4: Failed to read schema document 'http://www.300.cn/schema/annotation-handler.xsd', because 1) could not find the
         document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
    這個(gè)問題在以前改動(dòng)struts配置文件的時(shí)候也出現(xiàn)過。在引入一些第三方j(luò)ar容易出現(xiàn)這個(gè)問題。
    雖然不影響使用,但是看著挺討厭的,找了一下解決方法。
    菜單-->windows-->prefreneces 找到XML Catalog,在User Specified Entries添加xsd文件
    有兩個(gè)地方要注意:
    1.Key type設(shè)置為Schema location;
    2.key 設(shè)置虛擬xsd地址,即
    xsi:schemaLocation=" http://www.springframework.org/schema/task
                             http://www.springframework.org/schema/task/spring-task-3.0.xsd“
    名稱對(duì)后邊的這一個(gè)。

    posted @ 2012-06-27 11:09 zyskm 閱讀(2873) | 評(píng)論 (0)編輯 收藏

    java不是那么風(fēng)光了

    自從搬到東邊住以后就很少去海淀圖書城了,因?yàn)橄雲(yún)⒓?1月的軟考,端午去海圖找本考試大綱。
    前幾年去海圖的時(shí)候,java方面的圖書都放在最顯眼的地方,能占好幾排書架,現(xiàn)在已經(jīng)被andriod、ios取代。找了一圈才在一個(gè)不起眼的角落找到j(luò)ava系列圖書。c/c++這樣的書倒不見減少,比印象中還有增加。
    從書市上看java最風(fēng)光的時(shí)候已經(jīng)過去了,一直做java方面的開發(fā),對(duì)這方面的變化不敏感,還是賣書的對(duì)市場(chǎng)感受更直接。
    各領(lǐng)風(fēng)騷好幾年。

    posted @ 2012-06-26 09:50 zyskm 閱讀(1410) | 評(píng)論 (4)編輯 收藏

    問題分析與決策(蘭德)

    這幾天抽空看了本《問題分析與決策》,蘭德公司出版的,就是那個(gè)預(yù)言中國(guó)將出兵朝鮮的公司。挺好的一本書,不知道為什么中文版的特別少,找了半天。
    老外做研究的風(fēng)格,很少那種大而無當(dāng)?shù)目赵挘瑢?duì)問題分析的過程和分析者的心理活動(dòng)做了大量研究工作。
    我做過一段時(shí)間的系統(tǒng)分析工作,書中有些觀點(diǎn)讓人看起來心有戚戚焉,還有部分觀點(diǎn)是自己沒想到的,讀后很是能解惑。

    做些簡(jiǎn)單摘錄

    很多人采用的處理問題與決策的辦法,根本沒有多大用處,甚至完全沒有用處。

    引言
    蘭德提出這種問題分析方法的思路,從一個(gè)公司的某一個(gè)問題著手,追溯到解決這一問題的程序,仔細(xì)剖視每一步驟中的思想過程。
    根據(jù)這些研究得出了很多概念和方法,認(rèn)為問題分析與決策時(shí)管理上的行為,必須自覺和有系統(tǒng)的去做。
    而且必要的話,還應(yīng)該記錄下來。

    分析問題是一項(xiàng)依照邏輯體系而進(jìn)行的程序,首先是確定問題,然后是經(jīng)過分析以及尋求原因,最后做決定。
    每個(gè)階段包括若干基本的概念,其中一項(xiàng)基本概念是,一個(gè)問題乃是一件事“應(yīng)該怎么樣”和“事實(shí)上是怎么樣的”兩者之間的偏差。
    另一項(xiàng)概念是,這種偏差是由于某一種“變化”二造成的。除非先把這一變化準(zhǔn)確的予以確定,否則一切糾正這一偏差的措施都只是揣測(cè)而已。

    概念與方法
    問題分析的兩個(gè)主要概念:
    1.每個(gè)問題都是標(biāo)準(zhǔn)的預(yù)期效果所發(fā)生的偏差;
    2.某種變化是造成這一問題的根本原因。

    分析問題的七項(xiàng)基本概念
    1.有標(biāo)準(zhǔn);
    2.問題就是情況與標(biāo)準(zhǔn)之間的偏差
    3.偏差要準(zhǔn)確的認(rèn)定
    4.分析問題的獨(dú)特性,受影響和沒受影響部分各有什么特點(diǎn),區(qū)分開來;
    5.只考慮與特殊變化有關(guān)的情況,通過界定問題范圍找出原因。
    6.造成偏差的原因是從分析問題時(shí)發(fā)現(xiàn)的變化中推導(dǎo)出來的 。
    7.最可能造成偏差的原因,是能解釋界定范圍內(nèi)一切事實(shí)的那一項(xiàng)原因。

    如何界定一個(gè)問題

    1.什么;2時(shí)間;3.地點(diǎn)4.幅度
    如何尋求特點(diǎn)與變化
    任何問題發(fā)生的原因,乃是一種變化;這種變化的影響是有限度的,只在某些地方有影響,在其他地方?jīng)]有影響。
    這種變化,只存在于特定的范圍之內(nèi),或者只發(fā)生與那些可以區(qū)分出問題的“是”的一面某些因素上。
    因此,要追究什么樣的變化會(huì)發(fā)生某一種影響,最有效的方法是只尋求那些僅存在于界定問題時(shí)所發(fā)現(xiàn)的各項(xiàng)特點(diǎn)的變化。
    我們要找出來把事物區(qū)分開來的因素,分析問題的人必須從事物的不同點(diǎn)去思考。
    (么東西出了問題,不是什么出了問題,減小范圍)
    發(fā)生變化的線索就在,區(qū)分“是”與“不是”的特點(diǎn)中。
    能看出特點(diǎn)與變化的能力是智慧的主要表現(xiàn)之一,在問題分析上是非常重要的。
    一個(gè)問題的形成可能受許多因素的影響,但是真正動(dòng)搖了事態(tài)均衡而引發(fā)問題的卻只有一種變化。
    事先不界定問題和研求特點(diǎn),一發(fā)現(xiàn)某項(xiàng)變化立即斷定這就是問題的原因所在是很危險(xiǎn)的。


    決策分析
    1.訂立決策的目標(biāo);
    2.依據(jù)重要性將目標(biāo)分類;
    3.擬定可供選擇的措施;
    4.把各種可行的辦法與目標(biāo)加以對(duì)照衡量;
    5.選擇最好的辦法作為暫時(shí)決策;
    6.研究決策是否會(huì)有不良影響;
    7.同時(shí)采取防止不良后果的措施。

    posted @ 2012-06-20 10:59 zyskm 閱讀(1738) | 評(píng)論 (0)編輯 收藏

    工作流的價(jià)值

    之前做過一版工作流引擎,自己開發(fā)的。這段時(shí)間又以jbpm為內(nèi)核做了一版流程系統(tǒng),有些思考就記錄下來。
    有一句話說的好,如果你手里有一把錘子你就看什么都像釘子。做流程系統(tǒng)的時(shí)候也遇到這類現(xiàn)象,因?yàn)閷?duì)流程系統(tǒng)的不熟悉,在開發(fā)過程中就想到處都用工作流來處理問題。
    其實(shí)引入一個(gè)新的東西,一定要先搞明白的它的適用場(chǎng)景,有什么價(jià)值。把握了這點(diǎn)后結(jié)合具體場(chǎng)景,就能很好的使用,而不會(huì)亂用。
    一、工作流適用場(chǎng)景
    以下兩種情況需要引入流程系統(tǒng)
    1.分散系統(tǒng)整合(企業(yè)應(yīng)用集成)
    2.簡(jiǎn)化業(yè)務(wù)系統(tǒng)的開發(fā);
    工作流的價(jià)值
    1.業(yè)務(wù)流程獨(dú)立化;
    2.優(yōu)化改進(jìn)流程更容易;
    3.提供統(tǒng)一的監(jiān)控頁(yè)面。
    Ⅰ 、相對(duì)于分散系統(tǒng),提供了統(tǒng)一的操作和監(jiān)控頁(yè)面。對(duì)用戶更友好,過程可監(jiān)控,業(yè)務(wù)規(guī)則更明確。
    1.業(yè)務(wù)流程獨(dú)立化,業(yè)務(wù)規(guī)則不僅僅存在與工作人員的頭腦中。
    2.提供了統(tǒng)一的監(jiān)控界面,實(shí)現(xiàn)業(yè)務(wù)過程可監(jiān)控;
    3.有明確的規(guī)則,可以監(jiān)控運(yùn)行情況,為流程的優(yōu)化提供了便利;
    4.對(duì)用戶更友好;
    Ⅱ 、相對(duì)于傳統(tǒng)業(yè)務(wù)系統(tǒng)方式
    1.業(yè)務(wù)流程獨(dú)立化,業(yè)務(wù)規(guī)則不會(huì)淹沒于業(yè)務(wù)系統(tǒng)代碼中。避免業(yè)務(wù)系統(tǒng)開發(fā)完成后再次改動(dòng)成本高的情況。
    2.提供了統(tǒng)一的監(jiān)控界面,實(shí)現(xiàn)業(yè)務(wù)過程可監(jiān)控;原業(yè)務(wù)系統(tǒng)提供的報(bào)表對(duì)環(huán)節(jié)執(zhí)行時(shí)間可能信息不足,一般只是簡(jiǎn)單反應(yīng)狀態(tài)變化。
    3.有明確的規(guī)則,可以監(jiān)控運(yùn)行情況,為流程的優(yōu)化提供了便利;
    4.對(duì)于工作人員來講,這些改進(jìn)其實(shí)是透明的,從用戶體驗(yàn)的角度沒有什么變化。
     所以對(duì)原業(yè)務(wù)系統(tǒng)的用戶來講,變化不大。引入流程系統(tǒng)更多的是為了監(jiān)控和優(yōu)化流程的方便,是從管理的角度考慮問題。
    從流程系統(tǒng)提供的待辦事項(xiàng)列表進(jìn)行操作,還是從業(yè)務(wù)系統(tǒng)的功能菜單進(jìn)行操作,哪個(gè)更友好是UE設(shè)計(jì)的問題,跟流程系統(tǒng)無關(guān)。
    業(yè)務(wù)系統(tǒng)功能菜單的劃分可能相對(duì)于待辦事項(xiàng)列表更直觀、定位更準(zhǔn)確。(見下圖紅色箭頭對(duì)兩種方式的表示)
    考慮到業(yè)務(wù)流程的復(fù)雜性,對(duì)于企業(yè)信息化系統(tǒng)引入流程系統(tǒng)可以便于優(yōu)化流程,對(duì)于成熟的業(yè)務(wù)系統(tǒng)如財(cái)務(wù)軟件引入流程系統(tǒng)完全沒有必要。
     
    補(bǔ)充說明:
    1.當(dāng)前任務(wù)列表方式,需要用戶不停的查看有沒有新任務(wù)到來;優(yōu)點(diǎn)是在一個(gè)頁(yè)面可以看到全部待辦事項(xiàng)。
    2.業(yè)務(wù)系統(tǒng)功能菜單方式,需要用戶不停的查詢工作進(jìn)展并作出處理。優(yōu)點(diǎn)是任務(wù)類型劃分更明確;
    二、業(yè)務(wù)系統(tǒng)接入方式
    1.在jsp頁(yè)面增加環(huán)節(jié)信息(環(huán)節(jié)編號(hào),流程編號(hào)...);
    2.業(yè)務(wù)系統(tǒng)aciton不變;
    3.在業(yè)務(wù)系統(tǒng)action完成操作后,流程攔截器處理流程變化并記錄到數(shù)據(jù)庫(kù);
    4.流程監(jiān)控頁(yè)面和待辦事項(xiàng)列表,不斷從流程數(shù)據(jù)庫(kù)查詢。
    5.對(duì)于專業(yè)性比價(jià)強(qiáng)的的狀態(tài)值還是在業(yè)務(wù)系統(tǒng)維護(hù),避免流程系統(tǒng)壓力過大。在需要監(jiān)控改進(jìn)的業(yè)務(wù)點(diǎn)交由流程系統(tǒng)調(diào)度,其它部分還是由業(yè)務(wù)系統(tǒng)處理。


    --------------------------------------
    下邊是對(duì)struts項(xiàng)目接入流程系統(tǒng)的一個(gè)分析
    1.業(yè)務(wù)系統(tǒng)jsp,action調(diào)用關(guān)系

    2.采用攔截器在業(yè)務(wù)系統(tǒng)action執(zhí)行完成后,進(jìn)行流程驅(qū)動(dòng),并在下一個(gè)jsp頁(yè)面注入流程信息。


    主要邏輯都在beforeResult()方法中。
    3.數(shù)據(jù)結(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu)說明:
    1.對(duì)于通用的流程數(shù)據(jù)可以在beforeResult()方法自動(dòng)嵌入,為考慮交互效果在jsp自行設(shè)置流程信息;
    2.jsp頁(yè)面流程數(shù)據(jù)應(yīng)該包括:
    1.nodeName
    節(jié)點(diǎn)名稱,環(huán)節(jié)在流程定義中的名稱;
    2.transitionNames
    流向名稱列表,需要作出選擇的列表。
    3.entityId
    實(shí)體id,用于查詢流程實(shí)例ID。
    3.在action執(zhí)行完成后驅(qū)動(dòng)流程所需要的數(shù)據(jù):
    1.definitionId
    流程定義,說明是新啟動(dòng)一個(gè)流程。
    2.nodeName
    節(jié)點(diǎn)名稱,根據(jù)流程實(shí)例ID和節(jié)點(diǎn)名稱查詢?nèi)蝿?wù)ID,每個(gè)節(jié)點(diǎn)只能是單任務(wù)的,否則jsp頁(yè)面無法提供taskId.
    3.transitionName
    流向名稱,根據(jù)流向選擇流程下一步跳轉(zhuǎn)的節(jié)點(diǎn)。串行節(jié)點(diǎn)不用transitionName 可為空。
    4.entityId
    實(shí)體id,查詢流程實(shí)例ID用。
    4.對(duì)與工作流無關(guān)的action實(shí)行過濾,不做處理
    兩種過濾方式:
    1.在action方法加注解;
    2.在數(shù)據(jù)結(jié)構(gòu)中增加數(shù)據(jù)項(xiàng)標(biāo)記。
    5.對(duì)與工作流無關(guān)的jsp頁(yè)面,不使用工作流tag即可。
     
    -----------------------------
    上邊是我一開始的想法,后來和同事討論后又做了些調(diào)整。編輯web文字比較麻煩,就不合在一起了。
    1.對(duì)執(zhí)行業(yè)務(wù)操作的action和進(jìn)入jsp頁(yè)面的初始化action進(jìn)行分類;

    2.參數(shù)傳遞過程補(bǔ)充說明

    一個(gè)分為三步
    倒著說
    第三步,功能頁(yè)面jsp在提交參數(shù)時(shí)需附加(節(jié)點(diǎn)名稱、流向名稱、工單編號(hào)),流程引擎才能驅(qū)動(dòng)流程;
    第二步,要能夠向第三步提供數(shù)據(jù),jsp頁(yè)面必須包含(節(jié)點(diǎn)名稱、流向名稱列表、工單編號(hào)),這些數(shù)據(jù)有兩個(gè)來源:1.收到在jsp頁(yè)面寫入;2.從第一步接收。
    第一步,有同事建議,提供節(jié)點(diǎn)和資源路徑的關(guān)系表,通過資源路徑查找節(jié)點(diǎn)名稱。減少流程系統(tǒng)對(duì)業(yè)務(wù)系統(tǒng)的侵入。
     
     ----------------------------------
    上傳的時(shí)候圖片丟了,重新補(bǔ)一下。
     

    posted @ 2012-06-19 16:01 zyskm 閱讀(1203) | 評(píng)論 (0)編輯 收藏

    Restful架構(gòu)

     今天抽空整理些有關(guān)rest方面的理論。主要參考了幾篇網(wǎng)上的文章,做了些整理,原文見附錄。

    一、起源

    越來越多的人開始意識(shí)到,網(wǎng)站即軟件,而且是一種新型的軟件。
    這種"互聯(lián)網(wǎng)軟件"采用客戶端/服務(wù)器模式,建立在分布式體系上,通過互聯(lián)網(wǎng)通信,具有高延時(shí)(high latency)、高并發(fā)等特點(diǎn)。
    網(wǎng)站開發(fā),完全可以采用軟件開發(fā)的模式。但是傳統(tǒng)上,軟件和網(wǎng)絡(luò)是兩個(gè)不同的領(lǐng)域,很少有交集;軟件開發(fā)主要針對(duì)單機(jī)環(huán)境,網(wǎng)絡(luò)則主要研究系統(tǒng)之間的通信。互聯(lián)網(wǎng)的興起,使得這兩個(gè)領(lǐng)域開始融合,現(xiàn)在我們必須考慮,如何開發(fā)在互聯(lián)網(wǎng)環(huán)境中使用的軟件。
    RESTful架構(gòu),就是一種互聯(lián)網(wǎng)軟件架構(gòu)。它結(jié)構(gòu)清晰、符合標(biāo)準(zhǔn)、易于理解、擴(kuò)展方便,所以正得到越來越多網(wǎng)站的采用。
     

    二、名稱

    Fielding將他對(duì)互聯(lián)網(wǎng)軟件的架構(gòu)原則,定名為REST,即Representational State Transfer的縮寫。我對(duì)這個(gè)詞組的翻譯是"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。

    如果一個(gè)架構(gòu)符合REST原則,就稱它為RESTful架構(gòu)。

    要理解RESTful架構(gòu),最好的方法就是去理解Representational State Transfer這個(gè)詞組到底是什么意思,它的每一個(gè)詞代表了什么涵義。如果你把這個(gè)名稱搞懂了,也就不難體會(huì)REST是一種什么樣的設(shè)計(jì)。

    三、資源(Resources)

    REST的名稱"表現(xiàn)層狀態(tài)轉(zhuǎn)化"中,省略了主語(yǔ)。"表現(xiàn)層"其實(shí)指的是"資源"(Resources)的"表現(xiàn)層"。

    所謂"資源",就是網(wǎng)絡(luò)上的一個(gè)實(shí)體,或者說是網(wǎng)絡(luò)上的一個(gè)具體信息。它可以是一段文本、一張圖片、一首歌曲、一種服務(wù),總之就是一個(gè)具體的實(shí)在。你可以用一個(gè)URI(統(tǒng)一資源定位符)指向它,每種資源對(duì)應(yīng)一個(gè)特定的URI。要獲取這個(gè)資源,訪問它的URI就可以,因此URI就成了每一個(gè)資源的地址或獨(dú)一無二的識(shí)別符。

    所謂"上網(wǎng)",就是與互聯(lián)網(wǎng)上一系列的"資源"互動(dòng),調(diào)用它的URI。

    四、表現(xiàn)層(Representation)

    "資源"是一種信息實(shí)體,它可以有多種外在表現(xiàn)形式。我們把"資源"具體呈現(xiàn)出來的形式,叫做它的"表現(xiàn)層"(Representation)。

    比如,文本可以用txt格式表現(xiàn),也可以用HTML格式、XML格式、JSON格式表現(xiàn),甚至可以采用二進(jìn)制格式;圖片可以用JPG格式表現(xiàn),也可以用PNG格式表現(xiàn)。

    URI只代表資源的實(shí)體,不代表它的形式。嚴(yán)格地說,有些網(wǎng)址最后的".html"后綴名是不必要的,因?yàn)檫@個(gè)后綴名表示格式,屬于"表現(xiàn)層"范疇,而URI應(yīng)該只代表"資源"的位置。它的具體表現(xiàn)形式,應(yīng)該在HTTP請(qǐng)求的頭信息中用Accept和Content-Type字段指定,這兩個(gè)字段才是對(duì)"表現(xiàn)層"的描述。

    五、狀態(tài)轉(zhuǎn)化(State Transfer)

    訪問一個(gè)網(wǎng)站,就代表了客戶端和服務(wù)器的一個(gè)互動(dòng)過程。在這個(gè)過程中,勢(shì)必涉及到數(shù)據(jù)和狀態(tài)的變化。

    互聯(lián)網(wǎng)通信協(xié)議HTTP協(xié)議,是一個(gè)無狀態(tài)協(xié)議。這意味著,所有的狀態(tài)都保存在服務(wù)器端。因此,如果客戶端想要操作服務(wù)器,必須通過某種手段,讓服務(wù)器端發(fā)生"狀態(tài)轉(zhuǎn)化"(State Transfer)。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。

    客戶端用到的手段,只能是HTTP協(xié)議。具體來說,就是HTTP協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞:GET、POST、PUT、DELETE。它們分別對(duì)應(yīng)四種基本操作:GET用來獲取資源,POST用來新建資源(也可以用于更新資源),PUT用來更新資源,DELETE用來刪除資源。

    六、綜述

    綜合上面的解釋,我們總結(jié)一下什么是RESTful架構(gòu):

      (1)每一個(gè)URI代表一種資源;

      (2)客戶端和服務(wù)器之間,傳遞這種資源的某種表現(xiàn)層;

      (3)客戶端通過四個(gè)HTTP動(dòng)詞,對(duì)服務(wù)器端資源進(jìn)行操作,實(shí)現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。

     

    REST關(guān)鍵原則

    一個(gè)簡(jiǎn)單扼要的定義:REST定義了應(yīng)該如何正確地使用Web標(biāo)準(zhǔn),例如HTTP和URI。如果你在設(shè)計(jì)應(yīng)用程序時(shí)能堅(jiān)持REST原則,那就預(yù)示著你將會(huì)得到一個(gè)使用了優(yōu)質(zhì)Web架構(gòu)(這將讓你受益)的系統(tǒng)。總之,五條關(guān)鍵原則列舉如下:

    • 為所有“事物”定義ID
    • 將所有事物鏈接在一起
    • 使用標(biāo)準(zhǔn)方法
    • 資源多重表述
    • 無狀態(tài)通信

     

    為所有“事物”定義ID

    在這里我使用了“事物”來代替更正式準(zhǔn)確的術(shù)語(yǔ)“資源”,因?yàn)橐粭l如此簡(jiǎn)單的原則,不應(yīng)該被淹沒在術(shù)語(yǔ)當(dāng)中。思考一下人們構(gòu)建的系統(tǒng),通常會(huì)找到一系列值得被標(biāo)識(shí)的關(guān)鍵抽象。每個(gè)事物都應(yīng)該是可標(biāo)識(shí)的,都應(yīng)該擁有一個(gè)明顯的ID——在Web中,代表ID的統(tǒng)一概念是:URI。URI構(gòu)成了一個(gè)全局命名空間,使用URI標(biāo)識(shí)你的關(guān)鍵資源意味著它們獲得了一個(gè)唯一、全局的ID。


    值得被URI標(biāo)識(shí)的事物——資源——要比數(shù)據(jù)庫(kù)記錄抽象的多。標(biāo)識(shí)所有值得標(biāo)識(shí)的事物,領(lǐng)會(huì)這個(gè)觀念可以進(jìn)一步引導(dǎo)你創(chuàng)造出在傳統(tǒng)的應(yīng)用程序設(shè)計(jì)中不常見的資源:一個(gè)流程或者流程步驟、一次銷售、一次談判、一份報(bào)價(jià)請(qǐng)求——這都是應(yīng)該被標(biāo)識(shí)的事物的示例。

    將所有事物鏈接在一起

    接下來要討論的原則有一個(gè)有點(diǎn)令人害怕的正式描述:“超媒體被當(dāng)作應(yīng)用狀態(tài)引擎(Hypermedia as the engine of application state)”,有時(shí)簡(jiǎn)寫為HATEOAS。(嚴(yán)格地說,這不是我說的。)這個(gè)描述的核心是超媒體概念,換句話說:是鏈接的思想。鏈接是我們?cè)贖TML中常見的概念,但是它的用處絕不局限于此(用于人們網(wǎng)絡(luò)瀏覽)。


    使用標(biāo)準(zhǔn)方法

    在前兩個(gè)原則的討論中暗含著一個(gè)假設(shè):接收URI的應(yīng)用程序可以通過URI明確地一些有意義的事情。如果你在公共汽車上看到一個(gè)URI,你可以將它輸入瀏覽器的地址欄中并回車——但是你的瀏覽器如何知道需要對(duì)這個(gè)URI做些什么呢?

    它知道如何去處理URI的原因在于所有的資源都支持同樣的接口,一套同樣的方法(只要你樂意,也可以稱為操作)集合。在HTTP中這被叫做動(dòng)詞(verb),除了兩個(gè)大家熟知的(GET和POST)之外,標(biāo)準(zhǔn)方法集合中還包含PUT、DELETE、HEAD和OPTIONS。這些方法的含義連同行為許諾都一起定義在HTTP規(guī)范之中。


    資源多重表述

    在實(shí)踐中,資源多重表述還有著其它重要的好處:如果你為你的資源提供HTML和XML兩種表述方式,那這些資源不僅可以被你的應(yīng)用所用,還可以被任意標(biāo)準(zhǔn)Web瀏覽器所用——也就是說,你的應(yīng)用信息可以被所有會(huì)使用Web的人獲取到。

    無狀態(tài)通信

    首先,需要著重強(qiáng)調(diào)的是,雖然REST包含無狀態(tài)性(statelessness)的觀念,但這并不是說暴露功能的應(yīng)用不能有狀態(tài)——
    事實(shí)上,在大部分情況下這會(huì)導(dǎo)致整個(gè)做法沒有任何用處。REST要求狀態(tài)要么被放入資源狀態(tài)中,要么保存在客戶端上。
    或者換句話說,服務(wù)器端不能保持除了單次請(qǐng)求之外的,任何與其通信的客戶端的通信狀態(tài)。這樣做的最直接的理由就是可伸縮性—— 如果服務(wù)器需要保持客戶端狀態(tài),那么大量的客戶端交互會(huì)嚴(yán)重影響服務(wù)器的內(nèi)存可用空間(footprint)。(注意,要做到無狀態(tài)通信往往需要需要一些重新設(shè)計(jì)——不能簡(jiǎn)單地將一些session狀態(tài)綁縛在URI上,然后就宣稱這個(gè)應(yīng)用是RESTful。)

    但除此以外,其它方面可能顯得更為重要:無狀態(tài)約束使服務(wù)器的變化對(duì)客戶端是不可見的,因?yàn)樵趦纱芜B續(xù)的請(qǐng)求中,客戶端并不依賴于同一臺(tái)服務(wù)器。一個(gè)客戶端從某臺(tái)服務(wù)器上收到一份包含鏈接的文檔,當(dāng)它要做一些處理時(shí),這臺(tái)服務(wù)器宕掉了,可能是硬盤壞掉而被拿去修理,可能是軟件需要升級(jí)重啟——如果這個(gè)客戶端訪問了從這臺(tái)服務(wù)器接收的鏈接,它不會(huì)察覺到后臺(tái)的服務(wù)器已經(jīng)改變了。

     

    REST風(fēng)格的一個(gè)“化身”便是HTTP(以及一套相關(guān)的一套標(biāo)準(zhǔn),比如URI)。

    附錄:
    1.深入淺出REST http://www.infoq.com/cn/articles/rest-introduction
    2.理解Restful 架構(gòu) http://www.ruanyifeng.com/blog/2011/09/restful.html
    3.Rest和soap比較 http://www.infoq.com/cn/articles/rest-soap-when-to-use-each
    4.Rest和Rpc比較 http://xinklabi.iteye.com/blog/807220

     

    posted @ 2012-06-19 15:44 zyskm 閱讀(3121) | 評(píng)論 (3)編輯 收藏

    主站蜘蛛池模板: 亚洲视频免费在线播放| 亚洲一级毛片在线观| 亚洲91精品麻豆国产系列在线| 亚洲s码欧洲m码吹潮| 精品国产福利尤物免费| 国产乱码免费卡1卡二卡3卡| 亚洲高清无码专区视频| 亚洲熟妇av一区二区三区下载| 国产精品日本亚洲777| 亚洲一区免费观看| 免费a级黄色毛片| 亚洲av成人一区二区三区| 国产vA免费精品高清在线观看 | 在线看片免费不卡人成视频| 亚洲中文字幕无码专区| 国产亚洲福利在线视频| 美女在线视频观看影院免费天天看 | 亚洲精品自偷自拍无码| 久久久国产精品无码免费专区| 国产在线观看免费视频播放器 | 免费人成网站永久| 国产成人yy免费视频| 亚洲综合精品香蕉久久网| 亚洲一线产品二线产品| 91青青国产在线观看免费| 亚洲一级片免费看| 亚洲精品无码专区久久| 18禁美女裸体免费网站| 亚洲自偷自偷图片| 亚洲av无码专区国产不乱码| 91九色老熟女免费资源站| 国产亚洲福利精品一区| 老外毛片免费视频播放| 成年女人免费视频播放77777| 久久亚洲精品人成综合网| 中文字幕在线免费播放| 午夜亚洲国产成人不卡在线| 日本亚洲免费无线码| 国产乱子精品免费视观看片| 亚洲日本中文字幕| a级毛片免费观看视频|