滴滴面试题答案思路

编程

1.mysql   

1.1.介绍下介绍下innodb的索引类型、数据结构

普通索引,唯一索引,主键索引:也就是聚簇索引,全文索引(FULLTEXT),聚集索引,非聚集索引等。

数据结构B+树:

B+树特点

1.矮胖型,多路复用树,树的高度最大为3。

2.所有数据都是存储在叶子节点上,非叶子节点存储索引(范围存储)。

3.查询IO次数少,查询效率高。 主键查询,只需要一次IO.

参考:https://blog.csdn.net/c_royi/article/details/83826121

1.2.为什么这么设计(为什么不用B树)

B树 量大的时候高度太大,而且容易左旋和右旋。搜索性能不行。

2.JVM   

2.1.介绍jvm模型   

 

2.2.介绍垃圾回收   

2.3.gc的触发条件是什么   

2.4.说一个你对gc调优的经历

3.JDK   

3.1.介绍HashMap(结构、原理、为什么链表调整为树的阈值是8 — ps:这个我也不知道)  

线程不安全,底层使用数组加链表实现,链表是为了解决hash冲突。

key->计算hashCode->位移->计算出下标,如果2个key计算出来的下标一样,第二key放进去的时候,遍历这个数组对应的链表,那么就使用key的equals方法去比较,如果eqals相同,就覆盖,反之就放在链表的头部。

在jdk1.8的时候了,链表长度超过8的时候,会自动转变为红黑树数据结果。因为红黑树查询效率高。如果不转继续使用链表,那么查询效率较低。

3.2.ConcurrentHashMap(原理、与HashMap区别) 

线程安全,使用的是分段锁,put的时候只对对应的 hash桶上锁,未上锁之外的数据读写不影响。在jdk1.8之后,原来的这个synchronized这个锁,改为synchronized+cas(比较并替换)实现,类似无锁化串行设计,加锁粒度更细,效率更高。

3.3.lock 与 synchronize(实现原理、二者区别、synchronize的锁升级)

Lock是一个接口,而synchronized是关键字。
synchronized会自动释放锁,而Lock必须手动释放锁。
Lock可以让等待锁的线程响应中断,而synchronized不会,线程会一直等待下去。
通过Lock可以知道线程有没有拿到锁,而synchronized不能。
Lock能提高多个线程读操作的效率。
synchronized能锁住类、方法和代码块,而Lock是块范围内的

4.Spring   

4.1.为什么选择用spring(ps:我觉得问的挺水)   

系统整合,系统结构,模块化,切面化,简化开发。

4.2.说下AOP(原理:jdk动态代理、cglib),举个应用AOP的例子   

AOP底层使用jdk动态代理和cglib实现,

在方法前后记录日志,可以使用AOP,跟业务无关。

4.3.SpringBoot(为什么用,原理)

以上是 滴滴面试题答案思路 的全部内容, 来源链接: utcz.com/z/510922.html

回到顶部