滴滴面试题答案思路

1.mysql   mysql

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

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

数据结构B+树:数组

B+树特色安全

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

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

3.查询IO次数少,查询效率高。 主键查询,只须要一次IO.模块化

参考:http://www.javashuo.com/article/p-mfjtcakx-do.html性能

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

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(为何用,原理)

相关文章
相关标签/搜索