TDW-JAVA-研發技術點紀錄
阿新 • • 發佈:2018-12-14
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、