摘要: 选择排序对冒泡排序进行了改进,将交换次数从O(n2)降低到了O(n),比较次数仍然是O(n2) 情景:对数组 int[] arr = {6,9,5,2,8,7}中的数据 从小到大排序。 思路:在第一趟排序中,从下标为0开始选择出最小的数字,和arr[0]进行交换,此时,最左侧的数字已经是有序状态了。 阅读全文
posted @ 2019-01-23 13:31 51life 阅读(185) 评论(0) 推荐(0)
摘要: 情景:对数组 int[] arr = {6,9,5,2,8,7}中的数据 从小到大排序 思路:从下标为0开始比较,如果arr[0] > arr[1],则交换;否则,不做任何处理。然后同理比较arr[1]和arr[2],,,arr[maxSize-2]和arr[maxSize-1]。经过一轮比较,最大 阅读全文
posted @ 2019-01-22 17:05 51life 阅读(260) 评论(0) 推荐(0)
摘要: 1.zookeeper是什么? zookeeper是应用于集群或者节点组中的一种分布式协调服务,管理集群中的各个节点,并通过稳健的同步技术维护共享数据。 2.zookeeper基本概念介绍 2.1 zookeeper中的角色 (a)leader:负责进行投票的发起和决议,更新系统状态。 (b)fol 阅读全文
posted @ 2019-01-15 15:53 51life 阅读(1786) 评论(0) 推荐(0)
摘要: redis有三种集群方式:主从复制,哨兵模式和集群。 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送 阅读全文
posted @ 2019-01-08 09:23 51life 阅读(113276) 评论(5) 推荐(17)
摘要: 这篇文章,我们将介绍什么是缓存穿透、缓存击穿与缓存雪崩,以及对应的解决方案。 1.缓存穿透 缓存穿透,是指查询一个不存在的数据,由于数据不存在,所以数据不会被缓存,每次查询都是从数据库中去查询。如果有人利用这个存在的漏洞去伪造大量的请求,那么很可能导致DB承受不了那么大的流量就挂掉了。 解决方案: 阅读全文
posted @ 2019-01-07 14:17 51life 阅读(3646) 评论(0) 推荐(2)
摘要: 1.定义 重入锁:能够支持一个线程对资源的重复加锁,也就是当一个线程获取到锁后,再次获取该锁时而不会被阻塞。 2.可重入锁的应用场景 2.1 如果已经加锁,则不再重复加锁,比如:交互界面点击后响应时间长,可能会多次点击,使用重入锁可防止后台重复执行。 2.2 如果发现该操作已经在执行,则等待一段时间 阅读全文
posted @ 2018-12-25 16:16 51life 阅读(738) 评论(0) 推荐(0)
摘要: java中的线程池是应用场景最多的并发框架,合理使用线程池能带来三个好处: 第一:降低资源消耗。通过重复利用已经创建的线程降低创建线程和销毁线程造成的资源消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,会 阅读全文
posted @ 2018-12-19 14:38 51life 阅读(387) 评论(0) 推荐(0)
摘要: 1.Callable和Runnable 看Callable接口: 看Runnable接口: Callable和Runnable都代表着任务,不同之处在于Callable有返回值,并且能抛出异常,Runnable任务执行结束之后没有返回值。Callable一般和Future一起使用,可以获取任务返回结 阅读全文
posted @ 2018-12-19 13:57 51life 阅读(626) 评论(0) 推荐(0)
摘要: 1.ConcurrentHashMap原理介绍(JDK1.7) 我们知道HashTable在并发情况下效率低的原因是所有访问HashTable的线程都必须竞争同一把锁,这就导致一旦一个线程获取了锁,其余所有的线程都必须处于等待状态。而ConcurrentHashMap使用的是锁分段技术,就是将数据分 阅读全文
posted @ 2018-12-17 10:54 51life 阅读(382) 评论(1) 推荐(1)
摘要: 本文分为两部分:一是JVM内存区域的讲解;二是常见的内存溢出异常分析。 1.JVM内存区域 java虚拟机在执行java程序的过程中会把它管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途,这些区域有哪些呢?如下图: 1.1 程序计数器 程序计数器是一块很小的内存空间,它的作用可以看作是当 阅读全文
posted @ 2018-10-18 16:40 51life 阅读(435) 评论(0) 推荐(0)