TDW-JAVA-研发技术点纪录

版权声明:请说明出处 https://blog.csdn.net/wah198703/article/details/80453339
1、使用@Async 注解 ,使用spring 异步处理方法(https://blog.csdn.net/hry2015/article/details/67640534)
2、使用@Qualifier(用哪个),多个实例实现了一个接口,在注入的时候告诉spring用哪个
(https://www.cnblogs.com/smileLuckBoy/p/5801678.html)
3、幂等性,就是多次操作,结果都一样。 比如,读取一个文件,1次和10次,读出来的内容应该是一样的。
4、RestTemplate,简单来说就是,spring的一个操作rest风格的工具类,get,post,put,delete 随便选择

5、AtomicInteger

6、使用了静态代码块,静态代码块,会在加载类的时候就将静态代码块的内容加载到内存中。

7、使用了Map来做单例模式,抽象工厂模式

public class SendPrizeStrategyFactory {
    private static Map<Integer, SendPrizeStrategy> sendPrizeStrategyMap = Maps.newHashMap();//这里定义一个空的Map

    static {
        ApplicationContext applicationContext = ApplicationContextHolder.context; //使用团贷网封装好的工具
        SendPrizeStrategy baoxiangSendPrizeStrategy = applicationContext.getBean(TuanBaoxiangSendPrizeStrategy.class);//获取实例,cglib实现原理,动态代理
        TuanBiSendPrizeStrategy tuanBiSendPrizeStrategy = applicationContext.getBean(TuanBiSendPrizeStrategy.class);
        SendPrizeStrategy ticketSendPrizeStrategy = applicationContext.getBean(TicketSendPrizeStrategy.class);

        // 红包、实物类奖品使用 团宝箱服务发送奖品
        sendPrizeStrategyMap.put(PrizesTypeId.RED_BONUSES_TYPE_ID, baoxiangSendPrizeStrategy);// 用Map装入实例
        sendPrizeStrategyMap.put(PrizesTypeId.MATERIAL_GITF, baoxiangSendPrizeStrategy);

        // 团币奖品使用 团币服务发送奖品
        sendPrizeStrategyMap.put(PrizesTypeId.TUANBI_TYPE_ID, tuanBiSendPrizeStrategy);
        // 抽奖券使用,补偿抽奖券
        sendPrizeStrategyMap.put(PrizesTypeId.CARDS_TYPE_ID, ticketSendPrizeStrategy);
    }

    private SendPrizeStrategyFactory() {
    }

    public static void addSendPrizeStrategy(Integer prizesTypeId, SendPrizeStrategy sendPrizeStrategy) {
        if (!sendPrizeStrategyMap.containsKey(prizesTypeId)) {
            sendPrizeStrategyMap.put(prizesTypeId, sendPrizeStrategy);
        }
    }

    public static SendPrizeStrategy findStrategy(Integer prizesTypeId) {
        SendPrizeStrategy sendPrizeStrategy = sendPrizeStrategyMap.get(prizesTypeId);
        if (sendPrizeStrategy != null) {
            return sendPrizeStrategy;  //获取实例
        }

        throw new AppBusinessException(Activity518ErrorCode.SEND_PRIZE_STRATEGY_NOT_FOUND);
    }

}

8、多次使用String.format(%sAAAA%s) ,来拼接字符串,这样性能会高些吗?

9、多次使用策略模式,先定义一个抽象类,在这个抽象类里面写一些公用方法。新创建的类就继承这个抽象类,并重写抽象方法。这样可以用调用不同的类,使用不同的方法。(这样做法,在功能上来说,和switch的功能差不多,只是把case的内容放到一个类里面去了,当然用继承的方法去做的话,在别人看你的代码的时候就显得更加高大上些,但是本质还是一样的事情)

10、使用过了分布式锁,目的,防止用户多次提交。

// 获取分布式锁
            boolean isLock = jedisService.tryGetDistributedLock(coinLockKey, requestId, 100);
    /**
     * 尝试获取分布式锁
     * @param lockKey 锁
     * @param requestId 请求标识
     * @param expireTime 超期时间
     * @return 是否获取成功
     */
    public boolean tryGetDistributedLock(String lockKey, String requestId, int expireTime) {
        RedisConnection conn = jedisConnectionFactory.getConnection();
        Jedis jedis = (Jedis) conn.getNativeConnection();
        String result = jedis.set(lockKey, requestId, "NX", "PX", expireTime);
        conn.close();
        if (LOCK_SUCCESS.equals(result)) {
            return true;
        }
        return false;

    }

11、包装类就使用包装类的方法来进行比较数字

12、




猜你喜欢

转载自blog.csdn.net/wah198703/article/details/80453339
今日推荐