<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Alpha_Paser的博客]]></title><description><![CDATA[欢迎各位技术大牛一起来交流经验]]></description><link>https://blog.youkuaiyun.com/Alpha_Paser</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Alpha_Paser]]></copyright><item><title><![CDATA[我为 Redis 找到了一个新家——Redis 之父当年的困兽之斗]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/97367461</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/97367461</guid><author>Alpha_Paser</author><pubDate>Fri, 26 Jul 2019 09:00:00 +0800</pubDate><description><![CDATA[今天翻了一下 Antirez 早年的博客，发现了这样一篇介绍 redis 进展的好文章，写于 2010 年，居然长期以来都没有被翻译成中文，所以我就不客气了。
大约 1 年前，Redis 还只是内部项目，没有任何开源的计划。它不过是用来解决 web 应用程序扩容时遇到的一系列让人棘手的问题而已(应该是用户会话缓存)。
但是开源对我来说实在太有吸引力了，我根本无法抗拒这样的诱惑。我可是已经在开源界活...]]></description><category></category></item><item><title><![CDATA[HashMap1.8和HasMap1.6的区别]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90710868</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90710868</guid><author>Alpha_Paser</author><pubDate>Fri, 31 May 2019 09:48:20 +0800</pubDate><description><![CDATA[（1）1.6在put(null,value)；的时候讲这个键值对放在哈希桶的第一个（直接判断），1.8是计算null的hash值（0）还是放在第一个
（2）1.6中的put使用链表的头插法，而1.8中使用的是尾插法。
（3）hash值计算不同：1.6： h ^= (h &gt;&gt;&gt; 20) ^ (h &gt;&gt;&gt; 12); return h ^ (h &gt;&gt;&gt...]]></description><category></category></item><item><title><![CDATA[InnoDB存储引擎之Master Thread的工作方式]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90579166</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90579166</guid><author>Alpha_Paser</author><pubDate>Sun, 26 May 2019 19:07:16 +0800</pubDate><description><![CDATA[InnoDB 1.0.X版本之前的Master Thread：
Master Thread拥有最高的线程优先级：后台有多个循环（主循环，后台循环，刷新循环，暂停循环）。
在主循环中有两大部分的操作，分别是每秒执行的操作，每十秒执行的操作：
每秒执行的操作：
（1）redo log刷新到磁盘，即使这个事务没有提交（总是），这也很好的解释了为什么再大的事务提交时间总是很短。
（2）合并插入缓冲：当前I...]]></description><category></category></item><item><title><![CDATA[HotSpot中的安全点详解]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90482554</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90482554</guid><author>Alpha_Paser</author><pubDate>Thu, 23 May 2019 16:12:40 +0800</pubDate><description><![CDATA[枚举根节点：
目前主流的虚拟机都是采用准确式GC，当系统停顿下来时并不需要寻找每一个GC Roots。（stop the world：由于可达性分析对执行时间的敏感，只有在系统处于一个能确保一致性的快照中进行时才能有效，这时整个系统看上去好像被冻结了一样，不可以出现在分析过程中对象的引用关系还在发生变化的情况）实现方式是使用一组被称为oopMap的数据结构来达到这个目的。在类加载完成时，虚拟机就把...]]></description><category></category></item><item><title><![CDATA[从虚拟机角度看对象的创建]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90477012</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90477012</guid><author>Alpha_Paser</author><pubDate>Thu, 23 May 2019 11:18:27 +0800</pubDate><description><![CDATA[（1）当JVM遇到一个new指令的时候，他会去检查这个指令的参数能否在运行时常量池定位到一个类的符号引用，并且检查这个符号代表的类是否已经被加载，解析和初始化过了，如果没有，那么必须先执行相应的类加载过程。
（2）在类的加载检查通过之后，接下来JVM需要为新生对象分配内存，对象所需的内存大小是在类加载完成之后便完全确定的。如果Java堆是规整的，那么直接采用指针碰撞算法分配内存（记录上一次对象分配...]]></description><category></category></item><item><title><![CDATA[JRE，JDK和JVM之间的关系]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90475957</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90475957</guid><author>Alpha_Paser</author><pubDate>Thu, 23 May 2019 10:38:02 +0800</pubDate><description><![CDATA[JRE，JDK，JVM之间的关系
JRE(JavaRuntimeEnvironment，Java运行环境)，也就是Java平台。所有的Java 程序都要在JRE下才能运行。普通用户只需要运行已开发好的java程序，安装JRE即可。
JDK(Java Development Kit)是程序开发者用来来编译、调试java程序用的开发工具包。JDK的工具也是Java程序，也需要JRE才能运行。为了保持J...]]></description><category></category></item><item><title><![CDATA[WeakHashMap浅析]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90444331</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90444331</guid><author>Alpha_Paser</author><pubDate>Wed, 22 May 2019 15:06:58 +0800</pubDate><description><![CDATA[在Java集合框架系列文章的最后，笔者打算介绍一个特殊的成员：WeakHashMap，从名字可以看出它是某种 Map。它的特殊之处在于 WeakHashMap 里的entry可能会被GC自动删除，即使程序员没有调用remove()或者clear()方法。
更直观的说，当使用 WeakHashMap 时，即使没有显示的添加或删除任何元素，也可能发生如下情况：
（1）调用两次size()方法返回不同的...]]></description><category></category></item><item><title><![CDATA[JVM内存空间快速分配技术]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90440012</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90440012</guid><author>Alpha_Paser</author><pubDate>Wed, 22 May 2019 11:06:42 +0800</pubDate><description><![CDATA[通常情况下，如果系统中存在大量的连续内存可以用来分配对象，这种情况下若采用指针碰撞算法来进行对象分配的话，效率是很可观的。
指针碰撞算法：记录上一次对象分配的位置，当有新对象需要分配时，若检查剩余的空间可以满足容纳这个对象，则只需要一次移动指针的操作便可完成内存的的分配。
对于多线程的应用：内存分配需要保证线程安全，如果通过全局锁的方式来保证线程安全的话，内存分配将会成为性能瓶颈。所以HotSpo...]]></description><category></category></item><item><title><![CDATA[JVM中类加载器的双亲委派模型]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90265441</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90265441</guid><author>Alpha_Paser</author><pubDate>Thu, 16 May 2019 15:57:11 +0800</pubDate><description><![CDATA[双亲委派模型过程
某个特定的类加载器在接到加载类的请求时，首先将加载任务委托给父类加载器，依次递归，如果父类加载器可以完成类加载任务，就成功返回；只有父类加载器无法完成此加载任务时，才自己去加载。
使用双亲委派模型的好处在于Java类随着它的类加载器一起具备了一种带有优先级的层次关系。例如类java.lang.Object，它存在在rt.jar中，无论哪一个类加载器要加载这个类，最终都是委派给处于...]]></description><category></category></item><item><title><![CDATA[自定义类加载器]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90265377</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90265377</guid><author>Alpha_Paser</author><pubDate>Thu, 16 May 2019 15:54:48 +0800</pubDate><description><![CDATA[在某些场合需要从网络或者非ClassPath路径下加载类，这个时候就需要自己定义一个类加载器了。在自己定义类加载器的时候需要重写ClassLoader类的findClass方法，loadClass方法不需要重写（loadClass方法最终会调用findClass方法），代码如下：
import java.io.*;

/**
 * Created by DanLongChen on 2019/5/...]]></description><category></category></item><item><title><![CDATA[MySQL高性能索引策略]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90230357</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90230357</guid><author>Alpha_Paser</author><pubDate>Wed, 15 May 2019 10:06:46 +0800</pubDate><description><![CDATA[高性能索引策略：索引主要是用于WHERE过滤
（1）使用独立的列：
如果不使用独立的列，MySQL将无法使用索引，独立的列是指：索引列不能是表达式的一部分，也不能是函数的参数。如select name from test where id+1=5;id+1=5就不是独立的索引列，而是表达式的一部分。
（2）前缀索引和索引选择性：
有时候需要索引很大的字符串列，这会让索引变大且慢。这个时候可以只索引...]]></description><category></category></item><item><title><![CDATA[mysql中update和select结合使用]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90201661</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90201661</guid><author>Alpha_Paser</author><pubDate>Tue, 14 May 2019 10:42:01 +0800</pubDate><description><![CDATA[在遇到需要update设置的参数来自从其他表select出的结果时,需要把update和select结合使用,不同数据库支持的形式不一样,在mysql中如下:
update A inner join(select id,name from B) c on A.id = c.id set A.name = c.name;

根据AB两个表的id相同为条件,把A表的name修改为B的sql语句就如上所...]]></description><category></category></item><item><title><![CDATA[MySQL中的事务日志]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90140194</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/90140194</guid><author>Alpha_Paser</author><pubDate>Sun, 12 May 2019 14:21:16 +0800</pubDate><description><![CDATA[事务日志可以提高事务的效率。使用事务的存储引擎在修改表的数据的时候，只需要修改其内存拷贝，再把该修改行为记录到持久化在磁盘中的事务日志中，而不是每次都将修改的数据本身持久化到磁盘中。事务日志采用追加的方式，因此写日志的操作是磁盘一小块区域的顺序IO，而不像随机IO那样需要在磁盘多个地方移动磁头，所以采用事务的方式相对来说快一点。事务日志持久化之后，被修改的数据就可以在后台被慢慢刷回到磁盘。若...]]></description><category></category></item><item><title><![CDATA[List，Map，Set三个接口，存取元素的时候，各有什么特点？]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89890419</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89890419</guid><author>Alpha_Paser</author><pubDate>Mon, 06 May 2019 20:14:07 +0800</pubDate><description><![CDATA[List与Set都是单列元素的集合，它们有一个功共同的父接口Collection。
Set里面不允许有重复的元素，
存元素：add方法有一个boolean的返回值，当集合中没有某个元素，此时add方法可成功加入该元素时，则返回true；当集合含有与某个元素equals相等的元素时，此时add方法无法加入该元素，返回结果为false。
取元素：没法说取第几个，只能以Iterator接口取得所有的元素...]]></description><category></category></item><item><title><![CDATA[数组是协变的]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89839975</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89839975</guid><author>Alpha_Paser</author><pubDate>Sun, 05 May 2019 10:04:09 +0800</pubDate><description><![CDATA[数组是协变的，如果Apple是Fruit的子类型，那么数组类型Apple[]就是Fruit[]的子类型，所以这就使得此向上转型是成立的。
Fruit[] apples=new Apple[size];

数组在编译时表示法可能是抽象的，而在运行时表示法往往一定是具体的，包含更多的信息。
Object[] objects=new Fruit[size];
 
Fruit[] apples=new A...]]></description><category></category></item><item><title><![CDATA[java内存泄露剖析]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89715581</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89715581</guid><author>Alpha_Paser</author><pubDate>Tue, 30 Apr 2019 20:55:45 +0800</pubDate><description><![CDATA[虽然Java自带垃圾回收机制（GC），程序员不需要手动进行内存管理，但是仍然会出现内存泄漏的情况。尽管如此，Java的自动内存管理，比起C/C++，内存泄漏的情况大大减少了。下面总结下什么情况下会发生Java内存泄漏。
静态集合类
在使用Set、Vector、HashMap等集合类的时候需要特别注意，有可能会发生内存泄漏。当这些集合被定义成静态的时候，由于它们的生命周期跟应用程序一样长，这时候，就...]]></description><category></category></item><item><title><![CDATA[加快ALTER TABLE操作的速度]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89680547</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89680547</guid><author>Alpha_Paser</author><pubDate>Mon, 29 Apr 2019 18:20:43 +0800</pubDate><description><![CDATA[MYSQL执行大多数修改表的方法是使用新的结构创建一张空表，从旧表中查询出所有的数据插入新表，然后再删除旧表。这样的操作需要花费很长的时间，尤其是内存不足而表又大，还有很多索引的情况下尤其严重。
大部分的ALTER TABLE操作会导致MYSQL服务中断；
可以使用的方法有两种：
（1）在一台不提供服务的机器上执行ALTER TABLE，然后再进行主库切换。
（2）使用影子拷贝。建立一张和源表无关...]]></description><category></category></item><item><title><![CDATA[hashmap和hashtable区别]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89645110</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89645110</guid><author>Alpha_Paser</author><pubDate>Sun, 28 Apr 2019 20:22:38 +0800</pubDate><description><![CDATA[1、继承不同。
public class Hashtable extends Dictionary implements Map
public class HashMap extends AbstractMap implements Map
2 产生时间不同
Hashtable是java一开始发布时就提供的键值映射的数据结构，而HashMap产生于JDK1.2。虽然Hashtable比HashMa...]]></description><category></category></item><item><title><![CDATA[Java的快速失败和安全失败]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89644861</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89644861</guid><author>Alpha_Paser</author><pubDate>Sun, 28 Apr 2019 20:07:11 +0800</pubDate><description><![CDATA[一：快速失败（fail—fast）
在用迭代器遍历一个集合对象时，如果遍历过程中对集合对象的内容进行了修改（增加、删除、修改），则会抛出Concurrent Modification Exception。
原理：迭代器在遍历时直接访问集合中的内容，并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化，就会改变modCount的值。每当迭代器使用hashNext()/n...]]></description><category></category></item><item><title><![CDATA[Java集合类中的Iterator和ListIterator的区别]]></title><link>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89644569</link><guid>https://blog.youkuaiyun.com/Alpha_Paser/article/details/89644569</guid><author>Alpha_Paser</author><pubDate>Sun, 28 Apr 2019 19:50:54 +0800</pubDate><description><![CDATA[最近看到集合类，知道凡是实现了Collection接口的集合类，都有一个Iterator方法，用于返回一个实现了Iterator接口的对象，用于遍历集合；（Iterator接口定义了3个方法分别是hasNext（），next（），remove（）；）
我们在使用List,Set的时候，为了实现对其数据的遍历，我们经常使用到了Iterator(迭代器)。使用迭代器，你不需要干涉其遍历的过程，只需要每...]]></description><category></category></item></channel></rss>