<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[jay_888的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/jay_888</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jay_888]]></copyright><item><title><![CDATA[Event Driver设计模式]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/123580265</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/123580265</guid><author>jay_888</author><pubDate>Fri, 18 Mar 2022 17:25:36 +0800</pubDate><description><![CDATA[EDA是一种实现组件之间松耦合、易扩展的架构方式。

一、EDA设计模式包含的组件：
1、Events：需要被处理的数据
2、Event Handlers：处理Events的方法
3、Event Loop：维护Events与Event Handlers之间的交互流程
二、EDA框架的基础接口设计：
1、Message：相当于上面Event
/**


Event可以被称为Message
*/
public interface Message {
/**

返回Message的类型
/
Class&lt;?.]]></description><category></category></item><item><title><![CDATA[StampedLock的小陷阱]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/122044618</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/122044618</guid><author>jay_888</author><pubDate>Mon, 20 Dec 2021 16:39:31 +0800</pubDate><description><![CDATA[StampedLock内部实现时，使用类似于CAS操作的死循环反复尝试的策略。在它挂起线程时，使用的是Unsafe.park()函数，而park()函数在遇到线程中断时，会直接返回（注意，不同于Thread.sleep()方法，他不会抛出异常）。而在StampedLock的死循环逻辑中，没有处理有关中断的逻辑。因此，这就会导致阻塞在park()方法上的线程被中断后，再次进入循环。而当退出条件得不到满足时，就会发生疯狂占用CPU的情况。演示代码如下：
package com.aden.powoms.biz.d]]></description><category></category></item><item><title><![CDATA[Java设计类原则]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/106101987</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/106101987</guid><author>jay_888</author><pubDate>Wed, 13 May 2020 17:00:14 +0800</pubDate><description><![CDATA[一、面向对象设计原理：
1、单一职责原则
1)、定义：
一个类，只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线，如果一个类有一个以上的
职责，这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时，可能会影响其它的职责。另外，多个
职责耦合在一起，会影响复用性。
2)、遵循单一职责的优点：
可以降低类的复杂度，一个类只负责一项职责，其逻辑肯定要比负责多项职责简单的多；
提高类的可读性，提高系统的可维护性；
变更引起的风险降低，变更是必然的，如果单一职责原则遵守的好，当修.]]></description><category></category></item><item><title><![CDATA[freemarker渲染模板]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/103202546</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/103202546</guid><author>jay_888</author><pubDate>Fri, 22 Nov 2019 16:06:12 +0800</pubDate><description><![CDATA[/**
* 对模板进行渲染
* @param data 数据Map
* @param tplStr 模板
* @return
*/
public static String execFreemarkerTemplate(String templateStr, Map params) {
Configuration cfg = new Configuration();
StringTemplateL...]]></description><category></category></item><item><title><![CDATA[Guava做令牌桶限流：]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/103072274</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/103072274</guid><author>jay_888</author><pubDate>Thu, 14 Nov 2019 18:03:16 +0800</pubDate><description><![CDATA[转载博客：https://blog.youkuaiyun.com/aa1215018028/article/details/80866335

]]></description><category></category></item><item><title><![CDATA[Mysql中GROUP_CONCAT函数的使用：]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/101420744</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/101420744</guid><author>jay_888</author><pubDate>Thu, 26 Sep 2019 08:55:44 +0800</pubDate><description><![CDATA[select sr.batch_no,
GROUP_CONCAT(DISTINCT(s.risk_type) Separator ‘_’) riskType
from adc_fund_table_scene s
inner join adc_fund_table_scene_drill_record sr on s.scene_code = sr.scene_code
GROUP BY sr.b...]]></description><category></category></item><item><title><![CDATA[调用服务的封装]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/100100003</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/100100003</guid><author>jay_888</author><pubDate>Tue, 27 Aug 2019 15:13:05 +0800</pubDate><description><![CDATA[package com.learn.com.sort;
import java.util.concurrent.Callable;
public class Rests {
private Rests() {}

private static DefaultHandler defaultHandler = new DefaultHandler();

/**
 * 执行服务调用并判断返回状态
 *...]]></description><category></category></item><item><title><![CDATA[微服务与单体服务的拆分原则]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/100081938</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/100081938</guid><author>jay_888</author><pubDate>Mon, 26 Aug 2019 17:19:22 +0800</pubDate><description><![CDATA[表级锁的争用状态变量：
show status like ‘table%’;
行级锁争用状态变量：
show status like ‘innodb_row_lock%’;
单体架构的优势：
1、便于开发
2、易于测试
3、易于部署
单体架构的不足：
1、复杂性高
2、交付效率低：构建和部署耗时长
3、伸缩性差：只能按整体横向扩展，无法分模块垂直扩展，IO密集型模块和CPU密集型模块无法独立升级和...]]></description><category></category></item><item><title><![CDATA[Reactive的方式访问Redis]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/99726594</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/99726594</guid><author>jay_888</author><pubDate>Mon, 19 Aug 2019 14:36:06 +0800</pubDate><description><![CDATA[参考博客为：
https://blog.youkuaiyun.com/weixin_38003389/article/details/90239641

]]></description><category></category></item><item><title><![CDATA[Hystrix及gateaway限流操作]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/99550116</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/99550116</guid><author>jay_888</author><pubDate>Wed, 14 Aug 2019 11:26:42 +0800</pubDate><description><![CDATA[参考博客：
1、https://blog.youkuaiyun.com/chenxyz707/article/details/80913725
2、https://blog.youkuaiyun.com/u010889990/article/details/81169328
3、https://blog.youkuaiyun.com/xuxinpingcj/article/details/84801250
4、https://blo...]]></description><category></category></item><item><title><![CDATA[程序猿谨记]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/99304190</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/99304190</guid><author>jay_888</author><pubDate>Mon, 12 Aug 2019 15:26:28 +0800</pubDate><description><![CDATA[1、函数不要超过50行。
2、不要一次性写太多来不及测的代码，而是要写一段调试一段。
3、UT和编码要同步做。
4、多写注释方便的往往是自己。
5、碰到一堆问题时，一次只尝试解决一个问题。
6、没把握一眼看出问题症结的时候，老老实实单步调试。
7、设计模式是个好东西，但不要强行使用。
8、没造成可观的损失前不要尝试做性能优化。
9、没事别重复造轮子。
10、大多数情况下Boss不关心技术含量，而且...]]></description><category></category></item><item><title><![CDATA[Bean 复制的几种框架比较]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/99302534</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/99302534</guid><author>jay_888</author><pubDate>Mon, 12 Aug 2019 14:59:21 +0800</pubDate><description><![CDATA[4 种复制方法：
Apache BeanUtils
Apache PropertyUtils
Spring BeanUtils
Cglib BeanCopie（效果最好）
参考博文：https://blog.youkuaiyun.com/benben683280/article/details/80903571

]]></description><category></category></item><item><title><![CDATA[Spring-service本类中方法调用另一个方法事务不生效问题]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/99291610</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/99291610</guid><author>jay_888</author><pubDate>Mon, 12 Aug 2019 10:55:00 +0800</pubDate><description><![CDATA[参考博客：https://blog.youkuaiyun.com/benben683280/article/details/78839853

]]></description><category></category></item><item><title><![CDATA[浅谈ELK日志系统]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/98477321</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/98477321</guid><author>jay_888</author><pubDate>Mon, 05 Aug 2019 07:41:08 +0800</pubDate><description><![CDATA[参考博客地址：
https://mp.weixin.qq.com/s?__biz=MzI4NjI2OTYwNg==&amp;mid=2247484980&amp;idx=1&amp;sn=60d0c76a97ab52563caabf2e69ccce88&amp;chksm=ebdecffddca946eb189c6b3843c7524864bb39eb8fe7960470d7a550a3e10cb...]]></description><category></category></item><item><title><![CDATA[WebSocket的Demo]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/96723376</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/96723376</guid><author>jay_888</author><pubDate>Sun, 21 Jul 2019 15:04:45 +0800</pubDate><description><![CDATA[参考GitHub地址：https://github.com/yy1193889747/chat-demo
https://github.com/zhaodongxx/spring-boot2-websocket

]]></description><category></category></item><item><title><![CDATA[git提交代码不在本分支的解决办法]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/96558980</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/96558980</guid><author>jay_888</author><pubDate>Sat, 20 Jul 2019 08:21:36 +0800</pubDate><description><![CDATA[使用git命令：git branch --set-upstream-to=origin/branch(需要切换到的分支)

]]></description><category></category></item><item><title><![CDATA[websocket使用session为null的解决办法]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/96558887</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/96558887</guid><author>jay_888</author><pubDate>Sat, 20 Jul 2019 08:19:47 +0800</pubDate><description><![CDATA[参考博客：https://www.cnblogs.com/coder163/p/8605645.html

]]></description><category></category></item><item><title><![CDATA[浅谈事务的传播特性]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/94640798</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/94640798</guid><author>jay_888</author><pubDate>Thu, 04 Jul 2019 18:25:01 +0800</pubDate><description><![CDATA[参考博客：https://www.cnblogs.com/yixianyixian/p/8372832.html

]]></description><category></category></item><item><title><![CDATA[线程池的使用]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/94640168</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/94640168</guid><author>jay_888</author><pubDate>Thu, 04 Jul 2019 18:17:29 +0800</pubDate><description><![CDATA[参考博客：https://www.cnblogs.com/owenma/p/8557074.html

]]></description><category></category></item><item><title><![CDATA[Java8中使用以下类计算日期时间差：Period、Duration、ChronoUnit]]></title><link>https://blog.youkuaiyun.com/jay_888/article/details/93461311</link><guid>https://blog.youkuaiyun.com/jay_888/article/details/93461311</guid><author>jay_888</author><pubDate>Mon, 24 Jun 2019 09:23:13 +0800</pubDate><description><![CDATA[参考博客：https://blog.youkuaiyun.com/qq_26974471/article/details/89151345

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