2021-05-29 12:14:05
滴滴秋储后端开发实习面试主要分为一面和二面,一面侧重场景题与少量手撕代码,二面难度提升,涵盖场景题与八股文知识,无手撕代码环节。 以下为详细面试内容:
一面内容数据库索引相关
问明明建立了索引,为什么还是慢,涉及索引失效、最左匹配原则。进一步追问系统自己能否解决最左匹配问题。
分布式环境下,两个主机读到数据库里的同一条数据的内容不一样,要求分析原因。
慢SQL怎么解决。
mysql的InnoDB引擎里索引的数据结构除了B+树还有什么(回答hash,因前面问题影响未及时反应过来),以及hash索引的应用场景。
聚簇索引、非聚簇索引的区别。
项目实现相关:给一个项目,让去实现,询问除了CRUD还有什么点要实现。
Redis相关:redis里的key过期了,让设计一个删除方案并说明怎么实现。
手撕代码
反转链表。
反转第left到第right个节点,需自己写输入输出,到时间没写完,只写了方法,向面试官讲了思路。
数据库与缓存相关
redis和mysql之间的数据怎么保持一致性。
保持一致性的缓存删除策略会导致什么问题(提示是大key问题)。
MySQL事务相关
mysql的事务是什么,怎么实现。
当开启一个事务后,在其中插入一个操作,返回这个事务中的数据,会不会出现问题(面试者没听懂,答读写锁)。
mysql的事务开启后的过期时间默认是多少(面试者未听过)。
mysql的InnoDB引擎里索引的数据结构相关(一面问过,此处有延伸)。
并发相关:CAS是什么,会出现什么问题(ABA,自旋,单一变量)。
Java常用类与数据结构相关
java中常用的类。
arraylist、hashmap怎么实现的。
concurrenthashmap怎么实现的。
知道哪些数据结构,分别说说应用场景。
哪些数据结构是有序的,哪些是无序的。