1.SpringCloud用到那些组件?
注册中心 nacos
配置中心 nacos
远程调用 Spring Cloud gateway
远程调用 feign
负载均衡 Ribbon
服务保护
2.使用rabbitmq做了什么事情?
异步通信:mysql中的数据和es中的数据进行同步
延迟消息队列:延迟发布话题,有用户需要定时发布文章,就需要延迟消息队列
3.创建线程的方式
(1)直接Thread
(2)Thread+Runnable
(3)FutureRrask+Callable 有返回值,有阻塞
(4)直接使用线程池
4.线程池的7个参数
jdk线程池如何使用
(1)工厂类 Executors
newCachedThreadPool
newFixedThreadPool
newSingleThreadScheduledExecutor
newSingleThreadExecutor
核心线程1,最大线程1
(2)使用ThreadPoolExector
核心线程
最大线程
救济线程的存活时间
救济线程的单位
线程的阻塞队列
创建线程的方式,可以控制创建出来的线程名字,守护线程
拒绝策略
5.线程池的工作流程
添加任务----------->
1.判断核心线程是不是达到上限
2.未达到:创建核心线程执行任务
3.达到:放入工作队列
工作队列满了:创建临时线程完成任务
临时线程也达到上限
拒绝策略
6.线程的拒绝策略
4种拒绝策略
(1)AbortPolicy 将任务丢弃,抛出异常
(2)CallerRunsPolicy 谁将该任务往线程池中添加,谁来执行
(3)DiscardOldestPolicy 将工作队列中最早的任务抛弃,将新任务添加到工作队列
(4)DiscardPolicy 将工作队列中最新的任务抛弃,将新任务添加到工作队列
7.项目中用redis做什么了?
(1)Redis中存储了时效性数据,短信验证码的登录
(2)缓存热点数据,热点话题,使用xxl-job查询分值高的数据缓存到Redis中
(3)分布式锁
下单减库存
用户点赞,阅读----Redis--------发布消息MQ----------文章服务更新点赞数量,需要用到分布式锁
8.Redis中放入RDB和AOF的区别?
RDB:每隔一定时间,将内存中的数据持久化到文件中
AOF:将写操作的命令,持久化到文件中
每秒
每操作
由操作系统决定
一般用那种?如果不追求极致安全,效率高,使用RDB,追求极致安全使用AOF
一次RDB花费的时间比一次AOF花费的时间长
9.项目多少人做的?
一个项目组6~8个人
6个人:3个后端+2前端+1测试
8个人:4个后端+2个前端+2个测试
10.注册中心的作用
服务注册:
服务启动后将地址暴漏给注册中心
key 服务名称
value 地址列表
服务发现:
服务的消费者:
根据服务名称从主策中心获取地址列表
11.如何防止Redis穿透?
Redis穿透
别人恶意发送请求,redis中不存在的数据,恶意请求比较大,导致所有的请求都回查询mysql,导致mysql宕机
解决:布隆过滤器
mysql中商品id存入布隆过滤器
1.判断布隆过滤器是否有查询数据的id
2.没有,响应数据不存在
3.有(可能有,因为有误判)
查询redis中------有,直接返回
没有,就查询myslq,将查询的结果存入redis,如果在数据据库中查询的结果没有,就在redis中缓存一个空结果
12.布隆过滤器的数组结构
位数组:仅仅存储01的数组
占用了少量的空间,时间复杂度位O(1)
存:对数据进行多次hash,多次hash值和数组进行与运算,将这个索引的位置修改为1
取:也是多次hash,与长度的位置进行与运算,判断该索引的位置是不是为1,1的就是存在(可能误判),是0的话就是一定不存在,降低误判增加数组的长度和进行多次hash
12.分布式锁
(1)Redis的分布式锁
setnx添加一个string类型的数组
如果key不存在,添加成功,返回true
如果key存在,添加失败,返回false
原理:
加锁:
多个线程一起setnx
一个成功就获取到了锁
其他获取锁失败
释放锁:
将数据删除
del key
(2)zk的分布式锁
加锁:多个线程一起在持久节点下创建临时顺序节点,判断创建的节点是不是在持久节点下编号最小的
如果是------>就加锁成功----->执行业务,执行完删除临时顺序节点
如果不是------->监听前一个节点删除
13.redis哨兵的所用?
(1)监听:Sentinel监听Redis主从架构中每个节点的状态
主观下线,某个Sentinel认为这个节点下线
客观下线,半数节点认为这个节点下线
如果发现有节点客观下线,就故障转移,将该节点从集群节点列表中剔除
(2)故障转移
如果发现主节点客观下线,从从节点中选择一个升级为主节点
(3)通知,将主从变化通知给客户端
13.项目中那些地方用到了es
话题的搜索,es就是使用倒排索引