Java面试基础(一)

 

Java面试基础(一)

 

 

1、面向对象的特征有哪些方面:

A
:抽象

B
:继承

C
:封装

D
:多态

2
Java基本的数据类型:

    Java基本数据类型包括:byteshortintlongfloatdoublebooleanchar
    String不是基本的数据类型,是对象。
    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。

3
Java基本类型与引用类型的区别:

Java
提供两种不同的类型:引用类型和原始类型(或内置类型)。另外,Java 还为每个原始类型提供了封装类(Wrapper)。下面是java里面的原始类型和对应的封装类:
   A boolean-----Boolean 
   B char--------Character 
   C byte--------Byte 
   D short-------Short 
   E int---------Integer 
   F long--------Long 
   G float-------Float 
   H double------Double
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

4
String StringBuffer的区别:

JAVA
平台提供了两个类:StringStringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串可以修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffer来动态构造字符数据。


String
   s;每次对s进行赋值操作是都将生成一个新的String实例;
StingBuffer sb;sb
则不然,它始终是同一个实例;
所以在经常动态的改变字符串的值时用StingBuffer效率比较高,java生成一个实例的代价较大。

5
、说出ArrayList,Vector, LinkedList的存储性能和特性

1
ArrayListVector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢;
2
Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差;
3
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

6
Collection Collections的区别。

Collection
是集合类的上级接口,继承与他的接口主要有Set List.
Collections
是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

7
HashMapHashtable的区别。

1
.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像VectorArrayList一样。

2
.HashTable不允许null(keyvalue都不可以),HashMap允许null(keyvalue都可以)

3
.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。

4
.HashTable使用EnumerationHashMap使用Iterator

5
.HashTablehash数组默认大小是11,增加的方式是 old*2+1HashMaphash数组的默认大小是16,而且一定是2的指数。

6
.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
     int hash = key.hashCode();
     int index = (hash & 0x7FFFFFFF) % tab.length;

HashMap重新计算hash值,而且用与代替求模:

 1 int hash = hash(k); 
2 int i = indexFor(hash, table.length);
3 static int hash(Object x)
4 {
5   int h = x.hashCode();
6
7   h += ~(h << 9);
8   h ^= (h >>> 14);
9   h += (h << 4);
10   h ^= (h >>> 10);
11   return h;
12 }
13 static int indexFor(int h, int length)
14 {
15   return h & (length-1);
16 }


8final, finally, finalize的区别:

1
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
2
finally是异常处理语句结构的一部分,表示总是执行。
3
finalizeObject类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

9
String, StringBuffer StringBuilder 的区别。

1
String 的长度是不可变的;
2
StringBuffer 的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer toString()方法;线程安全;
3
StringBuilder是从JDK 5 开始,为StringBuffer 该类补充了一个单个线程使用的等价类;通常应该优先使用StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

10
OverloadOverride的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载OverloadingJava多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)Overloaded的方法是可以改变返回值的类型。

 

 

 

 

posted on 2011-10-11 16:47  缺心眼的公牛  阅读(738)  评论(0编辑  收藏  举报

导航