<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xcxy2015的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xcxy2015</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xcxy2015]]></copyright><item><title><![CDATA[Spring自定义日志实现（5）——日志完成]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/105201721</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/105201721</guid><author>xcxy2015</author><pubDate>Mon, 30 Mar 2020 16:16:43 +0800</pubDate><description><![CDATA[经过前4部分的学习，我们很容易就能做一个日志的功能，代码如下：

注解类：


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SelfLog {

    String aim() default "";

    String comment() defa...]]></description><category></category></item><item><title><![CDATA[Spring自定义日志实现（4）——RequestContextHolder]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/104949777</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/104949777</guid><author>xcxy2015</author><pubDate>Mon, 30 Mar 2020 16:07:50 +0800</pubDate><description><![CDATA[利用AOP和java注解，我们得以在目标方法运行前后织入我们的日志逻辑，现在，我们需要得到方法的参数和结果，即在Controller层前端传来的参数和我们最终运行的结果，要得到当前到达后台的请求，需要用到一个类——RequestContextHolder类
...]]></description><category></category></item><item><title><![CDATA[SpringBoot+Mybatis dao层错误实现mapper接口导致循环依赖]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/104970332</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/104970332</guid><author>xcxy2015</author><pubDate>Thu, 19 Mar 2020 16:40:41 +0800</pubDate><description><![CDATA[之前由于自己的基础不够扎实，再写dao层代码时顺手加了个implements Mapper接口 导致报错，具体如下：

dao层代码：


@Repository
public class TestUserDao implements TestUserEntityMapper{
    @Autowired
    private TestUserEntityMapper testUserEn...]]></description><category></category></item><item><title><![CDATA[SpringBoot加载静态资源的问题]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/104016173</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/104016173</guid><author>xcxy2015</author><pubDate>Fri, 17 Jan 2020 14:11:48 +0800</pubDate><description><![CDATA[SpringBoot在加载静态资源时，与之相关的配置项主要有四个


spring.mvc.view.prefix=/static/
spring.mvc.view.suffix=.html
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/page/

其中：...]]></description><category></category></item><item><title><![CDATA[element-ui下提示框messageBox内容换行问题]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/103305392</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/103305392</guid><author>xcxy2015</author><pubDate>Fri, 29 Nov 2019 10:13:49 +0800</pubDate><description><![CDATA[诉求：在使用element-ui的情况下，想在前端弹出提示框，且框内的消息可以自由换行。

解决方法：在this.alert中加一个配置：


dangerouslyUseHTMLString:true

然后就可以以html的方式输入提示框的内容了，可以自由的调整字号，换行，空格，颜色等。

源码：


this.$alert('&lt;h4&gt;这是第一行&lt;/h4&gt;&lt;br&...]]></description><category></category></item><item><title><![CDATA[（转载）tkMapper配置文件详解]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/103252788</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/103252788</guid><author>xcxy2015</author><pubDate>Tue, 26 Nov 2019 11:16:21 +0800</pubDate><description><![CDATA[MyBatis Generator中文文档地址：

http://mbg.cndocs.ml/

该中文文档由于尽可能和原文内容一致，所以有些地方如果不熟悉，看中文版的文档的也会有一定的障碍，所以本章根据该中文文档以及实际应用，使用通俗的语言来讲解详细的配置。
本文中所有节点的链接都是对应的中文文档地址，可以点击查看详细信息。
注:本文后面提到的MBG全部指代MyBatis Generator。
...]]></description><category></category></item><item><title><![CDATA[Redis设计与实现要点(8)--AOF持久化]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/102974959</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/102974959</guid><author>xcxy2015</author><pubDate>Sun, 10 Nov 2019 14:31:52 +0800</pubDate><description><![CDATA[如果说RDB持久化类似于快照 ，那么AOF持久化就是类似与写命令日志的一种持久化方式。整个AOF文件除了选择数据库的命令是服务器自动添加的之外，其他都是我们通过客户端发送的命令。
1.AOF持久化的实现方式
AOF持久化主要有三步：命令追加，文件写入，文件同步

命令追加：在运行完写命令后会按照协议格式将此写命令追加到aof_buf缓冲区
文件写入和文件同步：文件写入指将缓冲区的数据写道aof文件...]]></description><category></category></item><item><title><![CDATA[axios发送post请求后端接收时的注意事项及@RequestBody，@RequestParam的区别]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/102781740</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/102781740</guid><author>xcxy2015</author><pubDate>Fri, 08 Nov 2019 15:12:18 +0800</pubDate><description><![CDATA[起因： 在学习vue.js的时候，利用axios向后台发送请求：
load: function (val) {
                axios
                    .post('/gms/shopNewVmiGoods/getShopNewVmiGoods',
                        {
                           ...]]></description><category></category></item><item><title><![CDATA[Redis设计与实现要点(7)--RDB持久化]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/101220777</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/101220777</guid><author>xcxy2015</author><pubDate>Sat, 26 Oct 2019 15:49:41 +0800</pubDate><description><![CDATA[RDB持久化是一种类似于快照的持久化方式，RDB持久化既可以通过手动触发，有可以通过配置选项定期执行。RDB持久化的结果是一个经过压缩的二进制文件，只要RDB文件存在，Redis服务器就可以用它来还原数据库。
1.RDB文件的创建和载入
RDB文件的创建主要分为手动触发和配置文件触发。

手动触发主要依靠SAVE命令和BGSAVE命令。SAVE命令会阻塞服务器，BGSAVE命令会创建一个子进程，由...]]></description><category></category></item><item><title><![CDATA[linux常用命令（持续更新）]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/102482946</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/102482946</guid><author>xcxy2015</author><pubDate>Thu, 10 Oct 2019 16:07:02 +0800</pubDate><description><![CDATA[less命令 

主要是运用less命令查看日志，常用用法：less 参数 文件名 ，可以加的参数主要如下：

-b 《缓冲区大小》 设置缓冲区的大小
-e 当文件显示结束后，自动离开
-f 强迫打开特殊文件，例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o 《文件名》 将less ...]]></description><category></category></item><item><title><![CDATA[Reids设计与实现要点(6)--数据库]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/100899863</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/100899863</guid><author>xcxy2015</author><pubDate>Thu, 19 Sep 2019 11:01:42 +0800</pubDate><description><![CDATA[1.数据库的存储结构：
redisServer结构：

…
redisDb *db[];    保存着服务器的所有数据库
int dbum;           服务器的数据库数量，初始化默认为16
…

redisClient结构：

…
redisDb *db ; 记录当前客户端的目标数据库
…

redisDb结构：

…
dict *dict; 字典结构，数据库键空间
…
键空间中存在数据...]]></description><category></category></item><item><title><![CDATA[Redis设计与实现要点(5)--对象]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/100667900</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/100667900</guid><author>xcxy2015</author><pubDate>Wed, 11 Sep 2019 09:55:49 +0800</pubDate><description><![CDATA[Redis中有五种类型的对象，分别为字符串对象，列表对象，hash对象，集合对象和有序集合对象。这五种对象每种都用到了至少一种之前的数据结构（简单动态字符串，双端链表，字典，压缩列表，整数集合等）
Redis对象的结构：
Redis每一个对象均用一个redisObject结构表示，其结构如下：

unsigned type：类型，是类型常量（REDIS_STRING, REDIS_LIST, RE...]]></description><category></category></item><item><title><![CDATA[Redis设计与实现要点(4)--压缩列表]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/100655761</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/100655761</guid><author>xcxy2015</author><pubDate>Mon, 09 Sep 2019 15:36:56 +0800</pubDate><description><![CDATA[使用场景：
当一个列表键只包含少量列表项，且同时列表项要么是小整数值，要么是比较短的字符串时，会使用压缩列表做列表键的底层实现。
压缩列表的结构：

zlbytes：4字节：记录整个压缩列表占用的内存字节数
zltail：4字节：记录压缩列表表尾节点距压缩列表起始地址有多少字节
zllen：2字节：记录压缩列表包含的节点数量
entryX：包含压缩列表的各个节点
zlend：特殊值0xff：标记压...]]></description><category></category></item><item><title><![CDATA[Redis设计与实现要点(3)--跳跃表和整数集合]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/100558580</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/100558580</guid><author>xcxy2015</author><pubDate>Fri, 06 Sep 2019 10:57:15 +0800</pubDate><description><![CDATA[跳跃表
跳跃表是一种数据结构，Redis的有序集合键的一种实现方式就是跳跃表（当一个有序集合键包含比较多的元素或者它是一个较长的字符串时，Redis会使用跳跃表来实现），跳跃表的优势是实现了最好O(logN),最坏O(N)的查找时间复杂度，且它实现起来较为简单。
跳跃表的结构主要分为跳跃表和跳跃表节点结构：
1.跳跃表结构
跳跃表结构主要包含了跳跃表的信息，比如跳跃表里节点的个数，指向表头和表尾的...]]></description><category></category></item><item><title><![CDATA[Redis设计与实现要点（2）--链表与字典]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/100522300</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/100522300</guid><author>xcxy2015</author><pubDate>Wed, 04 Sep 2019 15:25:34 +0800</pubDate><description><![CDATA[1.链表
Redis链表的实现较为简单,主要结构为链表节点和链表头节点，链表节点（adlist.h/listNode）结构主要由以下几部分组成：
1.前置节点prev：链表节点类型的指针，指向前一个节点
2.后置节点next：同前置节点类型相同，指向后一个节点
3.value：代表这个节点的值
链表头节点主要是为了更好地操作这个链表，主要有以下部分：
1.头节点head，链表节点类型指针，指向这个...]]></description><category></category></item><item><title><![CDATA[201908工作总结（业务分类与后台分类映射项目）]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/99819464</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/99819464</guid><author>xcxy2015</author><pubDate>Wed, 28 Aug 2019 14:12:12 +0800</pubDate><description><![CDATA[201908工作总结（业务分类与后台分类映射项目）
项目概要：
1.删除前端代码：改前台分类为业务分类：
更改代码  add/edit/view   thirdCategory.ftl
2.新写接口
2.1：新建表:yp_page_category_backend_category记录前台类目与后台类目对应关系
2.2：更改之前新建三级前台类目逻辑，绑定后台类目信息需更新前台类目后台类目对应表
更...]]></description><category></category></item><item><title><![CDATA[Redis设计与实现要点（1）--SDS字符串]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/100072247</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/100072247</guid><author>xcxy2015</author><pubDate>Mon, 26 Aug 2019 11:05:29 +0800</pubDate><description><![CDATA[SDS(简单动态字符串)是Redis里使用的一种抽象类型。Redis只在字符串不需要更改的场景下才会使用C语言中传统的字符串（例如打印日志时），在其余场景下，Redis均使用自己重新定义的SDS类型来表示字符串
1 SDS结构：
SDS的本质就是一个char类型指针，但是由于其存在一个数据头（sdshdr结构体），所以他可以更好地存储和更改字符串的值，sdshdr结构主要有三块
1.int len...]]></description><category></category></item><item><title><![CDATA[201907项目总结]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/98525680</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/98525680</guid><author>xcxy2015</author><pubDate>Mon, 19 Aug 2019 20:08:39 +0800</pubDate><description><![CDATA[项目问题小结1.目录1.Gson的使用1.生成json2.解析json2.freemarker 关于默认值的处理1.&lt;#if name??&gt;  1.目录
1.Gson的使用
2.freemarker 关于默认值的处理
3.单元格合并后端处理方法（做一个不规则的表格）
4.弹窗页面的做法
5.html页面的id唯一原则
6.SQL中 ON DUPLICATEKEY UPDATE 的使用
...]]></description><category></category></item><item><title><![CDATA[剑指Offer系列（16）——合并两个排序的链表]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/84107799</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/84107799</guid><author>xcxy2015</author><pubDate>Thu, 15 Nov 2018 17:35:11 +0800</pubDate><description><![CDATA[题目：输入两个递增排序的链表，合并这两个链表并使新链表中的节点仍然是按照递增排序的。例如输入 链表1 ：1-&amp;gt;3-&amp;gt;5-&amp;gt;7

链表2：2-&amp;gt;4-&amp;gt;6-&amp;gt;8，则结果为1-&amp;gt;2-&amp;gt;3-&amp;gt;4-&amp;gt;5-&amp;gt;6-&amp;gt;7-&amp;gt;8

 

这里我介绍两种写法，其实两种写法思路是一样的，只不过第二中解法将循环写成了递归，这样看起来漂亮的多，不...]]></description><category></category></item><item><title><![CDATA[剑指Offer系列（15）——反转链表]]></title><link>https://blog.youkuaiyun.com/xcxy2015/article/details/81951956</link><guid>https://blog.youkuaiyun.com/xcxy2015/article/details/81951956</guid><author>xcxy2015</author><pubDate>Wed, 22 Aug 2018 22:19:12 +0800</pubDate><description><![CDATA[题目如下：

定义一个函数，输入一个链表的头节点，反转该链表并输出反转后链表的头节点。

 

因为链表是一个单向链表，因此如果我们需要倒序复制的话，很明显是一个后进先出的数据结构，因此第一个很明显的想法就是用栈解决，即将链表顺序存入栈，再弹出即可，代码实现如下：


private static Node reverseList(Node head) {
		//注意特殊情况：传入参数为null...]]></description><category></category></item></channel></rss>