5 不能说的秘密go

尚未进行身份认证

求知若饥,虚心若愚

等级
TA的排名 2k+

《Rabbit MQ 实战》读书笔记 (二:事务与消息确认模式)

AMQP协议的一个亮点就是对消息的可靠性投递-事务。事务在AMQP-0-9-1中正式成为规范的一部分。虽然AMQP事务保证了在信道开启了事务模式后,全部命令的执行成功。但AMQP事务大大降低了Rabbit的吞吐量,性能极低。同时使用AMQP事务使得生产者与应用程序之间产生同步。为了解决这个可靠性投递和性能的兼容性问题。RabbitMQ提供了发送方确认模式。在客户端与Rabbit服务端的链接信...

2019-06-23 00:39:14

《Rabbit MQ 实战》读书笔记 (一:认识AMQP模型)

最近在读RabbitMQ实战这本书,开个帖子。记录一下读书笔记吧。一、AMQP模型AdvancedMessageQueuingProtocol-高级消息队列协议是一个进程间传递异步消息的网络协议。AMQP模型描述了一套模块化的组件以及这些组件之间进行连接的标准规则。在服务器中,三个主要功能模块连接成一个处理链完成预期的功能:“exchange”接收发布应用程序发送的消息,并根据...

2019-06-22 17:15:54

Redis原理(二) Redis的对象类型及其内部编码

Redis支持5种对象类型,而每种结构都有至少两种编码。这样做的好处在于:一方面接口与实现分离,当需要增加或改变内部编码时,用户使用不受影响,另一方面可以根据不同的应用场景切换内部编码,提高效率。Redis各种对象类型支持的内部编码官网描述:Stringscanbeencodedasraw(normalstringencoding)orint(strings...

2018-12-24 19:56:27

Redis原理(一) redis的内存模型

Redis最为常用的数据类型主要有以下五种:String字符串Hash哈希List列表Set集合Sortedset有序集合丰富的类型是Redis相对于Memcached等的一大优势redis内部的存储结构如图示:在了解上文的基础上,进一步了解Redis的内存模型,对Redis的使用有很大帮助。如:估算Redis内存使用量,选择合...

2018-12-24 16:31:37

从Spring AOP的原理理解@Transactional失效问题

在正确配置了Spring事务管理后,或许在某些场景下,你可以写出如下代码:classT{publicintcreateFirst(){//dosometing....try{this.createSecond();}catch(Exceptione){throwe;...

2018-06-29 13:25:17

主流的hash算法概述及在JDK Map中的应用

hash算法的应用场景Java中的Map实际是一个“散列表”的数据结构,散列表是逻辑上由一系列可存放词条(或其引用)的单元组成,故这些单元也称作桶(bucket)——一般都使用线性表来实现。一组词条在散列表内部的具体分布,取决于所谓的散列(hashing)方案:事先在词条与桶地址之间约定的某种映射关系,可描述为从关键码空间到桶数组地址空间的函数:hash()。这里的hash()...

2018-05-21 15:59:57

Java NIO学习笔记(四) 使用JDK 1.7 NIO2.0 实现客户端与服务器的通信

JDK1.7提供了全新的异步NIO模式。称为:NIO2.0或AIO。该模式引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现。异步通道提供两种方式获取获取操作结果。分别是:通过java.util.concurrent.Future类来表示异步操作的结果;CompletionHandler接口的实现类作为操作完成的回调。NIO2.0的异步套接字通...

2018-05-19 19:28:53

索引使用策略及优化

MySQL的优化主要分为结构优化(Schemeoptimization)和查询优化(Queryoptimization)。本文讨论的高性能索引策略主要属于结构优化范畴。本章的内容完全基于上文B+树在数据库索引中的应用的理论基础,一旦理解了索引背后的机制,那么选择高性能的策略就变成了纯粹的推理,并且可以理解这些策略背后的逻辑。示例数据库为了讨论索引策略,需要一个数据量不算小的数据库作为示...

2018-05-06 19:45:22

B+树在数据库索引中的应用

目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构(更少的磁盘I/O操作次数的渐进复杂度)一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的渐进复...

2018-05-05 14:37:19

红黑树的特性和实现

平衡二叉搜索树的形式多样,且各具特色。比如,伸展树实现简便、无需修改节点结构、分摊复杂度低,但可惜最坏情况下的单次操作需要n时间,故难以适用于对可靠性和稳定性要求极高的场合。反之,AVL树尽管可以保证最坏情况下的单次操作速度,但需在节点中嵌入平衡因子等标识;更重要的是,删除操作之后的重平衡可能需做多达logn次旋转,从而频繁地导致全树整体拓扑结构的大幅度变化。红黑树即是针对后一不足的改进...

2018-04-23 00:13:34

搜索树之B-/B+树的特性与实现

现代计算机中,在内存与外存(磁盘)组成的二级存储系统中,数据全集往往存放于外存中,计算过程中则可将内存作为外存的高速缓存,存放最常用数据项的复本。借助高效的调度算法,如此便可将内存的“高速度”与外存的“大容量”结合起来。两个相邻存储级别之间的数据传输,统称I/O操作。各级存储器的访问速度相差悬殊,故应尽可能地减少I/O操作。仍以内存与磁盘为例,其单次访问延迟大致分别在纳秒(ns)和毫秒(m...

2018-04-19 00:59:21

伸展树的特性及实现

除了AVL树,本章将按照二叉搜索树的介绍,继续介绍平衡二叉搜索树家族中的另一个成员—Splay伸展树。相对于AVL,Splay的实现更为简捷。伸展树无需时刻都严格地保持全树的平衡,但却能够在任何足够长的真实操作序列中,保持分摊意义上的高效率。伸展树也不需要对基本的二叉树节点结构,做任何附加的要求或改动,更不需要记录平衡因子或高度之类的额外信息,故适用范围更广。通常在任意数据结构的生命期内,...

2018-04-16 23:59:17

使用redis实现分布式锁

分布式锁的应用场景当多个机器(多个进程)会对同一条数据进行修改时,并且要求这个修改是原子性的。这里有两个限定:多个进程之间的竞争,意味着JDK自带的锁失效;原子性修改,意味着数据是有状态的,修改前后有依赖。本文将先介绍Redis的实现方式,后面笔者会介绍分布式锁的其他实现。在学习Redis实现分布式锁的过程中,笔者首先参考了Redis的官方文档实现Red...

2018-04-15 00:05:30

使用MongoDB实现消息队列的异步消息功能

一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。自己实现一个较完善的消息队列要考虑高可用、顺序和重复消息、可靠投递、消费关系解

2018-01-29 00:51:21

AVL树的实现

前面笔者介绍了二叉搜索树的一般实现和平衡二叉树的实现原理。本篇文章将继续前文的平衡搜索树来介绍一种具体的平衡搜索树—AVL树。AVL树的特性AVL树中,对于任一节点V,其左右子树的高度差不能超过1。这个高度差定义为平衡因子。

2018-01-01 17:55:55

平衡二叉搜索树的实现原理

二叉搜索树的树高与性能前面笔者介绍了二叉搜索树的实现和性能分析,查询,插入和删除等操作均线性正比于二叉树的高度。在最坏的情况下,线性表退化为列表,二叉搜索树的性能会降低至O(n)。因此,如果能控制树高,则二叉搜索树的性能会明显提升理想平衡与适度平衡理想平衡既然二叉搜索树的性能主要影响与树高,则应该在节点数目固定的前提下,尽可能降低树高。也意味着,应尽可能地使兄弟子树的高度彼此接近,即全树尽可能的平衡

2017-12-31 22:08:21

二叉搜索树基本操作的实现

对线性表比较熟悉的读者会很清楚线性表的查找性能。无论是链式存储或是顺序存储,在最坏情况或是平均情况下都查需要线性时间。另外,对于堆和栈两种特殊的线性表甚至不提供对任一元素的查找接口。因此,若需要对象集合的组成可以高效地动态调整,又能高效的查找,则线性表很难胜任。高效率的动态修改和高效率的静态查找,是否能够兼顾?如果能,需要采取什么样的数据结构。笔者接下来的几篇博文,将回答这个问题。即采用树...

2017-12-31 19:15:15

从最小支撑树和最短路径树学习图的优先级搜索

前面笔者介绍了图的广度优先搜索算法和图的深度优先搜索。这两种搜索虽然各有特点,但基本结构却几乎相同。都需要通过迭代逐一发现各顶点,将其归纳到遍历树中做相应的处理。两种算法的唯一差别在于,如何选取下一个节点的问题。如果将选取下一节点的策略抽象为获取优先级最高的节点,则对于BFS或是DFS则可统一处理,他们的区别仅在于更新节点的优先级的策略不同而已。根据优先级来遍历,称为优先级搜索。

2017-12-17 16:02:11

图的拓扑排序及其应用

拓扑排序的定义对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(TopologicalOrder)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

2017-12-06 00:28:18

图的深度优先搜索算法并生成DFS树

前面一篇文章介绍了图的广度优先搜索算法和BFS树,这篇文件笔者将介绍另一种图的遍历算法-深度优先算法概述深度优先搜索(Depth-FirstSearch,DFS)选取下一顶点的策略,可概括为:优先选取最后一个被访问到的顶点的邻居。以顶点s为基点的DFS搜索,将首先访问顶点s;再从s所有尚未访问到的邻居中任取其一,并以之为基点,递归地执行DFS搜索。

2017-12-04 00:59:53

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。