<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[datastructure18的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/datastructure18</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; datastructure18]]></copyright><item><title><![CDATA[RocketMQ订阅关系不一致浅析]]></title><link>https://blog.youkuaiyun.com/datastructure18/article/details/128115883</link><guid>https://blog.youkuaiyun.com/datastructure18/article/details/128115883</guid><author>datastructure18</author><pubDate>Wed, 30 Nov 2022 16:03:23 +0800</pubDate><description><![CDATA[本文先介绍背景，分析官方文档中的一些场景，包括正确和错误的订阅关系，然后对出现订阅关系不一致进行原来解析，最后对MQ消息出现问题的场景做出应对解决方案。]]></description><category></category></item><item><title><![CDATA[Spring参数校验和全局异常处理]]></title><link>https://blog.youkuaiyun.com/datastructure18/article/details/124649835</link><guid>https://blog.youkuaiyun.com/datastructure18/article/details/124649835</guid><author>datastructure18</author><pubDate>Sun, 08 May 2022 16:34:39 +0800</pubDate><description><![CDATA[目录



一、前言

二、Validation

1、JSR-303

2、Spring Validation

3、@Validated和@Valid的区别

三、全局异常处理

1、为何要处理异常

2、@RestControllerAdvice

3、返回自定义消息

四、全局异常原理解析

1、ControllerAdvice的加载

2、Controller接口异常如何进入exceptionHandler方法

五、总结

参考

一、前言

数据校验在业务代码中经常用到，比如前...]]></description><category></category></item><item><title><![CDATA[RocketMQ消息存储之刷盘机制（原理篇）]]></title><link>https://blog.youkuaiyun.com/datastructure18/article/details/124538735</link><guid>https://blog.youkuaiyun.com/datastructure18/article/details/124538735</guid><author>datastructure18</author><pubDate>Mon, 02 May 2022 12:00:07 +0800</pubDate><description><![CDATA[一、前言

RocketMQ的刷盘机制是一种确保消息可靠性的机制，简单来说就是Broker收到消息后，将消息存储到磁盘上。这样可以解决几个问题：

存储空间问题。内存空间有限，存入磁盘可以维护更多消息。
	消息可靠性问题。消息存入磁盘后，即使断电了，重启后便可恢复消息。
二、刷盘机制原理

RocketMQ的刷盘机制原理可以参考下图。下图为官方文档的原理图，主要说明两种刷盘机制：左图是同步刷盘机制，右图是异步刷盘机制。





1、同步刷盘

上面左图代表...]]></description><category></category></item><item><title><![CDATA[RocketMQ消息存储之物理存储与逻辑存储]]></title><link>https://blog.youkuaiyun.com/datastructure18/article/details/122012519</link><guid>https://blog.youkuaiyun.com/datastructure18/article/details/122012519</guid><author>datastructure18</author><pubDate>Sat, 18 Dec 2021 16:18:05 +0800</pubDate><description><![CDATA[RocketMQ消息存储主要发生在Broker端，作为一种高可用消息中间件，RocketMQ具有独特的消息存储方式：RocketMQ消息存储分为物理存储和逻辑存储，物理存储发生在CommitLog文件中；逻辑存储发生在ConsumeQueue和Index文件中。]]></description><category></category></item><item><title><![CDATA[mac的crontab没有执行的原因]]></title><link>https://blog.youkuaiyun.com/datastructure18/article/details/121573809</link><guid>https://blog.youkuaiyun.com/datastructure18/article/details/121573809</guid><author>datastructure18</author><pubDate>Mon, 29 Nov 2021 12:59:40 +0800</pubDate><description><![CDATA[crontab是一种定时任务调度工具，其用途就是根据表达式在特定的时间执行特定的任务。具体的时间可以用cron表达式表述，任务可以是sh脚本，也可以是基本的命令。]]></description><category></category></item><item><title><![CDATA[Java日志规范]]></title><link>https://blog.youkuaiyun.com/datastructure18/article/details/120937506</link><guid>https://blog.youkuaiyun.com/datastructure18/article/details/120937506</guid><author>datastructure18</author><pubDate>Sun, 24 Oct 2021 18:04:17 +0800</pubDate><description><![CDATA[一、日志级别

org.apache.log4j.Level的日志级别总共有8种，从All到Off，日志输出优先级依次变高。通过日志级别，可以控制到应用程序中相应级别的日志信息的开关。比如应用中定义日志级别是Info，那么在Info级别以下的日志就不会输出，即Debug、Trace等级别的日志不会被输出。



日志级别的含义：

OFF：最高级别，关闭日志，不打印日志。
	FATAL：致命日志，指明非常严重的可能会导致应用终止执行错误事件。
	ERROR：错误日志，这种级别...]]></description><category></category></item><item><title><![CDATA[logback-spring.xml配置详解]]></title><link>https://blog.youkuaiyun.com/datastructure18/article/details/120919329</link><guid>https://blog.youkuaiyun.com/datastructure18/article/details/120919329</guid><author>datastructure18</author><pubDate>Sat, 23 Oct 2021 12:30:32 +0800</pubDate><description><![CDATA[日志配置文件，官方文档建议使用-spring 命令格式的配置，日志框架不直接加载，由SpringBoot解析日志配置，如：logback-spring.xml。如果直接定义为logback.xml 将直接被日志框架识别。下面详细解释下logback-spring.xml中属性的具体作用：


&lt;configuration&gt;
     &lt;contextListener class="com.ofpay.logback.TtlMdcListener"/&gt;

    &lt...]]></description><category></category></item><item><title><![CDATA[Collections.sort引发的线上问题及原理研究]]></title><link>https://blog.youkuaiyun.com/datastructure18/article/details/120638123</link><guid>https://blog.youkuaiyun.com/datastructure18/article/details/120638123</guid><author>datastructure18</author><pubDate>Thu, 07 Oct 2021 17:04:46 +0800</pubDate><description><![CDATA[目录



一、问题重现

二、Arrays.sort源码分析

三、TimSort

1、TimSort简介

2、TimSort原理

1）、二分插入排序

2）、minRunLength

3）、do-while循环

3、TimSort异常案例分析

四、总结

五、参考

一、问题重现


@Data
public class BusinessApplyDto implements Comparable&lt;BusinessApplyDto&gt;, Serializable {

    pr]]></description><category></category></item><item><title><![CDATA[mapstruct常见用法梳理]]></title><link>https://blog.youkuaiyun.com/datastructure18/article/details/120400228</link><guid>https://blog.youkuaiyun.com/datastructure18/article/details/120400228</guid><author>datastructure18</author><pubDate>Sat, 25 Sep 2021 20:53:39 +0800</pubDate><description><![CDATA[目录

一、前言

二、mapstruct使用前的准备

1、maven方式

2、Gradle方式

3、 Apache Ant方式

三、mapstruct使用方式梳理

1、最简单的映射

2、不同属性名映射

3、不同类型映射

    1）、日期格式转化   

    2）、数字格式转化

4、List映射

5、Map和Set映射

6、枚举映射

四、总结

参考

一、前言

    在互联网企业中，随着业务越来越繁琐，导致系统架构越来越复杂，很多企业都...]]></description><category></category></item><item><title><![CDATA[mapstruct原理解析]]></title><link>https://blog.youkuaiyun.com/datastructure18/article/details/120208842</link><guid>https://blog.youkuaiyun.com/datastructure18/article/details/120208842</guid><author>datastructure18</author><pubDate>Sun, 12 Sep 2021 22:19:52 +0800</pubDate><description><![CDATA[目录

一、mapstruct简介

二、mapstruct与其他映射框架对比

三、mapstruct底层原理解析

1、Java动态编译

2、mapstruct源码分析

四、小结

一、mapstruct简介

mapstruct是一种实体类映射框架，能够通过Java注解将一个实体类的属性安全地赋值给另一个实体类。有了mapstruct，只需要定义一个映射器接口，声明需要映射的方法，在编译过程中，mapstruct会自动生成该接口的实现类，实现将源对象映射到目标对象的效果。  ...]]></description><category></category></item></channel></rss>