JAVA面试题总结(SE部分)

1.java

Person p = new Person();算法

建立一个对象都在内存中作了什么事情?编程

1先将硬盘上指定位置的Person.class文件加载进内存。数组

2执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),而后在main方法的栈区分配了一个变量p。安全

3在堆内存中开辟一个实体空间,分配了一个内存首地址值。服务器

4在该实体空间中进行属性的空间分配,并进行了默认初始化。网络

5对空间中的属性进行显示初始化。异步

6进行实体的构造代码块初始化。编程语言

7调用该实体对应的构造函数,进行构造函数初始化。()ide

8将首地址赋值给p ,p变量就引用了该实体。(指向了该对象)

 

2StringStringBuffer的区别。

答:String的长度是不可变的,StringBuffer的长度是可变的。若是你对字符串中的内容常常进行操做,特别是内容要修改时,那么使用StringBuffer,若是最后须要String,那么使用StringBuffertoString()方法

 

3. 运行时异常与通常异常有何异同? 

异常表示程序运行过程当中可能出现的非正常状态,运行时异常表示虚拟机的一般操做中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,可是并不要求必须声明抛出未被捕获的运行时异常 

4.Collection 和 Collections的区别 

Collection是集合类的上级接口,继承与他的接口主要有Set List. 

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各类集合的搜索排序线程安全化等操做 


5.HashMapHashtable的区别 

HashMapHashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap容许空(null)键值(key,因为非线程安全,效率上可能高于Hashtable 

HashMap容许将null做为一个entrykey或者value,而Hashtable不容许 

HashMapHashtablecontains方法去掉了,改为containsvaluecontainsKey由于contains方法容易让人引发误解 

Hashtable继承自Dictionary类,而HashMapJava1.2引进的Map interface的一个实现 

最大的不一样是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不须要本身为它的方法实现同步,而HashMap 就必须为之提供外同步 

HashtableHashMap采用的hash/rehash算法都大概同样,因此性能不会有很大的差别 

 

6final, finally, finalize的区别 

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

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

finalizeObject类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,能够覆盖此方法提供垃圾收集时的其余资源回收,例如关闭文件等 

 

7.sleep() 和 wait() 有什么区别

wait和sleep区别: 分析这两个方法:从执行权和锁上来分析:

wait:能够指定时间也能够不指定时间。不指定时间,只能由对应的notify或者notifyAll来唤醒。是Object的类的方法。

sleep:必须指定时间,时间到自动从冻结状态转成运行状态(临时阻塞状态)。是Thread的方法。

wait:线程会释放执行权,并且线程会释放锁。

Sleep:线程会释放执行权,但不是不释放锁。

 

8.OverloadOverride的区别Overloaded的方法是否能够改变返回值的类型

方法的重写Overriding和重载OverloadingJava多态性的不一样表现重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。若是在子类中定义某方法与其父类有相同的名称和参数,咱们说该方法被重写 (Overriding)子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。

若是在一个类中定义了多个同名的方法,它们或有不一样的参数个数或有不一样的参数类型,则称为方法的重载(Overloading)Overloaded的方法。是能够改变返回值的类型 

 

9.errorexception有什么区别

error 表示恢复不是不可能但很困难的状况下的一种严重问题好比说内存溢出,不可能期望程序能处理这样的状况 

exception 表示一种设计或实现问题也就是说,它表示若是程序运行正常,从不会发生的状况 

 

10.同步和异步有何异同,在什么状况下分别使用他们?举例说明 

若是数据将在线程间共享例如正在写的数据之后可能被另外一个线程读到,或者正在读的数据可能已经被另外一个线程写过了,那么这些数据就是共享数据,必须进行同步存取 

当应用程序在对象上调用了一个须要花费很长时间来执行的方法,而且不但愿让程序等待方法的返回时,就应该使用异步编程,在不少状况下采用异步途径每每更有效率

 

11.abstract classinterface有什么区别

抽象类: abstract

抽象:不具体,看不明白。抽象类表象体现。

在不断抽取过程当中,将共性内容中的方法声明抽取,可是方法不同,没有抽取,这时抽取到的方法,并不具体,须要被指定关键字abstract所标示,声明为抽象方法。

抽象方法所在类必定要标示为抽象类,也就是说该类须要被abstract关键字所修饰。 

抽象类的特色:

1:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰(能够描述类和方法,不能够描述变量)。

2:抽象方法只定义方法声明,并不定义方法实现。

3:抽象类不能够被建立对象(实例化)。

4:只有经过子类继承抽象类并覆盖了抽象类中的全部抽象方法后,该子类才能够实例化。不然,该子类仍是一个抽象类。

 

抽象类的细节:

1:抽象类中是否有构造函数?有,用于给子类对象进行初始化。

2:抽象类中是否能够定义非抽象方法?

能够。其实,抽象类和通常类没有太大的区别,都是在描述事物,只不过抽象类在描述事物时,有些功能不具体。因此抽象类和通常类在定义上,都是须要定义属性和行为的。只不过,比通常类多了一个抽象函数。并且比通常类少了一个建立对象的部分。

3:抽象关键字abstract和哪些不能够共存?final , private , static 

4:抽象类中可不能够不定义抽象方法?能够。抽象方法目的仅仅为了避免让该类建立对象。

接 口:★★★★★

1:是用关键字interface定义的。

2:接口中包含的成员,最多见的有全局常量、抽象方法。

注意:接口中的成员都有固定的修饰符。

成员变量:public static final 

成员方法:public abstract 

interface Inter{

public static final int x = 3;

public abstract void show();

}

3:接口中有抽象方法,说明接口不能够实例化接口的子类必须实现了接口中全部的抽象方法后,该子类才能够实例化。不然,该子类仍是一个抽象类。

4:类与类之间存在着继承关系,类与接口中间存在的是实现关系。

继承用extends  ;实现用implements ;

5:接口和类不同的地方,就是,接口能够被多实现,这就是多继承改良后的结果。java将多继承机制经过多实现来体现。 

6:一个类在继承另外一个类的同时,还能够实现多个接口。因此接口的出现避免了单继承的局限性。还能够将类进行功能的扩展。

7:其实java中是有多继承的。接口与接口之间存在着继承关系,接口能够多继承接口

 

接口都用于设计上,设计上的特色:(能够理解主板上提供的接口)

1:接口是对外提供的规则。

2:接口是功能的扩展。

3:接口的出现下降了耦合性。

抽象类和接口的共性:都是不断向上抽取的结果。

抽象类和接口的区别:

1:抽象类只能被继承,并且只能单继承。

接口须要被实现,并且能够多实现。 

2:抽象类中能够定义非抽象方法,子类能够直接继承使用。

接口中都有抽象方法,须要子类去实现。

3:抽象类使用的是  is a 关系。

接口使用的 like a 关系。 

4:抽象类的成员修饰符能够自定义。

接口中的成员修饰符是固定的。全都是public的。

12heapstack有什么区别 

栈是一种线形集合,其添加和删除元素的操做应在同一时间段完成栈按照后进先出的方式进行处理 

堆是栈的一个组成元素 

 

13GC是什么为何要有GC? 

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

 

14. 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;(能够正确编译) 

  

15.简述Java的异常处理机制。

答:Java采用“抛出-捕获”的方式,一旦一个异常现象产生了,Runtime环境和应用程序抛出各类标准类型和自定义的异常,系统就能够捕获这些异常,并必定有相应的机制来处理它,确保不会产生死机、死循环或其余对操做系统的损害,从而保证了整个程序运行的安全性。

16.试述throw语句与throws关键字之间的差异。

答:throw语句是在一个方法中用来直接抛出异常对象,其格式是:throw 异常对象;

throws用于一个方法声明的首部,用来指出这个方法中可能产生若干异常。


17.接口是否可继承接口抽象类是否可实现(implements)接口抽象类是否可继承实体类(concrete class)? 

接口能够继承接口抽象类能够实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数 

 

18.List, Set, Map是否继承自Collection接口

   ListSet是,Map不是 

 

19.说出数据链接池的工做机制是什么

J2EE 服务器启动时会创建必定数量的池链接,并一直维持很多于此数目的池链接。客户端程序须要链接时,池驱动程序会返回一个未使用的池链接并将其表记为忙,若是当前没有空闲链接,池驱动程序就新建必定数量的链接,新建链接的数量有配置参数决定,当使用的池链接调用完成后,池驱动程序将此链接表记为空闲,其余调用就可使用这个链接 。

 

20.数组有没有length()这个方法? String有没有length()这个方法? 

数组没有length()这个方法,有length的属性,Stringlength()这个方法 

 

21.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢是用==仍是equals()? 它们有何区别

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否,equals()是判读两个Set是否相等 

equals()==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值 

 

22.构造器Constructor是否可被override? 

构造器Constructor不能被继承,所以不能重写Overriding,但能够被重载Overloading 

 

23.Sting类是否能够被继承

   String类是final类故不能够继承 

 


 

24.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,何时被执行,在return前仍是后

会执行,在return前执行 

 

25.编程题用最有效率的方法算出2乘以8等於几

2 << 3 

 

26.两个对象值相同(x.equals(y) == true),但却可有不一样的hash code,这句话对不对

不对,有相同的hash code 

 

27.当一个对象被看成参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里究竟是值传递仍是引用传递

是值传递。Java 编程语言只有值传递参数。当一个对象实例做为一个参数被传递到方法中时,参数的值就是对该对象的引用,对象的内容能够在被调用的方法中改变,但对象的引用是永远不会改变的 

 

28.编程题写一个Singleton出来 

Singleton模式主要做用是保证在Java应用程序中,一个类Class只有一个实例存在 

通常Singleton模式一般有几种种形式

//饿汉式

class Single{

private Single(){} //私有化构造函数。

private static Single s = new Single(); //建立私有并静态的本类对象。

public static Single getInstance(){ //定义公有并静态的方法,返回该对象。

return s;

}

}

---------------------------------------------

//懒汉式:延迟加载方式。

class Single2{

private Single2(){}

private static Single2 s = null;

public static Single2 getInstance(){

if(s==null){

synchronized(Single2.Class){ 

if(s==null){

s = new Single2();

}  

       }

}

return s;

}

}

29.你所知道的集合类都有哪些?主要方法? 

最经常使用的集合类是 List 和 Map List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建存储和操做任何类型对象的元素列表 List 适用于按数值索引访问元素的情形 

Map 提供了一个更通用的元素存储方法 Map 集合类用于存储元素对(称做""""),其中每一个键映射到一个值 

 

30.描述一下JVM加载class文件的原理机制

JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件的类 

 

31.char型变量中能不能存贮一个中文汉字?为何

可以定义成为一个中文的,由于java中以unicode编码,一个char16个字节,因此放一个中文是没问题的 

 

32.同步代码块和同步函数的区别?

同步代码块使用的锁能够是任意对象。

同步函数使用的锁是this,静态同步函数的锁是该类的字节码文件对象

 

在一个类中只有一个同步,可使用同步函数。若是有多同步,必须使用同步代码块,来肯定不一样的锁。因此同步代码块相对灵活一些。

 

1,有些数据是对象特有的数据,是不能够被静态修饰的。由于那样的话,特有数据会变成对象的共享数据。这样对事物的描述就出了问题。因此,在定义静态时,必需要明确,这个数据是不是被对象所共享的。

2,静态方法只能访问静态成员,不能够访问非静态成员。

由于静态方法加载时,优先于对象存在,因此没有办法访问对象中的成员。

3,静态方法中不能使用this,super关键字。

由于this表明对象,而静态在时,有可能没有对象,因此this没法使用。

4,主函数是静态的。

 

 

成员变量和静态变量的区别:

1,成员变量所属于对象。因此也称为实例变量。

静态变量所属于类。因此也称为类变量。

2,成员变量存在于堆内存中。

静态变量存在于方法区中。

3,成员变量随着对象建立而存在。随着对象被回收而消失。

静态变量随着类的加载而存在。随着类的消失而消失。

4,成员变量只能被对象所调用 。

静态变量能够被对象调用,也能够被类名调用。

因此,成员变量能够称为对象的特有数据,静态变量称为对象的共享数据。

 

静态代码块、构造代码块、构造函数同时存在时的执行顺序:静态代码块 à 构造代码块 à 构造函数;

 

33.UDP 和 TCP 链接有和异同? 

答:TCP 协议是面向链接的,每一个数据包的传输过程是:先创建链路、数据传输、 

而后清除链路。数据包不包含目的地址。受端和发端不但顺序一致,并且内容相 

同。它的可靠性高;UDP 协议是面向无链接的,每一个数据包都有完整的源、目的 

地址及分组编号,各自在网络中独立传输,传输中无论其顺序,数据到达收端后 

再进行排序组装,遇有丢失、差错和失序等状况,经过请求重发来解决。它的效 

率比较高。

相关文章
相关标签/搜索