哈希

2019雏鹰训练营第二次作业

邮差的信 提交于 2019-12-04 21:36:25
思路 将文本内容读取,并放置结构体数组中,Sender , Acceptor , DataNumber 分别存储 发送方,接收方,数据长度。 遍历结构体数组,判断 dataNumber 是否大于100 ,是的话,将数据转存到 Lis 结构体中。 每一次袭击,判断是否攻击过,从而决定跳出循环还是新加 Lis 中的数据。 打Lis中的数据打印输出。 实验结果 附加 方法真的很笨,存储空间浪费有点多;查找重复值的时候,还是用遍历来查找,时间复杂度增加; 方法:读取文件的时候就进行 dataNumber 判断大于100再进行存储,否则读取下一行数据。查找重复值阶段使用哈希,把重复的Sender值删除。 优点:这样存储的好处可以很大程度降低存储空间的浪费,以测试文本为例,他能将两万多行的数据存储变成一百个数据存储;哈希的使用可以降低时间复杂度。 缺点:哈希的使用会一定程度上增加内存的使用。 来源: https://www.cnblogs.com/SakuraHCY/p/11885329.html

老虎集团【4面】

旧巷老猫 提交于 2019-12-04 20:47:52
1. 主键索引与非主键索引区别? https://www.cnblogs.com/heishuichenzhou/p/10813463.html 非主键索引查找数据,根据条件,查找到对应的主键ID,然后根据主键ID去索引表里面找对应的数据 2. redis主从同步原理(问了3次) 全量和增量同步 全量: Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。 具体步骤如下: 1)从服务器连接主服务器,发送PSYNC命令; 2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 3)主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 4)从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 5)主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 6)从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令; 增量: 增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。 断线之后的命令,如何同步? redis2.8之前, 全量同步,效率低 之后,增量同步, 需要关注以下几个点: 如何记录断线后的命令? 1.主从都会记录复制的偏移量(记录上次复制到哪里了

区块链 - 哈希(Hash)

感情迁移 提交于 2019-12-04 20:00:46
章节 区块链 – 介绍 区块链 – 发展历史 区块链 – 比特币 区块链 – 应用发展阶段 区块链 – 非对称加密 区块链 – 哈希(Hash) 区块链 – 挖矿 区块链 – 链接区块 区块链 – 工作量证明 区块链 – 交易流程与挖矿 区块链 – 矿工的激励 区块链 – 默克尔树(Merkle Tree) 区块链 – 付款确认 区块链 – 处理冲突 区块链 – 用户隐私 区块链 – 防范攻击 区块链 – 进一步深入了解 密码学中,最重要的函数之一是哈希函数。哈希函数将任意大小的数据(内容)映射到固定大小的数据(哈希值)。 哈希函数是单向的,从内容生成哈希值很容易,但从哈希值映射到内容很难。 比特币使用SHA-256哈希函数,该函数生成一个大小为256位(32字节)的哈希值(输出)。如图所示 Bob在向Alice下订单时,创建了一条类似于上面所示的消息。把这个消息通过哈希函数生成32字节的哈希值。 哈希值的特点是,哈希值对于对于消息内容是唯一的,消息内容有任何改动,哪怕是多了个字符,生成的哈希值也是不一样的。 所以哈希值通常可以用来校验内容是否篡改。 来源: https://www.cnblogs.com/jinbuqi/p/11880593.html

三大主流负载均衡

倾然丶 夕夏残阳落幕 提交于 2019-12-04 11:42:29
LVS: 1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低 2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。 2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived) 3、应用范围比较广,可以对所有应用做负载均衡; 4、不支持正则处理,不能做动静分离。 5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接) 6、配置 复杂,对网络依赖比较大,稳定性很高。 Ngnix: 1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构; 2、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能; 3、Nginx安装和配置比较简单,测试起来比较方便; 4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发; 5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。 6、Nginx对请求的异步处理可以帮助节点服务器减轻负载; 7、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。 8、不支持Session的直接保持,但能通过ip_hash来解决。、对Big request header的支持不是很好, 9、支持负载均衡算法

5-Perl 变量

爱⌒轻易说出口 提交于 2019-12-04 11:36:39
1.Perl 变量 变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间。 解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型、浮点型、字符串等。 上一章节中我们已经为大家介绍了Perl的三个基本的数据类型:标量、数组、哈希。 标量 $ 开始, 如$a $b 是两个标量。 数组 @ 开始 , 如 @a @b 是两个数组。 哈希 % 开始 , %a %b 是两个哈希。 Perl 为每个变量类型设置了独立的命令空间,所以不同类型的变量可以使用相同的名称,你不用担心会发生冲突。例如 $foo 和 @foo 是两个不同的变量。 2.创建变量 变量不需要显式声明类型,在变量赋值后,解释器会自动分配匹配的类型空间。 变量使用等号(=)来赋值。 我们可以在程序中使用 use strict 语句让所有变量需要强制声明类型。 等号左边为变量,右边为值,实例如下: $age = 25; # 整型 $name = "abc"; # 字符串 $salary = 1445.50; # 浮点数 以上代码中 25, "abc" 和 1445.50 分别赋值给 $age, $name 和 $salary 变量。 3.标量变量 标量是一个单一的数据单元。 数据可以是整数,浮点数,字符,字符串,段落等。 简单的说它可以是任何东西。以下是标量的简单应用: 实例 #!

MySQL技巧--伪哈希索引

拥有回忆 提交于 2019-12-04 10:39:05
哈希索引   哈希索引就是通过一个哈希函数计算出某个key的hash值,并以这个hash值去找到目标数据。例如:对于数据库的一行数据,对其主键进行hash运算,得到一个地址,这个地址指向这行记录的存储地址,key与hash值的对应关系就构成了哈希索引。根据某一列进行查询时,如果为这一列建立了哈希索引,那查询的速度是非常快的,只需对其进行一次hash运算即可直接得到地址拿到数据,时间复杂度为O(1)。   但是众多MySQL存储引擎中,支持哈希索引的引擎却比较少,如Memory、NDB等。广泛使用的InnoDB引擎也只是会自适应的建立哈希索引,如某几行记录的查询频率非常高的情况,但是不能手动建立。这是因为,哈希索引虽然查询速度非常快,但是它的特性是通过key经过hash函数运算得到地址,散列存储即连续的key得到的地址却不是连续的。这就决定了哈希索引只适合等值查询,而不适合范围查询,而范围查询又是非常普遍的,还有就是数据规模一大hash运算的冲突概率会上升的非常快,等值查询的速度也没有优势了。 伪哈希索引   虽然使用哈希索引有诸多不便,但我们也可以从它做法中得到某些启示。比如将复杂且长数据进行hash运算得到一个简单映射值,但不将这个映射值作为地址,而是为这些映射值建立一个B+树的索引,这样再走索引查询时效率就会提高很多。比如有一个列存储url,这是一个比较长的字符串比较时效率不高

用Java实现简单的区块链

懵懂的女人 提交于 2019-12-04 07:50:34
用 Java 实现简单的区块链 1. 概述 本文中,我们将学习区块链技术的基本概念。也将根据概念使用 Java 来实现一个基本的应用程序。 进一步,我们将讨论一些先进的概念以及该技术的实际应用。 2. 什么是区块链? 因此,让我们首先了解到底什么是区块链... 它的起源可以追溯到2008年 Satoshi Nakamoto 在比特币上发布的白皮书 。 区块链是一个分散的信息分类账。 它由通过使用密码学连接的数据块组成。它属于通过公共网络连接的节点网络。当我们稍后尝试构建一个基本教程时,我们会更好地理解这一点。 有一些我们必须要明白的重要属性,所以让我们来看看它们: Tamper-proof [ 加密摘要 ]:首先也是最重要的, 数据作为块的一部分是防篡改的。 每个块都由加密摘要引用,通常称为哈希,使块防篡改。 Decentralized [ 分散化 ]: 整个区块链是完全分散 在网络上的。这意味着没有主节点,网络中的每个节点都有相同的副本。 Transparent [ 透明的,显而易见的 ]:每个参与网络的节点都 通过与其他节点的协商一致来验证并向其链添加一个新块 。因此,每个节点都具有完整的数据可视性。 3. 区块链如何工作? 现在,让我们了解区块链如何工作。 区块链的基本单位是块。 一个块能封装多个事务或者其它有价值的数据: 我们用哈希值表示一个块。 生成块的哈希值叫做“挖掘

@bzoj - 4298@ [ONTAK2015]Bajtocja

寵の児 提交于 2019-12-04 07:06:29
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定d张无向图,每张图都有n个点。一开始,在任何一张图中都没有任何边。接下来有m次操作,每次操作会给出a,b,k,意为在第k张图中的点a和点b之间添加一条无向边。你需要在每次操作之后输出有序数对(a,b)的个数,使得1<=a,b<=n,且a点和b点在d张图中都连通。 Input 第一行包含三个正整数d,n,m(1<=d<=200,1<=n<=5000,1<=m<=1000000),依次表示图的个数,点的个数和操作的个数。 接下来m行,每行包含三个正整数a,b,k(1<=a,b<=n,1<=k<=d),依次描述每一个操作。 Output 输出m行m个正整数,依次表示每次操作之后满足条件的有序数对(a,b)的个数。 Sample Input 3 4 10 1 2 1 2 1 2 1 2 3 3 4 1 1 3 2 2 3 3 2 4 2 3 4 3 3 4 2 1 3 1 Sample Output 4 4 6 6 6 6 6 8 8 16 @solution@ 考虑动态统计增量。 当合并两个连通块时,我们采用启发式合并的方法,将小的一个个塞进大的里面。在一个个塞的时候,统计新多出来的在 d 张图都连通的点对数量。 因为是启发式合并,每个点最多被暴力塞

一致性hash算法

隐身守侯 提交于 2019-12-04 03:39:23
一、算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。 二、应用场景 现在一致性hash算法在分布式系统中也得到了广泛应用,分布式系统中涉及到集群部署,包括缓存Redis集群,数据库集群,我们在使用Redis的时候,为了保证Redis的高可用,提高Redis的读写性能,最简单的方式我们会做主从复制,组成Master-Master或者Master-Slave的形式,或者搭建Redis集群,进行数据的读写分离,类似于数据库的主从复制和读写分离。如下所示: 同样数据库中也是,当单表数据大于500W的时候需要对其进行分库分表,当数据量很大的时候(标准可能不一样,要看Redis服务器容量)我们同样可以对Redis进行类似的操作,就是分库分表。 假设,我们有一个社交网站,需要使用Redis存储图片资源,存储的格式为键值对,key值为图片名称,value为该图片所在文件服务器的路径,我们需要根据文件名查找该文件所在文件服务器上的路径,数据量大概有2000W左右,按照我们约定的规则进行分库,规则就是随机分配,我们可以部署8台缓存服务器,每台服务器大概含有500W条数据

详解Node.js API系列 Crypto加密模块(1)

与世无争的帅哥 提交于 2019-12-04 02:18:50
MD5加密算法 算法简介 MD5的全称是Message-Digest Algorithm 5(信息- 摘要算法 ),在90年代初由Mit Laboratory for Computer Science和Rsa data security inc的Ronald l. rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用 数字签名软件 签署私人密匙前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数).不管是md2、md4还是 md5 ,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要. MD5 算法的 哈希值 大小为 128 位。是一种不可逆的算法。 算法特点 两个不同的明文不会得到相同的输出值 MD5结果不能反推明文,不可逆 安全性 从安全的角度讲,MD5的输出为128位,若采用纯强力攻击寻找一个消息具有给定 Hash 值的计算困难性为2128,用每秒可试验1000000000个消息的计算机需时1.07×1022年。若采用 生日攻击 法,寻找有相同Hash值的两个消息需要试验264个消息,用每秒可试验1000000000个消息的计算机需时585年。 实际应用上,例如我知道‘password’的MD5值是5f4dcc3b5aa765d61d8327deb882cf99,那么我就用一个数据库存起来