<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Darling_0604的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Darling_0604</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Darling_0604]]></copyright><item><title><![CDATA[Mysql之索引类型]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/77106513</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/77106513</guid><author>Darling_0604</author><pubDate>Sat, 12 Aug 2017 09:23:52 +0800</pubDate><description><![CDATA[（1）B-Tree索引：B-Tree意味着所有的值都是按顺序存储的，每一个叶子页到跟的距离相同。B-Tree索引能够加快数据访问的速度，因为存储引擎不再需要进行全表扫描来获取需要的数据，取而代之的是从索引的根节点开始进行搜索。跟节点的槽中存放了指向子节点的指针，存储引擎根据这些指针向下层查找。通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点，这些指针实际上定义了子节点页中值的上限和下]]></description><category></category></item><item><title><![CDATA[Mysql之存储引擎]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/77104104</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/77104104</guid><author>Darling_0604</author><pubDate>Fri, 11 Aug 2017 22:56:23 +0800</pubDate><description><![CDATA[（1）inndob存储引擎:inndob的数据存储在表空间中，将每个表的数据和索引存放在单独的文件中。其默认隔离级别是REPEATABLE
 READ（可重复读），并且通过间隙锁策略防止幻读的出现。间隙锁使得Innodb不仅仅锁定查询涉及的行，还会对索引的间隙进行锁定，防止幻影行的插入；innodb基于聚簇索引建立。innodb内部做了很多优化，包括从磁盘读取数据时采用的可预测性预读，能够自动在]]></description><category></category></item><item><title><![CDATA[Java集合之LinkedHashMap源码解析]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76696507</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76696507</guid><author>Darling_0604</author><pubDate>Fri, 04 Aug 2017 23:47:13 +0800</pubDate><description><![CDATA[初识LinkedHashMap

上两篇文章讲了HashMap和HashMap在多线程下引发的问题，说明了，HashMap是一种非常常见、非常有用的集合，并且在多线程情况下使用不当会有线程安全问题。




大多数情况下，只要不涉及线程安全问题，Map基本都可以使用HashMap，不过HashMap有一个问题，就是迭代HashMap的顺序并不是HashMap放置的顺序，也就是无序。H]]></description><category></category></item><item><title><![CDATA[Java集合之LinkedList源码解析]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76696284</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76696284</guid><author>Darling_0604</author><pubDate>Fri, 04 Aug 2017 23:03:28 +0800</pubDate><description><![CDATA[LinkedList是基于链表实现的，所以先讲解一下什么是链表。链表原先是C/C++的概念，是一种线性的存储结构，意思是将要存储的数据存在一个存储单元里面，这个存储单元里面除了存放有待存储的数据以外，还存储有其下一个存储单元的地址（下一个存储单元的地址是必要的，有些存储结构还存放有其前一个存储单元的地址），每次查找数据的时候，通过某个存储单元中的下一个存储单元的地址寻找其后面的那个存储单元。
]]></description><category></category></item><item><title><![CDATA[Java集合ArrayList源码解析]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76695912</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76695912</guid><author>Darling_0604</author><pubDate>Fri, 04 Aug 2017 22:12:33 +0800</pubDate><description><![CDATA[对于集合，我认为关注的点主要有四点：

1、是否允许空

2、是否允许重复数据

3、是否有序，有序的意思是读取数据的顺序和存放数据的顺序是否一致

4、是否线程安全 

ArrayList

ArrayList是最常见以及每个Java开发者最熟悉的集合类了，顾名思义，ArrayList就是一个以数组形式实现的集合，以一张表格来看一下ArrayList里面有哪些基本的元素：]]></description><category></category></item><item><title><![CDATA[深入解析Spring架构与设计原理-AOP]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76652293</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76652293</guid><author>Darling_0604</author><pubDate>Thu, 03 Aug 2017 23:17:23 +0800</pubDate><description><![CDATA[关于AOP的个人理解 


AOP联盟定义的AOP体系结构把与AOP相关的概念大致分为了由高到低、从使用到实现的三个层次。关于这个体系结构，个人的理解是这样的，从上往下，最高层是语言和开发环境，在这个环境中可以看到几个重要的概念：base可以视为待增强对象，或者说目标对象；aspect指切面，通常包含对于base的增强应用；configuration可以看成是一种编织或者说配置，通过在AOP]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap实现原理]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76651636</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76651636</guid><author>Darling_0604</author><pubDate>Thu, 03 Aug 2017 22:13:23 +0800</pubDate><description><![CDATA[HashMap在并发执行put操作时会引起死循环，因为多线程会导致HashMap的Entry链表形成环形数据结构，Entry的next节点永远都不会为空，就会产生死循环获取Entry。
HashTable容器使用synchronized来保证线程安全，当一个线程访问HashTable的同步方法，其他线程也访问同步方法时会进入阻塞或轮询状态，导致其效率低下。
ConcurrentHashMap使]]></description><category></category></item><item><title><![CDATA[Synchronized关键字]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76651378</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76651378</guid><author>Darling_0604</author><pubDate>Thu, 03 Aug 2017 21:47:32 +0800</pubDate><description><![CDATA[在多线程并发编程中synchronized被称为重量级锁。
synchronized实现同步的表现形式有以下3种：

1）对于普通方法，锁是当前普通对象；
2）对于静态同步方法，锁是当前类的Class对象；
3）对于同步方法块，锁是synchronized括号里的配置对象。
当一个线程试图访问同步代码块时，它首先必须得到锁，退出或者抛出异常时必须释放锁。
synchronized实现]]></description><category></category></item><item><title><![CDATA[Volatile关键字]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76599062</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76599062</guid><author>Darling_0604</author><pubDate>Wed, 02 Aug 2017 21:52:25 +0800</pubDate><description><![CDATA[volatile关键字是JVM提供的最轻量级的同步机制，一方面它提供了变量对所有线程的可见性，另一方面它禁止了指令重排序

变量的可见性：就是当一个线程改变了变量的值，新值对于其他线程来说可以立即得到。而对于普通变量来说是不可以的，普通变量的值在线程间传递均需要通过主内存来完成。
volatile修饰的变量之所以可以被立即得到，在于当一个线程对一个volatile变量进行写操作后，会有一个l]]></description><category></category></item><item><title><![CDATA[Java集合HashMap的源码解刨]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76473879</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76473879</guid><author>Darling_0604</author><pubDate>Mon, 31 Jul 2017 23:08:59 +0800</pubDate><description><![CDATA[初识HashMap

之前的List，讲了ArrayList、LinkedList，最后讲到了CopyOnWriteArrayList，就前两者而言，反映的是两种思想：

（1）ArrayList以数组形式实现，顺序插入、查找快，插入、删除较慢

（2）LinkedList以链表形式实现，顺序插入、查找较慢，插入、删除方便

那么是否有一种数据结构能够结合上面两种的优点呢？有，答案]]></description><category></category></item><item><title><![CDATA[Java集合Hashtable源码解析]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76473840</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76473840</guid><author>Darling_0604</author><pubDate>Mon, 31 Jul 2017 23:04:40 +0800</pubDate><description><![CDATA[1、Hashtable简介

(1)Hashtable同样是基于哈希表实现的，同样每个元素是一个key-value对，其内部也是通过单链表解决冲突问题，容量不足（超过了阀值）时，同样会自动增长。


(2)Hashtable也是JDK1.0引入的类，是线程安全的，能用于多线程环境中。

(3)Hashtable同样实现了Serializable接口，它支持序列化，实现了Cloneab]]></description><category></category></item><item><title><![CDATA[Java集合HashSet源码剖析]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76473810</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76473810</guid><author>Darling_0604</author><pubDate>Mon, 31 Jul 2017 23:01:38 +0800</pubDate><description><![CDATA[public class HashSet extends AbstractSet implements Set, Cloneable, java.io.Serializable





HashSet实现Set接口，内部维护一个HashMap实例变量。不保证顺序，允许null元素。




对于基本的操作，如add，remove，contains，size，只需要常量的时间]]></description><category></category></item><item><title><![CDATA[java中线程的5种状态]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76473255</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76473255</guid><author>Darling_0604</author><pubDate>Mon, 31 Jul 2017 22:05:24 +0800</pubDate><description><![CDATA[在java语言中，线程有5种状态。
新建（New）:创建后尚未启动的线程都处于这种状态。
运行(Runable）:Runable包括了操作系统线程状态中的Running和Ready,也就是处于此状态的线程有可能正在执行，也有可能正在等待着CPU为它分配执行时间。
等待:


无限期等待(Waiting）：处于这种状态的线程不会被分配CPU执行时间，它们要等待被其他线程显示的唤醒。限期等]]></description><category></category></item><item><title><![CDATA[java 双亲委派模型]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76472826</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76472826</guid><author>Darling_0604</author><pubDate>Mon, 31 Jul 2017 21:28:51 +0800</pubDate><description><![CDATA[双亲委派模型要求除了顶层的类加载器外，其余的类加载器都应当有自己的父类加载器。这里的类加载器之间的父子关系一般不会以继承的关系来实现，而都是以组合的关系来复用父加载器的代码。
双亲委派模型的工作过程是：如果一个类加载器 收到了类加载器的请求，它首先不会自己去尝试加载这个类，而是把这个类委托给父类加载器去完成，每个层次的类加载器都是如此，因此所有的加载请求最终都应该传送到顶层的启动类加载器中，只有]]></description><category></category></item><item><title><![CDATA[java中的static关键字]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76472799</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76472799</guid><author>Darling_0604</author><pubDate>Mon, 31 Jul 2017 21:26:41 +0800</pubDate><description><![CDATA[static可以用来修饰变量、方法、代码块、内部类，还可用于静态导包。
被static修饰的变量、方法不需要依赖对象来进行访问，即使从未创建某个类的任何对象，只要类被加载，就可以通过类名.变量（方法名）来进行访问。一个static字段对每个类都只有一份存储空间，而非static字段对每个对象都有一个存储空间。
static在修饰变量时只能用于修饰成员变量而不能用于修饰局部变量。
static]]></description><category></category></item><item><title><![CDATA[cookie与session的区别]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76087571</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76087571</guid><author>Darling_0604</author><pubDate>Tue, 25 Jul 2017 17:19:25 +0800</pubDate><description><![CDATA[Cookie与Session都可以进行会话跟踪，但是实现的原理不太一样。一般情况下二者均可以满足需求，但有时候不可以使用Cookie，有时候不可以使用Session。下面通过比较说明二者的特点以及适用的场合。
 
1 . 从存取方式上比较
 
Cookie中只能保存ASCII字符串，如果需要存取Unicode字符或者二进制数据，需要进行UTF-8，GBK或者BASE64等方式的编码。Coo]]></description><category></category></item><item><title><![CDATA[Java多线程实现的四种方式]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76087533</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76087533</guid><author>Darling_0604</author><pubDate>Tue, 25 Jul 2017 17:17:32 +0800</pubDate><description><![CDATA[Java多线程实现方式主要有四种：继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。
 
其中前两种方式线程执行完后都没有返回值，后两种是带返回值的。
  
1、继承Thread类创建线程
Thread类本质上是实现了Runn]]></description><category></category></item><item><title><![CDATA[什么是死锁,简述死锁发生的四个必要条件，如何避免与预防死锁]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/76087458</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/76087458</guid><author>Darling_0604</author><pubDate>Tue, 25 Jul 2017 17:12:37 +0800</pubDate><description><![CDATA[什么是死锁
 
死锁是指多个进程因竞争资源而造成的一种僵局（互相等待），若无外力作用，这些进程都将无法向前推进。例如，在某一个计算机系统中只有一台打印机和一台输入
设备，进程P1正占用输入设备，同时又提出使用打印机的请求，但此时打印机正被进程P2
所占用，而P2在未释放打印机之前，又提出请求使用正被P1占用着的输入设备。这样两个进程相互无休止地等待下去，均无法继续执行，此时两个进程陷入死锁]]></description><category></category></item><item><title><![CDATA[maven的安装]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/75425988</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/75425988</guid><author>Darling_0604</author><pubDate>Wed, 19 Jul 2017 17:32:46 +0800</pubDate><description><![CDATA[唉，真是服了自己了。记性越来越差。一不小心删除了maven，重新安装以及配置弄了好久才弄好。索性在这里记录一下
第一步，在maven.apache.org官网上下载maven的压缩包，解压。


第二步，配置环境变量。新建


修改path.即在原有的path加%M2_HOME%\bin




最后，点击确定即可。
打开cmd,输入mvn -v，输出如下，则安装成功]]></description><category></category></item><item><title><![CDATA[Java实现冒泡排序]]></title><link>https://blog.youkuaiyun.com/Darling_0604/article/details/75314033</link><guid>https://blog.youkuaiyun.com/Darling_0604/article/details/75314033</guid><author>Darling_0604</author><pubDate>Tue, 18 Jul 2017 17:19:02 +0800</pubDate><description><![CDATA[冒泡排序法的思想是通过与相邻元素的比较和交换把小的元素交换到前面。其过程类似于水泡由下往上逐渐升起。如对5,2,8,7,4进行冒泡排序。首先从后向前冒泡，4和7比较，把4交换在前面，变成5,2,8,4,7.同理4和8交换，变成5,2,4,8,7,  2和4不用进行交换。5和2进行交换，变成2,5,4,8,7.此时第一次冒泡就完成了，把最小的2排在了最前面。对剩下的序列按照以上方法就可得到一个有序序]]></description><category></category></item></channel></rss>