zoukankan      html  css  js  c++  java
  • 面经

    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、两个有序的数组进行排序

  • 相关阅读:
    A. Dawid and Bags of Candies ( Codeforces Round #588 (Div. 2) )
    B. Ania and Minimizing (Codeforces Round #588 (Div. 2) )
    残缺的棋盘 (BFS)
    Max Sum (动态规划)
    高桥和低桥 (离散化 )
    White Sheet (矩形面积模板) (Codeforces Round #587 (Div. 3) )
    Catch That Cow (BFS luo搜 + 剪枝)
    Python笔记-字符串
    关于拖延症
    一些告诫
  • 原文地址:https://www.cnblogs.com/springxian/p/14105524.html
Copyright © 2011-2022 走看看