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