题目来自http://www.codeceo.com/article/201-java-interview-qa.html,答案自己网上找的,如有疏漏,欢迎斧正。一起学习,共同进步。
一.Java基础
1. String类为什么是final的。
2. HashMap的源码,实现原理,底层结构。
3. 说说你知道的几个Java集合类:list、set、queue、map实现类咯。
4. 描述一下ArrayList和LinkedList各自实现和区别。
5. Java中的队列都有哪些,有什么区别。
6. 反射中,Class.forName和classloader的区别。
7. Java7、Java8的新特性(baidu问的,好BT)。
8. Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高。
9. Java内存泄露的问题调查定位:jmap,jstack的使用等等。
10. string、stringbuilder、stringbuffer区别。
11. hashtable和hashmap的区别。
13.异常的结构,运行时异常和非运行时异常,各举个例子。
14.String a= “abc” String b = “abc” String c = new String(“abc”) String d = “ab” + “c” .他们之间用 == 比较的结果。
15. String 类的常用方法。
16. Java 的引用类型有哪几种。
17. 抽象类和接口的区别?
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。另外,接口和抽象类在方法上有区别:
(1) 抽象类可以有构造方法,接口中不能有构造方法。
(2) 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。Java 8里的接口可以有default方法。
(3) 抽象类中可以有普通成员变量,接口中没有普通成员变量。
(4) 抽象类中的抽象方法的访问类型可以是public,protected和默认类型。
(5) 抽象类中可以包含静态方法,接口中不能包含静态方法。
(6) 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
(7) 一个类可以实现多个接口,但只能继承一个抽象类。二者在应用方面也有一定的区别:接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码。
18. java的基础类型和字节大小。
Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。8 中类型表示范围如下:
byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
Java决定了每种简单类型的大小。这些大小并不随着机器结构的变化而变化。这种大小的不可更改正是Java程序具有很强移植能力的原因之一。下表列出了Java中定义的简单类型、占用二进制位数及对应的封装器类。
19. Hashtable,HashMap,ConcurrentHashMap底层实现原理与线程安全问题?
可参考的文章:Hashmap实现原理浅析:http://www.cnblogs.com/lzrabbit/p/3721067.html
ConcurrentHashMap原理分析:http://www.cnblogs.com/ITtangtang/p/3948786.html
20.如果不让你用Java Jdk提供的工具,你自己实现一个Map,你怎么做。说了好久,说了HashMap源代码,如果我做,就会借鉴HashMap的原理,说了一通HashMap实现。
21.Hash冲突怎么办?哪些解决散列冲突的方法?
22.HashMap冲突很厉害,最差性能,你会怎么解决? 从O(n)提升到log(n),用二叉排序树的思路说了一通。
23.rehash。
24.hashCode() 与 equals() 生成算法、方法怎么重写。
二.Java IO
1.讲讲IO里面的常见类,字节流、字符流、接口、实现类、方法阻塞。
2.讲讲NIO。
3.String 编码UTF-8 和GBK的区别?
4.什么时候使用字节流、什么时候使用字符流?
5.递归读取文件夹下的文件,代码怎么实现。
三.Java Web
1.session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。
2.servlet的一些相关问题。
3.webservice相关问题。
4.jdbc连接,forName方式的步骤,怎么声明使用一个事务。举例并具体代码。
参考文章:http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html
5.无框架下配置web.xml的主要配置内容。
6.jsp和servlet的区别。