希尔排序是一种基于插入排序的快速排序算法,对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点的从数组的一端移动到另一端。例如,如果主键最小的元素正好在数组的尽头,要讲它挪到正确的位置就需要N-1次移动。希尔排序为了加快速度简单的改进了插入排序,交换不相邻的元素以对数组的局 ...
分类:
编程语言 时间:
2018-05-07 13:25:25
阅读次数:
190
第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。(不好) 第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0。然后再把不为空的老数组中剩下的部分加到新数组的结尾。(好) 第二种思路的排序算 ...
分类:
编程语言 时间:
2018-05-01 20:20:16
阅读次数:
497
一、Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的。 Java内存模型规定了所有的变量都存储在主内存中。每条线程中还有自己的工作内存,线程的工作内存中保存了被该线程所使用到的变量(这些变量是从主内存中拷贝而来)。线程对变量的所有操作(读取,赋值 ...
分类:
其他好文 时间:
2018-04-26 11:57:05
阅读次数:
158
map 是一种数据容器,它提供一种由key 到 value 的映射。map 的key 是唯一的, 也是有序的。map 通常由近似平衡的红黑树来实现。key 的有序性,使得插入,查找节点比较有效。map 的操作(增删改查),通常就是对节点的操作(增删改查)。当然,map 也有创建(new)和销毁(de ...
分类:
其他好文 时间:
2018-04-22 10:46:20
阅读次数:
1452
Java内存模型 Java内存模型-可见性 Java内存模型-原子性 Java内存模型-有序性 volatile-是否具有可见性? volatile-是否具有原子性? volatile-是否具有有序性? ...
分类:
编程语言 时间:
2018-04-21 16:08:35
阅读次数:
177
一、概述 根据支付宝品牌 DNA,我们重新探索了版式设计原则。利用数列的计算方法,对线下物料的留白、基本布局、对齐方式、字体使用等进行了重新规范并给出相应的使用方法。线上版面的设计规范,一方面借鉴了数列计算,另一方面参考了 Material Design 和 ios Developer Guides ...
分类:
其他好文 时间:
2018-04-16 12:07:54
阅读次数:
252
核心篇 数据存储 MySQL 索引使用 的注意事项 说说反模式设计 说说分库与分表设计 分库与分表带来的分布式困境与应对之策 说说SQL优化之道 MySQL遇到的死锁问题 存储引擎的 lnnoDB 与 MyISAM 数据库索引的原理 为什么要用 B-tree 聚集索引与非聚集索引的区别 limit ...
分类:
编程语言 时间:
2018-04-15 20:51:09
阅读次数:
333
本文大纲 并发编程三要素 原子性 原子,即一个不可再被分割的颗粒。在Java中原子性指的是一个或多个操作要么全部执行成功要么全部执行失败。 有序性 程序执行的顺序按照代码的先后顺序执行。(处理器可能会对指令进行重排序) 可见性 当多个线程访问同一个变量时,如果其中一个线程对其作了修改,其他线程能立即 ...
分类:
编程语言 时间:
2018-04-08 19:46:26
阅读次数:
211
一、原子性 原子性是指一个操作是不可中断的。即使在多个线程一起执行的时候,一个操作一旦开始,就不会被其它线程干扰。 二、有序性 2.1 举例 在并发时,程序的执行可能会出现乱序 2.2 步骤 一条指令的执行是可以分为很多步骤的: 取指IF 译码和取寄存器操作数ID 执行或者有效地址计算EX 存储器访 ...
分类:
编程语言 时间:
2018-04-06 00:16:15
阅读次数:
239
volatile关键字经常在并发编程中使用,其特性是保证可见性以及有序性,但是关于volatile的使用仍然要小心,这需要明白volatile关键字的特性及实现的原理,这也是本篇文章的主要内容。 一、Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样 ...
分类:
其他好文 时间:
2018-03-21 20:00:04
阅读次数:
156