重新探索自我

              客觀條件受制于人,并不足懼。重要的是,我們擁有選擇的自由,可以對現實環境積極回應,
              為生命負責,為自己創造有利的機會,做一個“真正”操之在我的人!

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

          2006年11月23日 #

          ?

          一、 General Techniques

          1、? 引數以 by value 方式而非 by reference 方式傳遞

          2、? 對于不變的 data object reference 使用 final ,final 僅僅令 object reference 自身成為不變量,但并不限制它所指向對象的改變

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

          4、? vector 容器包含的是對象,與 arrays 要區別,但我認為 Vector 的功能實際上有些像跟 Array List 差不多,只是 vector 現在不經常使用

          5、? 多態優于 instanceof ,只有在不得已的情況下使用

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

          例如,當你必須從一個 base type 做向下轉型為 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 、一旦不需要對象的引用,就將它設為 null

          ?????? 盡管有 GC, 你還是要關注的你的代碼如何運用內存;

          ????????

          ?

          二、? 對象與相等性

          7 、區分 reference type primitive type ,理解他們的差異,你會在運用他們時候做出明智的

          選擇;

          ???????? 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 保存;

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

          將一個異常加入到 throw 子句,會影響到調用它的所有函數

          使用 finally 防止資源泄露,譬如在連接數據庫的時候在 finally 中關閉連接;

          不要從 try 字段中返回;

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

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

          不要在構造函數中拋出異常;

          拋出異常前,請將對象置為有效狀態;

          四、? 性能

          1、?? 先把焦點放在設計,數據機構和算法方面

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

          3、?? 在面向對象中,對象的創建是昂貴的,因此需要將對象的創建成本降到最低,減少一些沒有必要的對象,在非必要的時候,別產生你的對象

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

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

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

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

          8、?? 盡可能的重復使用對象,這比重新創建對象更有效

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

          10、 手動優化你的代碼,特別是執行的順序

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

          一、 簡介

          ? ??????? Apache JMeter 100 %的 Java 桌面應用程序。用于對軟件做壓力測試(例如 Web 應用)。 它可以用于測試靜態何動態資源例如靜態文件、 Java 小服務程序、 CGI 腳本、 Java 對象、數據庫, FTP 服務器 , 等等。 JMeter 可以用于對服務器、網絡或對象模擬巨大的負載,來在不同壓力類別下測試它們的強度和分析整體性能。

          另外, JMeter 能夠對應用程序做衰退測試,通過創建帶有斷言的腳本來驗證你的程序返回了你期望的結果。為了最大限度的靈活性, JMeter 允許使用正則表達式創建斷言。

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

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

          ?

          二、 安裝與配置

          JMeter 的安裝過程非常簡單:

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

          第二步 下載 JMeter ,并解壓

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

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

          第三步 配置環境變量

          ?????? JAVA_HOME = …

          ??? JMeter = …

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

          第四步 運行

          ?????? 在命令行運行 jmeter.bat ,出現如下界面,說明安裝成功:

          ?

          三、 項目應用

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

          模擬 5 個用戶并發請求,每個用戶請求兩次(一次請求結束后,發出下一個請求),得出各個請求樣本的響應時間,并得出一些統計性的數據。

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

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

          用戶并發數為 5 ,因為一個用戶請求我們可以看作是一個請求線程,所以我們將線程數設置為 5 。這里設置休眠時間為 0 ,循環的次數為 2

          其次,建立默認的 HTTP 連接屬性,這樣不用每次都重新輸入參數,如下圖: ?

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

          最后,建立查看結果形式,我們采用表格數據記錄

          ? ?

          ?????? 3 .運行測試腳本

          ????????????? 點擊要測試的腳本,然后執行菜單運行 》開始,測試開始。

          ? ???? 4 .測試數據分析

          ????????????? 測試完成之后,數據如下:
          ??????

          聚合數據分析結果如下:

          模擬 5 個用戶并發訪問 http://10.36.32.5:8080/wwwncsl/default.htm 頁面,每個用戶循環訪問一次,總共 10 個樣本數據。最大響應時間為 10.355s ,最短響應時間為 2.84s ,平均為 6.572s

          90% 的可能集中在響應時間為 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>

          調用方式:
          ?Context ctx = null ;
          ?Connection conn = null;
          ?Statement stmt = null ;
          ?ResultSet rs = null;
          ?try{
          ??ctx = new InitialContext();
          ??if( ctx == null) throw new Exception("沒有匹配的環境!");
          ??DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/blogdb");
          ??if( ds == null ) throw new Exception("沒有匹配的數據庫!");
          ??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)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 肃北| 台南县| 横山县| 镇平县| 娱乐| 都安| 隆林| 依安县| 安徽省| 和顺县| 沅陵县| 旅游| 互助| 奎屯市| 鲁山县| 曲水县| 泸州市| 新乐市| 紫云| 特克斯县| 阿城市| 七台河市| 彰化县| 鹿泉市| 连平县| 南靖县| 西城区| 万山特区| 宁乡县| 长岛县| 丁青县| 闸北区| 礼泉县| 青浦区| 虞城县| 尼木县| 新源县| 紫云| 高尔夫| 嘉义县| 讷河市|