<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[袁江南的博客]]></title><description><![CDATA[编程不限于语言，人生不限于编程]]></description><link>https://blog.youkuaiyun.com/nan8426</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; nan8426]]></copyright><item><title><![CDATA[zookeeper配置启动及配置文件解析 （一）]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/117587645</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/117587645</guid><author>nan8426</author><pubDate>Sat, 05 Jun 2021 10:10:47 +0800</pubDate><description><![CDATA[zookeeper配置启动及配置文件解析 （一）
单机部署

1、由于zookeeper集群的运行需要Java运行环境，所以需要首先安装 JDK
2、官问下载zookeeper安装包，并上传服务器
https://zookeeper.apache.org/releases.html
3、解压zookeeper
tar -zxvf zookeeper-xxx.tar.gz
4、进入zookeeper根目录
5、修改配置文件
复制配置文件
cp conf/zoo_sample.cfg conf/zoo.cfg
]]></description><category></category></item><item><title><![CDATA[框架 - Mybatis 源码一步步深入（三）]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/105863458</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/105863458</guid><author>nan8426</author><pubDate>Sat, 05 Jun 2021 10:09:24 +0800</pubDate><description><![CDATA[上一章我们大概了解了SqlSessionFactoryBuilder和Configuration两个类。这一章我们主要了解XMLConfigBuilder类，它是Mybatis配置文件解析入口。]]></description><category></category></item><item><title><![CDATA[框架 - Mybatis 源码一步步深入（二）]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/72864815</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/72864815</guid><author>nan8426</author><pubDate>Sat, 05 Jun 2021 10:08:56 +0800</pubDate><description><![CDATA[上一章我们大概了解了MyBatis初始化过程，本章主要了解SqlSessionFactoryBuilder、Configuration，它是构建SqlSessionFactory的主要工具，所有MyBatis配置信息都可以在Configuration中找到，SqlSessionFactoryBuilder的主要作用作用就是构建Configuration，然后使用Configuration构建SqlSessionFactory。]]></description><category></category></item><item><title><![CDATA[框架 - MyBatis源码一步步深入（一）]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/72637369</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/72637369</guid><author>nan8426</author><pubDate>Sat, 05 Jun 2021 09:33:49 +0800</pubDate><description><![CDATA[你了解MyBatis多少？了解SqlSessionFactory构建过程吗？了解XML解析过程吗？了解Mapper代理都干了什么事儿吗？本章以MyBatis 3.5.3带你一起阅读源代码，让你不在局限于会用，而是领会MyBatis的精髓。]]></description><category></category></item><item><title><![CDATA[最快搞懂JAVA动态代理的方法]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/106033664</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/106033664</guid><author>nan8426</author><pubDate>Fri, 04 Jun 2021 11:03:08 +0800</pubDate><description><![CDATA[在JAVA中，代理模式应用非常广泛，在很多框架中或平时业务中都经常使用，动态代理其实没什么神秘的，只要搞懂静态代理，在深入思考下，动态代理马上就能搞明白。]]></description><category></category></item><item><title><![CDATA[特殊场景你少不了使用IdentityHashMap]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/72864843</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/72864843</guid><author>nan8426</author><pubDate>Fri, 04 Jun 2021 11:00:12 +0800</pubDate><description><![CDATA[如果有一个实体类重写了hashCode方法，并且hashCode返回一个固定值，而且需要使用这个实体最为键，我们该怎么办呢？HashMap铁定是没法使用了，因为HashMap使用键hashCode高低位混合对数组长度取余定位位置，使用HashMap的结果就是无论put多少个该实体对象，实际只存了一个键值对。其实JDK中提供了一个Map专门来解决类似这样的问题，对就是IdentityHashMap，再看IdentityHashMap源码时先要搞清楚，它的key和value是在同一个数组里面的，table[i]]]></description><category></category></item><item><title><![CDATA[了解多线程前还是先了解一下Unsafe内存操作不安全类]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/105676522</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/105676522</guid><author>nan8426</author><pubDate>Fri, 04 Jun 2021 10:58:38 +0800</pubDate><description><![CDATA[Java是面向对象语言，在使用Java编程时，大多数情况下都不会直接操作内存，而且Java也不提倡直接操作内存，但是Java中到底有没有可以直接操作内存的工具类呢？有！Java中提供Unsafe类可以用来来直接操作内存。]]></description><category></category></item><item><title><![CDATA[AtomicInteger 深入讲解]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/106166700</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/106166700</guid><author>nan8426</author><pubDate>Fri, 04 Jun 2021 10:57:19 +0800</pubDate><description><![CDATA[JDK的atomic包中提供了一些简单原子操作类，基本上都是基于volatile+CAS封装，既保证了性能又保证了线程安全。例如平时经常用到的i++多线程场景就可以用AtomicInteger去解决，有ABA强需求的需要谨慎使用，后面会单独写一篇。]]></description><category></category></item><item><title><![CDATA[忽悠面试官还有哪种Map比WeakHashMap更好]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/72883958</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/72883958</guid><author>nan8426</author><pubDate>Fri, 04 Jun 2021 10:55:42 +0800</pubDate><description><![CDATA[WeakHashMap的键是弱键。在 WeakHashMap 中，当某个键不再正常使用时，会被从WeakHashMap中被自动移除。更精确地说，对于一个给定的键，其映射的存在并不阻止垃圾回收器对该键的丢弃，这就使该键成为可终止的，被终止，然后被回收。某个键被终止时，它对应的键值对也就从映射中有效地移除了。]]></description><category></category></item><item><title><![CDATA[经常使用的PriorityQueue优先级队列你真的了解它吗？]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/104823887</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/104823887</guid><author>nan8426</author><pubDate>Fri, 04 Jun 2021 10:53:30 +0800</pubDate><description><![CDATA[PriorityQueue 一个基于优先级的无界优先级队列。优先级队列的元素按照其自然顺序进行排序，或者根据构造队列时提供的 Comparator 进行排序，具体取决于所使用的构造方法，每次出队的元素都是优先级最高的元素。该队列不允许使用 null 元素也不允许插入不可比较的对象(没有实现Comparable接口的对象)。]]></description><category></category></item><item><title><![CDATA[DelayQueue延时队列详解]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/105699734</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/105699734</guid><author>nan8426</author><pubDate>Fri, 04 Jun 2021 10:52:13 +0800</pubDate><description><![CDATA[DelayQueue 是JDK中提供的延时队列，内部封装优先级队列，并且提供空阻塞功能。DelayQueue中所有元素必须实现Delayed接口getDelay方法，此方法返回剩余有效时间。]]></description><category></category></item><item><title><![CDATA[TreeMap源码深究]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/83846872</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/83846872</guid><author>nan8426</author><pubDate>Fri, 04 Jun 2021 10:51:25 +0800</pubDate><description><![CDATA[TreeMap集合是基于红黑树（Red-Black tree）的 NavigableMap实现。该集合最重要的特点就是可排序，该映射根据其键的自然顺序进行排序，或者根据创建映射时提供的 Comparator 进行排序。Tree两张实现排序方法，一种方式是实现java.lang.Comparable接口，并实现其compareTo()方法。第二种方式是单独写一个类去实现java.util.Comparator接口，并实现compare()方法，然后创建实例并作为TreeMap的构造方法参数进行传参]]></description><category></category></item><item><title><![CDATA[ConcurrentLinkedQueue 线程安全链表队列]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/72864839</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/72864839</guid><author>nan8426</author><pubDate>Fri, 04 Jun 2021 10:50:54 +0800</pubDate><description><![CDATA[ConcurrentLinkedQueue 是线程安全的非阻塞队列，内部是单向链表。ConcurrentLinkedQueue 使用CAS机制保证线程安全，而LinkedBlockingQueue使用两个lock保证线程安全，ConcurrentLinkedQueue 性能比LinkedBlockingQueue高很多。需要注意的是ConcurrentLinkedQueue 的头节点和尾节点都具有滞后性，直接读取不应当准确，不能直接使用，一般需要遍历。]]></description><category></category></item><item><title><![CDATA[HashTable 看这一篇就够了]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/72897532</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/72897532</guid><author>nan8426</author><pubDate>Fri, 04 Jun 2021 10:48:23 +0800</pubDate><description><![CDATA[Hashtable和HashMap一样也是散列表，存储元素也是键值对，Hashtable继承于Dictionary类（Dictionary类声明了操作键值对的接口方法），实现Map接口（定义键值对接口），Hashtable大部分类用synchronized修饰，证明Hashtable是线程安全的]]></description><category></category></item><item><title><![CDATA[ArrayDeque 双向数组队列]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/104823927</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/104823927</guid><author>nan8426</author><pubDate>Thu, 03 Jun 2021 09:37:10 +0800</pubDate><description><![CDATA[优先级队列只支持从一段取数据，内部结构是数组，但是必须符合二叉堆，每次取数据都会伴随上移下移，如果我们元素不不需要排序，有没有更好的队列呢？ArrayDeque 就能满足这个需要，并且它可以在两端方数据和取数据，内部也是用数组实现。]]></description><category></category></item><item><title><![CDATA[ConcurrentLinkedDeque非阻塞双向队列]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/72864836</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/72864836</guid><author>nan8426</author><pubDate>Thu, 03 Jun 2021 09:34:56 +0800</pubDate><description><![CDATA[ConcurrentLinkedDeque是线程安全的非阻塞队列，内部结构跟LinkedBlockingQueue一样使用双向链表，最大的区别就是LinkedBlockingDeque使用CSA原则操作，没有用lock。使用它的时候一样需要注意，头节点和尾节点不保证一定是头和尾。]]></description><category></category></item><item><title><![CDATA[你用过PriorityBlockingQueue 优先级阻塞队列吗？]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/72875905</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/72875905</guid><author>nan8426</author><pubDate>Thu, 03 Jun 2021 09:34:06 +0800</pubDate><description><![CDATA[PriorityBlockingQueue 是优先级阻塞队列，虽然我们称它为无界，实际上它也是有界的。它跟PriorityQueue 最大的区别在于他是线程安全的，在入队出队时使用同一把锁，在扩容时先解锁，再使用cas原子操作，再重新获取锁。]]></description><category></category></item><item><title><![CDATA[LinkedBlockingDeque阻塞双向链表队列]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/72864835</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/72864835</guid><author>nan8426</author><pubDate>Thu, 03 Jun 2021 09:30:57 +0800</pubDate><description><![CDATA[LinkedBlockingDeque 是阻塞双向链表队列，它是线程安全的，除了提供两端读写操作外，还具有阻塞功能。内部使用一把锁，在读写操作前必须获取锁，并且每次都是锁整个链表。]]></description><category></category></item><item><title><![CDATA[聊聊LinkedBlockingQueue链表阻塞队列]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/72864842</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/72864842</guid><author>nan8426</author><pubDate>Thu, 03 Jun 2021 09:29:02 +0800</pubDate><description><![CDATA[LinkedBlockingQueue 是一个基于链表的有限队列（理论上它是无限的）。只支持一段入队，另一端出队。无阻塞对应LindedList，它们除了一个线程安全一个线程不安全以外，最大的区别是LinkedList可以放null值。]]></description><category></category></item><item><title><![CDATA[AQS解读笔记]]></title><link>https://blog.youkuaiyun.com/nan8426/article/details/106332262</link><guid>https://blog.youkuaiyun.com/nan8426/article/details/106332262</guid><author>nan8426</author><pubDate>Thu, 03 Jun 2021 09:26:47 +0800</pubDate><description><![CDATA[AQS听起来很高大上的样子，实际上它就是AbstractQueuedSynchronizer类的缩写，它是构建锁或者其他同步组件的基础框架。在基于AQS构建的同步器中，只能在一个时刻发生阻塞，从而降低上下文切换的开销，提高了吞吐量。同时在设计AQS时充分考虑了可伸缩行，因此J.U.C中所有基于AQS构建的同步器均可以获得这个优势。]]></description><category></category></item></channel></rss>