面试题总结3

来源:互联网 发布:php 数组的数组 编辑:程序博客网 时间:2024/06/11 15:21

1.  写 clone() 方法时, 通常 都有一行代码 ,是什么?

     Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。

    代码示例:public Object clone()   throws  CloneNotSupportedException{    //定义克隆方法
                       Programmer  p=(Programmer)super.clone();       //确定要复制的对象
                       return p;  
                       }

2. JAVA  语言 如何 进 行 异常处理 , 关键 字:throws,throw,try,catch,finally
   分 别 代 表 什么 意义 ?在 try  块 中可以 抛 出 异常吗 ?

     Try:执行部分,产生异常
     Catch:捕捉异常
     Finally:不管有没有异常都执行
    Throws:在方法声明处声明要抛出的异常,调用者必须对其进行处理。
    Throw:抛出一个异常
    在 try 中可以抛出异常,一般与声明的异常相同。
    自定义异常要继承于 Exception 或 Exception 的子类。

3. String and StringBuffer  的区别?

    String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合,速度慢。

    StringBuffer:长度可变,可以将多个字符串值直接联合,效率高。

4. 用 java  代码 编写 堆栈?

     public class Stack {
int[] data;
int maxSize;
int top;
public Stack(int maxSize) {
this.maxSize = maxSize;
data = new int[maxSize];
top = -1;
}
/**
* 依次加入数据
* @param data 要加入的数据
* @return 添加是否成功
*/
public boolean push(int data) {
if(top+1== maxSize) {
System.out.println("栈已满!");

return false;
}
this.data[++top] = data;
return true;
}
/**
* 从栈中取出数据
* @return 取出的数据
*/
public int pop() throws Exception{
if(top==-1) {
throw new Exception("栈已空!");
}
return this.data[top--];
}
public static void main(String[] args) throws Exception {
Stack stack=new Stack(1000);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
while(stack.top>=0)
{
System.out.println(stack.pop());
}
}
}

5. 集合 的作用是什么?

     数据的传送和 增、删、改、查、constainsAll,可以存放不同类型的对象。

6. 集合 的 通 用方法有 那些? 通 用方法是什么?( 操 作)

    集合 List 的遍历方法有:

    Iterator (迭代器)

    Enumeration(枚举) 

    for 循环

    Get   和set

    Collection 的通用方法有:

    Iterator()  Add()  Clear()   remove() 

7. 说出 出 ArrayList,Vector, LinkedList  的 存储性能 和特性 性 HashMap  和
Hashtable  的区别?

    ArrayList 和Vector  以数组的形式存储数据,增删慢,改查快

     LinkedList  以单链表的形式存储数据,增删快,改查慢

      Vector 是线程安全的,速度快(synchoronized)

    HashMap和HashTable都实现了Map接口,hashmap是线程不安全的,效率快;hashtable是线程安全的,效率较低。

8. Collection  和 Collections  的区别?

    Collection 是集合的根接口,其下有 set 及 list,但是map接口是单独分开的、

     Collections 是集合的算法。是utll包下面的一个类,里面包含很多静态的算法方法。

9.Set  里 的 元素 是不 能 重 复 的, 那 么用什么方法 来 区 分 重 复 与否 呢?  是用==
还是 是 equals()?  它们 有何区别?用 用 contains  来 区 分 是否有重 复 的 对 象 。 还 是都
不用?

    在比较时先调用 hashCode 方法,如果不相同,证明不相等。
    如果相同,再调用 equals 方法,如果 equals 方法相同,证明相等,不相同,证明不相等。
    ==:主要用在基本数据类型及引用
    Equals:主要是对象或对象引用的比较。
    集合中是否包含某一个元素用 contains 来判断。

10.面 向对 象 的特 征 有哪 些 方面?

    1.抽象:
     找共性,将共有的属性、方法放到父类中

     2.继承:
     子类继承于父类,具有父类的所有属性与方法,可以重用,也可以覆盖。

     3.封装:

      一个类包括多个属性及方法。

     4.多态性:动态:重写
         静态:重载

11. String  是 最 基本 的 数 据 类型吗?

    byte short int long char float  double boolean  八大基本数据类型

   String类不属于基本数据类型,被final修饰,不可以继承这个类,长度不可变,我们经常使用StringBuffer类

12.int  和 Integer的区别?

    Int 是基本数据类型,不是对象,占一个内存空间,没有方法。与其同类的有long    double    float

    Integer是封装类,具有方法与属性,与其同类的有Long   Double   Float

13. 运 行时 异常 与一 般 异常 有何 异同?

    运行时异常:java的虚拟机抛出的异常,代码中不用处理。

    一般异常:用户抛出的异常,如果用throws声明了,调用此方法的时候必须对其进行处理。

14.& 和&& 的区别?

     &:与: 左边若为 false 右边还执行。
     &&:短路与,左边若为 false 右边不执行

15.final, finally, finalize的区别?

    final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类
    不可继承。

    finally 是异常处理语句结构的一部分,表示总是执行。

    finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收
    对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文
    件等。

16.heap 和 和 stack  有什么区别?

    stack 栈 ,用途是存自动变量,临时变量,保护现场,CPU会有一个寄存器叫做SP,栈指针,CPU通用寄存器是有限的,不能将每个操作数都放在寄存器中,那暂时不用的就要放到栈内存,叫入栈,要用时在出栈,计算机经常会正在干一件事,忽然有了另一件事,那前一件事的数据就不能继续留在CPU中,做法就是入栈到内存保护现场,等另一件事昨晚了,在将原来数据返回CPU继续做。。。。自动变量只在函数内部使用,函数调用结束应该扔掉他们,栈就提供了这个好处,栈就是一个存储临时数据用的,这些数据可以是函数参数,函数返回值,自动变量,以及程序编译时,非汇编程序无法操控的临时数据。。。。

     heap  堆,就是预先申请的一片内存, 可能用到也可能用不到,他的生存期是取决于编程者的,你可以申请新的,也可以随时扔掉它,通常动态变量在这里申请内存,随意性很大,他们是否释放取决于人,而不是编译器,大多数数据也是在这里,栈通常很小,只要够线程最繁忙时使用,保证不溢出即可,windows默认是1M ,堆则通常很大,编程者使用到的主要数据都是在这里。。。。

    附加解释:栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。
    堆是栈的一个组成元素

17.Static Nested Class  和 Inner Class  的不同?

    Static Nested Class 是被声明为静态(static)的内部类,它可以不依赖于外
    部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

18. 什么时候用 assert ?

    assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支
持这种机制。在实现中,assertion 就是在程序中的一条语句,它对一个 boolean
表达式进行检查,一个正确程序必须保证这个 boolean 表达式的值为 true;如
果该值为 false,说明程序已经处于不正确的状态下,系统将给出警告或退出。
一般来说,assertion 用于保证程序最基本、关键的正确性。assertion 检查通
常在开发和测试时开启。为了提高性能,在软件发布后,assertion 检查通常是
关闭的。

19. GC  是什么?  为 什么 要有 有 GC?

    GC 是垃圾收集的意思(Gabage Collection)。

    内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java
    提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放已分配内存的显示操作方法

20.short s1 = 1; s1 = s1 + 1; 有什么 错? short s1 = 1; s1 += 1; 有什么 错?
    short s1 = 1; s1 = s1 + 1; (s1+1 运算结果是 int 型,需要强制转换类型)

    short s1 = 1; s1 += 1;(可以正确编译)属于隐式类型转换;相当于默认加上了转义字符。

 

   

 

 

 

 

 

 

   

 

0 0