<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[activety的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/activety</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; activety]]></copyright><item><title><![CDATA[aop相关]]></title><link>https://blog.youkuaiyun.com/activety/article/details/121205455</link><guid>https://blog.youkuaiyun.com/activety/article/details/121205455</guid><author>activety</author><pubDate>Mon, 08 Nov 2021 16:06:06 +0800</pubDate><description><![CDATA[AOP方案


写死代码


静态代理


动态代理:JDK和CGLIB


Spring AOP


Spring+AspectJ


静态代理
代理类和被代理的类实现了同样的接口，代理类同时持有被代理类的引用，这样，当我们需要调用被代理类的方法时，可以通过调用代理类的方法来做到

package com.example.kafka.tes;

import com.example.kafka.tes.service.UserService;
import com.example.kafka.tes.se]]></description><category></category></item><item><title><![CDATA[redis可重入锁]]></title><link>https://blog.youkuaiyun.com/activety/article/details/106879683</link><guid>https://blog.youkuaiyun.com/activety/article/details/106879683</guid><author>activety</author><pubDate>Sat, 20 Jun 2020 23:41:38 +0800</pubDate><description><![CDATA[package com.example.demo.util;

import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: lihaozhen
 * @Date: 2020/6/20 23:12
 * @Descriptio]]></description><category></category></item><item><title><![CDATA[redis锁-注解版]]></title><link>https://blog.youkuaiyun.com/activety/article/details/106575501</link><guid>https://blog.youkuaiyun.com/activety/article/details/106575501</guid><author>activety</author><pubDate>Fri, 05 Jun 2020 17:57:40 +0800</pubDate><description><![CDATA[Redis实现分布式锁利用 SETNX 和 SETEX
基本命令主要有：
SETNX(SET If Not Exists)：
当且仅当 Key 不存在时，则可以设置，否则不做任何动作。
当且仅当 key 不存在，将 key 的值设为 value ，并返回1；若给定的 key 已经存在，则 SETNX 不做任何动作，并返回0。
SETEX：
基于SETNX功能外,还可以设置超时时间，防止死锁。
项目图	
代码实现
application.yml
# Redis数据库索引（默认为0）
spring.redis.]]></description><category></category></item><item><title><![CDATA[LRU缓存实例]]></title><link>https://blog.youkuaiyun.com/activety/article/details/106567917</link><guid>https://blog.youkuaiyun.com/activety/article/details/106567917</guid><author>activety</author><pubDate>Fri, 05 Jun 2020 12:52:39 +0800</pubDate><description><![CDATA[一、什么是 LRU 算法
LRU算法又称最近最少使用算法，它的基本思想是长期不被使用的数据，在未来被用到的几率也不大，所以当新的数据进来时我们可以优先把这些数据替换掉。
代码实现
/**
 * @Author: 李浩真
 * @Date: 2020/6/5 12:40
 * @deprecated :LUR缓存（最近最少使用）的简单实现
 */
public class LRETest {
    public static void main(String[] args) {
        //true]]></description><category></category></item><item><title><![CDATA[使用rocketMQ进行通信]]></title><link>https://blog.youkuaiyun.com/activety/article/details/106565964</link><guid>https://blog.youkuaiyun.com/activety/article/details/106565964</guid><author>activety</author><pubDate>Fri, 05 Jun 2020 10:59:50 +0800</pubDate><description><![CDATA[需求：确定两个平台之间能够正常通信，以及业务模块在绑定授权码后像控制平台发送一条消息
代码实现：
application.yml
rocketmq:
  name-server: 199.199.199.199:9876;199.199.199.199:9876
  #name-server: 127.0.0.1:9876
  producer:
    group: sveco-shortvideo-be-parent-dev
    send-message-timeout: 30000
    #发送]]></description><category></category></item><item><title><![CDATA[对请求的参数进行验签]]></title><link>https://blog.youkuaiyun.com/activety/article/details/106563457</link><guid>https://blog.youkuaiyun.com/activety/article/details/106563457</guid><author>activety</author><pubDate>Fri, 05 Jun 2020 10:11:20 +0800</pubDate><description><![CDATA[需求描述：前端发起请求的参数携带sign=xxxx,后台验证签名是够正确
sign签名生成规则：
1.将post请求的body转成jsonstring (按照body里key的自然升序排列)，得到stringA，即: “reqBody=jsonstring"2.对字符串stringA="reqBody={jsonstring}"
	2.对字符串stringA="reqBody=jsonstring"2.对字符串stringA="reqBody={jsonstring}”, stringB=“cpToken=]]></description><category></category></item><item><title><![CDATA[用策略模式处理不同订单的业务流程]]></title><link>https://blog.youkuaiyun.com/activety/article/details/106544146</link><guid>https://blog.youkuaiyun.com/activety/article/details/106544146</guid><author>activety</author><pubDate>Thu, 04 Jun 2020 13:35:42 +0800</pubDate><description><![CDATA[策略模式的核心是要把频繁发生变化的部分封装起来，作用是把变化部分的影响隔离开，避免局部的变化对其它fixed部分造成影响，设计时可能需要更多的时间，但便于维护、复用与扩展（我的目的就是为了解决sql查出订单类型，不同的订单类型，走不同的处理流程）

VO类
@Data
public class OrderVo {

    /**
     * 订单id（自增主键）
     */
    private String id;
    /**
     * 总价
     */
    private Bi]]></description><category></category></item><item><title><![CDATA[用map做缓存]]></title><link>https://blog.youkuaiyun.com/activety/article/details/106522238</link><guid>https://blog.youkuaiyun.com/activety/article/details/106522238</guid><author>activety</author><pubDate>Wed, 03 Jun 2020 13:25:42 +0800</pubDate><description><![CDATA[需求：
公共层写一个map，用来做数据缓存（没有redis）
代码实现
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @Author: 李大本事
 * @Date: 2020/6/1 11:27
 */
public class MemoryCacheUtils {
    private static Map&lt;String, CacheData&gt; CACHE_DATA;

    sta]]></description><category></category></item><item><title><![CDATA[前后端传递参数不一致]]></title><link>https://blog.youkuaiyun.com/activety/article/details/106520500</link><guid>https://blog.youkuaiyun.com/activety/article/details/106520500</guid><author>activety</author><pubDate>Wed, 03 Jun 2020 12:25:14 +0800</pubDate><description><![CDATA[描述：实体类有一个字段deviceId，前端传递参数为device_id
目录结构目录结构

]]></description><category></category></item></channel></rss>