1.从客户端角度进站:从服务端到客户端,需要解码
2.从客户端角度出站:从客户端到服务端,需要编码
一、看面试视频复习的内容
1.eureka 是springboot做微服务的注册中心,服务提供者注册到这个注册中心,消费者可以在上面查找到服务,并且eureka可以提供一些健康监测
2.普通事务就是统一操作,失败就回滚;分布式事务,可能会操作多个微服务,协同完成,这个时候就要搭建分布式事务框架,保证事务统一。
3.如何保证缓存和数据库双写一致性,可以延迟双删
4.如何保证缓存中是热点数据,可以设置一个过期时间
二、缓存穿透
描述:
缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。
解决方案:
1.接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;
2.从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击
三、缓存击穿
描述:
缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力
解决方案:
1.设置热点数据永远不过期。
2.加互斥锁
四、缓存雪崩
描述:
缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是, 缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
解决方案:
1.缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
2.如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
3.设置热点数据永远不过期。
4.主动去触发缓存更新
数据库也可以做集群部署
五、消息中间件
注册或者其他事件的消息先放到消息中间件队列中,然后做一个后续异步的消息处理
六、只能有一个master节点,避免脑裂的情况
七、如何避免表达重复提交,比如电商平台,用户重复发起支付,可以试用token机制去保证幂等性,通过生成一个唯一的token去检测,通过才支付成功
八、设计模式:
设计模式七大原则
1.单一职责原则
2.接口隔离原则
3.依赖倒转原则
4.里式替换原则
5.开闭原则
6.迪米特法则
7.合成复用原则
模式类型
1.单例模式
2.工厂设计模式
1)工厂方法模式
2)抽象工厂模式
3.建造者模式
4.适配器设计模式
1)类的适配器模式
2)对象的适配器模式
3)接口的适配器模式
5.装饰模式
6.桥接模式
7.代理模式
1)静态代理
2)动态代理
8.观察者模式
9.原型模式
10.组合模式
11.外观模式
12.享元模式
13.命令模式
14.模板方法模式
15,.迭代器模式
16.备忘录模式
17.解释器模式
18.策略模式
19.职责链模式