JAVA
1.GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
2.XML包括哪些解释技术,区别是什么?
DOM和SAX
DOM将文档解析成一颗文档树,可在节点上进行遍历、增加、修改和删除。一次性读入内存,对内存消耗大。
SAX至上而下解析文档,以事件进行驱动。不会一次性读入内存,对内存消耗小,不能任意读取节点,并且不能对节点进行增加、修改和删除。
3.switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
switch能作用在byte、char、short和int上,JDK1.7后可以作用在String上。
4."=="和equals方法究竟有什么区别?
==和equals都可以比较地址。==是运算符,equals是方法,方法可以通过重写改变其行为,如String的equals就是比较字符串内容。
5.构造方法能否被重写和重载?
构造方法不能被重写但是能被重载。
6.面向对象的特征有哪些?
封装、继承、多态和抽象。
7.抽象类和接口的区别?
1).抽象类是abstract class修饰,接口是inte易做图ce修饰。
2).抽象类可以有任意类型的属性,接口只能有静态常量修饰的属性。
3).抽象类可以有普通方法和抽象法方法,接口的方法都是抽象方法。
4).抽象类和接口都不能实例化,但是抽象类有构造方法,接口没有构造方法。
5).抽象类只能单根继承,接口可以多重实现。
8.内部类可以引用它的包含类的成员吗?有没有什么限制?
可以引用。如果需要指定当前类时要用外部类.this来引用。如果引用局部变量,需要将局部变量指定为final。
9.String s = new String("xyz");创建了几个String Object? 二者之间有什么区别?
2个对象。"xyz"创建在字符串常量池中,new String()创建在堆中。
10.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会在return前执行。
11.Integer与int的区别
Integer为包装类,int是基本数据类型。包装类拥有方法和属性,基本数据类型不具备。包装类可以通过intValue来转换成基本数据类型,也可以通过new Integer()将基本数据类型转换为包装类。在JDK1.5后,包装类和基本数据类型可以实现自动转换。
12.sleep()和wait()有什么区别?
sleep是Thread类的方法,wait是Object类的方法。
sleep是自动唤醒,wait需要其他线程来唤醒。
sleep不会释放同步锁,wait会释放同步锁。
sleep可以用在任意方法中,wait只能用在同步方法或同步块中。
13.Sleep() 不会释放对象锁 到时自动恢复 wait()会释放对象锁 进入等待此对象的等待锁定池 发出notify()方法后 才进入等待锁定池准备对象锁的获取进入运行状态
14.同步和异步有何异同,在什么情况下分别使用他们?
同步指同一时间只能一个线程执行该方法,其他线程需要等待。异步指多个线程可以同时执行某个方法,并共享同一资源。
同步可以让访问的资源具有安全性,因为同一时间只能一个线程对其进行访问。但是效率不高。
异步对访问的资源会造成不稳定性,比如多个线程同时访问一个资源,一个在修改、一个在删除、一个在读取,这样可能会造成资源的混乱。但是由于同时运行,执行效率得到提高。
15.启动一个线程是用run()还是start()?
start()方法启动线程,run方法是线程执行的主方法。
16.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
java中有三种流,分别是字节流(InputStream、OutputStream)、字符流(Reader、Writer)、对象流(ObjectInputStream、ObjectOutputStream)。
17.字节流与字符流的区别?
字节流用于读取或写出二进制数据,比如图片、影像等数据。
字符流用于读取或写出字符数据,比如传输字符串。
所有的数据都可以通过字节流来进行处理,不过如果是字符数据,用字节流还需要进行转换后传输,如果使用字符流可以方便数据的转换。
18.error和exception有什么区别?
error是系统错误,代码不能处理的错误,比如内存溢出、堆栈溢出等。
exception是程序异常,可以通过代码try-catch进行处理,比如空指针异常,数组越界等。
19.谈谈final,finally,finalize的区别?
final是修饰符,可以修饰类(不能被继承)、属性(常量)、和方法(不能被重写)。
finally是异常处理块中的代码块,表示无论如何都会执行的代码块。
finalize是Object类的方法,该方法在对象被垃圾回收之前执行的方法。
20.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
如果其他方法没有加synchronized的话是可以进入的。
21.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
java中只有值传递,如果传递的对象,实际也是传递该对象的地址。
22.作用域public,private,protected,以及不写时的区别
public公共修饰符,表示任意类都可以访问。
protected为受保护的修饰符,表示同类、同包以及不同包但是父子关系的是可以访问。
不写表示默认修饰符,或者称为package修饰符,该修饰符表示只有同类或同包下的类可以访问,出了这个包就不能访问了。
private为私有修饰符,表示只有同类中可以访问,出了这个类就不能访问了。
23.用最有效率的方法算出2乘以8等於几 2《 3
将2的二进制向左移3位。java中用<<来移位。
24.heap和stack有什么区别。
heap表示堆,stack表示栈。堆中放对象,栈中放引用变量。
堆空间是一个无序的空间,栈是先进后出的结构。
25.运行时异常与一般异常有何异
运行时异常是指继承于RuntimeException的异常,这些异常在编译时可以不进行处理,当运行时如果出现问题才会抛出。如NullPointException、ArrayIndexOutOfBoundsException
一般异常也称为编译时异常,这些异常是继承Exception但又不属于RuntimeException的子类,如果程序中出现这些异常,在编译时必须进行捕获或抛出,否则编译无法通过。如IOException、FileNotFoundException
26.垃圾回收的优点和原理。并考虑2种回收机制
Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
27.描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
28.是否可以从一个static方法内部发出对非static方法的调用?
不能,除非先创建非static方法所在类的对象。
29.什么是java序列化,如何实现java序列化?
30.使用serializable关键字 使用一个输出流构造一个对象流流对象 然后使用对象流对象的writeObject()就可以将参数为obj的对象写出
31.Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)inte易做图ce(接口)?
匿名内部类可以继承类或实现接口,但不是显示的使用extends或implements来继承或实现。
32.ArrayList和Vector的区别,HashMap和Hashtable的区别?
ArrayList是JDK1.2的集合类并且线程不安全,Vector是1.0的集合类并且线程安全,二者用法类似。
HashMap线程不安全且能放空键或空值,Hashtable线程安全且不能放空键或空值。
33.String 和StringBuffer有什么差别?在什么情况下使用它们?