58同城-后端开发工程师面经
一面2.23:
1. 先来说一下数据库索引相关(范围太广了,我自由发挥了)
大概从几个点来回答的
1)索引具体的B+树的底层结构
2)索引的优缺点,索引的分类
3)什么情况下适合用索引
4)主键的选择
2. 平时如何优化查询的?
3. Redis基本数据类型
4. Redis在项目中过的实际场景
5. 项目整体流程和负责部分
6. Java集合类(Set,Map,List)
7. ArrayList和LinkedList数据量达到一定程度的效率?
-
在首部添加/删除元素/节点过程中,随着数据量的不断增大,LinkedList明显要比ArrayList优秀很多,而对于尾部添加/删除,两者则差别不大。
-
在随机插入/删除/获取/替换元素/节点过程中,随着数据量的不断增大,ArrayList明显要比LinkedList优秀很多!
8. ArrayList的扩容
扩容1.5倍因为1.5 可以充分利用右移操作,减少浮点数或者运算时间和运算次数,充分利用空间,避免浪费过多空间。
9. HashMap八股文
jdk1.7头插法,线程并发扩容会导致循环链表
10. Hash这种kv形式什么情况下会造成效率的一个降低?
哈希冲突过多导致性能下降
二面3.1(30min):
1. 说一说常用的设计模式,有了解过策略模式吗?
1. Redis的基本数据结构,以及在项目里的使用场景
2. Redis的缓存淘汰策略
3. 设计LRU的思路
4. 讲一讲数据库索引
5. 那些情况下适合建立索引
6. 索引底层的原理,在两个列上单独建立索引和再两个列上建立联合索引他们的查询效率有没有区别?
7. ThreadLocal底层原理
8. 锁的升级过程,synchronized以及锁头保存信息和Lock
9. 死锁的产生条件
10. 介绍项目(20min)
11. 反问
hr面:没啥好写的,自我介绍