JAVA面试总结基础篇(三)
文章目录
前言
到了大三的学期的暑假,即将面临找工作的考验。希望这份面试资料能够帮住大家学到自己的知识盲区。加油,我命由我不由天!!!
一、ArrayList 和 LinkedList 的区别有哪些?
ArraryList:
优点:ArraryList是实现了动态数组的数据结构,因为地址是连续的,所以查询的效率会比较高(在内存里是连着放的)。
缺点:因为地是连续放的,ArraryList需要移动,所以插入和删除的效率较低。
LinkList:
优点:LinkList是基于链表的数据结构,地址是随意的。所以在开辟空间上不需要等一个连续的地址。在使用场景上,LinkList适用于要头尾操作或指定插入的场景。
缺点:因为LinkList需要移动指针,所以查询的性能要差。
场景分析:
1、当需要对数据进行多次随机访问的时候使用ArraryList。
2、当需要对数据多次增删的时候使用LinkList。
3、如果容量固定,只在尾部添加数据的时候使用ArraryList。
当然,绝大数业务的场景下,使用 ArrayList 就够了,但需要注意避免 ArrayList 的扩容,以及非顺序的插入。
二、用过 ArrayList 吗?说一下它有什么特点?
ArraryList是java集合中的一种,用于存储相同类型的元素集,是一种变长的集合类,当加入数据到一定长度时会自动扩容。
底层是数组实现,添加元素。
高并发的情况下线程并不安全,多个线程同时控制ArraryList,可能会发生不可预知的错误。
三、有了数组为什么还要搞一个ArraryList?
通常在我们使用时,不知道要添加多少数据情况下,普通数据就很尴尬,因为你并不知道要初始化多少数组长度够用。
而ArraryList可以在数据添加到一定长度的时候自动扩容。
可以这么理解:我们说的普通的数组是死的数组,而ArraryList为动态数组。
四、HashMap 中的 key 我们可以使用任何类作为 key 吗?
平时可能大家使用的最多的就是使用 String 作为 HashMap 的 key,但是现在我们想使用某个自定义类作为 HashMap 的 key,那就需要注意以下几点:
1、如果类重写了 equals 方法,它也应该重写 hashCode 方法。
2、类的所有实例需要遵循与 equals 和 hashCode 相关的规则。
3、如果一个类没有使用 equals,你不应该在 hashCode 中使用它
五、HashMap 与 ConcurrentHashMap 的异同
1、HashMap的线程是不安全的,ConcurrentHashMap在JUC是安全的。
2、俩者都是键值对存储信息。
3、HashMap底层是数组+链表(jdk1.8之前),在jdk1.8之后为数组+链表+红黑树。当链表的元素个数到8时,链表的查询速度不如红黑树,链表会转为红黑树,增加查询速度。
4、HashMap的初始数组大小为16,当出现扩容的时候为0.75*数组大小。
六、红黑树有哪几个特征?
七、说说你平时是怎么处理 Java 异常的
try-catch-finally
1、try负责监控可能会出现异常的代码
2、catch负责捕获可能出现异常的代码,并且处理
3、finally负责清理各种资源,不管是否有异常都执行
4、其中 try 块是必须的,catch 和 finally 至少存在一个标准异常处理流程
八、说说深拷贝和浅拷贝?
**浅拷贝:**浅拷贝只是增加了一个指针指向了已有的地址。
**深拷贝:**是增加了一个指针,并且增加一个新的内存,最后由指针指向新的内存。
使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。
最好是结合克隆已经原型模式联系在一起哈,记得复习的时候,把这几个联系起来的。
总结
JAVA面试题基础篇就到这了,接下来是JVM篇。将会持续更新,希望帮助到大家。
重要的不是你所处的位置,而是你前进的方向!!!