<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[追梦]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u010168160</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u010168160]]></copyright><item><title><![CDATA[【分布式】我们一起来分析——缓存和数据库一致性问题]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/108070386</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/108070386</guid><author>u010168160</author><pubDate>Tue, 18 Aug 2020 09:50:37 +0800</pubDate><description><![CDATA[问题：

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你只要用缓存，就可能会涉及到缓存与数据库双存储双写，你只要是双写，就一定会有数据一致性的问题，那么你如何解决一致性问题？

分析：

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;先做一个说明，从理论上来说，有两种处理思维，一种需保证数据强一致性，这样性能肯定大打折扣；另外我们可以采用最终一致性，保证性能的基础上，允许一定时间内的数据不一致，但最终数据是一致的。

1 强一致性思想

&nbsp;&n]]></description><category></category></item><item><title><![CDATA[【jdk8源码】Arrays.sort插入排序，居然还可以成对插入]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/107972841</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/107972841</guid><author>u010168160</author><pubDate>Thu, 13 Aug 2020 14:32:12 +0800</pubDate><description><![CDATA[至此，我们学习完了传统插入排序和成对插入排序，可以看出成对插入排序的每次先插入较大的数，这样我们就可以确定另一个数肯定在插入位置的左侧，这种处理方式有点像TimSort排序中合并相邻部分的处理，先找到左边最大数在右边的位置，再找到右边最小数在左边的位置，然后只需合并这重合的部分就行了。因此它比传统的插入排序实现更快。
      由于成对插入排序在循环寻找a1,a2位置的时候，没有对左边界做判断，因此这次要注意下标越界的问题。这次省去判断，对性能的提升也是有帮助的。]]></description><category></category></item><item><title><![CDATA[【排序算法】十大经典大集合：简介-代码-动态图-时间复杂度]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/107611716</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/107611716</guid><author>u010168160</author><pubDate>Fri, 07 Aug 2020 10:38:59 +0800</pubDate><description><![CDATA[冒泡排序
	public static void bubbleSort(int arr[]) {

        for(int i =0 ; i&lt;arr.length-1 ; i++) {
            for(int j=0 ; j&lt;arr.length-1-i ; j++) {
                if(arr[j]&gt;arr[j+1]) {
                    int temp = arr[j];
                    a]]></description><category></category></item><item><title><![CDATA[【jdk8源码】legacyMergeSort算法=插入排序+分治思想+归并优化，其实就这么简单]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/107611547</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/107611547</guid><author>u010168160</author><pubDate>Wed, 29 Jul 2020 10:03:11 +0800</pubDate><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdk1.7之前的排序用的就是归并排序，legacyMergeSort此方法就是1.7为了兼容之前版本的归并排序。

一、简介

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;归并排序（Merge Sort）是建立在归并操作上的一种有效，稳定的排序算法，该算法是采用分治法（Divide and Conquer）的一个非常典型的应用。将已有序的子序列合并，得到完全有序的序列；即先使每个子序列有序，再使子序列段间.]]></description><category></category></item><item><title><![CDATA[【jdk8源码】TimSort算法——从头看到脚]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/107608576</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/107608576</guid><author>u010168160</author><pubDate>Tue, 28 Jul 2020 10:35:22 +0800</pubDate><description><![CDATA[TimSort算法主要进行了以下优化
1、利用自然升序序列
2、优化的二分插入排序，先利用二分查找找到位置，再进行移位，插入数据排序
3、拆分为大小查不多的run分割槽。因为将一个长序列和一个短序列进行归并排序从效率和代价的角度来看是不划算的，而两个长度均衡的序列进行归并排序时才是比较合理的也比较高效的。
4、优化的归并排序，
4.1 找到在左边run1中找到右边run2中的最小元素的位置x1，这样x1之前的元素就不用处理了；
4.2 找到在右边run2中找到左边run1中的最大元素的位置x2，这样x2之后]]></description><category></category></item><item><title><![CDATA[JVM——深入解析原理和运行机制（一）类加载器]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/78128474</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/78128474</guid><author>u010168160</author><pubDate>Thu, 28 Sep 2017 21:42:11 +0800</pubDate><description><![CDATA[待定]]></description><category></category></item><item><title><![CDATA[JVM——深入解析原理和运行机制（一）类加载过程]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/78128470</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/78128470</guid><author>u010168160</author><pubDate>Thu, 28 Sep 2017 21:41:46 +0800</pubDate><description><![CDATA[
  &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; 隔了好久终于把这篇文章补上了，最近在看《深入理解Java虚拟机》，一本很不错的书，必须值得一看。 
  &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; 由于本人对Java类的加载过程一直是一知半解，所以优先看了一下]]></description><category></category></item><item><title><![CDATA[JVM——深入解析之初识]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/77757717</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/77757717</guid><author>u010168160</author><pubDate>Thu, 31 Aug 2017 22:43:42 +0800</pubDate><description><![CDATA[之前我们已经学习了多线程的相关概念原理以及线程池的管理等，但是要想明白线程的运行过程还需要了解jvm的知识，今天，我们就来介绍一下jvm。
1、什么是JVM
        JVM是Java Virtual Machine（Java虚拟机）的缩写，每个使用Java的开发
~~~~~
       今天我们知道了什么是jvm，以及jvm的结构等，下一次我们将深入剖析一下jvm的原理和工作流程等。]]></description><category></category></item><item><title><![CDATA[多线程——并发锁的集结号]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/77624095</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/77624095</guid><author>u010168160</author><pubDate>Sun, 27 Aug 2017 22:28:42 +0800</pubDate><description><![CDATA[上次我们说了一下多线程的管理，今天我们来看一下多线程的锁。
1、不同的加锁方式
类锁：在代码中的方法上加了static和synchronized的锁，或者synchronized(xxx.class）的代码段
对象锁：在代码中的方法上加了synchronized的锁，或者synchronized(this）的代码段
···············
今天我们总结了一下多线程中的锁，以后我们会继续分享关于锁的学习。]]></description><category></category></item><item><title><![CDATA[多线程——Java线程池原理深入]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/76473993</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/76473993</guid><author>u010168160</author><pubDate>Mon, 31 Jul 2017 23:23:32 +0800</pubDate><description><![CDATA[上次我们简单了解了一下什么是线程池以及Java中几种类型的线程池，今天我们来深入剖析一下线程池的原理。
1、构造
        1. 线程池管理器（ThreadPoolManager）：用于创建并管理线程池
        ·············
      通过这次学习，我们不仅知道了线程池是如何管理线程，而且还了解了线程多种状态之间的转换，这样更加便于我们对线程池的理解。之后，我们还将继续学习关]]></description><category></category></item><item><title><![CDATA[多线程——java线程池简介]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/76473983</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/76473983</guid><author>u010168160</author><pubDate>Mon, 31 Jul 2017 23:22:31 +0800</pubDate><description><![CDATA[上次我们回忆了多线程的基础概念，今天，我们来看看Java中对线程池的使用。
一、线程池1、为什么需要
        在面向对象编程中，创建和销毁对象是很费时间的，因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此，虚拟机将试图跟踪每
       ·········
      今天我们简单了解了一下为什么要用线程池，以及线程池的一些类型和使用，下次我们将继续深入学习线程池的原理。]]></description><category></category></item><item><title><![CDATA[多线程——临界区-锁]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/74012509</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/74012509</guid><author>u010168160</author><pubDate>Fri, 30 Jun 2017 22:02:04 +0800</pubDate><description><![CDATA[今天，我们接着上次说的，来继续回顾一下多线程的基础—临界区和锁·····
    今天我们主要是通过临界区的说明，来引出锁的一些问题。我们要知道死锁的危险始终存在，但是我们应该尽量减少这种危害存在的范围，多线程是一把双刃剑，有了效率的提高当然就有死锁的危险。所以我们要尽量多了解这些方面的知识，让自己少在这些地方踩坑。]]></description><category></category></item><item><title><![CDATA[多线程——同步-异步-阻塞-非阻塞]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/74012507</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/74012507</guid><author>u010168160</author><pubDate>Fri, 30 Jun 2017 22:01:28 +0800</pubDate><description><![CDATA[呵呵，好久没写博客了，今天让我们来回顾一下多线程的一些基础知识。一、同步和异步
      1、同步（synchronous）所谓同步，就是·············
      总之，我们只要知道阻塞和非阻塞是做事情时的状态，是针对请求者来说的，而同步和异步是消息通信的机制，是针对被请求者来说的···········未完待续]]></description><category></category></item><item><title><![CDATA[抽丝剥茧Reactor模式]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/53019039</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/53019039</guid><author>u010168160</author><pubDate>Thu, 03 Nov 2016 10:31:53 +0800</pubDate><description><![CDATA[今天在看书的时候看到了一个新的设计模式——Reactor模式，这个模式是出现在NIO中，至于这到底是个什么模式，今天我们来细说一下。
     reactor模式是javaNIO非堵塞技术的实现原理，我们不仅要知道其原理流程，还要知道其代码实现，当然这个reactor模式不仅仅在NIO中实现，而且在redies等其他地方也出现过，说明这个模式还是比较实用的，尤其是在多线程高并发的情况下使用。]]></description><category></category></item><item><title><![CDATA[多线程为什么要用ConcurrentHashMap]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/52925552</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/52925552</guid><author>u010168160</author><pubDate>Tue, 25 Oct 2016 18:45:59 +0800</pubDate><description><![CDATA[上次我们说了一下项目中经常会出现的死锁问题，今天我们要说的是关于集合的问题，实际上跟锁也有一定的关系，让我们来一起看看吧。
     这个类其实在我们项目中的缓存使用到了，利用ConcurrentHashMap来存放一些常用的信息，由于是在并发的情况下使用，考虑到性能的问题，优先选用ConcurrentHashMap类。不过我建议大家还是要多看看源码，从中会受益很多。]]></description><category></category></item><item><title><![CDATA[死锁剖析]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/52877585</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/52877585</guid><author>u010168160</author><pubDate>Thu, 20 Oct 2016 22:03:11 +0800</pubDate><description><![CDATA[最近在项目中出现了很多问题，最为常见的就是死锁问题，今天我们来看看死锁究竟是怎么回事。
     死锁在我们工作中是经常遇到的，所以我们不仅要学会怎么去处理，还要了解其中是为什么出的问题。这叫知其然还要知其所以然。]]></description><category></category></item><item><title><![CDATA[MySQL提升效率之limit]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/52668239</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/52668239</guid><author>u010168160</author><pubDate>Mon, 26 Sep 2016 11:42:17 +0800</pubDate><description><![CDATA[分页查询在我们的实际工作中经常会遇到，但是对于不同的数据库，分页查询的实现方式也不一样。而在MySQL中的分页就是靠limit实现的，可是limit的效率怎么样呢，我们来看看。
    我们在写代码的过程中，不仅要关注功能的实现，还要考虑其性能的优化。如何写出高质量的代码，那需要我们多看源码，多思考自己代码。不管多大的成就，都是靠一点点努力积累起来的，just do it.]]></description><category></category></item><item><title><![CDATA[如何使用才能让缓存更高效]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/52022726</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/52022726</guid><author>u010168160</author><pubDate>Wed, 27 Jul 2016 09:55:47 +0800</pubDate><description><![CDATA[在大数据下，我们在追求性能的时候往往离不开缓存的使用，可是怎么使用缓存才能更高效呢？这一直是我们在追求解决的一个问题，今天我们就来介绍一种比较高效的使用方法。
    我们在性能优化的时候总是要考虑数据库的性能，因为在数据爆炸的这个年代，我们系统的瓶颈都在数据库。所以降低了数据库的损耗就会是性能得到很大提升。]]></description><category></category></item><item><title><![CDATA[String.format参加字符串拼接大比拼]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/52021652</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/52021652</guid><author>u010168160</author><pubDate>Mon, 25 Jul 2016 10:58:10 +0800</pubDate><description><![CDATA[最近在项目中见到一个比较特别的代码，因为之前没见过，可能是孤陋寡闻了。我们平时用的最简单的字符串拼接就是用“+”号连接起来，要么我们就实例化一个StringBuilder或StringBuffer，然后拼接字符串。可是我见到的居然是用String.format将字符串拼起来的。那么我们就来看看到底是怎么回事吧。]]></description><category></category></item><item><title><![CDATA[MyBatis的优化注意点]]></title><link>https://blog.youkuaiyun.com/u010168160/article/details/51901445</link><guid>https://blog.youkuaiyun.com/u010168160/article/details/51901445</guid><author>u010168160</author><pubDate>Wed, 13 Jul 2016 21:26:51 +0800</pubDate><description><![CDATA[我们在项目中经常会用到Mybatis，可是我们怎么才能灵活的应用mybatis,使我们的程序性能更好呢？接下来我们就来看看这几个点。1、批量操作
        每个工具都有他试用的范围，需要根据我们的实际情况灵活应用。而且每个问题都有很多方法，我们要多思考那些简单、可用、高效的方法。不断思考，才能不断进步。]]></description><category></category></item></channel></rss>