概念 ​
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%分位,开始报异常说明到达瓶颈,因为线程池的异步任务队列
javapublic 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理论:一致性,可用性,分区容忍性
面试题 ​
MySQL子查询的位置
使用mybatis遍历一个集合用什么标签?mybatis如何做循环的处理
innoDB存储引擎以页作为磁盘和内存之间交互的最小单位,页的大小默认16k
索引用int值和用String值来建立,有什么区别?String在mysql中用varchar,可能占的字节数更大,索引树上能存储的数据更少,层数更高
@Transactional失效的场景:
- 非public方法
- 内部try catch
- 没有设置rollbackFor属性,默认只能回滚RunTimeException
- 在同一个类内部调用事务方法,相当于this调用。而动态代理需要代理类调用才起作用
SQL注入
MySQL索引为什么用B+树?
索引是一种数据结构,用来提高查询和搜索效率的
判断一个数据结构适不适合做索引从三个方面考量:查询单个值、查询范围值、插入的效率
数组和链表都是无序的,查询单个和范围值就很慢。有序数组插入的效率很低
二叉搜索树特点是左小右大,查询单个值最快O(1)级别。查询范围值慢,需要在父子节点之间跳转。而且在极端条件下可能会退化成链表。
红黑树最大特点是会尽量保持树的平衡,让它不至于退化成链表,但信息密度低,存储100w条数据需要20层高,20次磁盘IO,最少要查询0.2s
B树信息密度更大,一个节点能存储1170个数据,3层可以存下2kw,大大减少我们磁盘IO的速度
B+树在此基础上针对范围查找做了一些优化
- 叶子节点之间维护一个指针,方便了范围查找
- 所有的非叶子节点,都在叶子节点中冗余一份
- 所以的非叶子节点,只存储key,不存储data,会降低树的高度,进一步提高查询的效率。
- MySQL对标准的B+树做了一些优化。主要就是增加了回去的指针