面经

1、索引数据结构B+树(为什么快)

1、 B+树的磁盘读写代价更低:B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对B树更小,如果把所有同一内部节点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多,一次性读入内存的需要查找的关键字也就越多,相对IO读写次数就降低了。

2、B+树的查询效率更加稳定:由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

3、由于B+树的数据都存储在叶子结点中,分支结点均为索引,方便扫库,只需要扫一遍叶子结点即可,但是B树因为其分支结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况,所以通常B+树用于数据库索引。

2、hash索引数据库为什么不能(表扫描,范围查询)

3、定位优化MySQL

explain

SHOW STATUS

4、count(*),count(1)区别

如果你的数据表没有主键,那么count(1)比count(*)快
如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快
如果你的表只有一个字段的话那count(*)就是最快的啦

5、innodb,mysam锁方面的区别,(文件有区别)

1. InnoDB支持事务,MyISAM不支持

2. InnoDB支持外键,而MyISAM不支持。

3. InnoDB是聚集索引,使用B+Tree作为索引结构,MyISAM是非聚集索引

4. InnoDB不保存表的具体行数

5. Innodb不支持全文索引,而MyISAM支持全文索引

6. MyISAM表格可以被压缩后进行查询操作

7. InnoDB支持行(默认)级锁

8、InnoDB表必须有唯一索引(如主键)

9、Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI

        Innodb:frm是表定义文件,ibd是数据文件

        Myisam:frm是表定义文件,myd是数据文件,myi是索引文件

6、数据库事务四大特性

  • 原子性(Actomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。
  • 一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以操持完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。
  • 隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。
  • 持久性(Durable):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。

7、隔离级别,并发的问题,如何解决(锁的是什么)

  • 脏读(Dirty Reads):一个事务正在对一条记录做修改,在这个事务并提交前,这条记录的数据就处于不一致状态;这时,另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”的数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被形象地叫做“脏读”。
  • 不可重复读(Non-Repeatable Reads):一个事务在读取某些数据已经发生了改变、或某些记录已经被删除了!这种现象叫做“不可重复读”。
  • 幻读(Phantom Reads):一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为“幻读”。

8、MySQL默认的隔离级别

可重复读

9、乐观锁和悲观锁

10、readis了解过吗

11、如何加载class文件的,JVM,类加载器

12、反射机制

13、类加载器的双亲委派机制

14、Java内存模型  堆,栈,本地方法栈,程序计数器

15、Java GC、算法

16、标记清除的缺点

17、引用计数算法

18、根可达算法

19、年轻代空间    Edan+0+1

20、fullGC触发的条件

21、垃圾收集器CMS、G1

22、强软弱虚引用

23、线程创建方式

24、start、run方法的区别

25、线程的返回值

处理线程的返回值

26、线程池

27、线程池的核心参数

1. corePoolSize:指定了线程池中的线程数量。

2. maximumPoolSize:指定了线程池中的最大线程数量。

3. keepAliveTime:当前线程池数量超过 corePoolSize 时,多余的空闲线程的存活时间,即多 次时间内会被销毁。

4. unit:keepAliveTime 的单位。

5. workQueue:任务队列,被提交但尚未被执行的任务。

6. threadFactory:线程工厂,用于创建线程,一般用默认的即可。

7. handler:拒绝策略,当任务太多来不及处理,如何拒绝任务。

28、线程池拒绝策略

 

29、hashmap存放数据怎么计算数组的下标

HashMap中数组下标值的计算过程,大致分为如下几步:

获取key.hashCode(),

然后将hashCode高16位和低16位异或(^)操作,

然后与当前数组长度-1结果进行与(&)操作,

最终结果就是数组的下标值。

30、hashmap扩容头插还是尾插

创建时尾插

31、spring bean的加载机制、生命周期

bean factory

32、spring   IOC  AOP

33、AOP的实现原理

动态代理

34、动态代理的功能

让你可以在不用修改源码的情况下,增加一些方法,

  • 动态代理事先不知道要代理的是什么,只有在运行的时候才能确定。
  • 动态代理的调用处理程序必须事先InvocationHandler接口,及使用Proxy类中的newProxyInstance方法动态的创建代理类

35、mybatis的底层流程

配置-》sqlsessionfactory

36、mybatis一级缓存、二级缓存

默认开启一级缓存,二级缓存需要配置

37、一级缓存会出现脏读吗

基于mybatis中的缓存机制,查询的结果是缓存中的结果,数据未得到即时更新。

38、算法

快速排序,

挖坑填数,

1、找到一个基准数

2、由后向前找到比基准数小的数,填到前一个坑位里

3、由前向后找到比前一个数大的数,填到前一个坑位里

39、希尔排序

40、两个有序的数组进行排序

原文地址:https://www.cnblogs.com/springxian/p/14105524.html