关于Java中的一些基本概念

一、关于MVC

MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,
它很好的实现了数据层与表示层的分离

MVC(Model-View-Controller)把交互系统的组成分解成模型、视图、控制器三种部件

视图部件把表示模型数据及逻辑关系和状态的信息以特定形式展示给用户。
它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。

控制器部件是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,
确保用户界面于模型间的对应联系

二、关于Java容器
Java容器即是对集合的实现
Java2的集合框架,抽其核心,主要有三类:List、Set和Map。如下图所示:
Collection----------List--------ArrayList
              |                  |----LinkedList
              |
              |---------Set---------SortedSet--------HashSet
                                                       |----TreeSet

Map-----------SortedMap

Collection接口提供了一组操作成批对象的方法,它提供了基本操作如添加、删除

List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。
ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,
而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作

Set接口也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。

Map是一种把键对象和值对象进行关联的容器


三、关于Java多线程
Java中实现多线程的类有两种方法:
1.扩展java.lang.Thread类,用它覆盖Thread类的run方法。
2.生成实现java.lang.Runnable接口的类并将其它的实例与java.lang.Thread实例相关联。
       Thread类是负责向其它类提供线程支持的最主要的类,要使用一个类具有线程功能,在Java中只要简单地从Thread类派生一个子类就可以了,扩展Thread类,如printThread.java

示例:

//PrintThread.java
public class PrintThread extends Thread
{//继承Tread类
   //定义一个count变量用于统计打印的次数 
   private int count=0;

   public static void main(String[] args)
   {
      //创建一个线程实例
      PrintThread p=new PrintThread();
      p.start();  //开始执行线程

      for(; ;)
      {
         count++;
         System.out.print(count+″:Main\n");
       }
    }

    public void run()
    {
      for(; ;)
      {
         count++;
         System.out.print(count+″:Thread\n″);
       }
     }

}

  上面这段程序便是继承java.lang.Tread并覆盖run的方法。用Java 虚拟机启动程序时,这个程序会先生成一个线程并调用程序主类的main方法。这个程序中的main方法生成新线程,连接打印“Thread”。在启动线程之后,主线程继续打印“Main”。



四、CMM五级标准
       CMM是Capability Maturity Model for Software的简称,中文叫“软件能力成熟度模型”,是对组织软件过程能力的描述。CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化,使企业能够更好的实现商业目标。

第一级:初始级 

 在初始级,企业一般不具备稳定的软件开发与维护的环境。常常在遇到问题的时候,就放弃原定的计划而只专注于编程与测试。 

第二级:可重复级 
 在这一级,建立了管理软件项目的政策、措施。基于过往的项目的经验来计划与管理新的项目。 

第三级:定义级 
   在这一级,软件开发与维护的过程的文件将被制订出来。 

第四级:定量管理级 
   在这一级,企业对产品与过程建立起定量的质量目标,软件 产品因此具有可预期的高质量。 

第五级:(不断)优化级 
   在这个等级,整个企业将会把重点放在对过程进行不断的优化。企业会采取主动去找出过程的弱点与长处,以达到预防缺陷 的目标。

(CMM的五层结构图)
          -----------------
         /   优 化 级     /
        /      (5)       /
        -----------------
               ↑
               | 不断改进的过程
               |
          -----------------
         / 可 管 理 级    /
        /      (4)       /
        -----------------
               ↑
               | 能预见的过程
               |
          -----------------
         /   确 定 级     /
        /      (3)       /
        -----------------
               ↑
               | 标准一致的过程
               |
          -----------------
         /  可 重 复 级   /
        /      (2)       /
        -----------------
               ↑
               | 有纪律的过程
               |
          -----------------
         /  初 始 级      /
        /     (1)        /
        -----------------

五、关于JDBC、J2EE、JSP
      JDBC是Sun提供的一套数据库编程接口API函数,由Java语言编写的类、界面组成。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统。不但如此,使用Java编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。Java和JDBC的结合可以让开发人员在开发数据库应用程序时真正实现“WriteOnce,RunEverywhere!”

简单地说,JDBC 可做三件事:
  与数据库建立连接,
  发送 SQL 语句,
  处理结果

J2EE,即Java 2 Platform, Enterprise Edition (J2EE)是JAVA平台的企业版。有以下特点:

高效的开发: 
      J2EE允许公司把一些通用的、很繁琐的服务端任务交给中间件供应商去完成。
这样开发人员可以集中精力在如何创建商业逻辑上。
      高级中间件供应商提供以下这些复杂的中间件服务: 
              状态管理服务 -- 让开发人员写更少的代码,不用关心如何管理状态
              持续性服务 -- 让开发人员不用对数据访问逻辑进行编码就能编写应用程序,
                                  能生成更轻巧,与数据库无关的应用程序。 
              分布式共享数据对象CACHE服务 -- 让开发人员编制高性能的系统.
              支持异构环境: J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的
                                  应用程序不依赖任何特定操作系统、中间件、硬件。

可伸缩性:
     基于J2EE平台的应用程序可被部署到各种操作系统上,例如可被部署到
高端UNIX与大型机系统,这种系统单机可支持64至256个处理器.J2EE领域的供应商
提供了更为广泛的负载平衡策略。

稳定的可用性: 
       一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要。因为INTERNET是全球化的、无处不在的,即使在夜间按计划停机也可能造成严重损失。若是意外停机,那会有灾难性后果。J2EE部署到可靠的操作环境中,他们支持长期的可用性。

JSP是一种Web开发方式,主要处理接受用户请求,然后将服务器代码解析成HTML代码返回给用户,他处理表现层的事务。
Serverlet则处理后台业务逻辑。有点类似ASP.NET的前后台间的关系


六、关于数据库外键
    外键的用途是确保数据的完整性,用于限制不相关的数据输入到图表里。
    它通常包括以下几种:
       实体完整性,确保每个实体是唯一的(通过主键来实施) 
       域完整性,确保属性值只从一套特定可选的集合里选择
       关联完整性,确保每个外键或是NULL(如果允许的话)或含有与相关主键值相配的值



七、Hoffman编码
     在字符串a a x u a x z中,a 出现了三次。一个字符出现的次数称为频率( f r e q u e n c y),a,x,u,z在这个字符串中出现的频率分别为3,2,1,1。
当每个字符出现的频率有很大变化时,可以通过可变长的编码来降低每个位串的长度。如果使用编码( 0 =a, 10= x, 11 0 =u, 111 =z),则a a x u a x z的压缩编码为0 0 1 0 11 0 0 1 0 111。编码长度为1 3位,比原来每个字符用2位、总长为1 4位要稍好一些。当频率相差大时这种差别会更为明显。如果四个字符的出现频率分别为( 9 9 6 , 2 , 1 , 1),则每个字符用2位编码所得到编码的长度为2 0 0 0位,而用可变长编码则仅为1 0 0 0位。

    为什么能够采用上述方法进行解码呢?通过仔细观察所使用的4种代码(0,1 0,11 0,111),
可以发现没有任何一个代码是另一代码的前缀。因此,当从左到右检查代码时,可以很确定地
得到与实际代码相匹配的字符。

    为了构造霍夫曼树,首先从仅含一个外部节点的二叉树集合开始,每个外部节点代表字符
串中一个不同的字符,其权重等于该字符的频率。此后不断地从集合中选择两棵具有最小权重
的二叉树,并把它们合并成一棵新的二叉树,合并方法是把这两棵二叉树分别作为左右子树,
然后增加一个新的根节点。新二叉树的权重为两棵子树的权重之和。这个过程可一直持续到仅
剩下一棵树为止。




posted @ 2004-11-18 10:15  cndebbie  阅读(815)  评论(0编辑  收藏  举报