<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[赵俊杰]]></title><description><![CDATA[河海不择细流,故能就其深！]]></description><link>https://blog.youkuaiyun.com/MrBack</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; MrBack]]></copyright><item><title><![CDATA[Spring事件机制使用]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/118573826</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/118573826</guid><author>MrBack</author><pubDate>Thu, 08 Jul 2021 15:05:47 +0800</pubDate><description><![CDATA[一、定义好事件。这里的Map 应该改为事件要传递的对象。


public class InquiryRefundEvent extends ApplicationEvent {

    private Map&lt;String,String&gt; data;
    public InquiryRefundEvent(Object source) {
        super(source);
    }
    public InquiryRefundEvent(Object source, M]]></description><category></category></item><item><title><![CDATA[按K元素分组反转链表算法实现思路及代码]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/118526385</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/118526385</guid><author>MrBack</author><pubDate>Tue, 06 Jul 2021 18:06:50 +0800</pubDate><description><![CDATA[1、问题：给定链表，对链表中的元素，每K个一组，组内元素反转，不足K个不动

2、思路

1）先实现链表（使用头插法）

2）对链表迭代元素，一旦找到第K个元素，则可知本组内第一个和最后一个元素

3）组内元素反转，返回本组首位元素

4）迭代计数器重置，记录反转的组的原最后一个元素的下一个元素，所谓下一组的第一个元素，

记录反转后的首位元素

5）如果上个组的首位元素记录值不为空，则拼接两个反转后的组

3、代码


public class ReverseDemo {


    @Getter
  ]]></description><category></category></item><item><title><![CDATA[任务调度中心实现（一） Quartz集群方式]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/104243057</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/104243057</guid><author>MrBack</author><pubDate>Tue, 15 Jun 2021 19:34:57 +0800</pubDate><description><![CDATA[一、Quartz集群实现任务调度

1、测试版本Quartz2.3.2

2、Quartz初始化数据库。https://github.com/quartz-scheduler/quartz/tree/quartz-2.1.x/docs/dbTables

3、quartz.properties集群持久化配置。此时具备了调度故障转移及负载均衡、quartz任务持久化能力。


# Default P...]]></description><category></category></item><item><title><![CDATA[任务调度中心实现（二）节点竞争拉取任务的方式]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/104313244</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/104313244</guid><author>MrBack</author><pubDate>Tue, 15 Jun 2021 19:34:03 +0800</pubDate><description><![CDATA[1、任务计划表和任务记录表设计。

任务计划表展开原码

任务执行记录表展开原码

2、参数介绍。

1）、task_type.任务类型。对于开发好的不同后端逻辑的任务。比如：任务归档的任务类型为DATAFILER.task_type要与对应job的实现对应。

TaskType示例展开原码

上面的TaskType中用到了自定义Job。Job初步设计如下：

AbstractJob中统一完...]]></description><category></category></item><item><title><![CDATA[任务调度中心实现方式（三） 事件驱动异步任务分发]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/104352336</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/104352336</guid><author>MrBack</author><pubDate>Tue, 15 Jun 2021 19:33:15 +0800</pubDate><description><![CDATA[1、初步设计的应用任务结构。jobkey设计为前缀“app_job-”+id. jobkey=triggerkey

任务管理表折叠原码


			DROP TABLE IF EXISTS `APPLICATION_TASK`;

			CREATE TABLE `APPLICATION_TASK` (

			`id` bigint(10) NOT NULL AUTO_INCREME...]]></description><category></category></item><item><title><![CDATA[RocketMq tag动态设置失效问题]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/116151652</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/116151652</guid><author>MrBack</author><pubDate>Mon, 26 Apr 2021 13:26:48 +0800</pubDate><description><![CDATA[问题：Springboot整合RocketMQ后动态tag设置失效！

依赖：


&lt;!--    rocketMQ    --&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.apache.rocketmq&lt;/groupId&gt;
            &lt;artifactId&gt;rocketmq-spring-boot-starter&lt;/artifactId&gt;
            &lt;]]></description><category></category></item><item><title><![CDATA[一个数是否为2的次方的更好求解方式]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/115270037</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/115270037</guid><author>MrBack</author><pubDate>Sat, 27 Mar 2021 19:16:35 +0800</pubDate><description><![CDATA[问题：判断一个数是否为2的次方？

解决代码：尽量使用位运算 会比一直除2 取模的方式快一些


/**
 * 2的n次方的正整数代表：某个位是1，其他位是0
 * 负整数代表：连续为0 (取反 + 1 为真实表示的值)
 * 1...10
 * 1...00
 * 1..000
 */
public class BackDemo {

    public static boolean valid(int num){
        boolean isPositive = (num &amp; (1 &]]></description><category></category></item><item><title><![CDATA[多线程工具--CyclicBarrier]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/114994685</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/114994685</guid><author>MrBack</author><pubDate>Fri, 19 Mar 2021 01:30:23 +0800</pubDate><description><![CDATA[写两个CyclicBarrier、Phaser的例子。

一、CyclicBarrier。线程达到一定数量再一起执行


public class Test_Cyclic {

    public static void main(String[] args) {


        CyclicBarrier cyclicBarrier = new CyclicBarrier(3, () -&gt; System.out.println("执行"));

        for (int i = 0; ]]></description><category></category></item><item><title><![CDATA[SpringBoot启动源码梳理]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/113618548</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/113618548</guid><author>MrBack</author><pubDate>Wed, 03 Feb 2021 20:05:36 +0800</pubDate><description><![CDATA[源码梳理

Springboot入口。SpringApplication.run


public ConfigurableApplicationContext run(String... args) {
     StopWatch stopWatch = new StopWatch();
     stopWatch.start();
     ConfigurableApplicationContext context = null;
     Collection&lt;Sp...]]></description><category></category></item><item><title><![CDATA[加密算法benchmark对比]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/113546652</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/113546652</guid><author>MrBack</author><pubDate>Tue, 02 Feb 2021 11:35:06 +0800</pubDate><description><![CDATA[https://github.com/benalexau/hash-bench/blob/master/results/5/README.md#city64-zah-latency

cityhash算法：
https://gist.github.com/andriimartynov/bae6b8b2e8a3ecaace61
]]></description><category></category></item><item><title><![CDATA[接口响应时间长问题排查流程]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/111624376</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/111624376</guid><author>MrBack</author><pubDate>Thu, 24 Dec 2020 13:45:39 +0800</pubDate><description><![CDATA[当一个接口响应时间非常长时，如何定位问题并解决？

1、先拿到curl。浏览器netWork --&gt; copy as curl 如果是app则抓包下，copy出来.如下：


curl -H 'Host: saasremote.api.test.ybm100.com' -H 'Cookie: uid=CgoUFF/J3UVXIkMEB0//Ag==' -H 'apptype: 3' -H 'user-agent: ling zhi wen zhen ce shi/2.1.2 (iPhone; iOS ]]></description><category></category></item><item><title><![CDATA[喜欢的话]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/110461786</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/110461786</guid><author>MrBack</author><pubDate>Wed, 02 Dec 2020 02:57:25 +0800</pubDate><description><![CDATA[生如蝼蚁当立鸿鹄之志，命薄如纸应有不屈之心
]]></description><category></category></item><item><title><![CDATA[Disruptor替代queue并解决queue的一些问题]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/108224729</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/108224729</guid><author>MrBack</author><pubDate>Tue, 25 Aug 2020 16:58:01 +0800</pubDate><description><![CDATA[一，遇到的问题。

在工作项目中，数据处理完成后合并数据放入一个LinkedTransferQueue中，会有一些长线程来不断地从队列中拿写到数据库。

由此产生以下问题：

1）因为LinkedTransferQueue是无界的，同时使用了transfer + take解决了一部分问题，但是程内部运行的数据处理线程数量多的时候，只有没有限制，会产生完整的GC。

2）LinkedTransferQueue是无锁的，但是内部数据结构使用LinkedList，不断添加，删除元素会导致重复gc



基于以上.]]></description><category></category></item><item><title><![CDATA[关于Dubbo]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/107503177</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/107503177</guid><author>MrBack</author><pubDate>Wed, 22 Jul 2020 02:29:21 +0800</pubDate><description><![CDATA[前言：

1、本文内容阅读Dubbo官方文档获得

2、本文是Java API的角度使用Dubbo，不使用Spring.

一、快速体验Dubbo API

版本：2.7.7

1、服务提供者。nacos直接将zookeeper换为nacos即可


			ApplicationConfig application =newApplicationConfig();

			application.setName("dubbo-server");

			

			// 连接注册中心配置

			Reg...]]></description><category></category></item><item><title><![CDATA[对于重构的思考]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/106968412</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/106968412</guid><author>MrBack</author><pubDate>Fri, 26 Jun 2020 12:26:13 +0800</pubDate><description><![CDATA[最近接到一个任务，大致就是在一段代码里多加一个else if 来做些事情。考虑到后面有可能还会加条件，想重构部分代码弄成策略的。做了大半后发现业务逻辑比我想象的要复杂，按这个思路重构完可能会出现意外的bug，或者重构失败。于是我打算还是加else if来解决。



这件事情的教训就是：

在非常了解一段逻辑之后再考虑重构。贸然重构可能会产生错误估计及更多意外效果。



先做完任务，多阅读下这块逻辑，更了解些后看看那有没有机会重新重构下吧。

这里记录下此时的想法
...]]></description><category></category></item><item><title><![CDATA[Spark复习（一）电光火石间体验Spark2.x开发]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/106893560</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/106893560</guid><author>MrBack</author><pubDate>Mon, 22 Jun 2020 00:04:49 +0800</pubDate><description><![CDATA[直接上数据格式、问题、代码。先按照Java来复习下。复习完再复习Scala

一、数据准备、格式介绍.

1、评分数据。数据为 UserId::MovieId::Rating::timestamp. 文件名rating.bat


1::1193::5::978300760
1::661::3::978302109
1::914::3::978301968
1::3408::4::978300275

2、电影数据。数据为 MovieID::Title::Gengres


1::Toy Story (1.]]></description><category></category></item><item><title><![CDATA[行为模式之解释器模式 示例]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/106887429</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/106887429</guid><author>MrBack</author><pubDate>Sun, 21 Jun 2020 16:55:54 +0800</pubDate><description><![CDATA[今天复习设计模式看到解释器模式。想到之前我碰到过的一个问题。


问题：前后端多条件的解析。
例：某字符串token开始于“a” 且包含“b” 或长度等于10

之前是通过三方的组件解决的。如果要自己实现一个可扩展、易交互的方案。之前没想到什么好办法。

其实可以用解释器模式封装两层来解决。

但我的解释器示例以另一个更简单的例子做一个举例。上面的仅是一个思考。


问题：波兰表示法。运算符末尾添加操作数的方式
例：1 2 + 代表1+2的运算。 3 4 + 5 - 6 + 代表3+4-5+6的运算

解释]]></description><category></category></item><item><title><![CDATA[git快速下载地址]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/105353023</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/105353023</guid><author>MrBack</author><pubDate>Mon, 06 Apr 2020 22:17:20 +0800</pubDate><description><![CDATA[git国内镜像：

https://npm.taobao.org/mirrors/git-for-windows/
]]></description><category></category></item><item><title><![CDATA[从零RPC（六） 诸多框架整和Spring的秘密]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/105172907</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/105172907</guid><author>MrBack</author><pubDate>Sun, 29 Mar 2020 07:50:39 +0800</pubDate><description><![CDATA[本章内容：

1、Spring FactoryBean、InitializingBean的作用。

2、自定义xsd文件。用来自定义Spring xml文件的标签。

3、扩展BeanDefinitionParser建立自定义标签解析成为我们自定义bean的过程。

4、自定义bean的后置操作完成Netty服务开启（后面会介绍）、注册中心注册等动作。



一、Spring FactoryBe...]]></description><category></category></item><item><title><![CDATA[从零RPC(五) 使用zookeeper做注册中心，并完成服务发现等功能]]></title><link>https://blog.youkuaiyun.com/MrBack/article/details/99688401</link><guid>https://blog.youkuaiyun.com/MrBack/article/details/99688401</guid><author>MrBack</author><pubDate>Sun, 29 Mar 2020 07:02:51 +0800</pubDate><description><![CDATA[一、首先添加依赖


&lt;dependency&gt;
		    &lt;groupId&gt;org.apache.zookeeper&lt;/groupId&gt;
		    &lt;artifactId&gt;zookeeper&lt;/artifactId&gt;
		    &lt;version&gt;3.4.5&lt;/version&gt;
		    &lt;exclus...]]></description><category></category></item></channel></rss>