疯狂的小鸡

疯狂的小鸡

--爬坑之路

常见安全算法
散列算法散列算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密。只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。 散列算法主要特点是无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。消息摘要看起来是“伪随机的”。也就是说对相同的信息求摘要结果相同。消息轻微改变生成的摘要变化会很大 只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚至根本就找不到任何与原信息相关的信息。 把某个较大的集合P映射到另一个较小的集合Q中,假如这个算法叫H,那么就有Q = H(P)。 散列算法应用最常用的场景就是数字签名以及数据(密码)加密了。 数字签名主要用到了非对...
消息模式与消息队列
集成模式中的消息模式企业应用系统就是对数据的处理,而对于一个拥有多个子系统的企业应用系统而言,它的基础支撑无疑就是对消息的处理。与对象不同,消息本质上是一种数据结构,它包含消费者与服务双方都能识别的数据,这些数据需要在不同的进程(机器)之间进行传递,并可能会被多个完全不同的客户端消费。 在众多分布式技术中,消息传递相较文件传递与远程过程调用(RPC)而言,似乎更胜一筹,因为它具有更好的平台无关性,并能够很好地支持并发与异步调用。对于Web Service与RESTful而言,则可以看做是消息传递技术的一种衍生或封装。 消息通道(Message Channel)模式消息通道作为在客户端(消...
Shiro简介
什么是shiroShiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。使用shiro就可以非常快速的完成认证、授权等功能的开发,降低系统成本。 优点:shiro应用场景广泛,shiro可以运行在web应用,非web应用,集群分布式应用。使用相对独立(spring security依赖spring运行)。 shiro架构 SubjectSubject在shiro中是一个接口,接口中定义了很多认证授相关的方法,外部程序通过subject进行认证授,而subject是通过Securit...
权限管理
什么是权限管理权限管理包括用户 身份认证 和 授权 两部分,简称认证授权。 对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。 用户身份认证身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是核对用户输入的用户名和口令。 关键对象: Subject:主体访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体; Principal:身份信息是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必须有一个主身份(Primary Principal)。...
5种常见算法思想
分治法概念将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 思想策略对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。 特征 该问题的规模缩小到一定的程度就可以容易地解决 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。 利用该问题分解出的子问题的解可以合并为该问题的解; 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。 第一条特征是绝大多数问题都...
常用排序算法
常见排序算法分类十种常见排序算法一般分为以下两种: (1) 非线性时间比较类排序: 交换类排序(快速排序和冒泡排序) 插入类排序(简单插入排序和希尔排序) 选择类排序(简单选择排序和堆排序) 归并排序(通常为二路归并) (2) 线性时间非比较类排序:计数排序、基数排序和桶排序。 总结:(1)在比较类排序中,归并排序号称最快,其次是快速排序和堆排序,两者不相伯仲,但是有一点需要注意,数据初始排序状态对堆排序不会产生太大的影响,而快速排序却恰恰相反。(2)线性时间非比较类排序一般要优于非线性时间比较类排序,但前者对待排序元素的要求较为严格,比如计数排序要求待排序数的最大值不能太大,桶排...
常用查找算法
顺序查找顺序查找适合于存储结构为顺序存储或链接存储的线性表。 基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。 复杂度分析: 查找成功时的平均查找长度为:(假设每个数据元素的概率相等) ASL = 1/n(1+2+3+…+n) = (n+1)/2 ;当查找不成功时,需要n+1次比较,时间复杂度为O(n);所以,顺序查找的时间复杂度为O(n)。 二分查找元素必须是有序的,如果是无序的则要先进行排序操作。 基本思想:也称为是折半查找,...
数据结构-Java中Map的实现
HashMap大方向上,HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key, value, hash 值和用于单向链表的 next。 Java8 中将单项链表改为了红黑树。关于红黑树是什么,数据结构-树中有简单介绍。 几个重要属性:capacity:当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的 2 倍。loadFactor:负载因子,默认为 0.75。threshold:扩容的阈值,等于 capacity * loadFactor 为什么hashmap数组容量要保持为2...
数据结构-图
图的基本概念(1)图是由顶点集合以及顶点间的关系集合组成的一种数据结构。Graph = (V,E) V是顶点的又穷非空集合;E是顶点之间关系的有穷集合,也叫边集合。 (2)无向图若顶点Vi到Vj之间的边没有方向,则称这条边为无向边,用无序偶对(Vi,Vj)来表示。如果图中任意两个顶点时间的边都是无向边,则称该图为无向图:由于是无向图,所以连接顶点A与D的边,可以表示为无序对(A,D),也可以写成(D,A)对于如上无向图来说,G=(V,{E}) 其中顶点集合V={A,B,C,D};边集合E={(A,B),(B,C),(C,D),(D,A),(A,C)} (3)有向图有向边:若从顶点Vi到...
数据结构-树
介绍一些常见的树,了解一些树的基本概念,具体代码操作不做详细说明。 二叉查找树二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: 若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值; 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值; 左、右子树也分别为二叉排序树。 查找:若根结点的关键字值等于查找的关键字,成功。 否则,若小于根结点的关键字值,递归查左子树。若大于根结点的关键字值,递归查右子树。 若子树为空,查找不成功。 最差情况分...
avatar
疯狂的小鸡
─=≡Σ(((つ•̀ω•́)つ
FRIENDS