在你阅读之前,先插播个小广告,博主有一个面经专栏,全部都是2024秋招准备的内容,相比于网络上其他的面经,有着面试的所有过程,还有最全的面试答案,不需要再到处找,如果你想获得大厂的offer,认真准备面经是必不可少的,专栏会持续更新至少100篇内容,现在已经更新10+内容了,如果想学习所有的面经,欢迎订阅博主的专栏呀,保证每一篇都是匠心独创,绝对物超所值,下面就开始学习吧~
目录
两个sql题的问题及优化方案?一个数据在第十万行,怎么样能提高查询速度?
InnoDB的四个隔离级别?可重复读的原理是什么呢?怎么去实现的?
什么是深拷贝,什么是浅拷贝?怎么实现深拷贝?ArrayList的clone的拷贝是深拷贝还是浅拷贝吗
1、自我介绍
2、实习期间做的项目
- 印象比较深的需求,为什么要做这个需求,要解决什么问题,怎么做的?
- 前端解决什么样的问题,后端怎么设计的?
- 前端怎么学习的?
3、开放题
-
先后打开了四个软件,只允许同时开3个,新开一个程序,用什么样的数据结构或算法?
4、算法
- lru的put和get的数据复杂度?
一种常见的实现LRU算法的数据结构是使用哈希表和双向链表组合实现。哈希表用于存储键值对,其中键是缓存中的键,值是对应的节点在双向链表中的指针;双向链表用于按照最近访问时间顺序管理节点。在这种情况下:
PUT操作的数据复杂度: PUT操作首先需要在哈希表中查找键是否已经存在,这是一个O(1)的操作。然后将新的键值对插入到哈希表中,同时在双向链表的头部插入一个新节点,这也是一个O(1)的操作。因此,PUT操作的总体数据复杂度是O(1)。
GET操作的数据复杂度: GET操作需要在哈希表中查找指定键对应的节点,这是一个O(1)的操作。然后将对应的节点移动到双向链表的头部,这也是一个O(1)的操作。因此,GET操作的总体数据复杂度也是O(1)。
- 手撕:lru (讲述一下思路)
- Linkedhashmap的数据结构?get的时间复杂度?hashmap的get的时间复杂度是多少?红黑树的时间复杂度是什么?取决于什么?链表什么时候升级为红黑树?什么时候会移除remove?
LinkedHashMap
是Java中的一种数据结构,它是基于哈希表和双向链表实现的。在内部,LinkedHashMap
使用一个哈希表来存储键值对,并使用一个双向链表来维护插入顺序或者访问顺序。
哈希表:用于存储键值对。通过哈希函数将键映射到哈希表的桶中,以快速定位键对应的值。
双向链表:用于维护插入顺序或者访问顺序。通过指针连接各个节点,以记录键值对的顺序。
LinkedHashMap
中的get
操作的时间复杂度是O(1),因为它直接通过哈希表快速定位到对应的节点。与普通的HashMap
相比,LinkedHashMap
在get
操作的时间复杂度上没有区别。
对于普通的HashMap
,get
操作的时间复杂度也是O(1)。在理想情况下,哈希函数能够将键均匀地映射到不同的桶中,从而保证了O(1)的查询性能。
红黑树(Red-Black Tree)是一种自平衡二叉查找树,它在最坏情况下的时间复杂度是O(log n),其中n是树中元素的个数。红黑树的时间复杂度取决于树的高度,而树的高度受到树的平衡性影响。
在HashMap
中,当链表的长度超过一定阈值(通常为8)总元素个数超过64个的时候,链表会被转换为红黑树。这是因为当链表长度过长时,查找效率可能会下降,而红黑树能够提供更快的查找性能。同样地,当红黑树的大小小于一定阈值