重新探索自我

    客观条件受制于人,并不足惧。重要的是,我们拥有选择的自由,可以对现实环境积极回应,
    为生命负责,为自己创造有利的机会,做一个“真正”操之在我的人!

  语源科技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 蒋利文 阅读(286) | 评论 (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 蒋利文 阅读(1570) | 评论 (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 蒋利文 阅读(1038) | 评论 (0) | 编辑 收藏

仅列出标题