1.Redis
1.1.场景问题
缓存穿透
方案一
方案二 布隆过滤器

又可能会产生误判,如下图:
总结:
缓存击穿
互斥锁(分布式锁)
逻辑过期
总结:
缓存雪崩
redis和mysql 如何保证数据同步(双写一致性)
延时双删:会有脏数据的风险
强一致性(性能较低)
分布式锁解决方案(性能低)
读写锁解决方案(性能较分布式锁高一点)
最终一致性(异步通知)
mq
总结
Redis持久化
RDB
什么是RDB
RDB执行原理
AOF
什么是AOF
RDB和AOF对比
redis的key的过期策略(惰性删除和定期删除两种策略配合使用)
惰性删除
定期删除
总结
Redis淘汰策略
分布式锁 
上图单体结构没有问题,使用synchronized,但是分布式情况下还是会有问题
上图分布式锁完美解决了这些问题
setnx
redisson

redisson实现分布式锁-可重入
rediss能实现的分布式锁-主从一致
图解:当主节点redis宕机,哨兵会选择另一个从节点作为主节点,但是两个线程都在进行获取锁的操作,并且都获取到了,所以就失去了锁互斥的作用(解决方法如下,红锁)
替代红锁:zookeeper的cp思想能保证数据的强一致性
总结
1.2.Redis集群方式(主从复制,哨兵模式,分片集群)
主从节点同步原理
主从全量同步
主从增量同步(slave重启或者后期数据变化)
总结
哨兵模式
脑裂问题
图解:
图1,由于网络或者其他问题导致监控访问不到主节点(master),从而会指定一个从节点(slave)作为新的主节点,但是客户端(client)还在持续的向老的主节点同步数据
图2,当老节点的网络恢复,会被强制认定为从节点,从而清空自己的数据,然后去同步新的主节点的数据。导致断开时间段客户端同步的数据丢失
解决
redis中两个参数配置
总结
分片集群
分片集群结构
分片集群结构-数据读写
总结
Redis是单线程,为什么还这么快呢?
I/O多路复用模型
用户空间和内核空间
阻塞IO
非阻塞IO
IO多路复用
mysql
如何定位慢查询
方案一:开源工具
方案二:MySQL自带慢日志
总结
SQL语句执行很慢,如何分析
什么是索引
数据结构对比
总结
什么是聚簇索引什么是非聚簇索引
或者什么是聚集索引,什么是二级所以(非聚集索引)
什么是聚簇索引
什么是二级索引
回表查询
什么叫覆盖索引
MySQL超大分页怎么处理
解决
索引创建的原则有哪些
什么情况下索引会失效
SQL优化的经验
表设计优化
SQL语句的优化
主从复制、读写分离
事物的特性是什么(ACID)
ACID详解
图解:A向B转1000块钱:
原子性:A减1000,B新增1000两个操作要么同时成功,要么同时失败
一致性:A减1000,B必须增加1000
隔离性:A向B的转账过程中不受其他事物的影响
持久性:事物提交之后,要把数据持久化
并发事物带来哪些问题?怎么解决这些问题?MySQL的默认隔离级别是什么?
并发事物问题
怎么解决并发事物问题
undo log和redo log的区别
redo log 
undo log
MySQL的主从原理
分库分表
拆分策略
垂直分库
垂直分表
水平分库
水平分表
分库分表带来的问题已经解决
框架篇面试题
Spring中的Bean是单例的吗?
是的,但是可以设置多例
Spring中的单例Bean是线程安全的吗?
不是线程安全的
什么是AOP,项目中有使用到AOP吗?
Spring中事务是怎样实现的
Spring事物失效的场景又哪些
情况一:异常捕获处理 
抛出检查异常
非public方法导致事务失效
Spring Bean的生命周期
BeanDefinition
生命周期
Spring Bean的循环依赖(循环引用)
三级缓存解决循环依赖问题(都是解决set方法出现的循环依赖)
一级缓存
一级缓存配合二级缓存解决循环依赖问题
能解决大部分循环依赖的问题,但是如果A对象是一个被增强(代理)的对象,循环依赖问题依然存在
三级缓存解决循环依赖(对象工厂)
三级缓存解决不了构造方法出现的循环依赖问题
@Lazy:延迟加载,什么时候需要对象,我再去加载对象
总结
Spring MVC执行流程
视图阶段(JSP)
前后端分离(接口开发,异步请求(没有ModelAndView而是JSON串))
总结
SpringBoot自动配置原理
组合注解@SpringBootApplication
@EnableAutoConfiguration
总结
Spring框架常见的注解
Spring的常见注解有哪些
SpringMVC常见的注解有哪些
Springboot常见注解有哪些
JDK动态代理和CGLIB动态代理的区别
1、JDK 动态代理只能对实现了接口的类生成代理,而不能针对类。
2、CGLIB 是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法因为是继承,所以该类或方法最好不要声明成 final。
@Autowired和@Resource的区别
@Autowired 是Spring提供的,@Resource 是J2EE提供的。
@Autowired只按type装配,@Resource默认是按name装配。
Mybatis
Mybatis执行流程 
Mybatis是否支持延迟加载
什么是延时加载
延迟加载的原理
MyBatis的一级缓存和二级缓存
一级缓存
二级缓存
SpringCloud
SpringCloud五大组件有哪些
注册中心
Nacos和eureka的区别
负载均衡(Ribbon)
Ribbon的工作流程
负载均衡策略有哪些
自定义负载均衡策略如何实现
总结
什么是服务雪崩,怎么解决这个问题
解决:熔断降级 Hystix 限流(只能预防)
服务降级
服务熔断
总结
微服务是怎么监控的 
项目中限流怎么做的
Nginx限流
控制速率(突发流量)
漏桶算法

控制并发连接数
网关限流
令牌桶算法
CAP和BASE
CPA
结论:
BASE理论
总结
分布式事务解决方案 (MQ)
异步,性能好,保证事务的最终一致性
分布式服务接口幂等性
接口幂等
token + redis解决幂等
分布式锁解决幂等
总结
分布式任务调度(xxl-job)
RabbitMQ
RabbitMQ五种消息类型
一、基本消息模型(一对一)
基本消息模型就是:
一个生产者丶默认交换机丶一个队列丶一个消费者。
二、work消息模型
work消息模型就是:
一个生产者丶默认交换机丶一个队列丶多个消费者。
三丶fanout广播模式/发布/订阅模式
fanout消息模型就是:
多个消费者,每一个消费这都有自己的队列,每个队列都绑定到交换机
生产者发送消息到交换机-交换机发送到哪个队列
四丶Routing路由模式(direct)
Routing路由模式模型就是:
在某种场景下,我们希望不同的消息被不同的队列消费
这个时候我们就要用到direct类型的exchange
生产者向交换机发送消息—交换机根据路由key发送给队列-队列的消费者接收消息
五丶Topics(主题模型)
Routing路由模式模型就是:
Topics模式和direct路由模式类似,
区别在于Topic类型的交换机可以匹配通配符
符号(通配符):#表示匹配一个或者多个词
*表示匹配一个词
RabbitMQ如何保证消息不丢失
生产者往路由发的过程中消息丢失(生产者确认机制)
MQ内部消息丢失
消费者消息丢失
总结
RabbitMQ重复消费消息
RabbitMQ中的死信交换机(延迟队列= 死信队列+TTL)
死信交换机
TTL
总结
RabbitMQ消息堆积怎么处理
解决
惰性队列,扩大容积
RabbitMQ如何保证消息顺序消费
总结
RabbitMQ集群
普通集群
镜像集群
缺点:数据同步过程中,节点宕机,导致数据丢失(情况很少见)
仲裁队列
总结
集合
数据结构
算法复杂度分析
评估代码总计时:
图解:
3n:i<=n,i++,sum=sum+1这三行代码。n执行多少次,这三行代码就要执行多少次
3:int sum=0,int i =1,return sum这三行固定代码
图解:O是指时间,n是指代码循环次数
常见复杂度表示形式
总结
ArrayList源码分析
ArrayList底层的实现原理是什么
new ArrayList(10)中的list扩容几次
如何实现数组和List之间的转换
链表
单向链表
双向链表
总结
ArrayList和LinkedList的区别
二叉树
二叉搜索树
红黑树
散列表
HashMap底层原理
HashMapJDK1.7和1.8有什么区别