摘要: 原作:Joseph Ottinger, 來自近日的theServerSide,本文是譯文。
原作網址:http://www.theserverside.com/news/thread.tss?thread_id=42598
Empathy Box在blog中介紹了編程應該注意的5個問題,這篇文章實際表述了編程時應引起注意的很重要的6個思想
閱讀全文
摘要: 做了一個登陸驗證碼的生成小程序,或許對大家有用。支持背景圖和文字旋轉
閱讀全文
摘要: 本文是TheServerSide首頁的文章,本文是譯文,本文基于一個調查,結合關于開源軟件質量的文章,發表了作者關于開源軟件質量的一些看法
閱讀全文
SWT shell的構造方法
影響深遠,是值得我們借鑒的編程模式,采用了如下的形式:
new MyClass(MyClass.A | MyClass.B | MyClass.C)
其中,對于MyClass.A定義為 1<<1,MyClass.B 定義為 1<<2 以此類推。
在我們都知道,在java中整形是4個字節,那么除去符號位,還可以有31bit用來加入各種各樣的開關,
當31個條件都滿足時,將得到Integer.MAX_VALUE.這樣保證了傳入的是一個整型的數,而在構造方法內部可以這樣判斷:
public MyClass(int types){
if(types & MyClass.A != 0){
//表示在A條件被設定時的情況

}
}
這種模式主要用來配置當一個類中的多個屬性都是“開關型”的變量 —— 即位布爾型時的情況,從用
戶接口的角度,增加了利用接口開發程序人員所編寫程序的可讀性,因此當所編寫的程序僅供自己使用
時,我個人不推薦這種方法;而對于相反的情況,則強烈推薦。另一方面來說,這種編程模式提高了程
序的運行效率。
1 Spring支持生命周期的回調,通過在bean配置屬性中增加init-method來做一些初始化的工作,隨之而產生了一個疑問:property設值注入和init-method哪個在先呢?結論是前者!這樣最大的好處是,我們不必再為第三方的框架代碼編寫單獨的適配器,僅僅通過在本類中property設置,然后在init-method中初始化即可;
2 設值注入時,在setXX方法中可以不僅僅是簡單的this.xX = xX;而可以對xX做一些加工,如:
setXX(int xX){
if(xX > 10){
this.xX = xX/2;
}else
this.xX = xX;
}
這兩個小技巧還停留在使用軟件而不是開發軟件的淺層次上,然而隨著Spring的日益流行,他們也許能給站在巨人肩膀上的您的開發帶來莫大的便利。
摘要: 今天上blogjava,發現首頁技術區突然多了好幾篇關于中文問題的文章。作者一出手便洋洋灑灑不下千言,而且好像言語中充滿了對spring支持者的不屑。在這里僅從技術角度發表一下我的個人看法,有說得不對的地方,歡迎批評指正。
閱讀全文
用java做了一個數組亂序,首先建立快速排序算法,排序的依據是根據序列中隨機產生的序列號,序列號利用map保證在每次排序過程中只產生一次,不知道有沒有效率更高的方法,大家咚咚腦筋哈
public static void randomList(List list) {
Collections.sort(list, new Comparator(){
HashMap map = new HashMap();
public int compare(Object v1, Object v2) {
init(v1);
init(v2);
double n1 = ((Double)map.get(v1)).doubleValue();
double n2 = ((Double)map.get(v2)).doubleValue();
if(n1 > n2)
return 1;
else if(n1 < n2)
return -1;
return 0;
}
private void init(Object v){
if(map.get(v) == null){
map.put(v, new Double(Math.random()));
}
}
protected void finalize() throws Throwable {
map = null;
}
});
}
首先說明war包和jar包,zip包沒有什么區別,都是zip格式的文件壓縮流。因此在制作時除了利用sun jdk中的jar命令,完全可以直接用winrar之類的工具進行zip格式壓縮,只要注意好擴展名就好了。
在發布war包時,注意到$tomcat_home/webapps/ROOT下面是我們剛剛安裝tomcat后的測試頁面,也是我們部署的根位置所在.把這個文件夾備份到其他位置,或更改名稱.然后把你要部署的war包,改名為ROOT.war,注意這里是大小寫敏感的,一定要大寫.登陸http://localhost:8080,怎么樣,可以了吧?
想利用apache更安全的發布你的網站?好,下載apache2.0,和tomcat調用模塊mod_jk.so,放到安裝好的apache2modules文件夾下,在$apache_home/conf
/httpd.conf配置文件中加入如下內容:
<VirtualHost *:80>
#你的電子郵箱
ServerAdmin contactyang@163.com
#DocumentRoot C:/Program Files/tomcat/webapps/ROOT
#有域名嗎
ServerName localhost
#Load m
odule of mod_jk apache tomcat connecter
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkMount /*.jsp ajp13
#Load jk2 apache tomcat connecter end
</VirtualHost>
在$apache_home/conf目錄下建立workers.properties文件,加入如下內容:
workers.tomcat_home="c:\program files\tomcat"
#讓mod_jk模塊知道Tomcat的安裝路徑
workers.java_home=C:\Program Files\Java\jdk1.5.0
#讓mod_jk模塊知道jdk路徑
ps=\
worker.list=ajp13
#這里是關鍵,名字要和httpd.conf的一致。如果這里改了httpd.conf也要改。
worker.ajp13.port=8009
#工作端口,tomcat的jk監聽端口,可以查看Tomcat 的Server.xml中有port="8009" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"這樣的Connector
worker.ajp13.host=localhost
#Tomcat所在機器,如果安裝在與apache不同的機器則需要設置IP
worker.ajp13.type=ajp13
#類型,Apache與Tomcat之間傳遞使用的協議
worker.ajp13.lbfactor=1
登陸http://localhost/
怎么樣?有了吧
今天忽然想到一個問題,Web Service未來的發展趨勢是什么?為什么近兩年聽到的聲音越來越少了? 記得04年的時候,WS還是比較火的,不僅在課堂上學習,還做過一些java和.net的應用,以后就不怎么用了,也許是分布式理論受到了挑戰吧 (Rod果然站在時代的前沿)。
許多人說,現在最火的SOA里面用到的技術就是Web Service,可是SOA是個概念而已,大廠商主導的東西不一定經得起推敲的,正如WS一樣。
網上一篇介紹SOA的文章如是說:
面向服務架構(SOA)的原則
Web service已經不再是新婚的娘子。眾多企業都已經創建各種實驗性Web Services 項目,事實證明,這項新興的分布式計算技術確實能夠降低集成和開發的成本。另外,一些關鍵的Web Services標準紛紛制定,強安全(robust security)和管理方面的產品也陸續問世。對于志向遠大的企業來說,他們已經在考慮下一步了。
對大多數公司來說,下一步要考慮的不再是點對點的應用,而是Web services在企業間以及業務伙伴間更為寬廣的應用。這種技術的變遷需要更松散耦合、面向基于標準的服務的架構。這樣一個架構要求對IT在組織中的角色有新的觀點和認識,而不僅僅是一種實現方法。通過對業務的敏捷反應,企業可以得到實實在在的回報,而要達到這一點,面向服務架構設計師的角色非常關鍵。除此之外,潛在的回報更是不可勝數-分布計算技術能夠保證對業務需求足夠靈活的反應,而這種業務上的敏捷正是各公司夢寐以求而目前還遙不可及的。
分布式計算將網絡上分布的軟件資源看作是各種服務。面向服務架構是一種不錯的解決方案。但這種架構不是什么新思想;CORBA和DCOM就很類似,但是,這些過去的面向服務架構都受到一些難題的困擾:首先,它們是緊密耦合的,這就意味著如分布計算連接的兩端都必須遵循同樣API的約束。打比方說,如果一個COM對象的代碼有了更改,那么訪問該對象的代碼也必須作出相應更改。其二,這些面向服務架構受到廠商的約束。Microsoft控制DCOM自不必說,CORBA也只是一個偽裝的標準化努力,事實上,實現一個CORBA架構,經常都是在某個廠商對規范的實現上進行工作。
Web services是在改進DCOM和CORBA缺點上的努力。今天應用Web services的面向服務架構與過去不同的特點就在于它們是基于標準以及松散耦合的。廣泛接受的標準(如XML和SOAP)提供了在各不同廠商解決方案之間的交互性。而松散耦合將分布計算中的參與者隔離開來,交互兩邊某一方的改動并不會影響到另一方。這兩者的結合意味著公司可以實現某些Web services而不用對使用這些Web services的客戶端的知識有任何了解。我們將這種基于標準的、松散耦合的面向服務的架構簡稱為SOA。
這和當年的宣傳WS并沒有什么不同,僅僅多了個SOA而已, 試問今天的架構師,哪位應用了WS,哪位涉及了SOA? 有多少成功的案例?哪位知道這項技術在美國的發展情況,有很廣泛的應用嗎,還是僅限于SOA?
真正項目中需要SOA思想的那種跨國財團有幾個?對于在國內最多的中小型應用,暴露服務倒是極危險的事情。不過作為程序員,學習新技術,新概念實屬無奈之舉 。有些不必要的復雜性干擾人的思維,讓你無法干凈利落地做事。
敏捷開發中一個經典的原則YAGNI原則,就是通過重構提取公因式當出現一次時,不分層,以后業務復雜了,馬上抽象出一個層次來,分層是依賴倒置原則和模版方法模式的應用。談到時候應該分層,我想:如果只是一個非常簡單的網站,3、5個頁面,7、8張表如果在這種需求下去分層,無異于自己折磨自己,添加系統不必要的復雜性。