值传递与引用传递的区别?
1、值传递方法调用时,实际参数把它的值传递给对应的形式参数;
2、引用传递方法调用时,实际参数是对象或数组,这时实际参数与形式参数指向同一个地址。
重载和重写的区别
重写:Override 子类重写父类;且访问权限高于父类
重载:Overload 同一个方法名称;不同的参数
ArrayList和LinkedList的区别?分别用在什么场景
数组和链表的区别
数组:读取快、写入、删除慢
链表:写入、删除快;读取慢
Hashmap的结构,1.7和1.8有哪些区别
JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法:能够避免出现逆序且链表死循环的问题
JDK1.7的时候使用的是数组+ 单链表的数据结构。但是在JDK1.8及之后时,使用的是数组+链表+红黑树的数据结构(当链表的深度达到8的时候,也就是默认阈值,就会自动扩容把链表转成红黑树的数据结构来把时间复杂度从O(n)变成O(logN)提高了效率)
在JDK1.7的时候是先扩容后插入的,这样就会导致无论这一次插入是不是发生hash冲突都需要进行扩容,如果这次插入的并没有发生Hash冲突的话,那么就会造成一次无效扩容,但是在1.8的时候是先插入再扩容的,优点其实是因为为了减少这一次无效的扩容
HashMap的容量,默认是16
HashMap的加载因子,默认是0.75
当HashMap中元素数超过容量*加载因子时,HashMap会进行扩容。
JAVA异常
参考:
Hashmap实现原理及扩容机制详解
美团面试题:Hashmap的结构,1.7和1.8有哪些区别,史上最深入的分析
Java异常的分类和类结构图