Skip to content

概念 ​

1. DDL(Data Definition Language)

数据定义语言:对数据库内部的对象进行操作,定义/删除/修改表结构等,常用关键字:creat、drop、alter等。

2. DML(Data Manipulation Language)

数据操纵语言:对表内数据进行操作,常用关键字:insert、update、delete等。

3. DQL(Data Query Language)

数据查询语言:对数据进行查询操作,常用关键字:select、from、where等。

4. DCL(Data Control Language)

数据控制语言:设置/更改数据库用户权限、常用关键字:grant、revoke等。

索引失效 ​

模 模糊查询 like “%**” 型 数据类型不一致 数 对索引字段使用内部函数 空 索引列有空值 运 索引列进行四则运算 最 最左原则复合索引不按索引最左开始查找 快 全表查询速度比索引快

事务 ​

  • 四大特性

  • MySQL开启事务提交事务回滚事务

  • JDBC事务、MyBatis事务

  • 事务并发出现的问题:脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)

  • 隔离级别

  • 分布式事务

    • jmeter怎么评估接口性能,怎么看是否到达上限?为什么有的接口2ms响应有的要1s?90%分位,开始报异常说明到达瓶颈,因为线程池的异步任务队列

      java
      public class pool1 {
          // public ThreadPoolExecutor(int corePoolSize,
          //                           int maximumPoolSize,
          //                           long keepAliveTime,
          //                           TimeUnit unit,
          //                           BlockingQueue<Runnable> workQueue,//new LinkedBlockingDeque<>()或ArrayBlock
          //                           ThreadFactory threadFactory,   //线程工厂
          //                           RejectedExecutionHandler handler)
          public static void main(String[] args) {
              ExecutorService pool = new ThreadPoolExecutor(3, 5, 8, TimeUnit.SECONDS,
                      new ArrayBlockingQueue<>(4), Executors.defaultThreadFactory(),
                      new ThreadPoolExecutor.AbortPolicy());
          }
      }
    • CAP理论:一致性,可用性,分区容忍性

面试题 &#8203;

  1. MySQL子查询的位置

  2. 使用mybatis遍历一个集合用什么标签?mybatis如何做循环的处理

  3. innoDB存储引擎以页作为磁盘和内存之间交互的最小单位,页的大小默认16k

  4. 索引用int值和用String值来建立,有什么区别?String在mysql中用varchar,可能占的字节数更大,索引树上能存储的数据更少,层数更高

  5. @Transactional失效的场景:

    • 非public方法
    • 内部try catch
    • 没有设置rollbackFor属性,默认只能回滚RunTimeException
    • 在同一个类内部调用事务方法,相当于this调用。而动态代理需要代理类调用才起作用
  6. SQL注入

  7. MySQL索引为什么用B+树?

  • 索引是一种数据结构,用来提高查询和搜索效率的

  • 判断一个数据结构适不适合做索引从三个方面考量:查询单个值、查询范围值、插入的效率

  • 数组和链表都是无序的,查询单个和范围值就很慢。有序数组插入的效率很低

  • 二叉搜索树特点是左小右大,查询单个值最快O(1)级别。查询范围值慢,需要在父子节点之间跳转。而且在极端条件下可能会退化成链表。

  • 红黑树最大特点是会尽量保持树的平衡,让它不至于退化成链表,但信息密度低,存储100w条数据需要20层高,20次磁盘IO,最少要查询0.2s

  • B树信息密度更大,一个节点能存储1170个数据,3层可以存下2kw,大大减少我们磁盘IO的速度

  • B+树在此基础上针对范围查找做了一些优化

    • 叶子节点之间维护一个指针,方便了范围查找
    • 所有的非叶子节点,都在叶子节点中冗余一份
    • 所以的非叶子节点,只存储key,不存储data,会降低树的高度,进一步提高查询的效率。
    • MySQL对标准的B+树做了一些优化。主要就是增加了回去的指针