哈希

集合继承体系图的理解

南笙酒味 提交于 2019-12-04 00:21:18
   一、Collection、Collections的区别?    1. java.util. Collection是一个集合的顶级接口 。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现,其直接继承接口有List与Set。   2. Collections是集合类的一个工具类 ,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等操作。     1)排序(sort):使用sort方法可以根据元素的自然顺序对指定列表按升序进行排序。列表中的所有元素都必须实现Comparable接口。此列表内的所有元素都必须是使用指定比较器可相互比较的。 1 List<Integer> list = new ArrayList<Integer>(); 2 int array[] = {112, 111, 23, 456, 231 }; 3 for (int i = 0; i < array.length; i++) { 4 list.add(array[i]); 5 } 6 Collections.sort(list); 7 for (int i = 0; i < array.length; i++) { 8 System.out.println(list.get(i)); 9 } 10 结果:23 111 112 231

复杂均衡方案

半腔热情 提交于 2019-12-03 21:39:36
二层负载均衡: 通过改写报文的目标MAC地址为上游服务MAC地址。源IP地址和目标IP地址是没有改变的,负载均衡服务器和真实服务器共享同一个VIP,如LVS DR工作模式。 四层负载均衡: 根据端口将报文转发到上游服务器(不同的IP地址+端口),如LVS NAT模式、HaProxy。 七层负载均衡: 根据端口号和应用协议如HTTP协议的主机名、URL,转发报文到上游服务器(不同的IP地址+端口,如Haproxy、Nginx)。 需要reload的方式 consul+consul-template方式, reload是有损耗的。 不需要reload方式(动态实现负载均衡) Tengine的Dyups模块 微博的Upsync OpenResty的balancer_by_lua 微博采用Upsync+consul,又拍云使用开源的slardar(Consul+balancer_by_lua) 动态添加/删除上有吧服务器,需要重启nginx,像HTTP动态负载均衡那样。 nginxu商业版 nginx-strean-upsync-module openResty提供的stream-lua-nginx-model尚未实现balancer_by_lua,暂时无法使用。 扩展: Liunx 三大主流(LVS、Nginx、HAproxy)负载均衡对比 LVS : 1.抗负载能力强,性能高

android apk 防止反编译技术第五篇-完整性校验

陌路散爱 提交于 2019-12-03 20:29:26
关于防止 android apk 被反编译的技术我们前面已经讲了四种。 加壳技术 运行时修改字节码 伪加密 对抗 JD-GUI 如果有不明白的可以查看我的博客的前四篇中关于这四种技术的介绍。接下来我们接着介绍另一种防止 apk 反编译的技术 - 完整性校验。 一、完整性校验原理 所谓完整性校验就是我们用各种算法来计算一个文件的完整性,防止这个文件被修改。其中常用的方法就是计算一个文件的 CRC32 的值或者计算一个文件的哈希值。我们在防止 apk 被反编译的方法中也可以采用这种方法。我们知道 apk 生成的 classes.dex 主要由 java 文件生成的,它是整个 apk 的逻辑实现。所以我们可以对 classes.dex 文件进行完整性校验,来保证整个程序的逻辑不被修改。如果我们想要保证整个 apk 文件的完整性,也可以对整个 apk 文件进行完整性校验。下面我们分别来实现对 classes.dex 文件和 apk 文件的完整性校验。 二、用crc32对classes.dex文件的完整性进行校验 (1)可以打印出来我们的apk生的classes.dex文件的crc32的值,代码如下: public class MainActivity extendsActivity { @Override protected void onCreate

证书透明化日志工作原理

走远了吗. 提交于 2019-12-03 05:33:54
目录 概念 一致性证明和审计证明 默克一致性证明 默克审计证明 使用证明 译: How Log Proofs Work 概念 证书透明日志使用特殊的加密算法有助于证书和日志的公共审查。这个特殊的加密算法称作 默克哈希树(Merkle hash tree) ,一种包含哈希叶和结点的简单二叉树(图1)。叶子是已附加到日志中的单个证书的哈希。节点是成对的子叶或成对的子节点的哈希。所有叶子和结点的根,即根哈希称作 默克树哈希(Merkle tree hash) 。当日志服务器对默克树哈希(及其他信息)签名,称为 签名树头(STH:signed tree head ) 。 定期地,可能一小时一次,日志服务器将新获取到的证书追加到日志中。通过新获取到的证书创建单独的默克树哈希,该哈希和之前已在哈希树中的旧默克树哈希结合成新的默克树哈希(图2)。对新的默克树哈希签名创建新签名树头。反反复复的持续,之前提交到日志中的所有证书形成了一个不断增长的默克树。 一致性证明和审计证明 因为这种构造方式,默克哈希树让日志高效迅速的证明两件事: 所有证书被一致性地附加到日志中 特定的证书附加到日志中 日志通过提供两个加密证明来支持:默克一致性证明和默克审计证明。 默克一致性证明 默克一致性证明验证一条日志的任意两个版本是一致的:即,新版本包含旧版本的一切,换句话说,所有新条目紧跟在上个版本的条目后

读高性能MySQL的笔记

寵の児 提交于 2019-12-03 05:10:53
1. B-Tree索引(创建多索引时,索引列的顺序非常重要,第一个索引列是最重要的) a. B-Tree索引适用于全值匹配(和所有索引列匹配)、匹配最左前缀(只使用第一项索引列)、匹配列前缀(匹配某个索引列的开头部分,如查找以J开头的姓的人)、匹配范围值(索引列的范围,从xx到xx)、精确匹配某一列并范围匹配某一列 b. 一些限制:必须要从最左的索引列开始查找,否则无法使用索引,比如如果不使用第一列索引列而只使用第二第三索引列,将无效;如果查询中有某个索引列使用范围查找而不是精准匹配,则其右边的索引列都无法使用索引 2. 哈希索引hash index a. 索引自身只需存储对应的哈希值,所以索引的结构十分紧凑,所以哈希查找的速度非常快 b. 限制:哈希索引只包含哈希值和指向哪一行的指针,并不储存字段值,所以不能直接取值而是根据指针去找值,不过访问内存中的行的速度很快,所以无大碍;哈希索引数据并不是按照索引值顺序排列储存的,所以无法用于排序;哈希索引不支持部分索引列匹配查找,比如在A, B两列上建立哈希索引,如果只用A列,则无法使用索引;哈希索引只支持等值比较查询,不支持任何范围查询;哈希冲突很多的话,删除一行就需要遍历对应哈希值得链表的每一行来找到并删除该行,维护操作的代价搞 c. InnoDB引擎有一个特殊功能“自适应哈希索引”,当引擎注意到某些索引值被使用得非常频繁时

大话区块链【Blockchain】

风格不统一 提交于 2019-12-03 04:52:44
最近这几天区块链又粉墨登场了,新闻媒体也一直在大量报道,宣称可能要在金融界掀起一番浪潮。甚至有人说很久之前中国就出现了区块链的产物——麻将。那么区块链到底是什么,麻将和区块链又有什么关系呢? 笔者这两天也阅读了相关文献和资料,下图是我学习的一个路径,本文也是按照自己了解区块链的路径做的一些总结,篇幅较长,写这篇文章的目的也是希望能简单地向对区块链技术不了解但是想知道区块链是什么的人介绍区块链技术,因为自己在区块链方面也是一个小白,如果有错误的地方,还望各位留言指正。 区块链 -> 比特币 首先我们得先知道,区块链和比特币之间并不等同,如果要论辈分,区块链应该是比特币的爸爸,为什么这么说呢?我们先来了解下区块链是什么,以及区块链是用来干嘛的。 什么是区块链?区块链是做什么的? 一提到区块链,相信很多人都会想到什么去中心化、分布式、不可篡改之类的名词。说实话我刚开始由于姿势水平不够看到这些名词的时候也是一头雾水,《区块链技术发展现状与展望》一文给出如下定义: 狭义来讲,区块链是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构, 并以密码学方式保证的不可篡改和不可伪造的去中心化共享总账(Decentralized shared ledger),能够安全存储简单的、有先后关系的、能在系统内验证的数据。 广义的区块链技术则是利用加密链式区块结构来验证与存储数据

redis

匿名 (未验证) 提交于 2019-12-03 00:44:02
使用redis 我们介绍一下redis的使用吧经过按部就班的安装之后,服务端是默认开启的,可以查看本地服务,找到Redis 那我们也可以通过cmd终端开启客户端 ,需要先切盘,cd 是在本盘中更换目录 盘d:切到d盘,然后更换目录 cd e:/redis 这样就可以输入开启命令行了 Redis-cli,可以select 加上索引更换db,默认是db0。 也可以通过可视化软件,redis desktop manage来操作redis数据库,我们不妨对比navicat,更有助于我们掌握理解知识。 redis的数据类型 Redis支持五种数据类型: string (字符串), hash (哈希), list (列表), set (集合)及 zset Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。 Redis的Set是string类型的无序集合。值不重复。 sadd 如果 key 对应的 set 不存在则返回错误。 Redis zset 和 set 一样也是string类型元素的集合。且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。 python连接redis 方式一

初识RedisCluster集群

匿名 (未验证) 提交于 2019-12-03 00:43:02
为什么需要Redis集群 需要提高更大的并发量 Redis官方提出拥有10万QPS的请求量 如果业务需要Redis拥有100万的QPS 可以通过集群来提升并发量。 需要存储更大的数据量 一般服务器的机器内存为16G-256G 如果业务需要500G的数据量 可以通过集群的分区技术来扩展数据量 数据分区 1.顺序分区 例如一共有编号为1~100的100条数据,一共有3个分区ABC,则需要预先设计 1~33号数据落入A分区 34~66号数据落入B分区 67~100号数据落入C分区 2.哈希分区 hash(key) % node_count 3.顺序分区 VS 哈希分区 分布方式 特点 典型产品 哈希分布 数据分散度高 键值分布与业务无关 无法顺序访问 一致性哈希Memcache Redis Cluster 其他缓存产品 顺序分布 数据分散度易倾斜 键值分布与业务有关 可顺序访问 BigTable HBase 哈希分区 1.节点取余分区 含义:hash(key) % node_count 优点:hash+取余的方式计算节点的分区很简单 缺点:当节点伸缩时候,数据节点关系发生变化,导致数据迁移 扩容的时候建议翻倍扩容,可以降低数据的迁移量。 2.一致性哈希分区 含义:哈希+顺时针(优化取余) 约定长度2 32 位的哈希环,在其中分布若干个hash点。

哈希查找解决地址冲突的两种最常见方法(线性探测再散列,链地址法)C++实现

匿名 (未验证) 提交于 2019-12-03 00:40:02
#include<iostream> #include<iomanip> using namespace std; typedef struct Node { }node; int len,num,M,numbers,i=0,mod,count=0; int *a; node **p,*s; float ASL=0,ASL1=0; int ListLength(node * head) { } void Insert(node * &head,node * s) { } void Print(node * head) { } void f1() { } void f2() { } void main() { } 原文:https://www.cnblogs.com/lyj-blogs/p/HashSearchByLyj.html

在switch语句中使用字符串以及实现原理

匿名 (未验证) 提交于 2019-12-03 00:31:02
一次机缘巧合,在idea中调试代码的时候,跳到了.class文件中,刚好调试的代码是switch,于是就有了下面的内容: 对于Java语言来说,在Java 7之前, switch语句中的条件表达式的类型只能是与整数类型兼容的类型,包括基本类型char、byte、short和int,与这些基本类型对应的封装类Character、Byte、Short和Integer, 还有枚举类型。这样的限制降低了语言的灵活性,使开发人员在需要根据其他类型的表达式来进行条件选择时,不得不增加额外的代码来绕过这个限制。为此,Java 7放宽 了这个限制,额外增加了一种可以在switch语句中使用的表达式类型,那就是很常见的字符串,即String类型。 源代码: [java] view plain copy public class public static void "a" public static void switch case "a" "aa" break case "b" "bb" break [java] view plain copy public class public static void "a" public static void switch case "a" "aa" break case "b" "bb" break 编译后的.class文件: [java] view