JAVA面试题总结基础篇(三)

本文总结了JAVA面试中常见的基础问题,包括ArrayList和LinkedList的区别、ArrayList的特点和使用场景、为何需要ArrayList、HashMap的key使用限制、HashMap与ConcurrentHashMap的异同,以及异常处理和深浅拷贝的解释。这些内容对于理解JAVA集合框架和面试准备至关重要。
摘要由CSDN通过智能技术生成

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篇。将会持续更新,希望帮助到大家。
重要的不是你所处的位置,而是你前进的方向!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力变好的小贤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值