www.九色在线,爱看av在线入口,9191久久久久久久久久久http://www.aygfsteel.com/lukangping/zh-cnWed, 18 Jun 2025 04:23:53 GMTWed, 18 Jun 2025 04:23:53 GMT60truncate delete 區(qū)分及引申 #高級程序員進階之路#http://www.aygfsteel.com/lukangping/articles/350767.htmlkangarookangarooSun, 22 May 2011 04:12:00 GMThttp://www.aygfsteel.com/lukangping/articles/350767.htmlhttp://www.aygfsteel.com/lukangping/comments/350767.htmlhttp://www.aygfsteel.com/lukangping/articles/350767.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/350767.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/350767.html

先簡單回顧下sql語言的幾種語言:ddl,dml,dcl,它們分別是:

ddl即data definition language,例如常用的:create,alter,drop,truncate,grant,revoke,comment;

dml即data manipulation language,我們經(jīng)常使用的:select,insert,update,delete等都是數(shù)據(jù)操作語言。

dcl即data control language,數(shù)據(jù)控制語言,平時基本用不到,如commit,savepoint,rollback,set transaction。

 

所以區(qū)別主要在:

  • delete是dml語句,這個操作使用放在rollback segement里,事務(wù)提交后才生效,是可以回滾的;truncate是ddl語句,它不在rollback segement里的,事務(wù)自動提交,操作立即生效,沒有回滾一說,除非自身失敗;
  • 還有一個關(guān)鍵,雖然truncate是數(shù)據(jù)定義語言,但是truncate和delete操作一樣,都只刪除數(shù)據(jù)不刪除表結(jié)構(gòu),兩者的主要區(qū)別在于,truncate操作是沒有備份的,所以它執(zhí)行速度比delete快;而另一個ddl語句drop,將刪除的是結(jié)構(gòu)包括被依賴的觸發(fā)器,索引,約束,依賴該表的存儲過程會被保留。剛才又搜索了下truncate和drop操作之后數(shù)據(jù)也還是可以找回來的:http://dbsnake.com/2010/06/truncate-drop-recovery.html


kangaroo 2011-05-22 12:12 發(fā)表評論
]]>
java xml 解析方式匯總 (一)#高級程序員進階之路#http://www.aygfsteel.com/lukangping/articles/350762.htmlkangarookangarooSun, 22 May 2011 03:25:00 GMThttp://www.aygfsteel.com/lukangping/articles/350762.htmlhttp://www.aygfsteel.com/lukangping/comments/350762.htmlhttp://www.aygfsteel.com/lukangping/articles/350762.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/350762.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/350762.html

1。xml背景

格式良好的(web-fromed)xml可以不需要文檔類型定義(DTD),只要滿足基本的xml格式規(guī)范就可以認為是格式良好的xml文檔。但是格式標(biāo)準(zhǔn),只能說明元素、標(biāo)簽、格式是合法的,并不能說明元素是有意義的,或者說規(guī)范的。

有效的xml文檔,首先要求是格式良好的文檔,同時遵守相應(yīng)的DTD文件約束。

2。xml解析

xml文檔解析的大致使用過程如下圖:

 

 

 

由xml解析器解析和操作指定的xml文檔,然后提供接口供應(yīng)用程序使用。如果解析器不同,那么提供的接口就有可能不同。慶幸的是,目前所有的xml解析器對兩套標(biāo)準(zhǔn)的api提供了支持,這兩套標(biāo)準(zhǔn)api就是dom和sax。

dom:即document object model,文檔對象模型,它是w3c組織推薦的處理xml的標(biāo)準(zhǔn)接口。dom是基于xml文檔結(jié)構(gòu)樹的解析。

sax:即simple api for xml,它是非官方的、xml社區(qū)事實上的標(biāo)準(zhǔn)。sax是基于事件流的解析。

dom和sax只是定義了一些接口以及某些接口的缺省實現(xiàn),應(yīng)用程序要想利用dom或sax訪問xml文檔,還需要真正實現(xiàn)dom或sax接口的xml解析器。apache的xerces是一個使用非常廣泛的解析器,它實現(xiàn)了dom和sax的調(diào)用接口,并提供了多種語言的實現(xiàn)版本。

3。java語言對xml文檔的解析

首先介紹jaxp:

基于dom或sax提供的api接口,使用相應(yīng)的解析器實現(xiàn)類我們已經(jīng)可以對xml進行解析處理了。如下所示:

org.xml.sax.XMLReader sp=new org.apache.xerces.parser.SAXParser();

FileInputStream fis=new FileInputStream(“hello.xml”);

InputSource is=new InputSource(fis);

sp.setContentHandler(new MyConentHandler());

sp.parse(is);

為了屏蔽xml解析器的變化對代碼的影響,java提供了一套標(biāo)準(zhǔn)的處理xml文件的接口(實際上是一些抽象的工廠類),使得java開發(fā)人員以一種標(biāo)準(zhǔn)的方式對xml進行編程,即jaxp(java api for xml processing)。jaxp沒有提供解析xml的新方法,只是在解析器之上封裝一個抽象層。在jdk1.6的文檔中,我們可以看到j(luò)avax.xml,org.w3c.dom,org.xml.sax包及其子包都屬于jaxp的部分。jaxp由接口、抽象類和一些輔助類組成,符合jaxp規(guī)范的解析器實現(xiàn)其中的接口和抽象類,開發(fā)時只需要使用jaxp的api編程,底層的解析器對開發(fā)者時透明的,可以隨意的切換。

那么jaxp出現(xiàn)后,java應(yīng)用程序處理xml文檔的過程就如下圖:

 

那實際采用哪種解析器的jaxp實現(xiàn),可以通過系統(tǒng)屬性、properties文件等方式來配置。

下面具體介紹幾種java解析xml的方法:

3.1 DOM方式(jaxp)

在javax.xml.parsers包中,定義了dom的抽象工廠類DocumentBuilderFactory,在這個類中有一個靜態(tài)的方法newInstance(),通過它產(chǎn)生一個DocumentBuilderFactory的實例。前面提到過jaxp編程,解析器提供商必須繼承該抽象類產(chǎn)生一個具體的解析器工廠,然后由這個工廠類實例出一個解析器對象,再通過該解析器對象處理xml文檔。那么這個newInstance方法就是用來產(chǎn)生一個具體的解析器工廠類實例,查找生成解析器工廠類實例的方式可參考jdk文檔。

在獲取到解析器工廠類實例類之后,就可以調(diào)用newDocumentBuilder()方法創(chuàng)建一個dom解析器實例;dom解析器實例就可以調(diào)用parser()方法獲取整個xml問答的Document對象。

3 .2 SAX方式(jaxp)

sax是基于事件驅(qū)動的api,sax解析xml文檔時會向事件處理器發(fā)送不同的事件。sax解析器接口和事件處理器接口都在org.xml.sax包中定義。XMLReader即為sax定義的解析器接口,由解析器提供商實現(xiàn)該借口,應(yīng)用程序需要做的是編寫一個事件處理器。可以通過XMLReader的setContentHandler()方法來設(shè)置一個事件處理器的實例。

與dom類似,jaxp也為sax解析器提供了抽象工廠類SAXParserFactory類,sax解析器工廠類的實例與dom解析器工廠類的實例類似,都是通過newInstance()方法來創(chuàng)建,不同的是SAXParserFactory的newInstance()方法查找的工廠類屬性是:javax.xml.parsers.SAXParserFactory。同樣,獲取sax解析器實例的方法,可以通過調(diào)用newSAXParser()。

使用SAXParser和XMLReader都可以用來對xml文檔進行解析,前者只是對后者又一次的包裝。

3.3 JDOM

dom被設(shè)計用于完成幾乎所有的xml操作任務(wù),同時又是與語言無關(guān)的,這就導(dǎo)致dom的api龐大而且復(fù)雜。為了使java程序員更方便地處理xml文檔,兩位國外的java技術(shù)專家創(chuàng)建了jdom。用developerworks上的一句話,“延續(xù)開源社群有需要就創(chuàng)建工具的歷史傳統(tǒng),Java 技術(shù)專家 Jason Hunter 和 Brett McLaughlin 締造了 JDOM”。所以可以認為,jdom是一種專門用于java語言解析xml文檔的開放源代碼框架。

jdom也使用對象樹來表示xml文檔,底層使用sax解析器分析xml文檔,形成jdom樹。

3.4 DOM4J

同jdom一樣,dom4j也是應(yīng)用于java平臺,提供簡單、靈活的處理xml文檔的開發(fā)源代碼庫。很有意思的是,dom4j是由早期開發(fā)jdom的人分離出來而后獨立開發(fā)的,(利益或意見不和?呵呵)與jdom相比,dom4j提供了更好的靈活性。從網(wǎng)上的評論可以看出,dom4j從性能、功能、易用性上都優(yōu)于jdom,可以作為解析xml文件的首選。(看來后來分離出的那撥人選擇還是正確的!)流行的hibernate,jaxm都采用了dom4j處理xml文件。

dom4j也使用sax解析器來分析xml文檔,形成dom4j樹;它也提供了用于大文檔的基于事件的處理模型。

所以可以看出,jdom和dom4j只是開源社區(qū)產(chǎn)生出來的方便地解析xml的框架或工具,并沒有創(chuàng)造新的xml解析方式。如果拿

拿以上四種解析xml的方法比較,用孫鑫老師的話,如果你需要頻繁更換解析器就是jaxp方式,否則推薦使用dom4j。



kangaroo 2011-05-22 11:25 發(fā)表評論
]]>
linux 查看端口 命令http://www.aygfsteel.com/lukangping/articles/348919.htmlkangarookangarooSun, 24 Apr 2011 07:10:00 GMThttp://www.aygfsteel.com/lukangping/articles/348919.htmlhttp://www.aygfsteel.com/lukangping/comments/348919.htmlhttp://www.aygfsteel.com/lukangping/articles/348919.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/348919.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/348919.html

lsof -i :port,使用lsof -i :port就能看見所指定端口運行的程序,同時還有當(dāng)前連接。 




kangaroo 2011-04-24 15:10 發(fā)表評論
]]>
新浪微博 授權(quán)過程 http://www.aygfsteel.com/lukangping/articles/348876.htmlkangarookangarooSat, 23 Apr 2011 11:57:00 GMThttp://www.aygfsteel.com/lukangping/articles/348876.htmlhttp://www.aygfsteel.com/lukangping/comments/348876.htmlhttp://www.aygfsteel.com/lukangping/articles/348876.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/348876.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/348876.html

OAuth通過應(yīng)用和微博授權(quán)頁面之間的跳轉(zhuǎn)來進行授權(quán). 其步驟為

  1. 應(yīng)用向微博平臺發(fā)起請求,獲得一個臨時的oauth_token,和oauth_token_secret(A),這套key被稱為request token.
  2. 應(yīng)用將用戶轉(zhuǎn)向到微博授權(quán)頁面,同時帶上這個token和一個回調(diào)頁面地址
  3. 用戶在微博上同意授權(quán)后,會生成oauth_verifier(B),并在轉(zhuǎn)向到回調(diào)頁面是帶上這個值.
  4. 應(yīng)用通過$_REQUEST得到oauth_verifier,再加上之前(A)處的oauth_token和oauth_token_secret,向微博發(fā)起最后一次請求.
  5. 微博平臺驗證無誤后,發(fā)給應(yīng)用另外一套oauth_token和oauth_token_secret(C),這套key被成為access token.
  6. 拿到access token意味著應(yīng)用已經(jīng)獲得了授權(quán).之后應(yīng)用就可以通過access token獲取和發(fā)送微博了.

access token不用每次都去取,可以把它保存下來,供下次使用.這樣性能更高.



kangaroo 2011-04-23 19:57 發(fā)表評論
]]>
linux 顯示當(dāng)前所在路徑http://www.aygfsteel.com/lukangping/articles/348657.htmlkangarookangarooWed, 20 Apr 2011 13:08:00 GMThttp://www.aygfsteel.com/lukangping/articles/348657.htmlhttp://www.aygfsteel.com/lukangping/comments/348657.htmlhttp://www.aygfsteel.com/lukangping/articles/348657.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/348657.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/348657.html

kangaroo 2011-04-20 21:08 發(fā)表評論
]]>
mac mysql 啟動 關(guān)閉 服務(wù)http://www.aygfsteel.com/lukangping/articles/348527.htmlkangarookangarooMon, 18 Apr 2011 14:24:00 GMThttp://www.aygfsteel.com/lukangping/articles/348527.htmlhttp://www.aygfsteel.com/lukangping/comments/348527.htmlhttp://www.aygfsteel.com/lukangping/articles/348527.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/348527.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/348527.htmlsudo mysqladmin shutdown

kangaroo 2011-04-18 22:24 發(fā)表評論
]]>
linux ll -k -hhttp://www.aygfsteel.com/lukangping/articles/347416.htmlkangarookangarooThu, 31 Mar 2011 11:05:00 GMThttp://www.aygfsteel.com/lukangping/articles/347416.htmlhttp://www.aygfsteel.com/lukangping/comments/347416.htmlhttp://www.aygfsteel.com/lukangping/articles/347416.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/347416.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/347416.html要想方便的查看出大小,使用“ll -h”

kangaroo 2011-03-31 19:05 發(fā)表評論
]]>
chrome 快捷鍵 firebughttp://www.aygfsteel.com/lukangping/articles/347242.htmlkangarookangarooTue, 29 Mar 2011 14:31:00 GMThttp://www.aygfsteel.com/lukangping/articles/347242.htmlhttp://www.aygfsteel.com/lukangping/comments/347242.htmlhttp://www.aygfsteel.com/lukangping/articles/347242.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/347242.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/347242.html如果覺得太過復(fù)雜,可以使用firebug for chrome的插件,快捷F12,相當(dāng)方便!



kangaroo 2011-03-29 22:31 發(fā)表評論
]]>
EditPlus 快捷鍵http://www.aygfsteel.com/lukangping/articles/344526.htmlkangarookangarooThu, 17 Feb 2011 03:47:00 GMThttp://www.aygfsteel.com/lukangping/articles/344526.htmlhttp://www.aygfsteel.com/lukangping/comments/344526.htmlhttp://www.aygfsteel.com/lukangping/articles/344526.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/344526.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/344526.html

kangaroo 2011-02-17 11:47 發(fā)表評論
]]>
XMind 快捷鍵http://www.aygfsteel.com/lukangping/articles/342658.htmlkangarookangarooMon, 10 Jan 2011 01:55:00 GMThttp://www.aygfsteel.com/lukangping/articles/342658.htmlhttp://www.aygfsteel.com/lukangping/comments/342658.htmlhttp://www.aygfsteel.com/lukangping/articles/342658.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/342658.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/342658.html

快捷鍵(Windows)

快捷鍵(Mac)

描述

Ctrl+N Command+N 建立新工作簿
Ctrl+O Command+O 開啟工作簿
Ctrl+S Command+S 儲存目前工作簿
Ctrl+Shift+S Command+Shift+S 儲存全部工作簿
Ctrl+W Command+W 關(guān)閉目前工作簿
Ctrl+Shift+W Command+Shift+W 關(guān)閉全部工作簿
Ctrl+P Command+P 列印
Ctrl+Z Command+Z 復(fù)原
Ctrl+Y Command+Y 重做
Ctrl+X Command+X 剪切
Ctrl+C Command+C 複製
Ctrl+V Command+V 貼上
Delete Delete 刪除
Ctrl+Home Command+Home 返回中心主題
Ctrl+A Command+A 選擇全部主題
Ctrl+Shift+A Command+Shift+A 選擇同層級主題
Ctrl+Alt+A Command+Alt+A 選擇子主題
Ctrl+F Command+F 尋找/取代
Ctrl++ Command++ 放大
Ctrl+- Command+- 縮小
Ctrl+= Command+= 正常大小
Ctrl+] Command+] 插入摘要
Alt+Enter Alt+Enter 屬性內(nèi)容
Enter Enter 插入主題
Tab Tab 插入子主題
Shift+Enter Shift+Enter 在目前主題前插入主題
Ctrl+Enter Command+Enter 插入目前主題父主題
Ctrl+Shift+L Command+Shift+L 快捷鍵助手
Ctrl+I Ctrl+I 插入圖片
Ctrl+Shift+H Command+Shift+H 插入超連結(jié)
Ctrl+B Command+B 添加外框
Ctrl+L Command+L 添加關(guān)連
F2 F2 編輯主題
F3 F3 添加/編輯標(biāo)籤
F4 F4 添加/編輯備註
F5 F5 簡報演示
F6 F6 下鑽
Shift+F6 Shift+F6 上鑽
F7 F7 智慧擷取圖面
+ + 展開目前分支
- - 收縮目前分支
* * 展開所有分支
/ / 收縮所有分支
Alt+Up Alt+Up 向前移動
Alt+Down Alt+Down 向後移動
Ctrl+T Command+T 建立新心智圖
Ctrl+1,2,3,4,5,6 Command+1,2,3,4,5,6 快速添加優(yōu)先等級圖標(biāo)
Esc Esc 關(guān)閉跳出的備註對話框 / 取消擷圖
Ctrl+滑鼠滾輪 Command+滑鼠滾輪 放大縮小目前的圖面


kangaroo 2011-01-10 09:55 發(fā)表評論
]]>
ASCII GBK2312 GBK | UNICODE UTF-8 UTF-16 區(qū)別 關(guān)系http://www.aygfsteel.com/lukangping/articles/340963.htmlkangarookangarooFri, 17 Dec 2010 02:50:00 GMThttp://www.aygfsteel.com/lukangping/articles/340963.htmlhttp://www.aygfsteel.com/lukangping/comments/340963.htmlhttp://www.aygfsteel.com/lukangping/articles/340963.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/340963.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/340963.htmlASCII是最初的計算機指定的一套符號編碼,使用一個字節(jié)其中的7位,128個數(shù)值代表不同字符,對于英語這個已經(jīng)是足夠,
但是對于其他國家的語言,卻遠遠不夠,如漢語,日語,韓語,所以就出現(xiàn)了非ASCII的字符編碼,如gbk2312,gbk的漢字編碼。這些非ascii的編碼都是兼容ascii128個符號編碼的。

------------------------------------------------------------------------------------------------------------------------------------------------------

UNICODE首先只是一個字符集,它的出現(xiàn)就是因為各個國家出臺自己的語言編碼,為了統(tǒng)一這些所有語言,可以理解unicode是涵蓋各個國家字符的集合,現(xiàn)在的規(guī)模可以容納100多萬個符號。需要說明的是,定長編碼便于計算機處理(注意GB2312/GBK不是定長編碼),而unicode又可以用來表示所有字符,所以在很多軟件內(nèi)部是使用unicode編碼來處理的,比如java。
unicode只是一個符號集,只規(guī)定了符號的二進制代碼,卻沒有規(guī)定這個二進制代碼應(yīng)該如何存儲,即編碼方式,常見的有utf-8和utf-16。
(如果unicode規(guī)定,每個符號用三個字節(jié)表示,那么英文字母只占用一個字節(jié),就浪費很多存儲空間。)
UTF-8就是一種變長的編碼方式,它使用1~4個字節(jié)表示一個符號,根據(jù)不同的符號而變化字節(jié)長度。


我們常用的記事本功能,在"save as"的時候,可以選擇不同的編碼方式,里面有四個選擇:ansi,unicode,unicode big endian,utf-8:
1.ANSI是默認的編碼方式。對于英文文件是ASCII編碼,對于簡體中文文件是GB2312編碼(只針對Windows簡體中文版,如果是繁體中文版會采用Big5碼)。
2.Unicode編碼指的是UCS-2編碼方式,即直接用兩個字節(jié)存入字符的Unicode碼。這個選項用的little endian格式。

3.Unicode big endian編碼與上一個選項相對應(yīng)。我在下一節(jié)會解釋little endian和big endian的涵義。

4.UTF-8編碼,也就是上一節(jié)談到的編碼方法。



參考:

http://www.cnblogs.com/pony/archive/2009/02/05/1384323.html
http://blog.chinaunix.net/u1/56156/showart_2245355.html
http://liaoshaoyao.javaeye.com/blog/667056



kangaroo 2010-12-17 10:50 發(fā)表評論
]]>
MD5 DSA RSA 簡單 區(qū)別http://www.aygfsteel.com/lukangping/articles/340866.htmlkangarookangarooThu, 16 Dec 2010 03:43:00 GMThttp://www.aygfsteel.com/lukangping/articles/340866.htmlhttp://www.aygfsteel.com/lukangping/comments/340866.htmlhttp://www.aygfsteel.com/lukangping/articles/340866.html#Feedback1http://www.aygfsteel.com/lukangping/comments/commentRss/340866.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/340866.html
DSA和RSA是一種非對稱加密算發(fā),簽名密鑰分為公鑰和私鑰。私鑰用于加密,公鑰用于驗證簽名。使用這種算法的簽名即起到防篡改的功能,又起到防抵賴的作用。因為私鑰只有簽名者自己獨有。



kangaroo 2010-12-16 11:43 發(fā)表評論
]]>
oracle 唯一 索引 約束 創(chuàng)建 刪除http://www.aygfsteel.com/lukangping/articles/340683.htmlkangarookangarooTue, 14 Dec 2010 09:45:00 GMThttp://www.aygfsteel.com/lukangping/articles/340683.htmlhttp://www.aygfsteel.com/lukangping/comments/340683.htmlhttp://www.aygfsteel.com/lukangping/articles/340683.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/340683.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/340683.html

/*給創(chuàng)建bitmap index分配的內(nèi)存空間參數(shù),以加速建索引*/

show parameter create_bit;

/*改變索引的存儲參數(shù)*/

alter index index_name pctfree 30 storage(initial 200k next 200k);

/*給索引手工分配一個分區(qū)*/

alter index index_name allocate extent (size 200k datafile '$ORACLE/oradata/..');

/*釋放索引中沒用的空間*/

alter index index_name deallocate unused;

/*索引重建*/

alter index index_name rebuild tablespace tablespace_name;

/*普通索引和反轉(zhuǎn)索引的互換*/

alter index index_name rebuild tablespace tablespace_name reverse;

/*重建索引時,不鎖表*/

alter index index_name rebuild online;

/*給索引整理碎片*/

alter index index_name COALESCE;

/*分析索引,事實上是更新統(tǒng)計的過程*/

analyze index index_name validate structure;

desc index_state;

drop index index_name;

alter index index_name monitoring usage;-----監(jiān)視索引是否被用到

alter index index_name nomonitoring usage;----取消監(jiān)視

/*有關(guān)索引信息的視圖*/

select * from dba_indexes/dba_ind_columns/dbs_ind_eXPressions/v$object_usage;

########## 數(shù)據(jù)完整性的治理(Maintaining data integrity) ##########

alter table table_name drop constraint constraint_name;----drop 約束

alter table table_name add constraint constraint_name primary key(column_name1,column_name2);-----創(chuàng)建主鍵

alter table table_name add constraint constraint_name unique(column_name1,column_name2);---創(chuàng)建唯一約束

/*創(chuàng)建外鍵約束*/

alter table table_name add constraint constraint_name foreign key(column_name1) references table_name(column_name1);

/*不效驗老數(shù)據(jù),只約束新的數(shù)據(jù)[enable/disable:約束/不約束新數(shù)據(jù);novalidate/validate:不對/對老數(shù)據(jù)進行驗證]*/

alter table table_name add constraint constraint_name check(column_name like 'B%') enable/disable novalidate/validate;

/*修改約束條件,延時驗證,commit時驗證*/

alter table table_name modify constraint constraint_name initially deferred;

/*修改約束條件,立即驗證*/

alter table table_name modify constraint constraint_name initially immediate;

alter session set constraints=deferred/immediate;

/*drop一個有外鍵的主鍵表,帶cascade constraints參數(shù)級聯(lián)刪除*/

drop table table_name cascade constraints;

/*當(dāng)truncate外鍵表時,先將外鍵設(shè)為無效,再truncate;*/

truncate table table_name;

/*設(shè)約束條件無效*/

alter table table_name disable constraint constraint_name;

alter table table_name enable novalidate constraint constraint_name;


簡潔實用,謝謝http://wfly2004.blog.163.com/blog/static/11764272010629114155174/

http://hi.baidu.com/zhangcheng1/blog/item/54deb0cc9ab69d1701e9281e.html



kangaroo 2010-12-14 17:45 發(fā)表評論
]]>
Linux grep awk 用法 語法 命令http://www.aygfsteel.com/lukangping/articles/340418.htmlkangarookangarooSun, 12 Dec 2010 12:44:00 GMThttp://www.aygfsteel.com/lukangping/articles/340418.htmlhttp://www.aygfsteel.com/lukangping/comments/340418.htmlhttp://www.aygfsteel.com/lukangping/articles/340418.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/340418.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/340418.html
找到一份比較清楚的文章:
同事寫過的記錄數(shù)組的用法,很棒!
|grep ","|awk -F ","  '{print $10}'| awk -F ":" '{hist[$1]++} END{for(i in hist) printf "%s %d\n", i, hist[i]}'


kangaroo 2010-12-12 20:44 發(fā)表評論
]]>
#重操PHP# 服務(wù)器端腳本語言http://www.aygfsteel.com/lukangping/articles/340396.htmlkangarookangarooSun, 12 Dec 2010 07:57:00 GMThttp://www.aygfsteel.com/lukangping/articles/340396.htmlhttp://www.aygfsteel.com/lukangping/comments/340396.htmlhttp://www.aygfsteel.com/lukangping/articles/340396.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/340396.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/340396.htmlphp,服務(wù)器端腳本語言。每次請求之后,先由web服務(wù)器解釋執(zhí)行后,在以html輸出到客戶端。
相對于java sverlet容器的tomcat,php的編譯引擎可以嵌入到apache或iis這類web服務(wù)器中。


kangaroo 2010-12-12 15:57 發(fā)表評論
]]>
web開發(fā)實踐之一:eclipse中導(dǎo)入第三方j(luò)ar,打包時出現(xiàn)類無法找到的異常http://www.aygfsteel.com/lukangping/articles/334656.htmlkangarookangarooTue, 12 Oct 2010 08:09:00 GMThttp://www.aygfsteel.com/lukangping/articles/334656.htmlhttp://www.aygfsteel.com/lukangping/comments/334656.htmlhttp://www.aygfsteel.com/lukangping/articles/334656.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/334656.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/334656.html
 
研究一下發(fā)現(xiàn),因為在eclipse里面,淘寶api的jar包是以第三方j(luò)ar的形式導(dǎo)入進來的,所以在eclipse中訪問是沒有問題的,但是如果是web工程打包時,是不包括第三方j(luò)ar包的,所以結(jié)果是,不論是jetty還是tomcat中啟動都會出現(xiàn)第三方j(luò)ar的類無法找到的錯誤。

解決的辦法是,將這些第三方j(luò)ar包install到本地maven庫,命令如:
mvn install:install-file -Dfile=E:/08_library/taobao_sdk/taobao-sdk-java/taobao-sdk-java.jar -DgroupId=tanlun.taobao.openapi -DartifactId=taobaosdk -Dversion=0.2 -Dpackaging=jar
之后在web工程的pom.xml文件中加入對該jar的依賴,這樣重新mvn eclipse:eclipse,之后再mvn jetty:run就沒有問題了。


kangaroo 2010-10-12 16:09 發(fā)表評論
]]>
JAVA深入之一:JVM堆(heap)和棧(stack)http://www.aygfsteel.com/lukangping/articles/334118.htmlkangarookangarooSat, 09 Oct 2010 09:19:00 GMThttp://www.aygfsteel.com/lukangping/articles/334118.htmlhttp://www.aygfsteel.com/lukangping/comments/334118.htmlhttp://www.aygfsteel.com/lukangping/articles/334118.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/334118.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/334118.htmljvm堆和棧分離的好處,從軟件設(shè)計的角度看,棧代表處理邏輯,堆代表數(shù)據(jù),分而治之,邏輯更加清楚。因為堆中的內(nèi)容可以被共享,節(jié)省了空間。從面向?qū)ο蟮慕嵌龋瑢ο蟮膶傩裕磾?shù)據(jù),被存放在堆中,而對象中的方法,則是運行邏輯,存放在棧中。
平時我們在eclipse啟動程序,我們可以通過-Xms,-Xmx來設(shè)置大小,其實是在設(shè)置初始堆空間,和最大堆空間的大小。


kangaroo 2010-10-09 17:19 發(fā)表評論
]]>
OAUTH 原理解析http://www.aygfsteel.com/lukangping/articles/332841.htmlkangarookangarooSat, 25 Sep 2010 08:00:00 GMThttp://www.aygfsteel.com/lukangping/articles/332841.htmlhttp://www.aygfsteel.com/lukangping/comments/332841.htmlhttp://www.aygfsteel.com/lukangping/articles/332841.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/332841.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/332841.htmlhttp://hueniverse.com/2007/10/beginners-guide-to-oauth-part-ii-protocol-workflow/
然后看下中文的:

明白了OAUTH的工作原理之后,我就在想,現(xiàn)在原有的webservice的方式,不是也可以實現(xiàn)不同網(wǎng)站之間通過api的形式來資源共享嗎,那OAUTH又有什么好處了。
看了一些文章之后,我的認識可能是,在跨語言的webservice調(diào)用時,實現(xiàn)細節(jié)上還是有很多差異,特別是復(fù)雜的對象類型。
轉(zhuǎn)換成REST方式的服務(wù)之后,對服務(wù)的發(fā)布者和使用者來說都是輕量級的。
那OAUTH正是在REST基礎(chǔ)上api的安全校驗和授權(quán)的一種方式。

kangaroo 2010-09-25 16:00 發(fā)表評論
]]>
并發(fā)實踐之四:ThreadPoolTaskExecutor 創(chuàng)建線程池管理http://www.aygfsteel.com/lukangping/articles/332806.htmlkangarookangarooSat, 25 Sep 2010 03:29:00 GMThttp://www.aygfsteel.com/lukangping/articles/332806.htmlhttp://www.aygfsteel.com/lukangping/comments/332806.htmlhttp://www.aygfsteel.com/lukangping/articles/332806.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/332806.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/332806.html  
1<bean id="threadPoolTaskExecutor"
2        class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
3        <property name="corePoolSize" value="5" />
4        <property name="maxPoolSize" value="10" />
5        <property name="queueCapacity" value="25" />
6    </bean>
corePoolSize:默認開啟線程數(shù);maxPoolSize:最大線程數(shù);queueCapacity:緩沖任務(wù)隊列的長度;
創(chuàng)建線程的方式:
1threadPoolTaskExecutor.execute(new Runnable() {
2                public void run() {
3                   //異步任務(wù)
4                }
5            });



kangaroo 2010-09-25 11:29 發(fā)表評論
]]>
本地 tomcat https sslhttp://www.aygfsteel.com/lukangping/articles/331466.htmlkangarookangarooThu, 09 Sep 2010 02:45:00 GMThttp://www.aygfsteel.com/lukangping/articles/331466.htmlhttp://www.aygfsteel.com/lukangping/comments/331466.htmlhttp://www.aygfsteel.com/lukangping/articles/331466.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/331466.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/331466.html
1. 創(chuàng)建證書
    進入到你的jre/bin文件夾下,鍵入“keytool -genkey -alias tomcat -keyalg RSA -keystore c:/.keystore”,默認將把證書保存在你的C盤根目錄下。在申請的過程中密碼請?zhí)顚?#8220;changeit”,這是tomcat的默認密碼。
2. 修改server.xml
    進入到你的$CATALINA_HOME/conf/server.xml,打開后尋找:
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
    
<!--
    <Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
-->
    修改如下:
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
    
    
<Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads
="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups
="false" disableUploadTimeout="true"
               acceptCount
="100" scheme="https" secure="true"
               clientAuth
="false" sslProtocol="TLS" keystoreFile="c:\.keystore"/>
3. 重啟你的tomcat,使用端口8443訪問即可。

kangaroo 2010-09-09 10:45 發(fā)表評論
]]>
并發(fā)實踐之二:管理線程的四個方法start, sleep, yield, join;線程間協(xié)作的方法wait,notifyhttp://www.aygfsteel.com/lukangping/articles/331104.htmlkangarookangarooSun, 05 Sep 2010 15:06:00 GMThttp://www.aygfsteel.com/lukangping/articles/331104.htmlhttp://www.aygfsteel.com/lukangping/comments/331104.htmlhttp://www.aygfsteel.com/lukangping/articles/331104.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/331104.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/331104.html剛開始的時候經(jīng)常會把這兩類的方法搞混了,慢慢接觸多了,一定要弄清楚了。
(1)管理線程的方法
start:不用多說,啟動一個線程的方法。調(diào)用該方法后,線程即進入可運行狀態(tài),也就是進入可運行的線程池了。
sleep:線程休眠,將一個運行時的線程,將其狀態(tài)變?yōu)榭蛇\行狀態(tài),然后加入到和其他處于可運行狀態(tài)下的線程搶奪運行機會。換句話說,sleep的時間是該線程不執(zhí)行的最短時間。
yield:使得當(dāng)前線程進入可運行狀態(tài),以允許具有相同狀態(tài)優(yōu)先級的其他線程獲得運行機會。但是不保證,剛進入可運行狀態(tài),又被選中進入運行狀態(tài)。
join:非靜態(tài)方法join,有點搶線程的意思。一旦某個線程實例t調(diào)用join方法,則當(dāng)前線程變?yōu)榭蛇\行狀態(tài),直到線程t運行完畢為止。
(2)線程間協(xié)作的方法



kangaroo 2010-09-05 23:06 發(fā)表評論
]]>
并發(fā)實踐之一:HashMap的非線程安全性和ConcurrentHasMaphttp://www.aygfsteel.com/lukangping/articles/331089.htmlkangarookangarooSun, 05 Sep 2010 09:12:00 GMThttp://www.aygfsteel.com/lukangping/articles/331089.htmlhttp://www.aygfsteel.com/lukangping/comments/331089.htmlhttp://www.aygfsteel.com/lukangping/articles/331089.html#Feedback5http://www.aygfsteel.com/lukangping/comments/commentRss/331089.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/331089.html在平時開發(fā)中,我們經(jīng)常采用HashMap來作為本地緩存的一種實現(xiàn)方式,將一些如系統(tǒng)變量等數(shù)據(jù)量比較少的參數(shù)保存在HashMap中,并將其作為單例類的一個屬性。在系統(tǒng)運行中,使用到這些緩存數(shù)據(jù),都可以直接從該單例中獲取該屬性集合。但是,最近發(fā)現(xiàn),HashMap并不是線程安全的,如果你的單例類沒有做代碼同步或?qū)ο箧i的控制,就可能出現(xiàn)異常。

首先看下在多線程的訪問下,非現(xiàn)場安全的HashMap的表現(xiàn)如何,在網(wǎng)上看了一些資料,自己也做了一下測試:

 1public class MainClass {
 2    
 3    public static final HashMap<String, String> firstHashMap=new HashMap<String, String>();
 4    
 5    public static void main(String[] args) throws InterruptedException {
 6        
 7        //線程一
 8        Thread t1=new Thread(){
 9            public void run() {
10                for(int i=0;i<25;i++){
11                    firstHashMap.put(String.valueOf(i), String.valueOf(i));
12                }

13            }

14        }
;
15        
16        //線程二
17        Thread t2=new Thread(){
18            public void run() {
19                for(int j=25;j<50;j++){
20                    firstHashMap.put(String.valueOf(j), String.valueOf(j));
21                }

22            }

23        }
;
24        
25        t1.start();
26        t2.start();
27        
28        //主線程休眠1秒鐘,以便t1和t2兩個線程將firstHashMap填裝完畢。
29        Thread.currentThread().sleep(1000);
30        
31        for(int l=0;l<50;l++){
32            //如果key和value不同,說明在兩個線程put的過程中出現(xiàn)異常。
33            if(!String.valueOf(l).equals(firstHashMap.get(String.valueOf(l)))){
34                System.err.println(String.valueOf(l)+":"+firstHashMap.get(String.valueOf(l)));
35            }

36        }

37        
38    }

39
40}

上面的代碼在多次執(zhí)行后,發(fā)現(xiàn)表現(xiàn)很不穩(wěn)定,有時沒有異常文案打出,有時則有個異常出現(xiàn):


為什么會出現(xiàn)這種情況,主要看下HashMap的實現(xiàn):
 1public V put(K key, V value) {
 2    if (key == null)
 3        return putForNullKey(value);
 4        int hash = hash(key.hashCode());
 5        int i = indexFor(hash, table.length);
 6        for (Entry<K,V> e = table[i]; e != null; e = e.next) {
 7            Object k;
 8            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
 9                V oldValue = e.value;
10                e.value = value;
11                e.recordAccess(this);
12                return oldValue;
13            }

14        }

15
16        modCount++;
17        addEntry(hash, key, value, i);
18        return null;
19    }

我覺得問題主要出現(xiàn)在方法addEntry,繼續(xù)看:
1void addEntry(int hash, K key, V value, int bucketIndex) {
2    Entry<K,V> e = table[bucketIndex];
3        table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
4        if (size++ >= threshold)
5            resize(2 * table.length);
6    }

從代碼中,可以看到,如果發(fā)現(xiàn)哈希表的大小超過閥值threshold,就會調(diào)用resize方法,擴大容量為原來的兩倍,而擴大容量的做法是新建一個Entry[]:
 1void resize(int newCapacity) {
 2        Entry[] oldTable = table;
 3        int oldCapacity = oldTable.length;
 4        if (oldCapacity == MAXIMUM_CAPACITY) {
 5            threshold = Integer.MAX_VALUE;
 6            return;
 7        }

 8
 9        Entry[] newTable = new Entry[newCapacity];
10        transfer(newTable);
11        table = newTable;
12        threshold = (int)(newCapacity * loadFactor);
13    }

一般我們聲明HashMap時,使用的都是默認的構(gòu)造方法:HashMap<K,V>,看了代碼你會發(fā)現(xiàn),它還有其它的構(gòu)造方法:HashMap(int initialCapacity, float loadFactor),其中參數(shù)initialCapacity為初始容量,loadFactor為加載因子,而之前我們看到的threshold = (int)(capacity * loadFactor); 如果在默認情況下,一個HashMap的容量為16,加載因子為0.75,那么閥值就是12,所以在往HashMap中put的值到達12時,它將自動擴容兩倍,如果兩個線程同時遇到HashMap的大小達到12的倍數(shù)時,就很有可能會出現(xiàn)在將oldTable轉(zhuǎn)移到newTable的過程中遇到問題,從而導(dǎo)致最終的HashMap的值存儲異常。

JDK1.0引入了第一個關(guān)聯(lián)的集合類HashTable,它是線程安全的。HashTable的所有方法都是同步的。
JDK2.0引入了HashMap,它提供了一個不同步的基類和一個同步的包裝器synchronizedMap。synchronizedMap被稱為有條件的線程安全類。
JDK5.0util.concurrent包中引入對Map線程安全的實現(xiàn)ConcurrentHashMap,比起synchronizedMap,它提供了更高的靈活性。同時進行的讀和寫操作都可以并發(fā)地執(zhí)行。

所以在開始的測試中,如果我們采用ConcurrentHashMap,它的表現(xiàn)就很穩(wěn)定,所以以后如果使用Map實現(xiàn)本地緩存,為了提高并發(fā)時的穩(wěn)定性,還是建議使用ConcurrentHashMap。


====================================================================

另外,還有一個我們經(jīng)常使用的ArrayList也是非線程安全的,網(wǎng)上看到的有一個解釋是這樣:
一個 ArrayList 類,在添加一個元素的時候,它可能會有兩步來完成:1. 在 Items[Size] 的位置存放此元素;2. 增大 Size 的值。
在單線程運行的情況下,如果 Size = 0,添加一個元素后,此元素在位置 0,而且 Size=1;
而如果是在多線程情況下,比如有兩個線程,線程 A 先將元素存放在位置 0。但是此時 CPU 調(diào)度線程A暫停,線程 B 得到運行的機會。線程B也將元素放在位置0,(因為size還未增長),完了之后,兩個線程都是size++,結(jié)果size變成2,而只有items[0]有元素。
util.concurrent包也提供了一個線程安全的ArrayList替代者CopyOnWriteArrayList。





kangaroo 2010-09-05 17:12 發(fā)表評論
]]>
查看服務(wù)器日志常用命令-持續(xù)匯總貼http://www.aygfsteel.com/lukangping/articles/329096.htmlkangarookangarooTue, 17 Aug 2010 05:53:00 GMThttp://www.aygfsteel.com/lukangping/articles/329096.htmlhttp://www.aygfsteel.com/lukangping/comments/329096.htmlhttp://www.aygfsteel.com/lukangping/articles/329096.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/329096.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/329096.html基本:
1. find -name #filename#:按文件名在本目錄下的所有文件里查找指定名字的文件,可用正則。
2. more #filename#:更方面的查看文件的命令。進入后命令,"d":向下滾動;"b":向上滾動。
3. vi #filename#:一般的文件編輯命令。進入后命令
    "/abc":查找"abc",所有匹配"abc"的地方都會高亮顯示。

4. vi替換文件中所有“abc”為“def”命令:

   %s/abc/def/g 其中%表示替換所有行,g表示替換每一行所有匹配的字符串

技巧:
1. ll -t:按修改時間的先后排序文件。

kangaroo 2010-08-17 13:53 發(fā)表評論
]]>
持續(xù)記錄--java編碼小技巧http://www.aygfsteel.com/lukangping/articles/328167.htmlkangarookangarooFri, 06 Aug 2010 11:15:00 GMThttp://www.aygfsteel.com/lukangping/articles/328167.htmlhttp://www.aygfsteel.com/lukangping/comments/328167.htmlhttp://www.aygfsteel.com/lukangping/articles/328167.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/328167.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/328167.html
1. java.util.List.addAll(Collection<? extends String> c)

public static void main(String[] args) {

        List
<String> firstList = new ArrayList<String>();
        firstList.add(
"a");
        firstList.add(
"b");
        firstList.add(
"c");

        List
<String> secondList = new ArrayList<String>();
        secondList.addAll(firstList);

        
for (String s : secondList) {
            System.out.println(s);
        }

    }


kangaroo 2010-08-06 19:15 發(fā)表評論
]]>
webservice學(xué)習(xí)總結(jié)http://www.aygfsteel.com/lukangping/articles/327862.htmlkangarookangarooTue, 03 Aug 2010 11:22:00 GMThttp://www.aygfsteel.com/lukangping/articles/327862.htmlhttp://www.aygfsteel.com/lukangping/comments/327862.htmlhttp://www.aygfsteel.com/lukangping/articles/327862.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/327862.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/327862.html1. 前言
2. webservice的由來
3. java領(lǐng)域可用于實現(xiàn)遠程通訊的開源框架或library
4. 基于XFire的webservice的本地實現(xiàn)


附件下載:
(1)http://www.aygfsteel.com/Files/lukangping/webservice.pdf
(2)......


kangaroo 2010-08-03 19:22 發(fā)表評論
]]>
聚合與組合的區(qū)別?http://www.aygfsteel.com/lukangping/archive/2010/08/01/327693.htmlkangarookangarooSun, 01 Aug 2010 06:17:00 GMThttp://www.aygfsteel.com/lukangping/archive/2010/08/01/327693.htmlhttp://www.aygfsteel.com/lukangping/comments/327693.htmlhttp://www.aygfsteel.com/lukangping/archive/2010/08/01/327693.html#Feedback5http://www.aygfsteel.com/lukangping/comments/commentRss/327693.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/327693.html記得在當(dāng)時學(xué)習(xí)uml總是不好分清聚合與組合的關(guān)系,找工作時特地復(fù)習(xí)了這塊的內(nèi)容,結(jié)果正巧被面試官問道,這兩天又在搞這塊的內(nèi)容,對聚合與組合有了更清楚的了解:

聚合:表示兩個對象之間是整體和部分的關(guān)系,部分的生命周期可以超越整體。如電腦和鼠標(biāo),就可以用一下圖形表示:



組合:表示兩個對象之間是整體和部分的關(guān)系,部分的生命周期不能超越整體,或者說不能脫離整體而存在。組合關(guān)系的“部分”,是不能在整體之間進行共享的。如人和眼睛的關(guān)系:

不過,如果你要說,眼睛可以移植,是不是說可以脫離人而存在,它們就不是組合關(guān)系了?其實,UML中對象的關(guān)系都是在相應(yīng)的軟件環(huán)境或?qū)嶋H場景下定義的,這里區(qū)別聚合和組合的關(guān)系,關(guān)鍵還是在于它們之中整體和部分的關(guān)系強、弱,以及它們之間的依附關(guān)系。如果剛才說眼睛可以移植給別人,那你也可以把它認為是聚合,這都要結(jié)合實際場景來說明。

另外兩個比較重要的關(guān)系是關(guān)聯(lián)和依賴:
關(guān)聯(lián):簡單的可以認為,如果一個類作為了另外一個類的屬性,那一定是關(guān)聯(lián)關(guān)系。但你要知道,聚合是一種特殊的關(guān)聯(lián),而組合又是一種特殊的聚合。一般的關(guān)聯(lián)我們認為是平級的、無整體部分關(guān)系的,如朋友關(guān)系。

依賴:對象之間的臨時關(guān)系,臨時性體現(xiàn)在不超越方法的周期。簡單的說,在方法使用到的,如參數(shù)類,就一定是依賴關(guān)系。

最后想說一句,實際工作中,我并沒有發(fā)現(xiàn)區(qū)分這四種關(guān)系有多么大的用處,也許自己還沒有碰到,只是覺得可能每個學(xué)習(xí)它的同學(xué)總想把它搞清楚,但實際工作中作用并不明顯。


kangaroo 2010-08-01 14:17 發(fā)表評論
]]>
Visio2007中沒有UML Model Diagram Template解決辦法http://www.aygfsteel.com/lukangping/archive/2010/08/01/327689.htmlkangarookangarooSun, 01 Aug 2010 05:41:00 GMThttp://www.aygfsteel.com/lukangping/archive/2010/08/01/327689.htmlhttp://www.aygfsteel.com/lukangping/comments/327689.htmlhttp://www.aygfsteel.com/lukangping/archive/2010/08/01/327689.html#Feedback1http://www.aygfsteel.com/lukangping/comments/commentRss/327689.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/327689.htmluml model diagram  template download”,在
http://softwarestencils.com/uml/index.html#Visio2007
找到了需要的template,然后解壓到"C:\Documents and Settings\<user name>\My Documents\My Shapes",重新啟動Visio,默認的快速創(chuàng)建頁面就有UML Model Diagram。That is it!

kangaroo 2010-08-01 13:41 發(fā)表評論
]]>
持續(xù)記錄--eclipse一些高級的快捷鍵 securecrt常用快捷鍵 chrome必會快捷鍵http://www.aygfsteel.com/lukangping/archive/2010/07/29/327425.htmlkangarookangarooThu, 29 Jul 2010 06:09:00 GMThttp://www.aygfsteel.com/lukangping/archive/2010/07/29/327425.htmlhttp://www.aygfsteel.com/lukangping/comments/327425.htmlhttp://www.aygfsteel.com/lukangping/archive/2010/07/29/327425.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/327425.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/327425.html同標(biāo)題,持續(xù)記錄一些eclipse的高級快捷鍵,提高你的“專業(yè)性”,成為快捷鍵達人:

慢慢發(fā)現(xiàn)很多軟件的快捷鍵都是相似的,用得多了,你就不用費腦子記了,這個很不錯。

1. ctrl+滾輪:加快瀏覽速度;
2. ctrl+w:關(guān)閉當(dāng)前的Editor;
3. ctrl+e:顯示隱藏的Editor;
4. ctrl+f6:切換editor;
5. ctrl+f7:切換view;
6. ctrl+f8:切換perspectives;
7. ctrl+shift+x:小寫變大寫;ctrl+shift+y:大寫變小寫
8. ctrl+1:出現(xiàn)紅叉時,鼠標(biāo)放置在該行,使用這個快捷鍵迅速彈出錯誤提示

9. ctrl+shift+c:注釋xml里配置

SecureCRT中常用的快捷鍵:

1. ctrl+tab:標(biāo)簽直接的切換;
2. alt+1/2/3..:切換至第n個標(biāo)簽;


Chrome必會快捷鍵 bravo chrome! i like so much!
1. ctrl+t:新建標(biāo)簽;ctrl+n:新開窗口
2. ctrl+w:關(guān)閉當(dāng)前標(biāo)簽頁
3. ctrl+tab:切換到下個標(biāo)簽;ctrl+shift+tab:切換到上一個標(biāo)簽
4. ctrl+1/2/../8:切換至指定標(biāo)簽
5. f6:聚焦鼠標(biāo)至地址欄,這個各個瀏覽器都一樣。

more:http://news.xinhuanet.com/internet/2008-09/07/content_9822978.htm
existing: 新建標(biāo)簽打開后,你會看到8個最近訪問的網(wǎng)站,首先,可以用tab切換,另外,它們的位置可以拖拽、可以刪改,還不讓你興奮嗎?




kangaroo 2010-07-29 14:09 發(fā)表評論
]]>
XFire Client實現(xiàn)遇到的問題http://www.aygfsteel.com/lukangping/articles/327307.htmlkangarookangarooWed, 28 Jul 2010 05:25:00 GMThttp://www.aygfsteel.com/lukangping/articles/327307.htmlhttp://www.aygfsteel.com/lukangping/comments/327307.htmlhttp://www.aygfsteel.com/lukangping/articles/327307.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/327307.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/327307.htmlException in thread “main” org.codehaus.xfire.XFireRuntimeException: Could not  invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: There must be a method name element.

解決辦法還是很簡單:將wsdlURL后面的”?wsdl”去掉即可:

Service serviceModel = new ObjectServiceFactory().create(MyService.class);
MyService service = (MyService) new XFireProxyFactory().create(serviceModel,
            “http://localhost:8080/ninthDemo/services/myService“);



kangaroo 2010-07-28 13:25 發(fā)表評論
]]>
本地mvn jetty:run時常遇到的異常http://www.aygfsteel.com/lukangping/articles/327306.htmlkangarookangarooWed, 28 Jul 2010 05:24:00 GMThttp://www.aygfsteel.com/lukangping/articles/327306.htmlhttp://www.aygfsteel.com/lukangping/comments/327306.htmlhttp://www.aygfsteel.com/lukangping/articles/327306.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/327306.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/327306.html2010-07-19 16:17:42.670::WARN:  failed HandlerCollection@7f8922
java.lang.UnsupportedClassVersionError: Bad version number in .class file

使用mvn clean情況一下編譯好的文件,重新mvn jetty:run就好了。



kangaroo 2010-07-28 13:24 發(fā)表評論
]]>
VPN vs Proxy ?http://www.aygfsteel.com/lukangping/articles/327305.htmlkangarookangarooWed, 28 Jul 2010 05:23:00 GMThttp://www.aygfsteel.com/lukangping/articles/327305.htmlhttp://www.aygfsteel.com/lukangping/comments/327305.htmlhttp://www.aygfsteel.com/lukangping/articles/327305.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/327305.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/327305.html通常我們聽到的代理大致有三類:http/s proxy, socks proxy and VPN (實際上不是代理)。

其中http/s proxy, socks proxy屬一類,作為代理服務(wù)器,它們類似一種網(wǎng)絡(luò)訪問的中介,每次我們訪問一個web網(wǎng)站時,實際上時先去訪問代理服務(wù)器,再由代理服務(wù)器訪問目標(biāo)網(wǎng)站。而且這樣是匿名,也就是說被請求的網(wǎng)站并不知道你的原始的訪問地點在哪里。網(wǎng)上流傳的gappproxy翻墻就是一個典型的例子,在gae上建立一個代理服務(wù)器fetchserver后,然后在本機開啟gappproxy的代理程序,每次訪問任何網(wǎng)站時,其實是把請求發(fā)給代理服務(wù)器,然后由代理服務(wù)器去請求目標(biāo)網(wǎng)站,因為gae都是在美國的服務(wù)器,同時目前訪問gae還是ok的,所以整個過程都是沒問題的。(我們知道GFW是通過黑名單來過濾訪問指定網(wǎng)站的數(shù)據(jù)包,如果把gae服務(wù)器也納入黑名單,那就杯具了。)

如果只是網(wǎng)上沖浪或者通過瀏覽器使用的活動,那樣的話http/s proxy就可以了,像GAE中的gappproxy就是其中的一個例子。如果你需要做更多的事情,而不僅僅是websurf,那樣就需要使用socks proxy,它能更靈活地為你提供除了網(wǎng)頁瀏覽其他的一些功能。那VPN又是什么呢?VPN,Virtual private Network,中文名是“虛擬專用網(wǎng)絡(luò)”。一個簡單的解釋就是,在公共網(wǎng)絡(luò)中建立的兩點之間的專用的虛擬隧道。也可以理解為虛擬出來的企業(yè)內(nèi)部專線。安全通信是通過加密來保證的,加密算法運用運用于你的實時通信中,保證在公用的網(wǎng)絡(luò)中兩點之間的數(shù)據(jù)通信不被其他人截取或訪問,也就是說,在兩點之間建立了一個專用的“隧道”。

相比較來看,proxy server有很多的免費的解決方案,它也能提供匿名的web browsing。但是,安全性就差很多,你和代理服務(wù)器之間的通訊是完全透明的。(SSL proxy可以進行適當(dāng)?shù)谋Wo),與VPN相比,代理的速率也比較低。VPN比http/s proxy和socks proxy的安全性就高很多了。VPN需要更多的硬件和軟件來支持,所以它是需要付費的。當(dāng)然它的速率也是最高。除此之外,VPN加密本臺機器上的所有網(wǎng)絡(luò)通信,包括你的browsing,email,voip,chat等所有網(wǎng)絡(luò)傳輸。而不像http/s proxy只對你的瀏覽器訪問web網(wǎng)站做代理。

以上文字參考:

《Proxy vs VPN… Who wins?》

《what is a VPN service?》



kangaroo 2010-07-28 13:23 發(fā)表評論
]]>
現(xiàn)在要堅持在這里更新自己了http://www.aygfsteel.com/lukangping/archive/2010/07/27/327269.htmlkangarookangarooTue, 27 Jul 2010 14:53:00 GMThttp://www.aygfsteel.com/lukangping/archive/2010/07/27/327269.htmlhttp://www.aygfsteel.com/lukangping/comments/327269.htmlhttp://www.aygfsteel.com/lukangping/archive/2010/07/27/327269.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/327269.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/327269.html

kangaroo 2010-07-27 22:53 發(fā)表評論
]]>
李笑來的文章“如何培養(yǎng)自信?”有感http://www.aygfsteel.com/lukangping/archive/2009/11/01/300553.htmlkangarookangarooSun, 01 Nov 2009 04:17:00 GMThttp://www.aygfsteel.com/lukangping/archive/2009/11/01/300553.htmlhttp://www.aygfsteel.com/lukangping/comments/300553.htmlhttp://www.aygfsteel.com/lukangping/archive/2009/11/01/300553.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/300553.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/300553.htmlPure Pleasure - Reborn © 2008 - 轉(zhuǎn)載本文時請保留此鏈接。

1. 培養(yǎng)耐心

自信確實需要培養(yǎng),所謂的“培養(yǎng)”,即是說并非朝夕可達。所以,培養(yǎng)自信的最重要前提就是要具備耐心,如若缺乏耐心就要培養(yǎng)耐心。沒有耐心的話就什么都做不成,更別提什么“自信了”。有所成就,就會伴隨著自信的增長,而一事無成的人穿得再整齊也只不過草包一個。

2. 習(xí)得并精通一種技能

具備學(xué)習(xí)能力的人通常都很自信,反過來也一樣,真正自信的人通常是因為相信自己的學(xué)習(xí)能力。所以面對挑戰(zhàn)的時候他們不會怕,不會心虛,因為他們知道“大不了去學(xué)么”。自學(xué)能力的基礎(chǔ)是耐心,而習(xí)得任何一種技能都會讓人更加懂得耐心的重要,并且同時因為具備耐心與學(xué)習(xí)能力而更加自信。只要花時間真正精通了一種技能,那么學(xué)會其他一種技能的時候就會變得更輕松——這是良性循環(huán)。

--遇到枯燥,不好玩的東西,能夠靜下心來,耐心地去學(xué)習(xí)、去體會,這個應(yīng)該是學(xué)習(xí)能力強和弱的差別之處吧。
--久而久之,學(xué)習(xí)快的人,會將這種經(jīng)驗不斷推廣,一門通,樣樣通。而在一方面沒有成就的人,會慢慢產(chǎn)生了厭煩的情緒,在拒絕學(xué)習(xí)的同時,也就表現(xiàn)出在這個方面的自卑了。

3. 相信積累的力量
再大的石頭也無法阻擋種子發(fā)芽,只因為種子一旦開始發(fā)芽,那細胞的分裂盡管速度不快但卻不見天日永不終止。滴水可以穿石的道理誰都懂但又好像誰都不相信—— 處于起點的人就好像是一粒細胞或者一滴水,但大多數(shù)人卻誤以為或者希望自己在起點上就強大鋒利猶如一束激光,但這不現(xiàn)實。要通過學(xué)習(xí)培養(yǎng)耐心,運用耐心去等待長期積累之后可以獲得的難以想象的好處與力量。


--如果在某一方面學(xué)習(xí)的時候,就是不順利,或者就是理解不好的時候,這個時候,就是需要堅持的時候了。
--記得自己學(xué)游泳,換氣總是不好,曾一度覺得我這輩子都學(xué)不會游泳了。但是總覺得好玩,雖然每次游都被會游的伙伴笑話,還不敢去深水呀?但也是當(dāng)個玩笑聽了。后來,終于有一次,自己突然地發(fā)現(xiàn),換氣換得很自然了,鼓足了勇氣去深水區(qū)游了一趟,那一天自己感覺到很開心,自信得很多。
--任何事物的學(xué)習(xí)應(yīng)該都有個“竅”,當(dāng)一次,兩次,三次不理解時候,不需要急躁,明白看來這個東西不是那么簡單的,需要以后更多的閱讀或?qū)嵺`才來理解透徹。

4. 了解自己的局限

沒有人無所不能。就算擁有真正強大學(xué)習(xí)能力的人也無法做到無所不能——因為時間不夠。有些領(lǐng)域確實必需天分。在自己確實不擅長的地方該自卑就要自卑——這沒有什么不好意思的。該自卑的時候不自卑,就多了一個心理負擔(dān)——并且還是永遠擺脫不掉的負擔(dān),最終,肯定會拖累自信。凡事兒做得好必然容易自信,做得不好就很難自信,但是還沒上陣呢,就背著一個又一個的包袱,能走多遠?能做多好?

--哎呀,這個東西實在跟我不投緣,這樣的話會讓自己輕松很多。(當(dāng)然,這樣的話要在你堅持努力嘗試多次之后說了才有用)

5. 凡事兒都要提前做足功課

大聲說話也好,穿著正式也罷,最多只能讓一個人“顯得”自信,而非真正自信。“坐在第一排”可能是因為近視,“快速走路”往往是因為時間觀念不強——這些都與自信沒關(guān)系。做任何事情,提前做足了功課,想不自信都難。自信不等于自以為是,自以為是的人最終都會被現(xiàn)實砸爛。中國人說“成事在天,謀事在人”,西方人說“上帝的歸上帝,凱撒的歸凱撒”,某個層面上都是一回事兒:不要理會運氣(該來的時候它自然會來),重要的是專心做好功課。

--查看線上錯誤日志的方法,會了嗎?還不趕緊去找?



kangaroo 2009-11-01 12:17 發(fā)表評論
]]>
ibatis較之jdbchttp://www.aygfsteel.com/lukangping/articles/300548.htmlkangarookangarooSun, 01 Nov 2009 03:28:00 GMThttp://www.aygfsteel.com/lukangping/articles/300548.htmlhttp://www.aygfsteel.com/lukangping/comments/300548.htmlhttp://www.aygfsteel.com/lukangping/articles/300548.html#Feedback1http://www.aygfsteel.com/lukangping/comments/commentRss/300548.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/300548.htmliBatis是一個中層的框架,它比jdbc的層次高一些(可以說,iBatis就是以XML的形式描述的jdbc代碼,它擁有許多jdbc所沒有的架構(gòu)級的優(yōu)點),但是對于對象/關(guān)系映射工具,層次又要低一些。

1. 釋放數(shù)據(jù)庫資源
使用jdbc時,很容易犯的錯誤就是獲取資源之后忘記正確地釋放它們。雖然垃圾收集進程最終可以釋放掉這些資源,但是這種做法非常耗時,并且無法得到保證。如果對象沒有別真正釋放,那應(yīng)用程序最終將會因為耗盡了資源而崩潰。iBATIS框架能幫助管理這些資源,從而減輕應(yīng)用程序?qū)﹂_發(fā)人員們的負擔(dān)

2. SQL注入
如果某個應(yīng)用程序使用字符串拼接的方式來創(chuàng)建SQL語句,但是沒有正確地對參數(shù)進行轉(zhuǎn)義,那么惡意的用戶就可以通過傳遞一些特殊的參數(shù)來改變查詢原本的意圖。
例如:select * from product where id = 5.
如果5是用戶傳遞過來的參數(shù),拼接到 id = 之后的。那么用戶就可以輸入"5 or 1 = 1",從而改變了整個SQL語句的意圖。如果用戶更壞一些,輸入"5;delete from orders",結(jié)果就是你的訂單表被清空了。
由于ibatis使用了preparedStatement,而PreparedStatement是不會受到此類攻擊影響的,所以使用ibatis可以使得你對應(yīng)用程序的保護變得更加容易。

3. 降低復(fù)雜度



kangaroo 2009-11-01 11:28 發(fā)表評論
]]>
如何和上司建立良好的關(guān)系http://www.aygfsteel.com/lukangping/archive/2009/08/26/292601.htmlkangarookangarooWed, 26 Aug 2009 01:21:00 GMThttp://www.aygfsteel.com/lukangping/archive/2009/08/26/292601.htmlhttp://www.aygfsteel.com/lukangping/comments/292601.htmlhttp://www.aygfsteel.com/lukangping/archive/2009/08/26/292601.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/292601.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/292601.html 2. 如果上司對下面的人有什么小小的要求和幫助,作為下屬你一定要非常非常重視,這個很重要!

kangaroo 2009-08-26 09:21 發(fā)表評論
]]>
J2EE學(xué)習(xí)中一些值得研究的開源項目http://www.aygfsteel.com/lukangping/articles/291292.htmlkangarookangarooSat, 15 Aug 2009 13:49:00 GMThttp://www.aygfsteel.com/lukangping/articles/291292.htmlhttp://www.aygfsteel.com/lukangping/comments/291292.htmlhttp://www.aygfsteel.com/lukangping/articles/291292.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/291292.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/291292.html這篇文章寫在我研究J2SE、J2EE近三年后。前3年我研究了J2SE的Swing、Applet、Net、RMI、Collections、IO、JNI……研究了J2EE的JDBC、Sevlet、JSP、JNDI…..不久我發(fā)現(xiàn)這些好像太浮淺了:首先,我發(fā)現(xiàn)自己知道的僅僅是java提供的大量的API,根本不能很好地使用它; 其次,我根本就沒有學(xué)到任何有助于寫程序的知識,此時我也只不過能寫個幾頁的小程序。出于這個幼稚的想法我研究了JDK中Collections、Logger、IO…..的源代碼,發(fā)現(xiàn)這個世界真的很神奇,竟然有如此的高手――利用java語言最最基本的語法,創(chuàng)造了這些優(yōu)秀的Framework。

從此一發(fā)不可收拾,我繼續(xù)研究了J2EE的部分,又發(fā)現(xiàn)這是一個我根本不能理解的方向(曾經(jīng)有半年停滯不前),為什么只有接口沒有實現(xiàn)啊!后來由于一直使用Tomcat、Derby等軟件突然發(fā)現(xiàn):哦!原來J2EE僅僅是一個標(biāo)準(zhǔn),只是一個架構(gòu)。真正的實現(xiàn)是不同提供商提供的。

接著我研究了MOM4J、OpenJMS、Mocki、HSQLD……發(fā)現(xiàn)這些就是J2EE的實現(xiàn)啊!原來軟件竟會如此復(fù)雜,竟會如此做….規(guī)范和實現(xiàn)又是如何成為一體的呢?通過上面的研究發(fā)現(xiàn):原來J2EE后面竟然有太多太多理念、太多太多的相似!這些相似就是其背后的理念――設(shè)計模式!(很幸運,在我學(xué)java的時候,我一般學(xué)java的一個方向就會讀一些關(guān)于設(shè)計模式的書!很幸運,到能領(lǐng)略一點的時候能真正知道這是為什么!)其實模式就是一種思維方式、就是一種理念……模式是要運用到程序中的,只有從真正的項目中才能領(lǐng)會模式的含義……
學(xué)得越多,發(fā)現(xiàn)懂得越少!在學(xué)習(xí)過程中發(fā)現(xiàn)一些很有用,很值得學(xué)習(xí)的開源項目,今天在此推薦給大家。

一、JavaServlet和JSP方向

很多人都是從Servlet和JSP步入J2EE的。它就是J2EE的表現(xiàn)層,用于向客戶呈現(xiàn)服務(wù)器上的內(nèi)容。J2EE很重要的方面。不羅嗦了!大家都知道的!下面就開始推薦吧!

1. Jakarta Tomcat

Apache基金會提供的免費的開源的Serlvet容器,它是的Jakarta項目中的一個核心項目,由Apache、Sun和其它一些公司(都是IT界的大鱷哦)及個人共同開發(fā)而成,全世界絕大部分Servlet和Jsp的容器都是使用它哦!由于Sun的參與和支持,最新的Servlet和Jsp規(guī)范總能在Tomcat中得到體現(xiàn)。

不過它是一個非常非常全的Serlvet容器,全部源碼可能有4000頁,對于初學(xué)者或者一般的老手可能還是比較大了!在你有能力時推薦研究!下載地址:http://jakarta.apache.org/tomcat/index.html

下面推薦兩個小一點的吧!

2. Jetty

Jetty是一個開放源碼的HTTP服務(wù)器和Java serverlet容器。源代碼只有1000頁左右,很值得研究。有興趣可以去http://jetty.mortbay.com/下載看看。我曾經(jīng)翻了一下,只是目前沒有時間。(都化在博客上了,等博客基本定型,且內(nèi)容完整了,再干我熱衷的事件吧!)

3. Jigsaw

Jigsaw是W3C開發(fā)的HTTP,基于Java 的服務(wù)器,提供了未來 Web 技術(shù)發(fā)展的藍圖。W3C知道吧!(太有名氣了,很多標(biāo)準(zhǔn)都是它制訂的!有空經(jīng)常去看看吧!)下載網(wǎng)址:http://www.w3.org/Jigsaw代碼僅僅1000頁左右。

4. Jo!

Jo!是一個純Java的實現(xiàn)了Servlet API 2.2, JSP 1.1, 和HTTP/1.1的Web服務(wù)器。它的特性包括支持servlet tag,支持SSI,高級線程管理,虛擬主機,數(shù)據(jù)緩存,自動壓縮text或HTML文件進行傳輸,國際化支持,自動重新加載Servlet、Jsp,自動重新加載web工程文件(WARs),支持WAR熱部署和一個Swing控制臺。jo!可以被用做jboss和jakarta avalon-phoenix的web容器。下載地址http://www.tagtraum.com/ 。我極力推薦大家在研究Tomcat之前研究該軟件,主要是其比Tomcat小多了,且開發(fā)者提供比較全的手冊。該方向研究這兩個也就可以了!

二、JDBC方向

很多人都喜歡JDBC,數(shù)據(jù)庫嗎!很深奧的東西,一聽就可以糊弄人。其實等你真正研究了數(shù)據(jù)庫的實現(xiàn)后發(fā)現(xiàn),接口其實真的太簡單,太完美了!要想設(shè)計如此優(yōu)秀的框架還是需要學(xué)習(xí)的。下面就推薦幾個數(shù)據(jù)庫的實現(xiàn)吧!

1. Hypersonic SQL

Hypersonic SQL開源數(shù)據(jù)庫方向比較流行的純Java開發(fā)的關(guān)系型數(shù)據(jù)庫。好像不是JDBC兼容的,JDBC的很多高級的特性都沒有支持,不過幸好支持ANSI-92 標(biāo)準(zhǔn) SQL語法。我推薦它主要是它的代碼比較少1600頁左右,如此小的數(shù)據(jù)庫值得研究,而且他占的空間很小,大約只有160K,擁有快速的數(shù)據(jù)庫引擎。推薦你的第一個開源數(shù)據(jù)庫。下載地址:http://hsqldb.sourceforge.net/。

2. Mckoi DataBase

McKoiDB 和Hypersonic SQL差不多,它是GPL 的license的純Java開發(fā)的數(shù)據(jù)庫。他的 JDBC Driver 是使用 JDBC version 3 的 Specifaction。 他也是遵循 SQL-92 的標(biāo)準(zhǔn),也盡量支持新的 SQL 特色, 并且支持 Transaction 的功能。兩個可以選一個吧!下載地址:http://mckoi.com/database/。

3. Apache Derby

學(xué)Java的數(shù)據(jù)庫我建議使用Apache Derby ,研究數(shù)據(jù)庫想成為一個數(shù)據(jù)庫的高手我建議你先研究Apache Derby。Apache Derby是一個高質(zhì)量的、純 Java開發(fā)的嵌入式關(guān)系數(shù)據(jù)庫引擎,IBM® 將其捐獻給Apache開放源碼社區(qū),同時IBM的產(chǎn)品CloudSpace是它對應(yīng)的產(chǎn)品。Derby是基于文件系統(tǒng),具有高度的可移植性,并且是輕量級的,這使得它非常便于發(fā)布。主要是沒有商業(yè)用戶的很好的界面,沒有其太多的功能。不過對于我們使用數(shù)據(jù)庫、研究數(shù)據(jù)庫還是極其有用的。對于中小型的企業(yè)說老實話你也不要用什么Oracle、SqlServer了,用Derby就可以了,何況是開源的呢!只要能發(fā)揮其長處也不容易啊!下載地址:http://incubator.apache.org/derby。

不過在沒有足夠的能力前,不要試圖讀懂它!注釋和源代碼15000頁左右,我一年的閱讀量!能讀下來并且能真正領(lǐng)會它,絕對高手!你能讀完Derby的源代碼只有兩種可能:1.你成為頂尖的高手――至少是數(shù)據(jù)庫這部分; 2.你瘋了。選擇吧!!!!作為我自己我先選擇Hypersonic SQL這樣的數(shù)據(jù)庫先研究,能過這一關(guān),再繼續(xù)研究Derby!不就是一年的閱讀量嗎!我可以化3年去研究如何做一個數(shù)據(jù)庫其實還是很值得的!有的人搞IT一輩子自己什么都沒有做,也根本沒有研究別人的東西!

作為一個IT落后于別國若干年的、從事IT的下游產(chǎn)業(yè)“外包”的國家的IT從業(yè)人員,我認為還是先研究別人的優(yōu)秀的東西比較好!可以先研究別人的,然后消化,學(xué)為己用!一心閉門造車實在遺憾!

三、JMS方向

JMS可能對大家來說是一個比較陌生的方向!其實JMS是一個比較容易理解,容易上手的方向。主要是Java消息服務(wù),API也是相當(dāng)簡單的。不過在企業(yè)應(yīng)用中相當(dāng)廣泛。下面就介紹幾個吧!

1. MOM4J

MOM4J是一個完全實現(xiàn)JMS1.1規(guī)范的消息中間件并且向下兼容JMS1.0與1.02。它提供了自己的消息處理存儲使它獨立于關(guān)系數(shù)據(jù)與語言,它的客戶端可以用任何語言開發(fā)。它可以算是一個小麻雀,很全實現(xiàn)也比較簡單!它包含一個命名服務(wù)器,一個消息服務(wù)器,同時提供自己的持續(xù)層。設(shè)計也相當(dāng)?shù)那擅睿耆貌僮飨到y(tǒng)中文件系統(tǒng)設(shè)計的觀念。代碼也很少,250頁左右,最近我在寫該實現(xiàn)的源代碼閱讀方面的書,希望明年年中能與大家見面!下載地址:http://mom4j.sourceforge.net/index.html。

2. OpenJMS

OpenJMS是一個開源的Java Message Service API 1.0.2 規(guī)范的實現(xiàn),它包含有以下特性:
1. 它既支持點到點(point-to-point)(PTP)模型和發(fā)布/訂閱(Pub/Sub)模型。

2. 支持同步與異步消息發(fā)送 。

3. JDBC持久性管理使用數(shù)據(jù)庫表來存儲消息 。

4. 可視化管理界面。

5. Applet支持。

6. 能夠與Jakarta Tomcat這樣的Servlet容器結(jié)合。

7. 支持RMI, TCP, HTTP 與SSL協(xié)議。

8. 客戶端驗證 。

9. 提供可靠消息傳輸、事務(wù)和消息過濾。

很好的JMS方向的開源項目!我目前也在研究它的源代碼!學(xué)習(xí)它可以順便研究JNDI的實現(xiàn)、以及網(wǎng)絡(luò)通信的細節(jié)。這是我JMS方向研究的第二個開源項目。代碼量1600頁左右吧!下載地址:http://openjms.sourceforge.net/index.html

3. ActiveMQ

ActiveMQ是一個開放源碼基于Apache 2.0 licenced 發(fā)布并實現(xiàn)了JMS 1.1。它能夠與Geronimo,輕量級容器和任Java應(yīng)用程序無縫的給合。主要是Apache的可以任意的使用和發(fā)布哦!個人比較喜歡Apache的源代碼!下載地址:http://activemq.codehaus.org/

4. JORAM

JORAM一個類似于openJMS分布在ObjectWeb之下的JMS消息中間件。ObjectWeb的產(chǎn)品也是非常值得研究的!下面我還會給大家另外一個ObjectWeb的產(chǎn)品。下載地址:http://joram.objectweb.org/

我個人推薦:OpenJMS和ActiveMQ!

四、EJB方向

EJB一個比較“高級”的方向。Sun公司曾經(jīng)以此在分布式計算領(lǐng)域重拳出擊。不過自從出現(xiàn)了Spring、Hibernation……后似乎沒落了!這個方向單獨開源的也比較少,主要EJB是和JNDI、JDBC、JMS、JTS、JTA結(jié)合在一起的是以很少有單獨的。下面推薦兩個不過好像也要下載其它類庫。

1. EasyBeans

ObjectWeb的一個新的項目,一個輕量級的EJB3容器,雖然還沒有正式發(fā)布,但是已經(jīng)可以從它們的subversion倉庫中檢出代碼。代碼量比較小600頁左右,熟讀它可以對網(wǎng)絡(luò)編程、架構(gòu)、RMI、容器的狀態(tài)設(shè)計比較了解了!即學(xué)會EJB又能學(xué)習(xí)其它設(shè)計方法何樂而不為哦!下載地址:http://easybeans.objectweb.org/
2. OpenEJB

OpenEJB是一個預(yù)生成的、自包含的、可移植的EJB容器系統(tǒng),可以被插入到任意的服務(wù)器環(huán)境,包括應(yīng)用程序服務(wù)器,Web服務(wù)器,J2EE平臺, CORBA ORB和數(shù)據(jù)庫等等。OpenEJB 被用于 Apple的WebObjects。聽起來很好,我目前沒有研究過。不知道我就不推薦了。下載地址:http://www.openejb.org/

五、J2EE容器

上面談了這么多,都是J2EE的各個方向的。其實J2EE是一個規(guī)范,J2EE的產(chǎn)品一般要求專業(yè)提供商必須提供它們的實現(xiàn)。這些實現(xiàn)本身就是J2EE容器。市場上流行的J2EE容器很多,在開源領(lǐng)域流行的只有很少,很少。其中最著名的是JBoss。

1. JBoss

在J2EE應(yīng)用服務(wù)器領(lǐng)域,Jboss是發(fā)展最為迅速的應(yīng)用服務(wù)器。由于Jboss遵循商業(yè)友好的LGPL授權(quán)分發(fā),并且由開源社區(qū)開發(fā),這使得Jboss廣為流行。另外,Jboss應(yīng)用服務(wù)器還具有許多優(yōu)秀的特質(zhì)。

其一,它將具有革命性的JMX微內(nèi)核服務(wù)作為其總線結(jié)構(gòu);

其二,它本身就是面向服務(wù)的架構(gòu)(Service-Oriented Architecture,SOA);

其三,它還具有統(tǒng)一的類裝載器,從而能夠?qū)崿F(xiàn)應(yīng)用的熱部署和熱卸載能力。因此,它是高度模塊化的和松耦合的。Jboss用戶的積極反饋告訴我們,Jboss應(yīng)用服務(wù)器是健壯的、高質(zhì)量的,而且還具有良好的性能。為滿足企業(yè)級市場日益增長的需求,Jboss公司從2003年開始就推出了24*7、專業(yè)級產(chǎn)品支持服務(wù)。同時,為拓展Jboss的企業(yè)級市場,Jboss公司還簽訂了許多渠道合作伙伴。比如,Jboss公司同HP、Novell、Computer Associates、Unisys等都是合作伙伴。

在2004年6月,Jboss公司宣布,Jboss應(yīng)用服務(wù)器通過了Sun公司的J2EE認證。這是Jboss應(yīng)用服務(wù)器發(fā)展史上至今為止最重要的里程碑。與此同時,Jboss一直在緊跟最新的J2EE規(guī)范,而且在某些技術(shù)領(lǐng)域引領(lǐng)J2EE規(guī)范的開發(fā)。因此,無論在商業(yè)領(lǐng)域,還是在開源社區(qū),Jboss成為了第一個通過J2EE 1.4認證的主流應(yīng)用服務(wù)器。現(xiàn)在,Jboss應(yīng)用服務(wù)器已經(jīng)真正發(fā)展成具有企業(yè)強度(即,支持關(guān)鍵級任務(wù)的應(yīng)用)的應(yīng)用服務(wù)器。

Jboss 4.0作為J2EE認證的重要成果之一,已經(jīng)于2004年9月順利發(fā)布了。同時,Jboss 4.0還提供了Jboss AOP(Aspect-Oriented Programming,面向方面編程)組件。近來,AOP吸引了大量開發(fā)者的關(guān)注。它提供的新的編程模式使得用戶能夠?qū)⒎矫?比如,事務(wù))從底層業(yè)務(wù)邏輯中分離出來,從而能夠縮短軟件開發(fā)周期。用戶能夠單獨使用Jboss AOP,即能夠在Jboss應(yīng)用服務(wù)器外部使用它。或者,用戶也可以在應(yīng)用服務(wù)器環(huán)境中使用它。Jboss AOP 1.0已經(jīng)在2004年10月發(fā)布了。 很有名吧!可以下載一個用一下,下載地址:http://www.jboss.org/

關(guān)于JBoss的使用資料也非常多,甚至比商業(yè)軟件的還多。有機會研究吧!

2. JOnAS

JOnAS是一個開放源代碼的J2EE實現(xiàn),在ObjectWeb協(xié)會中開發(fā)。整合了Tomcat或Jetty成為它的Web容器,以確保符合Servlet 2.3和JSP 1.2規(guī)范。JOnAS服務(wù)器依賴或?qū)崿F(xiàn)以下的Java API:JCA、JDBC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail 。下載地址:http://jonas.objectweb.org/
3.Apache Geronimo

Apache Geronimo 是 Apache 軟件基金會的開放源碼J2EE服務(wù)器,它集成了眾多先進技術(shù)和設(shè)計理念。 這些技術(shù)和理念大多源自獨立的項目,配置和部署模型也各不相同。 Geronimo能將這些項目和方法的配置及部署完全整合到一個統(tǒng)一、易用的模型中。作為符合J2EE標(biāo)準(zhǔn)的服務(wù)器,Geronimo提供了豐富的功能集和無責(zé)任 Apache 許可,具備“立即部署”式J2EE 1.4容器的各種優(yōu)點,其中包括:

1. 符合J2EE1.4標(biāo)準(zhǔn)的服務(wù)器 。

2. 預(yù)集成的開放源碼項目 。

3. 統(tǒng)一的集成模型 。

4. 可伸縮性、可管理性和配置管理功能。

我一直比較推薦Apache的產(chǎn)品。主要是可以任意自由地使用。下載地址:http://incubator.apache.org/projects/geronimo/

六、其它

講了這么多大家可能很厭煩了!是不是很多很多啊!其實不然,我們不會的太多太多了!不會的太多太多了。不管你是不是J2EE高手,還是J2SE高手,有些東西你要絕對很精明的。例如:1.Java的Collections Framework就是java的數(shù)據(jù)結(jié)構(gòu)了,不僅要吃透它,還要能按照需要擴展它,利用其思想創(chuàng)建一個自己的數(shù)據(jù)結(jié)構(gòu)。2.網(wǎng)絡(luò)編程肯定要會吧,現(xiàn)在以及以后很多程序都是不在同一臺機器上的,不會網(wǎng)絡(luò)怎么行哦!3.IO肯定要會的吧!你的程序難道不用輸入輸出數(shù)據(jù)啊!整個IO包加NIO也有600多頁的源代碼哦!4.JDBC你要會吧!數(shù)據(jù)庫都不會,在你的企業(yè)應(yīng)用中你的數(shù)據(jù)又保存到哪里啊!文件中――太落后了吧!典型的沒有學(xué)過J2EE。盡管數(shù)據(jù)庫背后也是采用文件保存的。5.Serverlet、JSp你要是做網(wǎng)頁做網(wǎng)站,肯定要做到。問你一個簡單的問題,網(wǎng)頁中如何實現(xiàn)分頁啊!有具體方法的就在本文章后發(fā)言吧!6. Ant要會吧!java語言中發(fā)布的工具,類似與c中的make工具。7.JUnit用過吧!單元測試軟件。你不要啊!你的軟件就沒有bug!你牛!(建議大家研究研究其源代碼,很有用的框架,包含大量的設(shè)計模式,源代碼不到100頁!看了只能感嘆――高手就是高手)細心的朋友可以看到在你使用的很多IDE工具中都有JUnit哦!就是它。

一切的一切才剛剛開始!有興趣,有需要你可以研究數(shù)據(jù)庫連接池的框架,如:C3P0、Jakarta DBCP、 DBPool….可以研究J2EE框架Spring……. Web框架Struts……持久層框架Hibernate…..甚至開發(fā)工具Eclipse…..Sun領(lǐng)導(dǎo)的點對點通信的JXTA…..報表工具JFreeChart、JasperReports…..分布式網(wǎng)絡(luò)編程的CORBA、網(wǎng)絡(luò)通信的JGROUPS、XML解析的xerces…..(在不經(jīng)意間開源已經(jīng)步入你的電腦,不信啊!你JDK的安裝目錄jdk1.6.0 src com sun org apache就是Xerces,一個XML解析的著名的開源 項目)

不管怎么樣我還是建議從基本的做起,學(xué)精J2SE,熟讀它的源碼,準(zhǔn)確了解其設(shè)計理念,然后分頭擊破J2EE――一口吃不成一個胖子!不要貪多貪廣!腳踏實地就可以了!

摘自CSDN:《J2EE值得學(xué)習(xí)的開源項目》



kangaroo 2009-08-15 21:49 發(fā)表評論
]]>
一個java程序員應(yīng)該掌握的十項基本技能http://www.aygfsteel.com/lukangping/articles/291291.htmlkangarookangarooSat, 15 Aug 2009 13:40:00 GMThttp://www.aygfsteel.com/lukangping/articles/291291.htmlhttp://www.aygfsteel.com/lukangping/comments/291291.htmlhttp://www.aygfsteel.com/lukangping/articles/291291.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/291291.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/291291.html1、語法:必須比較熟悉,在寫代碼的時候IDE的編輯器對某一行報錯應(yīng)該能夠根據(jù)報錯信息知道是什么樣的語法錯誤并且知道任何修正。

2、命令:必須熟悉JDK帶的一些常用命令及其常用選項,命令至少需要熟悉:appletviewer、 HtmlConverter、jar、 java、javac、javadoc、javap、javaw、native2ascii、serialver,如果這些命令你沒有全部使用過,那么你對java實際上還很不了解。

3、工具:必須至少熟練使用一種IDE的開發(fā)工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括進行工程管理、常用選項的設(shè)置、插件的安裝配置以及進行調(diào)試。

4、API:Java的核心API是非常龐大的,但是有一些內(nèi)容筆者認為是必須熟悉的,否則不可能熟練的運用Java,包括:
◆java.lang包下的80%以上的類的功能的靈活運用。

◆java.util包下的80%以上的類的靈活運用,特別是集合類體系、規(guī)則表達式、zip、以及時間、隨機數(shù)、屬性、資源和Timer.

◆java.io包下的60%以上的類的使用,理解IO體系的基于管道模型的設(shè)計思路以及常用IO類的特性和使用場合。

◆java.math包下的100%的內(nèi)容。

◆java.net包下的60%以上的內(nèi)容,對各個類的功能比較熟悉。

◆java.text包下的60%以上的內(nèi)容,特別是各種格式化類。

◆熟練運用JDBC. 8)、java.security包下40%以上的內(nèi)容,如果對于安全沒有接觸的話根本就不可能掌握java.

◆AWT的基本內(nèi)容,包括各種組件事件、監(jiān)聽器、布局管理器、常用組件、打印。

◆Swing的基本內(nèi)容,和AWT的要求類似。

◆XML處理,熟悉SAX、DOM以及JDOM的優(yōu)缺點并且能夠使用其中的一種完成XML的解析及內(nèi)容處理。

5、測試:必須熟悉使用junit編寫測試用例完成代碼的自動測試。

6、管理:必須熟悉使用ant完成工程管理的常用任務(wù),例如工程編譯、生成javadoc、生成jar、版本控制、自動測試。

7、排錯:應(yīng)該可以根據(jù)異常信息比較快速的定位問題的原因和大致位置。

8、思想:必須掌握OOP的主要要求,這樣使用Java開發(fā)的系統(tǒng)才能是真正的Java系統(tǒng)。

9、規(guī)范:編寫的代碼必須符合流行的編碼規(guī)范,例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個單詞一般是動詞,包名全部小寫等,這樣程序的可讀性才比較好。

10、博學(xué):掌握J2EE 、Oracle 、WebLogic、Jboss、Spring、Struts、Hibernate 等流行技術(shù),掌握軟件架構(gòu)設(shè)計思想、搜索引擎優(yōu)化、緩存系統(tǒng)設(shè)計、網(wǎng)站負載均衡、系統(tǒng)性能調(diào)優(yōu)等實用技術(shù)。

摘錄自CSDN:
《一個java程序員的10項技能》



kangaroo 2009-08-15 21:40 發(fā)表評論
]]>
AOP學(xué)習(xí)筆記三:與AOP有關(guān)的概念http://www.aygfsteel.com/lukangping/articles/290386.htmlkangarookangarooSat, 08 Aug 2009 16:35:00 GMThttp://www.aygfsteel.com/lukangping/articles/290386.htmlhttp://www.aygfsteel.com/lukangping/comments/290386.htmlhttp://www.aygfsteel.com/lukangping/articles/290386.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/290386.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/290386.html
  • 關(guān)注點concern:一個關(guān)注點可以是一個特定的問題、概念、或是應(yīng)用程序的興趣區(qū)間。這是一個概念上的名詞,就是應(yīng)用程序必須達到的一個目標(biāo)。比如前面提到的安全性檢查,事務(wù)管理,性能檢測都是系統(tǒng)常見的關(guān)注點。
  • 橫切關(guān)注點crosscutting concern:如果一個關(guān)注點的實現(xiàn)代碼(哪怕就一句)散落在很多類或方法之中,我們就稱其為橫切關(guān)注點。
  • 方面aspect :一個方面是對一個橫切關(guān)注點的模塊化,它將原本散落在各處的用于實現(xiàn)這個關(guān)注點的代碼規(guī)整在一起。如果“關(guān)注點”是個概念上的名詞,“方面”就是實在的代碼。
  • 連接點join point:程序執(zhí)行過程中的一點,例如:方法調(diào)用method invocation(對方法的調(diào)用)、字段訪問field access(讀或?qū)懽侄危惓伋鰐hrows(特定的異常被拋出)
  • 增強advice:在特定連接點執(zhí)行的動作。很多AOP框架都以攔截器interceptor的形式來表現(xiàn)增強。攔截器是一種增強,還有別的形式的增強。所謂攔截器是這樣一個對象,當(dāng)連接點被調(diào)用時,它會收到一個回調(diào)消息。增強的例子包括:在方法調(diào)用之前,進行安全性的檢查;在執(zhí)行某個方法的連接點之前開啟事務(wù),在方法執(zhí)行完畢之后提交或回滾事務(wù)。
  • 切入點:一組連接點的總稱,用于指定某個增強應(yīng)該在何時被調(diào)用。切入點常用正則表達式或別的通配符來描述。
  • 前增強:在連接點調(diào)用之前,首先調(diào)用增強。
  • 后增強:在連接點調(diào)用之后,再調(diào)用增強。
  • 環(huán)繞增強:   
  • 攔截器:很多AOP框架(如Spring和JBoss4,但不包括AspectJ)用它來實現(xiàn)字段和方法的攔截。隨之而來就是在連接點處掛一個攔截器鏈。攔截只是一種AOP的實現(xiàn)策略,不是AOP的核心概念。
  • 目標(biāo)對象:位于攔截器鏈末端的對象實例。顯然這個概念只存在使用攔截器的AOP框架中。
  • AOP代理:被增強的對象引用。也就是,AOP增強將在其上執(zhí)行的這樣一個對象引用。和“攔截器”一樣,“AOP代理”只是對于使用攔截機制的AOP框架,而且是其立身之本。
  • 講了這么多概念,舉個例子,把它們串起來,還是以“AOP學(xué)習(xí)筆記一”里面的“安全性檢查”為例:
    我們把“安全性檢查”作為一個方面
    那么實現(xiàn)安全性檢查的攔截器就是一種增強
    方法businessMethod1,businessMethod2,businessMethod3就是連接點,
    但是只有businessMethod1和businessMethod2需要增強,所以需要一個切入點,使其只匹配前兩個方法。
    當(dāng)我們的業(yè)務(wù)對象和攔截器都配置到spring之后,spring會在運行時織入,并且生成一個AOP代理
    這個AOP代理將是一個JDK動態(tài)代理,將在完成安全性檢查之后,調(diào)用目標(biāo)對象



    kangaroo 2009-08-09 00:35 發(fā)表評論
    ]]>
    AOP學(xué)習(xí)筆記二:AOP實現(xiàn)策略http://www.aygfsteel.com/lukangping/articles/289007.htmlkangarookangarooSat, 08 Aug 2009 14:01:00 GMThttp://www.aygfsteel.com/lukangping/articles/289007.htmlhttp://www.aygfsteel.com/lukangping/comments/289007.htmlhttp://www.aygfsteel.com/lukangping/articles/289007.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/289007.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/289007.html -J2SE動態(tài)代理
    -動態(tài)字節(jié)碼生成
    -java代碼生成
    -使用定制的類加載期
    -語言擴展

    1.J2SE動態(tài)代理
    動態(tài)代理是一種強大的語言結(jié)構(gòu),它使我們可以為一個或多個接口“憑空”地創(chuàng)建實現(xiàn)對象,而不需要預(yù)先有一個實現(xiàn)類。
    動態(tài)代理最大的好處在于:這是一種標(biāo)準(zhǔn)的Java語言特性。除了AOP框架之外不需要第三方庫,也不回受到應(yīng)用程序的任何影響。
    動態(tài)代理的最大局限性在于:它只能針對接口進行代理,不能針對類。一般情況下,這種限制不是壞事,因為AOP主要針對業(yè)務(wù)對象,而業(yè)務(wù)對象通常是放在業(yè)務(wù)接口之后。
    動態(tài)代理在java1.4和更高的版本性能表現(xiàn)地相對好,不過,一旦使用動態(tài)代理的實習(xí)策略,便不可避免地招致反射調(diào)用的開銷。

    2.動態(tài)字節(jié)碼生成
    為了針對Java類提供代理,我們需要動態(tài)代理之外的工具,就是動態(tài)字節(jié)碼生成。應(yīng)該慶幸,Java的反射和類裝載機制都非常開發(fā),因此實現(xiàn)動態(tài)字節(jié)碼生成庫并不復(fù)雜。
    在這方面,最流行的工具就是CGLIB(Code Generation Library)。在spring中,如果需要針對類(而不是接口)提供代理,就會用到CGLIB。它可以針對制定的類動態(tài)生成一個子類,并覆蓋其中的方法,從而實現(xiàn)方法的攔截。CGLIB風(fēng)格的字節(jié)碼增強并應(yīng)用在Hibernate2.X版本中,并被證明是一種成熟的技術(shù)。Hibernate的成功表明,在應(yīng)用服務(wù)器環(huán)境下CGLIB沒有給最終用戶帶來任何困擾。
    不過CGLIB有個小問題就是,因為它是通過生成類的子類來實現(xiàn)代理的,所以無法為final方法提供代理。

    3.java代碼生成
    逐漸退出流行。

    4.使用定制的類加載器

    5.語言擴展
    AspectJ就對java進行了擴展,將AOP概念作為一等公民來對待。



    kangaroo 2009-08-08 22:01 發(fā)表評論
    ]]>
    AOP學(xué)習(xí)筆記一:動機http://www.aygfsteel.com/lukangping/articles/288805.htmlkangarookangarooSat, 08 Aug 2009 13:55:00 GMThttp://www.aygfsteel.com/lukangping/articles/288805.htmlhttp://www.aygfsteel.com/lukangping/comments/288805.htmlhttp://www.aygfsteel.com/lukangping/articles/288805.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/288805.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/288805.htmlAOP,全稱Aspect Oriented Programming,面向方面的編程。那么就要問了,什么是方面,為什么引入AOP?
    一般情況下,OOP能夠很好的避免代碼重復(fù)。具體繼承可以幫助我們在不同類型之間共享相同的行為;多態(tài)讓我們可以用同樣的方式處理不同類型的對象,將注意力集中在它們的共同之處。但是,有些時候,OOP也避免不了代碼的重復(fù),比如下面的例子:

    public class MyBusinessObject extends BusinessObject {
     
        
    public void businessMethod1() throws UnanthorizedException {
            doSecurityCheck();
        }


        
    public void businessMethod2() throws UnanthorizedException {
            doSecurityCheck();
        }

           
        
    public void businessMethod3(){
            
    //do not need check security.
        }



        
    protected void doSecurityCheck() throws UnanthorizedException {
            
    //implement the security check.
        }

    }


    上面是安全性檢查的例子,我們希望檢查用戶是否有權(quán)限執(zhí)行某個方法,如果沒有就拋出異常。我們把安全檢查的工作放在一個方法中實現(xiàn),但是這個仍無法避免一行重復(fù)代碼的編寫。另外,當(dāng)開發(fā)者添加一個新的業(yè)務(wù)方法時,它完全有可能忘記調(diào)用安全檢查的方法,從而破壞了應(yīng)用程序的安全性。為了在方法執(zhí)行的過程中識別出“應(yīng)該調(diào)用安全性檢查”的那一點,我們需要用一種高全新的方式來看待程序結(jié)構(gòu),而OO的層次模型無法提供這種新的視角。對于這個問題,繼承愛莫能助,“安全性檢查”在這里是一個具有橫切性的問題,需要進行安全性檢查的方法都是彼此獨立的,無法從某個通用的方法繼承下去。
    AOP的目標(biāo)就是將橫切型crosscutting的問題以一種更加通用的方式模塊化,從而提升程序的模塊化程度。在AOP中,我們可以單獨編寫“安全性檢查”的代碼,并將其包裝為一個方面aspect。(方面的概念出現(xiàn)嘍!)然后,我們可以告訴AOP實現(xiàn)產(chǎn)品如何在運行時將方面織入到程序流程之中,具體的實現(xiàn)策略,請看下篇AOP的實現(xiàn)策略。


     



    kangaroo 2009-08-08 21:55 發(fā)表評論
    ]]>
    主站蜘蛛池模板: 遵义市| 灌南县| 东平县| 彭泽县| 广平县| 辛集市| 西城区| 古田县| 柳河县| 玉溪市| 元江| 樟树市| 馆陶县| 宿松县| 宁国市| 济宁市| 鹰潭市| 济南市| 饶阳县| 阿克陶县| 滁州市| 阿荣旗| 玛沁县| 阳山县| 牡丹江市| 沁水县| 镇远县| 滕州市| 鲁甸县| 石狮市| 昭觉县| 前郭尔| 辰溪县| 凤山市| 青阳县| 登封市| 儋州市| 阿克苏市| 大连市| 新蔡县| 洪江市|