<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[aoaodemon的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/aoaodemon</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; aoaodemon]]></copyright><item><title><![CDATA[序列化与反序列化]]></title><link>https://blog.youkuaiyun.com/aoaodemon/article/details/127384881</link><guid>https://blog.youkuaiyun.com/aoaodemon/article/details/127384881</guid><author>aoaodemon</author><pubDate>Tue, 18 Oct 2022 12:00:03 +0800</pubDate><description><![CDATA[序列化与反序列化]]></description><category></category></item><item><title><![CDATA[基于zk的分布式排他锁]]></title><link>https://blog.youkuaiyun.com/aoaodemon/article/details/123611619</link><guid>https://blog.youkuaiyun.com/aoaodemon/article/details/123611619</guid><author>aoaodemon</author><pubDate>Sun, 20 Mar 2022 13:41:49 +0800</pubDate><description><![CDATA[1、实现原理：

1）定义一个根节点作为加锁节点，如果该根节点已经存在，当前会话将在根节点下方创建顺序临时节点（若会话非正常关闭，临时节点也将被删除），线程进入wait()等待状态；

2）每次选择加锁节点，都需要进行排序，选择序号最小的节点进行加锁；

3）如果不是最小节点就监听前一个节点是否存在，进入wait；

4）若加锁节点不存在了，则将所有的线程都notifyAll，所有机器上的线程再次进行争夺锁，直到有一个线程加锁成功，其它线程进入wait；



2、代码流程（借鉴于：ZooKeeper分布式]]></description><category></category></item><item><title><![CDATA[领域驱动（自己理解）]]></title><link>https://blog.youkuaiyun.com/aoaodemon/article/details/123445718</link><guid>https://blog.youkuaiyun.com/aoaodemon/article/details/123445718</guid><author>aoaodemon</author><pubDate>Sat, 12 Mar 2022 16:29:03 +0800</pubDate><description><![CDATA[代码层级编写规范

1、什么是领域驱动？

核心是维护一个反应领域概念的模型，然后通过大量模式来指导模型设计与开发。

一般过程：通过产品同学所写出的prd，利用领域模型的概念与业务相结合，完善出xmind，现在包括五层：adapter、domain、app、client、infrastructure，其中最重要的就是我们的domain层，下面我们会一层一层的进行描述与每个层级编写的规范；

2、为什么要使用领域驱动（好处）？

1）方便代码的理解、减少新同学接触这方面业务的时间

领域驱动是根据业务延伸出]]></description><category></category></item><item><title><![CDATA[自定义sql拦截器与pageHelper兼容]]></title><link>https://blog.youkuaiyun.com/aoaodemon/article/details/123151223</link><guid>https://blog.youkuaiyun.com/aoaodemon/article/details/123151223</guid><author>aoaodemon</author><pubDate>Sat, 26 Feb 2022 18:05:56 +0800</pubDate><description><![CDATA[1、功能描述：项目后期需要添加新的字段，mybatis用的是tk、pius、原生，修改起来及其麻烦而且浪费时间，所以需要一个拦截器将sql语句进行升级，加字段，但是在项目之中又使用了pageHelper分页，本派文章将对兼容进行讲解并且讲解下拦截器的逻辑；



2、mybatis拦截器的使用方式：

1）注解类（这次的主要讲解,主要是在调用拦截器的时候才会扫描，属于懒加载）：

@Intercepts标记该方法是一个拦截器，在我们调用InterceptorChain中的pluginAll方法时，加载的拦截]]></description><category></category></item><item><title><![CDATA[curator框架分布式锁解析]]></title><link>https://blog.youkuaiyun.com/aoaodemon/article/details/122897523</link><guid>https://blog.youkuaiyun.com/aoaodemon/article/details/122897523</guid><author>aoaodemon</author><pubDate>Sat, 12 Feb 2022 16:16:40 +0800</pubDate><description><![CDATA[1、InterProcessMutex

分析：

可重入的互斥锁，跨JVM工作。使用ZooKeeper来控制锁。所有JVM中的任何进程，只要使用同样的锁路径，将会成为跨进程的一部分。此外，这个排他锁是“公平的”，每个用户按照申请的顺序得到排他锁。可见InterProcessMutex和我们自己实现的例子都是一个排他锁，此外还可以重入。

代码：

 


public class Curator_Session {

    static AtomicInteger n = new AtomicIn...]]></description><category></category></item></channel></rss>