1. String类为什么是final的。
安全性:如果字符串是可变的,那么会引起很严重的安全问题。譬如,数据库的用户名、密码都是以字符串的形式传入来获得数据库的连接,或者在socket编程中,主机名和端口都
是以字符串的形式传入。
主要作用在于:因为对象不可变,因此对于所有线程都是只读的,多线程访问时,即使不加同步也不会产生数据的不一致,故减少了系统开销
2. HashMap的源码,实现原理,底层结构。
喜欢读源码的尽管去读(哈哈):http://www.cnblogs.com/hzmark/archive/2012/12/24/HashMap.html
3. 说说你知道的几个Java集合类:list、set、queue、map实现类
4. 描述一下ArrayList和LinkedList各自实现和区别
5. Java中的队列都有哪些,有什么区别。
6. 反射中,Class.forName和Classloader的区别
Class.forName(className)装载的class已经被初始化,
而ClassLoader.loadClass(className)装载的class还没有被link。
7. Java7、Java8
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 的引用类型有哪几种
强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它,如:Person p = new Person();
软引用: 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。
软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。
弱引用: 弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存
虚引用:
17. 抽象类和接口的区别
18. java的基本数据类型和字节大小。
8种:六种数字类型(四个整型,两个浮点型),一种字符类型,还有一种布尔型
byte 1个字节 -128到127
short 2个字节 -32,768到32,767
int 4个字节 -2,147,483,648到2,147,483,647
long 8个字节 -9,223,372,036,854,775,808L到9,223,372,036,854,775,807L
float 4个字节 约+-3.40282347E+38F(6~7个有效的十进制数位) 绝对值:1.4E-45~3.4E38
double 8个字节 约+-1.79769313486231570E+308(15个有效数位) 绝对值:4.9E-324~1.8E308
char 1个字节
boolean 1个字节
低级向高级是隐式类型转换,高级向低级必须强制类型转换,byte<char<short<int<long<float<double
注意:java中如果碰到char、byte和short参与运算时,会自动将这些值转换为int类型然后再进行运算。
19. Hashtable,HashMap,ConcurrentHashMap 底层实现原理与线程安全问题(建议熟悉 jdk 源码,才能从容应答)
20. 如果不让你用Java Jdk提供的工具,你自己实现一个Map,你怎么做。说了好久,说了HashMap源代码,如果我做,就会借鉴HashMap的原理,说了一通HashMap实现
21. Hash冲突怎么办?哪些解决散列冲突的方法?
22. HashMap冲突很厉害,最差性能,你会怎么解决?从O(n)提升到log(n)咯,用二叉排序树的思路说了一通
23. rehash
24. hashCode() 与 equals() 生成算法、方法怎么重写
http://bijian1013.iteye.com/blog/1972404
原理:http://www.cnblogs.com/dolphin0520/p/3681042.html
hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable。
原理:
当集合要添加新的对象时,先调用这个对象的hashCode方法,得到对应的hashcode值,实际上在HashMap的具体实现中会用一个table保存已经存进去的对象的hashcode
值,
如果table中没有该hashcode值,它就可以直接存进去,不用再进行任何比较了;
如果存在该hashcode值, 就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址
hashCode有些JVM在实现时是直接返回对象的存储地址,但是大多时候并不是这样,只能说可能存储地址有一定关联
注意:在重写equals方法的同时,必须重写hashCode方法。
25、java各种工具的介绍
为了避免引用值发生改变,例如被外部类的方法修改等,而导致内部类得到的值不一致,于是用final来让该引用不可改变。
故如果定义了一个匿名内部类,并且希望它使用一个其外部定义的参数,那么编译器会要求该参数引用是final的。
1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
2、匿名内部类中是不能定义构造函数的。
3、匿名内部类中不能存在任何的静态成员变量和静态方法。
4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
28、Java 基类Object,equals和hashcode,什么时候重写?
29、 Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况。
30、