Java面试经典试题及答案.doc
一 基础篇1. 谈谈final, finally, finalize的区别final是一个修饰符,修饰类的时候表示类不可继承, 所以一个类不可能既是 abstract 又是 final 的; 修饰变量的时候表示这个变量不可被更改并且必须赋初始值; 修饰方法的时候表示方式不可被重写。finally 通常和 try-catch 一起, 在finally 里代码无论是否发生异常都会执行到finalize 是一个方法名。方式是定义在Object 类中,在对象从内存中释放之前会调用此方法进行一些必要的清理工作。2. Annoy Inner Class (匿名类) 是否可以extends (继承)其他类,是否可以implements (实现) interface接口?Annoy Inner Class 由于没有类名所以不可以extends其他类;可以实现interface3. Static Nested Class 和 Inner Class的不同Static Nested Class 不需要外部类的实例来创建内部类的实例;内部类不能访问外部类的非静态方法;它能具有静态的数据,属性,和匿名内部类。4. & 和 && 的不同&表示位运算符;&&表示逻辑运算符;5. HashMap 和 Hashtable 的区别HashMap 允许一个null或者多个null 作为key, 而 Hashtable 不行Hashtable 是线程同步的, 而HashMap不是的HashTable的原理:通过节点的关键码确定对象的存储位置。给定节点的关键码k,通过一定的散列函数H(k),得到散列值,这个值就是节点的存储地址6. Colleciton 和 Collections 的区别Collection 在java.util下面,是所有集合类的父接口Collections 也在java.util下面,他封装了集合类的一些操作7. 什么时候用 assert?assert 是一条包含布尔表达式的语句,程序运行到当前语句的时候假定布尔返回值是true,如果是false则会抛出异常。断言在默认情况下是禁用的,在编译时启用断言用 -source 1.4 标记,在运行时启用可以用 -ea 来标记,在运行时禁用用 -dsa 来标记。8. GC是什么?为什么要用GC?GC是垃圾回收机制,使用GC程序员就不用关心程序的内存管理。使用System.gc()和Runtime.getRuntime().gc();能增加GC启动的优先级,但是不保证一定执行。9. String s = new String("xyz"); 创建了几个String Object.2个10. Math.round(11.5)等于多少?Math.round(-11.5)等于多少?12;-11; round 表示4舍5入11. short s1 = 1; s1 = s1 + 1; 有什么错? short s1 = 1; s1 += 1;有什么错?s1 = s1 + 1; 有错,因为 1 是int 型,所以s1 + 1 后的类型是int,int 隐形转化为short类型s1 += 1;没有问题12. sleep() 和 wait() 有什么区别?sleep() 表示让当前运行的线程暂停一段时间,在时间满了后,这个线程被并不一定会被立即执行,除非这个线程的优先级比当前线程的优先级高,或者当前线程执行完毕,或者当前线程阻塞住了wait()如果线程对一个同步对象发出wait请求后,该线程会暂停执行,进入等待状态直到被唤醒或者等待时间到。13. Java 有没有 goto ?有但是没有用14. 数组有没有length()方法?String 有没有 length()方法?数组没有length()方法,但是数组有length属性String 有 length() 方法15. overload和override 的区别。overload 和 override 都是 Java 多态的一种表现, overload是同一个类中的多态性的表现,override 是子类和父类多态的一种表现overload 表示重载,一个类中同样一个方法名可以有不同的参数override 表示重写,子类中可以重新实现父类的方法overload 的返回值不可变16. Set 里的元素是不能重复的,用什么方法来区分重复与否呢?用 = = 还是 equals()? 他们有和区别?用 equals 方法,= = 方法是比较对象的引用地址,equal默认是比较引用,但是可以被重写是逻辑相等,一般重写equal也要修改相应的hashCode方法17. 给我你最常见的一个 runtime exceptionNullpointException, IllegalArgumentException, ArrayIndexOutofBoundsException18. Object 对象中的方法toString()/hashCode()/equals()/notify()/notifyAll()/getClass()/wait()19. error 和 exception 有什么区别?error表示一种不是不可能但是很难恢复的一种错误,比如内存溢出;exception表示正常流程的情况下不会出现的错误20. List, Set, Map 是否继承自Collection接口?List 和 Map 是, Map 不是21. abstract class 和 interface 有什么区别?我从两个角度看他们之间的区别:1,多态性:抽象类是通过集成的方式体现多态性的,这就意味着子类只能集成一个父类,并且子类和父类之间的关系式is-a的关系,而接口是通过实现的方式体现,这意味着实现类可以实现过个接口,实现类和接口的关系仅仅是实现了接口规定的方法而已。2,分析设计的角度:抽象类往往是我们对领域问题分析得出的抽象概念,而接口给一系列对象提供标准的行为22. abstract method 是否同时是 static, 是否同时是native, 是否同时 synchronized?都不是23. 接口是否可以继承接口? 抽象类是否可实现接口? 抽象类是否继承实体类(concrete class)?接口可以继承接口,抽象类可以实现接口,抽象类可以继承实体类24. 启动一个线程使用run() 还是 start() ?启动线程是用start()方法25. 构造器 Constructor 是否可以被 override?构造器不可以被override26. 是否可以继承 String 类?不可以27. 当一个线程进入一个对象的synchronized 方法后, 其他线程是否可以进入此对象的其他方法?当线程进入一个对象的synchronize方法后,其他线程可以访问这个对象的非synchronized方法,但是不可以访问synchronized 方法。28. try 里有一个 return 语句, 那么紧跟在 try 后 finally 里 code 会不会被执行, 什么时候被执行, 是在 return 前还是后?会被执行,在return 前29. 用最有效率的方法算出 2 乘以 8 等于几?2 >>> 330. 两个对象值相同(x.equals(y) = = true), 但却有不同的 hashCode, 这句话对不对?不对,equal方法必须和hashCode方法保持一致,如果实现者没有做到这一点,编译器也不会报错,但这是一个严重的隐患31. 当以对象被当做参数传递一个方法后, 此方法可改变这个对象的属性, 并可返回变化的结果, 那么这里到底是值传递还是引用传递?32. switch 是否能用在 byte 上面, 是否能作用在long上, 是否能作用在String上?Switch能用在 int short char byte四个类型上,long 和 String 都不对33. 如果A引用了B,B引用了A,这种情况JVM如何经行垃圾回收?首先这种情况用count reference 方法是回收不了的,采用跟踪法可以回收,即从GC roots开始遍历对象形成一个引用链,如果不在这个链中即垃圾。GC roots包含以下对象:栈里的临时变量;静态变量;JNI引用到的变量34. 解释下列名词JNDI:提供一个目录系统,让其他各地的应用程序能在上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能JMS:主要实现各个应用程序之间的通讯,包括点对点和广播JTA:提供各种分布式事务服务。应用程序只需调用其提供的接口即可JAF:Java安全认证框架。提供一些安全控制方面的框架。让开发者通过部署和自定义自己的个性安全控制策略RMI:远程调用方法35. XML解析方法理论上有两种方法:一种是将整个xml文件读入内存建立一棵内容树,对这棵树的操作可以读出或者修改内容,代表为DOM;另一种是基于事件的模型,他它在解析xml文档的时候可以出发一系列的事件,当发现给定的tag的时候,他可以激活一个回调方法,改方法告诉指定的标签已经找到,代表为SAX。36. 什么是Web Service?Web Service就是为了是原来孤立的站点之间的信息能够相互通讯、共享而提出的一种接口37. 多线程有几种实现方法?都是什么?同步有几种实现方法?多线程有两种实现方法:分别是实现Thread类和Runnable接口同步有两种实现方法:分别是synchronized, wait 和 notify二 Web篇38. 什么是web容器是实现J2EE中web协议的应用,该协议定义了web程序运行时的环境,包括:并发性、安全性、生命周期管理等39.40. forward 和 redirect 的区别forward 是服务器内部跳转,他比丢失request里的信息;redirect 是重新发出请求,他会丢失上次request里的信息41. EJB是哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。EJB包括SessionBean, EntityBean, Message Driven Bean, 基于JNDI, RMI, JAT等技术实现SessionBean在J2EE中被用来完成一些服务器端的操作,例如访问数据库、调用其他EJB组件。 EntityBean 被用来表示在应用系统中使用到的数据。对于客户机, SesssionBean是一种非持久的对象,它实现某些在服务器上运行的业务逻辑42. JSP中的动态INCLUDE和静态INCLUDE的区别?动态INCLUDE用jsp:include实现,适合包含动态页面,并且可以带参数静态INCLUDE用include伪代码实现,不会检查文件的变化,适合包含静态页面三 编程篇43. 编程写一个Singleton来方式一:public class Singleton private Singleton() private Singleton instance = new Singleton();public static Singleton getInstance() Return instance;方式二:public class Singleton private Singleton() private Singleton instance;public static synchronized Singleton getInstance() if (instance = null) instance = new Singleton();return instance;44. 打印昨天的当期的当前时刻public class Test public static main (String args) Calendar c = Calendar.getInstance();c.add(Calendar.DATE, -1);System.out.println(c.getTime();45. 指出下面程序的运行结果class A static System.out.println("1");public A() System.out.println("a");class B extends A static System.out.println("2");public B() System.out.println("b");public class StaticBlock public static void main(String args) B b = new B();System.out.println();new B();输出结果是:12ab ab四 数据库1, 删除表中重复的记录select distinct * into #tmp from t_table;delete from t_table;insert into t_table select * from #tmp;drop table #tmp;2,delte from tablea 与truncate table tablea的区别truncate 语句之心速度快,占资源少,并且只记录删除的日志delete 对每条记录的删除都要记录日志