不能说的秘密的博客

求知若饥,虚心若愚

每日反思

从事任何技术研究,不知道该干什么的时候,就问自己四个问题: •这个方向上最新进展是什么? 都知道吗? •这个方向上最著名的专家有哪些?他们的研究都看过吗? •这个方向上最著名的技术社区有哪些?精华帖都看过一遍吗? •这个方向上最重要的文章、工具有哪些?文章都看过吗?工具都分析过吗?

2016-12-22 21:37:24

阅读数 1046

评论数 0

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

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

2018-12-24 19:56:27

阅读数 126

评论数 0

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

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

2018-12-24 16:31:37

阅读数 299

评论数 2

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

在正确配置了Spring事务管理后,或许在某些场景下,你可以写出如下代码: class T { public int createFirst(){ //dosometing.... try { this.createSecond()...

2018-06-29 13:25:17

阅读数 1431

评论数 0

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

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

2018-05-21 15:59:57

阅读数 384

评论数 0

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

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

2018-05-19 19:28:53

阅读数 643

评论数 2

索引使用策略及优化

MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization)。本文讨论的高性能索引策略主要属于结构优化范畴。本章的内容完全基于上文B+树在数据库索引中的应用的理论基础,一旦理解了索引背后的机制,那么选择高性能的策略就变成了纯粹的推理,...

2018-05-06 19:45:22

阅读数 894

评论数 0

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

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

2018-05-05 14:37:19

阅读数 419

评论数 0

红黑树的特性和实现

平衡二叉搜索树的形式多样,且各具特色。比如,伸展树实现简便、无需修改节点 结构、分摊复杂度低,但可惜最坏情况下的单次操作需要n时间,故难以适用于对可靠性和稳定性要求极高的场合。 反之,AVL树尽管可以保证最坏情况下的单次操作速度,但需在节点中嵌入平衡因子等标识;更重要的是,删除操作之后的重平衡可...

2018-04-23 00:13:34

阅读数 669

评论数 0

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

现代计算机中,在内存与外存(磁盘)组成的二级存储系统中, 数据全集往往存放于外存中,计算过程中则可将内存作为外存的高速缓存,存放最常用数据项的复本。借助高效的调度算法,如此便可将内存的“高速度”与外存的“大容量”结合起来。 两个相邻存储级别之间的数据传输,统称I/O操作。各级存储器的访问速度相差...

2018-04-19 00:59:21

阅读数 963

评论数 0

伸展树的特性及实现

除了AVL树,本章将按照二叉搜索树的介绍,继续介绍平衡二叉搜索树家族中的另一个成员—Splay伸展树。 相对于AVL,Splay的实现更为简捷。伸展树无需时刻都严格地保持全树的平衡,但却能够在任何足够长的真实操作序列中,保持分摊意义上的高效率。伸展树也不需要对基本的二叉树节点结构,做任何附加的要...

2018-04-16 23:59:17

阅读数 1219

评论数 0

使用redis实现分布式锁

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

2018-04-15 00:05:30

阅读数 3101

评论数 0

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

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

2018-01-29 00:51:21

阅读数 3010

评论数 0

AVL树的实现

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

2018-01-01 17:55:55

阅读数 392

评论数 0

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

二叉搜索树的树高与性能前面笔者介绍了二叉搜索树的实现和性能分析,查询,插入和删除等操作均线性正比于二叉树的高度。在最坏的情况下,线性表退化为列表,二叉搜索树的性能会降低至O(n)。因此,如果能控制树高,则二叉搜索树的性能会明显提升理想平衡与适度平衡理想平衡既然二叉搜索树的性能主要影响与树高,则应该...

2017-12-31 22:08:21

阅读数 268

评论数 0

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

对线性表比较熟悉的读者会很清楚线性表的查找性能。无论是链式存储或是顺序存储,在最坏情况或是平均情况下都查需要线性时间。另外,对于堆和栈两种特殊的线性表甚至不提供对任一元素的查找接口。因此,若需要对象集合的组成可以高效地动态调整,又能高效的查找,则线性表很难胜任。 高效率的动态修改和高效率的静态查...

2017-12-31 19:15:15

阅读数 340

评论数 0

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

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

2017-12-17 16:02:11

阅读数 1514

评论数 0

图的拓扑排序及其应用

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

2017-12-06 00:28:18

阅读数 894

评论数 0

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

前面一篇文章介绍了图的广度优先搜索算法和BFS树,这篇文件笔者将介绍另一种图的遍历算法-深度优先算法概述深度优先搜索(Depth-First Search,DFS)选取下一顶点的策略,可概括为:优先选取最后一个被访问到的顶点的邻居。以顶点 s 为基点的 DFS 搜索,将首先访问顶点 s;再从 s ...

2017-12-04 00:59:53

阅读数 6236

评论数 0

图的广度优先搜索算法并生成BFS树

笔者在前面的两篇文章中介绍了图的两种实现方法: 图的邻接表的实现 图的邻接矩阵的实现 接下来笔者将介绍图遍历算法

2017-12-04 00:11:24

阅读数 5008

评论数 0

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