1. 增强一个java类中的某个方法的三种方法:
        1.继承方式    :  能找到父类,能控制这个类的构造
        2.装饰者方式  :  在IO中应用最多,包装的对象和被包装的对象都要实现相同的接口;获得被包装对象的引用.  

                                  缺点: 如果接口中方法比较多,增强的方法少,其他的功能方法需要原有的调用;
                                  步骤:

                                   自定义类实现和被包装类的接口,然后在构造方法的形参接收被包装类的引用,
                                   创建成员属性被包装类, 在自定义类的方法内,调用被包装类的方法.
                                   注意:PreparedStatement要有返回值

        3.动态代理的方式 :  被增强的对象的只要实现了接口就可以
 

====================================秒杀技术=============================================

   分布式秒杀,为什么需要分布式锁:

     1. 当A服务 和B服务,同时接受到秒杀请求的时候,因为都是先get库存,然后在set库存,

          而redis因为是单线程的会根据发出的命令串行化到序列中,

          这样就可能造成A服务和B服务的get请求挨着执行获得的数据是一样的,

         结果造成他们同时都会set进去同样的值,这样就会超卖.

  2. 分布式锁:

     ① redis自身分布式锁: 用setNx,当第一个请求加锁的时候, 但是要自己考虑不能拒绝下一个请求,这个时候即使第一个请求

          已经解锁,但是尝试加锁方不知道,只能按照自己设置不断循环尝试加锁,对redis很大压力,性能特别差

     ② lock单服务锁性能好的原因: JVM直接支持, 没有网络开销,lock和unLock是由通信的,

            就是unlock的时候会通知尝试获得锁的那个线程,直接解锁

     ③ redisson分布式锁,结合了lock,redis, netty框架,他的上锁同样适用的setNx,不过他的

        Lock和unlock方法也是用的java中的本地锁redis异步发送消息通信, ,用到了任务计时器来动态算尝试解锁间隔时间

 3. 秒杀应该限流,

     ①做成可配置的放在数据库配置表内,在拦截器里面,用RateLimiter拦截每秒并发量等待或者丢弃

     ②利用redis的incr,来控制到每个商品的点击抢购数量

     ③ 限流器: guava : 漏铜算法, 请求倒入桶中,下面处理是桶漏洞,当请求大于漏洞的时候就拒绝,可以设置每秒的令牌数

4. 秒杀应该在发MQ之前,就应该先执行校验操作,去掉大部分请求,直接返回给前端

5.发送MQ后,需要在用redisson分布式锁,把结果放到redis里面,让前端去轮循请求

6.BeanUtils的copyproperties性能差替换为 BeanCopier.copy

==============================单点登录========================================================

首先所有用户访问的微服务都通过user服务来鉴权, user服务鉴权两种方式一种是

① userId和uuid, 这里uuid存在的意义在于用户登录态失效,单点登录

② 单点登录: 重新登录后会生成新的uuid, uuid放在redis里面有过期时间

跨域鉴权:

 1. 判断是否有userid和token,

     ①有则把token和userid放到cookie里面

     ②没有则清除cookie信息,去请求其他域名user服务同时带上自己的页面url,

2.user服务进行鉴权

  ③:鉴权未通过,打开登录页面,登录完成后,前端取出页面url跳转过去.并且带上token

  ④:鉴权通过,拼上token跳转到商品详情页,拦截器进行拦截,通过token获取到userid

===================================订单多渠道路由=======================================

1.创建各个对应支付渠道的实例类

2.创建工厂类: 根据传入的渠道类名称来创建相应的支付类

3.封装统一的创建修改查询方法类