<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[js_tengzi的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/js_tengzi</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; js_tengzi]]></copyright><item><title><![CDATA[ConcurrentHashMap源码阅读03]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/102607157</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/102607157</guid><author>js_tengzi</author><pubDate>Tue, 26 Nov 2019 17:17:15 +0800</pubDate><description><![CDATA[为了更快速方便地理解ConcurrentHashMap的设计原理，这篇文章我们主要从以下几个视角来探讨ConcurrentHashMap的内部实现：内部结构、初始化、put操作的不同情况、扩容流程、线程安全及红黑树的转化等。]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap源码阅读02]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/91358268</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/91358268</guid><author>js_tengzi</author><pubDate>Wed, 16 Oct 2019 20:35:39 +0800</pubDate><description><![CDATA[在上一篇我们介绍了ConcurrentHashMap的常量、存储单元及成员变量。今天我们就结合测试案例来探究一下ConcurrentHashMap中put方法的实现原理。]]></description><category></category></item><item><title><![CDATA[Jenkins自动化部署纪实]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/94481194</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/94481194</guid><author>js_tengzi</author><pubDate>Tue, 02 Jul 2019 21:28:04 +0800</pubDate><description><![CDATA[1、一个大小写引发的血案

之前在项目中，因为不小心提交了一个首字母本应该为大写的Java文件，因疏忽导致提交了小写代码，后面改成大写后使用Jenkins自动构建时编译报错：



这个问题怎么产生的，这个我没有去研究，估计和git的原理有关。

现将现象描述如下：

在IDEA上面是正常的为大写，看不到小写文件，码云仓库中看到的也是正常的大写，看不到小写文件。但是，单独对项目进行git clon...]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap源码阅读01]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/91355355</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/91355355</guid><author>js_tengzi</author><pubDate>Sun, 09 Jun 2019 18:04:59 +0800</pubDate><description><![CDATA[之前我们阅读了HashMap等集合框架的源码，这次我们把视线转移到java.util.concurrent上，探索下包括ConcurrentHashMap在内的JUC框架的奥秘。]]></description><category></category></item><item><title><![CDATA[Hashtable源码阅读]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90752571</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90752571</guid><author>js_tengzi</author><pubDate>Mon, 03 Jun 2019 23:25:00 +0800</pubDate><description><![CDATA[我们之前已经阅读过HashMap的源码了，我们知道Hashtable与HashMap都可以用来存储<K,V>键值对，但是HashMap相对高效，而Hashtable可以保证线程安全。那么接下来我们就一起深入Hashtable的源码来一探究竟。]]></description><category></category></item><item><title><![CDATA[HashSet源码阅读]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90758171</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90758171</guid><author>js_tengzi</author><pubDate>Mon, 03 Jun 2019 20:12:58 +0800</pubDate><description><![CDATA[之前我们研究了HashMap的源码，那么接下来我们趁热打铁来看下HashSet的源码中有什么奥妙。]]></description><category></category></item><item><title><![CDATA[LinkedList源码阅读]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90755834</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90755834</guid><author>js_tengzi</author><pubDate>Mon, 03 Jun 2019 17:33:17 +0800</pubDate><description><![CDATA[我们之前已经进行过ArrayList的源码阅读，我们知道，同样继承了List接口的LinkedList，比起ArrayList而言，LinkedList在新增元素和删除元素时表显要好，那么今天我们就一起看看LinkedList源码中蕴含了什么秘密。]]></description><category></category></item><item><title><![CDATA[HashMap源码阅读08]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90733814</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90733814</guid><author>js_tengzi</author><pubDate>Sat, 01 Jun 2019 21:41:43 +0800</pubDate><description><![CDATA[之前的HashMap源码阅读系列给我们呈现了HashMap内部的基本结构，还有扩容条件及过程分析等，今天我们就来进行一个整体的总结，主要包括与JDK1.7的对比和主要方法的流程总结。]]></description><category></category></item><item><title><![CDATA[HashMap源码阅读07]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90673817</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90673817</guid><author>js_tengzi</author><pubDate>Fri, 31 May 2019 10:57:39 +0800</pubDate><description><![CDATA[上一篇我们研究了treeifyBin方法，发现在链表长度超过8并且节点数组长度超过64时，HashMap会将链表转化成一条双向链表，再将这条双向链表转化成一棵红黑树。这一篇文章我们就一起来看下HashMap是如何将双向链表转化成红黑树的。]]></description><category></category></item><item><title><![CDATA[红黑树（Red-Black Tree）]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90706816</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90706816</guid><author>js_tengzi</author><pubDate>Thu, 30 May 2019 22:18:23 +0800</pubDate><description><![CDATA[由于上篇文章《HashMap源码阅读06》中，我们提到了红黑树的概念。今天我们就来了解下红黑树，对它有一个基本的认识。]]></description><category></category></item><item><title><![CDATA[HashMap源码阅读06]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90643893</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90643893</guid><author>js_tengzi</author><pubDate>Tue, 28 May 2019 17:41:36 +0800</pubDate><description><![CDATA[上篇文章中介绍了treeifyBin方法，我们找到了另一个引起HashMap扩容的原因。这次我们一起来看下treeifyBin方法除了扩容之外，还能做什么事。]]></description><category></category></item><item><title><![CDATA[HashMap源码阅读05]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90636488</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90636488</guid><author>js_tengzi</author><pubDate>Tue, 28 May 2019 11:45:48 +0800</pubDate><description><![CDATA[记得上一篇文章中，提到了一段代码：treeifyBin(tab, hash);这次我们就来看看，这个方法做了什么。]]></description><category></category></item><item><title><![CDATA[HashMap源码阅读04]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90611124</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90611124</guid><author>js_tengzi</author><pubDate>Tue, 28 May 2019 10:22:01 +0800</pubDate><description><![CDATA[上一篇文章我们呈现了HashMap在扩容时对链表节点的处理过程，这篇文章我们就对其中规律一探究竟。]]></description><category></category></item><item><title><![CDATA[HashMap源码阅读03]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90606495</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90606495</guid><author>js_tengzi</author><pubDate>Mon, 27 May 2019 16:54:05 +0800</pubDate><description><![CDATA[上篇文章中我们研究了当HashMap调用put方法，出现“hash冲突”时的处理机制。我们在整理HashMap的内部存储结构的基础上进一步呈现了当HashMap在扩容时，原有链表结构上的节点是如何处理的过程。]]></description><category></category></item><item><title><![CDATA[HashMap源码阅读02]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90601189</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90601189</guid><author>js_tengzi</author><pubDate>Mon, 27 May 2019 12:23:40 +0800</pubDate><description><![CDATA[上篇文章《HashMap源码阅读01》中记录了一个问题，当HashMap依次put键值对时，并没有按照由小到大的顺序排列，而是跳过了中间几个数字，今天我们就来一探究竟]]></description><category></category></item><item><title><![CDATA[HashMap源码阅读01]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90522255</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90522255</guid><author>js_tengzi</author><pubDate>Sat, 25 May 2019 10:40:18 +0800</pubDate><description><![CDATA[本篇文章介绍了JDK1.8中HashMap的内部结构及各种条件下调用put方法HashMap的行为。另外通过对HashMap的源码进行阅读，整理了部分注释及翻译，附在文章末尾。]]></description><category></category></item><item><title><![CDATA[ArrayList源码阅读]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90484670</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90484670</guid><author>js_tengzi</author><pubDate>Thu, 23 May 2019 17:32:08 +0800</pubDate><description><![CDATA[ArrayList源码阅读前言get方法add方法
前言
根据jdk8中ArrayList源码注释得知：
对ArrayList源码注释进行阅读：
Resizable-array implementation of the List interface.  Implements
all optional list operations, and permits all elements, inclu...]]></description><category></category></item><item><title><![CDATA[单例模式的实现及其演变]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90147560</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90147560</guid><author>js_tengzi</author><pubDate>Sun, 12 May 2019 23:55:35 +0800</pubDate><description><![CDATA[单例模式的实现及其演变前言单例模式的结构演变1、饿汉式单例2、懒汉式单例类与双重检查锁定3、使用静态内部类实现单例模式
前言
单例模式是结构最简单的设计模式，在它的核心结构中只包含一个被称为单例类的特殊类。
作为一种目标明确、结构简单、理解容易的设计模式，在软件开发中的使用频率相当高，在很多应用软件和框架中都得以广泛应用。
单例模式的结构
单例模式的结构图如下：

其Java代码实现如下：
pub...]]></description><category></category></item><item><title><![CDATA[UML类图]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90143246</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90143246</guid><author>js_tengzi</author><pubDate>Sun, 12 May 2019 18:12:00 +0800</pubDate><description><![CDATA[UML类图UML概述类与类的UML表示1、类2、类的UML图示类之间的关系1、关联关系Ⅰ双向关联Ⅱ 单向关联Ⅲ 自关联Ⅳ 多重性关联Ⅴ 聚合关系Ⅵ 组合关系2、依赖关系3、泛化关系4、接口与实现关系
UML概述
UML（Unified Modeling Language，统一建模语言）是当前面向对象软件系统建模的标准语言，适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具...]]></description><category></category></item><item><title><![CDATA[对原型模式的思考01]]></title><link>https://blog.youkuaiyun.com/js_tengzi/article/details/90138905</link><guid>https://blog.youkuaiyun.com/js_tengzi/article/details/90138905</guid><author>js_tengzi</author><pubDate>Sun, 12 May 2019 12:04:38 +0800</pubDate><description><![CDATA[原型模式中，我们可以利用序列化与反序列化来实现深克隆机制，利用这种方式得到的克隆对象是否与原对象有着不同的内存地址?来，我们验证一下！]]></description><category></category></item></channel></rss>