博主最近在找暑期实习的岗位,投递了字节的java后端开发岗,今天刚面完技术面,感觉凉了。冷静下来之后还是想复盘一下这次面试的过程,给自己也给在同一条路上的其他朋友一个未来学习方向的参考。
下面就进入正式内容
首先,是万年不变的自我介绍。
然后面试官直奔主题。针对我自我介绍中提到的最近在看的一些底层的容器类。提了以下几个问题:
一、容器类
说说ArrayList是怎么实现的?
这个我在之前复习的时候是同LinkedList一起复习的,所以我当时就提出来想讲讲ArrayList跟LinkedList的区别和联系。
(注:当时只想起来前两点QAQ)
- 首先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的
- 由于底层数据结构不同,他们所适⽤的场景也不同,ArrayList更适合随机查找,LinkedList更适合删 除和添加,查询、添加、删除的时间复杂度不同
- 另外ArrayList和LinkedList都实现了List接⼝,但是LinkedList还额外实现了Deque接⼝,所以 LinkedList还可以当做队列来使⽤
说说数组跟ArrayList的区别
答案:
数组([]):最高效;但是其容量固定且无法动态改变;
ArrayList:容量可动态增长;但牺牲效率;
用法上: 首先使用数组,无法确定数组大小