排序算法动图演示

1.冒泡排序 代码 /** *1 冒泡排序 * 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。 * 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 * ...

2019-05-19 23:02:54

阅读数 18

评论数 0

数据结构(1):HashMap实现原理分析

1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难; 链表 链表存储区间离散,占用内存比较宽松,故空...

2019-05-12 17:29:36

阅读数 35

评论数 0

分布式锁

1. 基于redis的分布式锁,使用Jedis客户端@Component public class DistributedLock { @Autowired private JedisCluster jedisCluster; private int exprieTim...

2018-05-20 10:49:32

阅读数 132

评论数 0

MySQL HASH索引的适用场景和限制

HASH索引只有精确匹配索引所有列的查询才有效。因为索引自身只需要存储对应的哈希值,所以索引的结构十分紧凑,这也让哈希索引查找的速度非常快,然而,哈希索引也有限制,如下:哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行(即不能使用哈希索引来做覆盖索引扫描),不过,访...

2018-05-16 11:10:24

阅读数 1948

评论数 0

MySQL BTree索引的适用场景和限制

适用场景:全值匹配:全值匹配指的是和索引中的所有列进行匹配,即可用于查找姓名和出生日期匹配最左前缀:如:只查找姓,即只使用索引的第一列匹配列前缀:也可以只匹配某一列值的开头部分,如:匹配以J开头的姓的人,这里也只是使用了索引的第一列,且是第一列的一部分匹配范围值:如查找姓在allen和barrym...

2018-05-16 10:54:53

阅读数 275

评论数 0

判断链表是否有环的算法

第一步,找环中相汇点。分别用p1,p2指向链表头部,p1每次走一步,p2每次走二步,直到p1==p2找到在环中的相汇点。第二步,找环的入口。接上步,当p1==p2时,p2所经过节点数为2x,p1所经过节点数为x,设环中有n个节点,p2比p1多走一圈有2x=n+x; n=x;可以看出p1实际走了一个...

2018-05-10 14:36:31

阅读数 94

评论数 0

二进制十进制转换算法

2进制转10进制,10进制转2进制 //2进制转10进制: 按权相加 public static double binary2decimal(String binaryStr) { String[] binaryArr = binaryStr.split(&quot...

2018-05-08 15:45:31

阅读数 385

评论数 0

一致性HASH算法

一致性HASH算法在分布式缓存系统中,需要将数据均匀的分布到缓存服务器集群的不同机器上,就需要使用对缓存的数据的key做hash值计算, 然后在将hash值除以服务器节点的数量取模计算出数据需要落到那台服务器节点上。这种算法很简单,也可以实现数据的均匀分布, 但是,增加或者减少数据节点的时候会导致...

2018-05-07 20:36:43

阅读数 637

评论数 0

Zookeeper 架构原理

1.Zookeeper是什么Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态...

2018-04-28 18:45:01

阅读数 619

评论数 1

Tair 架构原理

Tair总体结构一个Tair集群主要包括3个必选模块:config server、data server和client,以及一个可选模块:invalid server。通常情况下,一个集群中包含2台config server及多台data server。两台config server互为主备并通过...

2018-04-28 18:42:41

阅读数 459

评论数 0

DUBBO架构原理

节点角色说明 节点 角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次数和调用时间的监控中心 Container 服...

2018-04-15 16:52:15

阅读数 181

评论数 0

RocketMQ架构原理

集群部署架构 结合部署结构图,描述集群工作流程: 1,启动Namesrv,Namesrv起来后监听端口,等待Broker、Produer、Consumer连上来,相当于一个路由控制中心。 2,Broker启动,跟所有的Namesrv保持长连接,定时发送心跳包。心跳包中包含当前Broker...

2018-04-15 16:00:03

阅读数 2511

评论数 4

Java NIO 通道的实现类型

文件通道Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开FileChannel 在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,...

2018-04-07 23:41:18

阅读数 241

评论数 0

Java NIO 选择器Selector

选择器(Selector)Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。 (1)  为什么使用Selector? 仅用单个线程来处理多个Channels...

2018-04-07 17:17:12

阅读数 85

评论数 0

Java NIO 分散(Scatter)/聚集(Gather)

分散(Scatter)/聚集(Gather)Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel中读取或者写入到Channel的操作。 分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Chan...

2018-04-07 14:53:56

阅读数 81

评论数 0

JAVA NIO 缓冲区Buffer

缓冲区(Buffer)Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。 Buffer...

2018-04-07 12:18:45

阅读数 59

评论数 0

Java NIO 通道Channel

通道(Channel)Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如...

2018-04-07 12:17:30

阅读数 55

评论数 1

Java NIO 概述

Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Asynchrono...

2018-03-26 20:35:07

阅读数 50

评论数 0

Java IO

1,基于字节的IO2.基于字符的IO

2018-03-25 23:02:44

阅读数 60

评论数 0

java内存分配策略

JVM采用分代的垃圾回收策略:不同对象的生命周期是不一样的。目前JVM分代主要是分三个年代:新生代:所有新创建的对象都首先在新生代进行内存分配。新生代具体又分为3个区,一个Eden区、一个From Survivor区和一个To Sruvivor区。大部分对象都被分配在Eden区,当Eden区满时,...

2018-03-19 17:21:06

阅读数 275

评论数 1

提示
确定要删除当前文章?
取消 删除
关闭
关闭