1,深拷贝,浅拷贝

2,this,super不可被赋值为null

3,java调用,传值而不是引用,如果是复杂类型,就是内存地址值

4,Java不支持多继承。每个类都只能继承一个类,但是可以实现多个接口。

5,有三种方式可以用来创建线程: 继承Thread类 实现Runnable接口(Callable) 应用程序可以使用Executor框架来创建线程

6,同步方法和同步代码块的区别是什么? 在Java语言中,每一个对象有一把锁。线程可以使用synchronized关键字来获取对象上的锁。synchronized关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)。

7,synchronized与lock的关系? 主要相同点:Lock能完成synchronized所实现的所有功能 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

8,集合的遍历 (如何安全删除)

9,hashCode()和equals() (hashmap)

10,Comparable和Comparator接口是干什么的?列出它们的区别。 Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。 Java 提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正 数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当 输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。

11.如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存? 不会,在下一个垃圾回收周期中,这个对象将是可被回收的。

12,JVM的永久代中会发生垃圾回收么? 垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。请参考下Java8:从永久代到元数据区 (译者注:Java8中已经移除了永久代,新加了一个叫做元数据区的native内存区) 新生代(TLAB,Eden,Survior),老年代,永久代(方法区–>元数据区)

13,Java中的两种异常类型是什么?他们有什么区别? Java 中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者 是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者 是构造函数上声明。这里有Java异常处理的一些小建议。 (java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。)

14.什么是cookie?session和cookie有什么区别? cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。下面列出了session和cookie的区别: 无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。 在存储的数据量方面session和cookies也是不一样的。session能够存储任意的Java对象,cookie只能存储String类型的对象。

15.sendRedirect()和forward()方法有什么区别? sendRedirect() 方法会创建一个新的请求,而forward()方法只是把请求转发到一个新的目标上。重定向(redirect)以后,之前请求作用域范围以内的对象就失 效了,因为会产生一个新的请求,而转发(forwarding)以后,之前请求作用域范围以内的对象还是能访问的。一般认为sendRedirect() 比forward()要慢。

16,String 和StringBuffer,StringBuilder

17, HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

1,一个好的类应该覆写object类中的equals(),hashCode(),toString()三个方法,实际上在String()中已经覆写完成了。 2,Set接口依靠hashCode()和equals()完成重复元素的判断,关于这一点,在以后的Map接口中也有体现。 3,TreeSet依靠Comparable完成排序的操作。

18, 方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。

19,字节码,反射 如果在已有代码中增加调试输出? AOP,ASM,instrument

20,类加载器 classload,优先策略如何? 一个类加载器不会重复加载同一名称的类。

21,class初始化 静态域的初始化和静态代码块的执行会从上到 下依次执行