一、MySQL
1.存储引擎
- 查看MySQL提供的所有存储引擎:
mysql> show engines;
- 查看MySQL当前默认的存储引擎
mysql> show variable like '%storage_engine%';
- 查看表的存储引擎
mysql> show table status like "table_name";
1) MyISAM和InnoDB区别
2)字符集及校对规则
3)索引
4)查询缓存的使用
5)事务
6)事务的四大特性(ACID)
7)并发事务带来哪些问题?
8)事务隔离级别有哪些?MySQL的默认隔离级别是?
8)锁机制与InnoDB锁算
MyISAM和InnoDB存储引擎使用的锁
- MyISAM采用表级锁(table-level locking)
- InnoDB支持行级锁(row-level locking)和表级锁,默认行为行级锁。
行级锁和表级锁对比:
9)大表优化
10) 什么是池化设计思想?什么是数据库连接池?为什么需要数据库连接池?
11)分库分表之后,id主键如何处理?
12)一些参考
MySQL高性能优化规范建议
腾讯面试:一条SQL语句执行得很慢的原因有哪些?—不看后悔系列
二、Redis
1. Redis
2.分布式缓存常见的技术选型方案有哪些?
1)Redis和Memcached的区别和共同点
2)缓存数据的处理流程?
3)为什么要用Redis/为什么要用缓存?
-
高性能 :
-
高并发 :
3.Redis常见的数据结构及使用场景分析:
1)string
2)list
3)hash
4)set
5) sorted set
4. Redis单线程模型详解
4. Redis没有使用多线程?为什么不使用多线程?
5.Redis6.0之后为何引入多线程?
1)Redis6.0实现机制
流程简述如下:
1、主线程负责接收建立连接请求,获取 socket 放入全局等待读处理队列
2、主线程处理完读事件之后,通过 RR(Round Robin) 将这些连接分配给这些 IO 线程
3、主线程阻塞等待 IO 线程读取 socket 完毕
4、主线程通过单线程的方式执行请求命令,请求数据读取并解析完成,但并不执行
5、主线程阻塞等待 IO 线程将数据回写 socket 完毕
6、解除绑定,清空等待队列
推荐阅读:
Redis6.0新特性-多线程连环13问!
为什么redis选择单线程模型
6. Redis给缓存设置过期时间有啥用?
7. Redis如何判断数据是否过期的呢?
8.过期数据的删除策略?
9. Redis内存淘汰机制?
10.Redis持久化机制(怎么保证Redis挂掉之后再重启数据可以进行恢复)
11.Redis事务
Reids官网介绍在此
Redis不满足原子性的问题
阅读解释
12. 缓存穿透
1)什么是缓存穿透?
2)缓存穿透的处理流程是怎么样的?
如下图所示,用户的请求最终都要跑到数据库中查询一遍
3)解决办法
-
缓存无效key
-
布隆过滤器
布隆过滤器
13.缓存雪崩
1)什么是缓存雪崩?
2)解决方法?
14.如何保证缓存和数据数据的一致性?