重新探索自我

              客觀條件受制于人,并不足懼。重要的是,我們擁有選擇的自由,可以對現(xiàn)實環(huán)境積極回應(yīng),
              為生命負(fù)責(zé),為自己創(chuàng)造有利的機(jī)會,做一個“真正”操之在我的人!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            3 隨筆 :: 10 文章 :: 5 評論 :: 0 Trackbacks

          2006年11月23日 #

          ?

          一、 General Techniques

          1、? 引數(shù)以 by value 方式而非 by reference 方式傳遞

          2、? 對于不變的 data object reference 使用 final ,final 僅僅令 object reference 自身成為不變量,但并不限制它所指向?qū)ο蟮母淖?/span>

          3、? 缺省情況下,所有 non-static 都可以被覆寫,不然 , 則用 final 防止覆寫

          4、? vector 容器包含的是對象,與 arrays 要區(qū)別,但我認(rèn)為 Vector 的功能實際上有些像跟 Array List 差不多,只是 vector 現(xiàn)在不經(jīng)常使用

          5、? 多態(tài)優(yōu)于 instanceof ,只有在不得已的情況下使用

          “如果你根據(jù)對象的型別來觸發(fā)行為,那就改給自己一個耳光”

          例如,當(dāng)你必須從一個 base type 做向下轉(zhuǎn)型為 derived type 的時候,必須使用它

          ….

          Vector shapeVector = new Vector(10);

          shapeVector.add(new Triangle());

          shapeVector.add(new Triangle());

          shapeVector.add(new Circle());

          ??? //...

          ??? //Assume many Triangles and Circles are added and removed

          ??? //...

          ??? int size = shapeVector.size();

          ??? for (int i=0; i<size; i++)

          ??? {

          ????? Object o = shapeVector.get(i);

          ????? if (o instanceof Triangle)

          ????? {

          ??????? if (((Triangle)o).isRightTriangle())

          ??????? {

          ????????? //...

          ??????? }

          ????? }

          ????? else if (o instanceof Circle)

          ????? {

          ??????? double rad = ((Circle)o).radius();

          ??????? //...

          ????? }

          }

          ???????? 6 、一旦不需要對象的引用,就將它設(shè)為 null

          ?????? 盡管有 GC, 你還是要關(guān)注的你的代碼如何運(yùn)用內(nèi)存;

          ????????

          ?

          二、? 對象與相等性

          7 、區(qū)分 reference type primitive type ,理解他們的差異,你會在運(yùn)用他們時候做出明智的

          選擇;

          ???????? Boolean(boolean)

          ???????? Character(char)

          Byte(byte)

          Integer(int)

          Float(float)

          Long(long)

          Short(short)

          Double(double)

          基本型別相等,只要是值相等就可以拉,不管是不是同一類型;而引用類型必須則按照引用的比較方式來比較,譬如 equals();

          ?

          8 java.lang.object 提供的 equals() 方法很多時候不是你想要的,你需要自己寫一些比較的方法

          public boolean equals(Object obj)

          ? {

          ?

          ??? if (this == obj)

          ????? return true;

          ?

          ??? if (obj != null && getClass() == obj.getClass())

          ??? {

          ????? Golfball gb = (Golfball)obj;? //Classes are equal, downcast.

          ????? if (brand.equals(gb.brand()) &&? //Compare attributes.

          ????????? make.equals(gb.make()) &&

          ????????? compression == gb.compression())

          ????? {

          ??????? return true;

          ????? }

          ??? }

          ??? return false;

          ? }

          ?

          三、? java 異常

          1、?? try,cacth,finally

          ?

          不要將 catch 的異常覆蓋掉,在這樣的情況下,我們要專門把異常保存下來,如用一個 vector 保存;

          不要忽略任何一個異常,因為異常一旦出現(xiàn),拋出異常的那個線程將會終止;

          將一個異常加入到 throw 子句,會影響到調(diào)用它的所有函數(shù)

          使用 finally 防止資源泄露,譬如在連接數(shù)據(jù)庫的時候在 finally 中關(guān)閉連接;

          不要從 try 字段中返回;

          不要用 try catch 用于流程控制 ;

          不要每逢出錯的使用 try catch;

          不要在構(gòu)造函數(shù)中拋出異常;

          拋出異常前,請將對象置為有效狀態(tài);

          四、? 性能

          1、?? 先把焦點(diǎn)放在設(shè)計,數(shù)據(jù)機(jī)構(gòu)和算法方面

          2、?? 如果進(jìn)行字符串的拼接,用 String Buffer String 快許多倍

          3、?? 在面向?qū)ο笾校瑢ο蟮膭?chuàng)建是昂貴的,因此需要將對象的創(chuàng)建成本降到最低,減少一些沒有必要的對象,在非必要的時候,別產(chǎn)生你的對象

          4、?? 將同步減少到最低,增加 stack 的使用

          5、?? 使用基本型別代碼會更快

          6、?? 在使用 vector 時候,用 get() 來獲取對象,而不是 Interator

          7、?? 優(yōu)先使用 array, 再考慮 ArrayList Vector ,如果不需要 vector 的同步特性,考慮使用 ArrayList

          8、?? 盡可能的重復(fù)使用對象,這比重新創(chuàng)建對象更有效

          9、?? 使用緩式評估,延遲計算,不必要的計算永遠(yuǎn)都不要計算

          10、 手動優(yōu)化你的代碼,特別是執(zhí)行的順序

          posted @ 2006-11-23 18:50 蔣利文 閱讀(251) | 評論 (0)編輯 收藏

          一、 簡介

          ? ??????? Apache JMeter 100 %的 Java 桌面應(yīng)用程序。用于對軟件做壓力測試(例如 Web 應(yīng)用)。 它可以用于測試靜態(tài)何動態(tài)資源例如靜態(tài)文件、 Java 小服務(wù)程序、 CGI 腳本、 Java 對象、數(shù)據(jù)庫, FTP 服務(wù)器 , 等等。 JMeter 可以用于對服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M巨大的負(fù)載,來在不同壓力類別下測試它們的強(qiáng)度和分析整體性能。

          另外, JMeter 能夠?qū)?yīng)用程序做衰退測試,通過創(chuàng)建帶有斷言的腳本來驗證你的程序返回了你期望的結(jié)果。為了最大限度的靈活性, JMeter 允許使用正則表達(dá)式創(chuàng)建斷言。

          將來開發(fā)的主要目標(biāo)是使得 JMeter 盡可能地變成一個有用的衰退測試工具,而不損失 JMeter 地壓力測試能力。

          衰退測試:通過回歸測試等方法來保證經(jīng)過修改的代碼沒有衰退(質(zhì)量下降)。

          ?

          二、 安裝與配置

          JMeter 的安裝過程非常簡單:

          第一步 安裝 JDK (這里使用 JDK 1.5.0

          第二步 下載 JMeter ,并解壓

          ?????? 官方下載地址: http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi ,下載

          jakarta-jmeter-2.2.zip 包,大小: 9.52M

          第三步 配置環(huán)境變量

          ?????? JAVA_HOME = …

          ??? JMeter = …

          ??? CLASS_PATH=”%JAVA_HOME%\bin;%JAVA_HOME%\lib\tools.jar;%JMeter\bin%”

          第四步 運(yùn)行

          ?????? 在命令行運(yùn)行 jmeter.bat ,出現(xiàn)如下界面,說明安裝成功:

          ?

          三、 項目應(yīng)用

          1.?????? 項目需求

          模擬 5 個用戶并發(fā)請求,每個用戶請求兩次(一次請求結(jié)束后,發(fā)出下一個請求),得出各個請求樣本的響應(yīng)時間,并得出一些統(tǒng)計性的數(shù)據(jù)。

          2.?????? 建立測試計劃

          首先,添加一個線程組,如下圖:

          用戶并發(fā)數(shù)為 5 ,因為一個用戶請求我們可以看作是一個請求線程,所以我們將線程數(shù)設(shè)置為 5 。這里設(shè)置休眠時間為 0 ,循環(huán)的次數(shù)為 2

          其次,建立默認(rèn)的 HTTP 連接屬性,這樣不用每次都重新輸入?yún)?shù),如下圖: ?

          再次,建立要測試的 Http 請求,如下圖

          最后,建立查看結(jié)果形式,我們采用表格數(shù)據(jù)記錄

          ? ?

          ?????? 3 .運(yùn)行測試腳本

          ????????????? 點(diǎn)擊要測試的腳本,然后執(zhí)行菜單運(yùn)行 》開始,測試開始。

          ? ???? 4 .測試數(shù)據(jù)分析

          ????????????? 測試完成之后,數(shù)據(jù)如下:
          ??????

          聚合數(shù)據(jù)分析結(jié)果如下:

          模擬 5 個用戶并發(fā)訪問 http://10.36.32.5:8080/wwwncsl/default.htm 頁面,每個用戶循環(huán)訪問一次,總共 10 個樣本數(shù)據(jù)。最大響應(yīng)時間為 10.355s ,最短響應(yīng)時間為 2.84s ,平均為 6.572s

          90% 的可能集中在響應(yīng)時間為 10.355s

          posted @ 2006-11-23 18:37 蔣利文 閱讀(1535) | 評論 (0)編輯 收藏

          2006年10月17日 #


          配置文件:
          <Context path="/apple" docBase="D:\workspace\bolg\webdoc"
          ???????? privileged="true" antiResourceLocking="false" antiJARLocking="false">
          ?<Resource name="jdbc/blogdb" auth="Container"
          ??? type="javax.sql.DataSource"
          ??? maxActive="100" maxIdle="30" maxWait="10000"
          ??? username="root" password=""
          ??? driverClassName="com.mysql.jdbc.Driver"
          ??? url="jdbc:mysql://localhost:3306/blogdb?autoReconnect=true"/>
          </Context>

          調(diào)用方式:
          ?Context ctx = null ;
          ?Connection conn = null;
          ?Statement stmt = null ;
          ?ResultSet rs = null;
          ?try{
          ??ctx = new InitialContext();
          ??if( ctx == null) throw new Exception("沒有匹配的環(huán)境!");
          ??DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/blogdb");
          ??if( ds == null ) throw new Exception("沒有匹配的數(shù)據(jù)庫!");
          ??conn = ds.getConnection();
          ??stmt = conn.createStatement();
          ??rs = stmt.executeQuery(" select * from tbl_blog");
          ??while(rs.next()){
          ???out.print(rs.getString(2));
          ??}
          ??
          ?}catch(Exception e){
          ??e.printStackTrace();
          ?}finally{
          ??if(rs!=null) rs.close();
          ??if(stmt!=null) stmt.close();
          ??if(conn!=null) conn.close();
          ??if(ctx!=null) ctx.close();
          ?}



          posted @ 2006-10-17 12:32 蔣利文 閱讀(1007) | 評論 (0)編輯 收藏

          僅列出標(biāo)題  
          主站蜘蛛池模板: 平邑县| 九龙城区| 林芝县| 花莲市| 江津市| 阿克| 白城市| 苗栗市| 雅安市| 贵德县| 太仓市| 陆丰市| 南岸区| 福鼎市| 高唐县| 阿拉善左旗| 万山特区| 乳源| 疏勒县| 台南市| 双峰县| 岳阳市| 思南县| 南康市| 西藏| 余干县| 四子王旗| 密云县| 福贡县| 胶州市| 青神县| 双江| 罗江县| 江城| 阳信县| 西平县| 博客| 新巴尔虎左旗| 晋州市| 安新县| 岳阳市|