other

数据结构堆介绍及应用

什么是堆? 堆是一种特殊的树,只要满足以下两个条件,就可以称这棵树为堆 堆是一颗完全二叉树(完全二叉树要求,除了最后一层,其他节点个数都是满的,最后一层的节点都靠左排列) 堆中的每一个节点都必须大于等于(或者小于等于)其子树中每个节点的值。 每个节点的值都大于等于其子树每个节点的值的堆,我们称之为大顶堆,每个节点的值都小于等于其子树每个节点的值的堆,我们称之为小顶堆。如下图: 从上图可以看出,对于同一组数据,我们可以构建多种不同形态的堆。 如何存储堆? 堆是一颗完全二叉树,比较适合用数组存放,因为用数组存放不需要存储左右子节点的指针,非常节省空间,通过下标就可以找到一个节点的左右子节点和父节点。下图就是一个数组存放堆的例子: 从图中可以看出,下标i的节点的左子节点的下标是i2,右子节点的下标为i2+1,父节点的下标为i/2,

  • 凯文
10 min read
other

X.509 数字证书介绍

X.509 数字证书结构图 简单来说,数字证书就是一张附带了数字签名的信息表。 下图或许可以帮助对本文的理解。 互联网中常见的信息窃取方式 假设客户端「C」想和互联网另一端的服务器「S」进行无保密通信,且客户端「C」没有部署任何服务器身份验证机制。 假冒服务器 假冒的服务器「fake_S」冒充「S」,直接与「C」进行通信。 如果「C」打算将密码之类的敏感信息传递到「S」,那么敏感信息就会被「fake_S」截获。 这时候「

  • 凯文
13 min read
other

常用的加密算法

概述 对称加密算法 非对称加密算法 散列算法 详述 对称加密算法 DES 应该是最早的现代密码学算法之一。它由美国政府提出,密钥长度为 56 位。目前,它暴力破解 56 位密码的时间,已经能控制在 24 小时内了。 DES 实际上是一个过时的密码学算法,目前已经不推荐使用了。关于 DES,还有一点特别有意思。DES 包含一个关键模块:S 盒,其设计的原理一直没有公开。因此,很多人都相信,这个

  • 凯文
5 min read
other

乐观锁与悲观锁

悲观锁 悲观锁是指在用读取锁锁定一块代码的时候,另一个读取锁依然可以进入该代码块,而写锁不可以进入.在用写锁锁定一段代码的时候,读锁和写锁都不能进入该代码块. 乐观锁 乐观锁其实就是写锁优先机制,读锁在锁定某一代码块的时候,如果没有写锁竞争,那么就会获得该锁的权限,如果进行锁定的时候发现有写锁正在竞争,那么就会抛出例外,需要重新操作进行锁定.竞争标志则是 long stamp = lock.tryOptimisticRead();//有竞争返回0 lock.validate(stamp);//有竞争返回true 悲观锁示例 package Test; import java.util.concurrent.locks.ReadWriteLock;

  • 凯文
3 min read