1.String类为什么是final的。
1 | 主要是为了“效率” 和 “安全性” 的缘故。若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final。 |
2.HashMap的源码,实现原理,底层结构
1 | 总的来说,HashMap就是数组+链表的组合实现,每个数组元素存储一个链表的头结点,本质上来说是哈希表“拉链法”的实现。 |
3.说说你知道的几个Java集合类:list、set、queue、map实现类
1 | List:ArrayList、LinkedList |
4.描述一下ArrayList和LinkedList各自实现和区别
1 | ArrayList:基于数组实现,由于是List,所以是有序,可以重复,可以为null,查询效率高,增删效率低 |
5.Java中的队列都有哪些,有什么区别。
1 | 普通队列、阻塞队列、非阻塞队列 |
6.反射中,Class.forName和classloader的区别
1 | 共同点 |
7.Java7、Java8的新特性
1 | 1.可以用字符串控制Switch语句2.lambda表达式3.用|表示多个异常4.可以为接口添加静态方法和默认实现 |
8.Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高
1 | 数组在随机访问数据、随机增加数据、随机删除数据的执行效率上比链表的效率高,数据量越小,两者之间效率的差距越小,数据量越大差距越大 |
9.Java内存泄露的问题调查定位:jmap,jstack的使用等等
1 |
10.string、stringbuilder、stringbuffer区别
1 | String:不可变,每次修改都生成新对象,线程安全, |
11.HashTable和HashMap的区别
1 | HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。 |
12.异常的结构,运行时异常和非运行时异常,各举个例子
1 | 运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。 |
13.String a= “abc” String b = “abc” String c = new String(“abc”) String d = “ab” + “c” .他们之间用 == 比较的结果
1 | String a = "abc"; // |
14.String 类的常用方法
1 | length charAt compareTo concat indexOf toLowerCase toUpperCase trim split |
15.Java 的引用类型有哪几种
1 | 强引用:Java中默认声明的就是强引用,比如Object obj = new Object() |
16.Java的基础类型和字节大小。
基本类型 | 字节大小 |
---|---|
byte | 1 |
short | 2 |
int | 4 |
long | 8 |
float | 4 |
double | 8 |
char | 2 |
boolean |
17.Hashtable,HashMap,ConcurrentHashMap 底层实现原理与线程安全问题(建议熟悉 jdk 源码,才能从容应答)
18.如果不让你用Java Jdk提供的工具,你自己实现一个Map,你怎么做。
19. Hash冲突怎么办?哪些解决散列冲突的方法?
20.HashMap冲突很厉害,最差性能,你会怎么解决?从O(n)提升到log(n)咯,用二叉排序树的思路说了一通
21.rehash
22.hashCode() 与 equals() 生成算法、方法怎么重写
#####