博文

final、finally和finalize的区别(2011-03-21 09:31:00)

摘要: 这是一道再经典不过的面试题了,我们在各个公司的面试题中几乎都能看到它的身影。final、finally和finalize虽然长得像孪生三兄弟一样,但是它们的含义和用法却是大相径庭。这一次我们就一起来回顾一下这方面的知识。 我们首先来说说final。它可以用于以下四个地方: 定义变量,包括静态的和非静态的。 定义方法的参数。 定义方法。 定义类。 我 们依次来回顾一下每种情况下final的作用。首先来看第一种情况,如果final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,即它是个 常量;如果final修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,这里需要提醒大家注意的是,不可改变的只是这个变量所保存的引用,并不是 这个引用所指向的对象。在第二种情况下,final的含义与第一种情况相同。实际上对于前两种情况,有一种更贴切的表述final的含义的描述,那就是, 如果一个变量或方法参数被final修饰,就表示它只能被赋值一次,但是JAVA虚拟机为变量设定的默认值不记作一次赋值。 被final修饰的变量必须被初始化。初始化的方式有以下几种: 在定义的时候初始化。 final变量可以在初始化块中初始化,不可以在静态初始化块中初始化。 静态final变量可以在静态初始化块中初始化,不可以在初始化块中初始化。 final变量还可以在类的构造器中初始化,但是静态final变量不可以。 通过下面的代码可以验证以上的观点: Java代码 public class FinalTest { // 在定义时初始化 public final int A = 10; public final int B; // 在初始化块中初始化 { B = 20; } // 非静态final变量不能在静态初始化块中初始化 // public final int C; // static { // C = 30; ......

阅读全文(1375) | 评论:0

单态之饿汉,懒汉(2011-03-11 11:03:00)

摘要: 饿汉式:   public class Singleton{   private static Singleton singleton = new Singleton ();   private Singleton (){}   public Singleton getInstance(){return singletion;}   }    懒汉式:   public class Singleton{   private static Singleton singleton = null;    private Singleton (){}   public static synchronized synchronized getInstance(){   if(singleton==null){   singleton = new Singleton();   }   return singleton;   }   }  比较:   饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变   懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的  从实现方式来讲他们最大的区别就是懒汉式是延时加载, 他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建, 使用的场合根据具体环境和个人习惯吧.   饿汉式单例类在自己被加载时就将自己实例化。即便加载器是静态的,在饿汉式单例 类被加载时仍会将自己实例化。单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。 从速度和反应时间角度来讲,则比懒汉式单例类稍好些。然而,懒汉式单例类在实例化时, 必须处理好在多个线程同时首次引用此类时的访问限制问题,特别是当单例类作为资源控 制器,在实例化时必然涉及资源初始化,而资源初始化很有可能耗费时间。这意味着出现 多线程同时首次引用此类的机率变得较大。     饿汉式单例类可......

阅读全文(1562) | 评论:0

Java 多线程入门大全(适用于有一定基础者)(2011-03-10 20:32:00)

摘要:先从线程的创建说起.线程的创建一共有两种形式: --------------------------------------------------------------------------------     一种是继承自Thread类.Thread 类是一个具体的类,即不是抽象类,该类封装了线程的行为.要创建一个线程,程序员必须创建一个从 Thread 类导出的新类.程序员通过覆盖 Thread 的 run() 函数来完成有用的工作.用户并不直接调用此函数;而是通过调用 Thread 的 start() 函数,该函数再调用 run().          例如:      public class Test extends Thread{       public Test(){       }       public static void main(String args[]){         Test t1 = new Test();         Test t2 = new Test();         t1.start();        ......

阅读全文(1805) | 评论:0

SQL各个子句: outer join,on,where,group by,ha(2011-03-09 16:45:00)

摘要:where与having 1.作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组(group)。 eg:SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather); 2.WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。 因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。 (严格说来,你可以写不使用聚集的 HAVING 子句, 但这样做只是白费劲。同样的条件可以更有效地用于 WHERE 阶段。) 在前面的例子里,我们可以在 WHERE 里应用城市名称限制,因为它不需要聚集。 这样比在 HAVING 里增加限制更加高效,因为我们避免了为那些未通过 WHERE 检查的行进行分组和聚集计算。 以下示例使用的数据库是MySQL 5。 数据表:student 表结构: Field Name DataType Len id                int           20 name           varchar    25 major           varchar    25 score           int           20......

阅读全文(2581) | 评论:0

union,union all,join(2011-03-09 16:38:00)

摘要:今天学习了联合和链接。联合有union和union all两种,前者是过滤表中的重复数据后显示;而后者是显示全部数据。链接是将多个表的各个字段连接在一起,关键字是join,其原理是:1、两个表的字 段进行相加(相当于横加);2、根据条件对两个表的记录进行匹配;3、没有条件则第一个表的每一条记录和第二个表的每一行记录进行连接,也叫做交叉连接, 产生的乘积叫做“笛卡尔乘积”。连接类型又分交叉链接cross join、内链接(对等链接)join、左外链接left join、右外链接right join和全链接 full join(效率低)。内链接缺点是不能显示不匹配的数据;左外链接是用join左边的表去链接另外一个表;右外链接是用join右边的表去链接另外一个 表;全链接是显示相链接的表的全部数据。联合和链接的区别是:联合相当于竖加,链接相当于横加。......

阅读全文(2117) | 评论:0

设计模式之Singleton(单态)(2011-03-08 10:27:00)

摘要:设计模式之Singleton(单态) 板桥里人 http://www.jdon.com 2002/05/07 定义: Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。 还有, singleton能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。 另外方面,Singleton也能够被无状态化。提供工具性质的功能, Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。 我们常常看到工厂模式中类装入器(class loader)中也用Singleton模式实现的,因为被装入的类实际也属于资源。 如何使用? 一般Singleton模式通常有几种形式: public class Singleton {   private Singleton(){}   //在自己内部定义自己一个实例,是不是很奇怪?   //注意这是private 只供内部调用   private static Singleton instance = new Singleton();   //这里提供了一个供外部访问本class的静态方法,可以直接访问     public static Singleton getInstance() {     return instance;       } }   第二种形式: public class Singleton {   private static Singleton instance = null;   public static synchronized Singleton getInstance() {   //这个方法比上面有所改进,不用每次都进行生成对......

阅读全文(1340) | 评论:1

深搜之简单排序(2011-03-07 17:30:00)

摘要:哈哈。一同事说面试题。让我做做。10分钟以内。结果。写完程序+调试花了20分钟。 哎。看来自己老了。其实拿到题目想都没多想就编了。只是现在编码速度太低了。 //用1、2、2、3、4、5这六个数字,打印出所有不同的排列,如:512234、412345等, //要求:"4"不能在第三位,"3"与"5"不能相连,写一个个小程序 import java.util.Map; import javolution.util.FastMap; public class test1 {     public static Map<String , Integer> mymap = FastMap.newInstance();     public static int count = 0;     public static void main(String[] args) {        // 用1、2、2、3、4、5这六个数字,打印出所有不同的排列,如:512234、412345等,        //要求:"4"不能在第三位,"3"与"5"不能相连,写一个个小程序         int []a = {0,0,0,0,0,0,0,0};         StringBuffer b = new StringBuffer();         dfs(1, a, b);         System.out.println("OK");                  ......

阅读全文(1686) | 评论:2

SQL之纵表转横表问题(2011-03-04 10:25:00)

摘要:横表有这么四列,Id是主键, Id code1 code2 code3 111 aaa bbb ccc 纵表只有两列: ID code 111 aaa 111 bbb 111 ccc SQL模板1: select id,max(case when code='aaa' then code end) as code1,  max(case when code='bbb' then code end) as code2,  max(case when code='ccc' then code end) as code3  from tt group by id SQL模板2:  select id,max(case code when  'aaa' then code else null end) as code1,  max(case code when 'bbb' then code else null end) as code2,  max(case code when  'ccc' then code   else null end) as code3  from tt group by id......

阅读全文(2359) | 评论:0

深入DB2索引(2011-03-03 15:26:00)

摘要:1、DB2索引简介      索引优点:   (1) 创建索引可提高查询速度。 (2) 创建索引保证数据唯一性。      索引类型:   在介绍索引类型前介绍一下关于稠密度的概念. 稠密度定义:在数据分布均匀的情况下,稠密度=数据分布的可能数/数据总条数。例如:表1中有索引1在列1上,其中列1的数据分布有10中,分别是1-10,数据接近均匀分布,总数据量为1000,则该索引的稠密度=100/1000=10%,稠密度最高为1。稠密度越小,索引的选择性越大,查询性能越好。   (1)    非唯一索引   可以说大部分的索引的非唯一索引,这和数据的分布有关系,一般的数据都具有可重复性特性,所以他们不能被定义为唯一索引。非唯一索引可以使用命令: CREATE INDEX <IDX_NAME> ON <TAB_NAME> (<COLNAME>)来定义。 (2)    唯一索引   唯一索引用来保证数据的唯一性,唯一索引一般性能要高于非唯一索引,这与索引的稠密度有关。唯一索引的稠密度永远等于数据总条数的倒数。 (3)    纯索引   纯索引的概念是相对与一般索引。如下方式表中有俩个字段,其中字段1是唯一主键,字段2为数据,实际的查询中经常是select * from 表 where col1=? 这样的查询条件可以使用纯索引来避免表查询,具体创建命令为 CREATE UNIQUE INDEX <IDX_NAME> ON <TAB_NAME> (COL1_NAME) INCLUDE(COL2_NAME)。上述的语句的意思就是在col1上创建唯一索引,选择包含col2的数据,这些附加的数据将与键存储到一起,但是不作为索引的一部分,所以不被排序。纯索引访问是用来减少对数据页的访问,因为所需要的数据已经显示在索引中了。 (4)    群集索引   群集索引允许对 数据页采用更线性的访问模式,允许更有效的预取,并且避免排序。......

阅读全文(2408) | 评论:0

删除表中重复数据模板(2011-03-03 14:42:00)

摘要:delete  from AAA where (name ,valu) in(  select  name ,valu from AAA group by (name,valu) having count(*) > 1 ) and  id  not in (select min(id) from AAA group by  (name,valu)  having count(*)>1) ......

阅读全文(1571) | 评论:0