哈希表

从物联网防火墙himqtt源码谈哈希和红黑树的应用场景区别

落爺英雄遲暮 提交于 2019-12-06 01:53:14
从物联网防火墙 himqtt 源码谈哈希和红黑树的应用 场景区别 himqtt 是首款完整源码的高性能 MQTT 物联网防火墙 - MQTT Application FireWall , C 语言编写,很多数据结构适合初学者收藏。 哈希和红黑树的详细教程很多,本文就不重复了,但初学者往往云里雾里,不知道实战项目该用谁,今天笔者就从结合 himqtt 的源码,从物联网安全角度来对比一下哈希数据结构和红黑树的应用场景。 一、哈希和红黑树基本原理 哈希( hash )也称散列,通过散列算法变成固定的输出到数组,所有的线性数据结构中,数组的定位速度最快,因为它可通过数组下标直接定位到相应的数组空间,就不需要一个个查找。 红黑树的自旋是天才的设计,是一种特殊的平衡二叉树数据结构,特点也是从几十万的数据里面几步就能查找到,速度快。 二、物联网安全使用场景 首先 github 上下载源码, https://github.com/qq4108863/himqtt ,在 src\waf 目录有 hashmap.c 和 mqtt_rbtree.c ,分别是哈希和红黑树算法。 1 、速度对比 物联网可能是数百万设备联网,对高并发要求很大,所以,对网络安全产品第一要求的是性能和速度。总体来说,哈希查找速度会比红黑树快,而且查找速度基本和数据量大小无关,属于常数级别 ; 而 RB 树的查找速度是 log(n

Redis 数据结构

亡梦爱人 提交于 2019-12-06 00:48:11
  一、Redis简介   Redis是一款基于key-value的高性能NoSQL数据库,开源免费,遵守BSD协议。支持string(字符串) 、 hash(哈希) 、list(列表) 、 set(集合) 、 zset(有序集合)等数据结构,除此之外还提供了键过期、发布订阅、Lua脚本、事务、流水线(Pipeline)、持久化和主从复制等功能,并通过 Redis 哨兵(Sentinel)和 Redis Cluster(集群)自动分区提供了高可用性。可用于数据库、缓存和消息队列等多种场景。   二、数据结构   Redis 是一个key-value数据库,即数据存储是以一个唯一的 key 对应一个 value,value 有 5 种基础数据结构: string (字符串)、 hash (哈希) 、 list (列表)、 set (集合)和 zset (有序集合)。   1、string(字符串)   string 的值可以是字符串(简单的、以及json、xml格式的)、数字,甚至是二进制数据(图片、音频、视频), 最大能存储512MB。Redis 的字符串是动态的,是可以修改的,当字符串长度小于 1M 时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间。    相关命令   (1)设置值与获取值   set key value 设置指定 key 的值  

Redis基础知识汇总

不羁岁月 提交于 2019-12-05 20:38:06
Redis基础知识汇总 1.什么是Redis Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value的非关系型数据库,并提供多种语言的API。 Redis是远程的 Redis是基于内存的 Redis是非关系型数据库 2.Redis的安装 2.1.Window安装Redis 选择需要版本下载安装包 官网下载地址 : http://redis.io/download github下载地址 : https://github.com/microsoftarchive/redis/tags 解压Redis安装包,当前目录打开cmd窗口,redis-server.exe redis.windows.conf 启动Redis redis-server.exe redis.windows.conf 如果需要Redis一直存在,执行 redis-server.exe --service-install redis.windows-service.conf 添加到服务列表 redis-server.exe --service-install redis.windows-service.conf 使用 redis-cli.exe -h localhost -p 6379 或者运行 redis-cli.exe 打开客户端 2.2.Linux安装Redis

windows powershell学习

浪尽此生 提交于 2019-12-05 20:21:09
PowerShell,从名字可以知道,他首先是一个shell,shell的意思就是和Linux的bash等一样、和原来的cmd一样就是在里边敲命令(可执行文件)使用; 而Power就意味他是一个功能强大的shell,从面向用户而言,个人觉得其功能强大体现在以下几方面: (1) 微软态度。微软是真正的在推行PowerShell,包括Office等更多自家软件,底层都是调用PowerShell来实现。 (2) 兼容性cmd。PowerShell包含原先cmd的所有命令,原先命令使用形式不变,在是在其基础上添加命令。 (3) 对标Linux。PowerShell使用了Linux Shell的思想,也就是所有的系统操作、配置,都可以在shell中敲写命令实现。 (4) 统一的命令格式和自包含的文档。基于前3点我们即可以说PowerShell已可与Linux Bash等一较高下。 当然powershell很好但也有着其劣势: (1)Linux和Windows系统本身定位的差异。Linux的免费稳定使其牢牢占据了服务器领域,Linux Shell命令是没有很多统一格式的因此工程师们要费很大的劲去学习,而当Linux占据工程师的大部分精力并塑造完他们的习惯后,工程师们也许并没有那么多精神和动力去学powershell。 (2)来自Windows GUI的竞争

web文件上传

陌路散爱 提交于 2019-12-05 17:36:44
今天在复习Web 的时候,做个一个文件上传的小Demo,发布一篇博客,记录一些笔记要点。和web做上传的一些注意事项。这个Demo 解决了Web上传问题中的以下问题: 1.实现web开发中的文件上传功能,需要完成2个步骤操作: ①在web页面中添加上传输入项 ②在servlet中读取上传文件的数据,并保存到本地盘中。 如何在web页面中添加上传输入项? <input type="file">标签用于在web页面中添加文件上传输入项,设 置文件上传输入项时刻须注意。 1.必须要设置inpu输入项的name属性,否则浏览器将不会发送上传文件的数据. 2.必须把form的enctype属性设置为multipart/form-data,设置该值后,浏览器在上传文件时,将把文件数据附带在http 请求消息体中,并使用MIME协议对上传的文件进行描述,以方便接收方对上传数据进行解析和处理。 DisKFileItemFactory是创建 FileItem 对象的工厂,这个工厂类常用方法: public void setSizeThreshold(int size Threshould) 设置内存缓冲区的大小,默认为10k,当上传文件大于缓冲区大小时,fileupload组件将使用 临时缓存上传文件。 public void (java.io.File.repository) 指定临时文件目录

哈希表(散列表)总结

痴心易碎 提交于 2019-12-05 08:37:07
1、哈希表(散列表hash table)定义 哈希表 就是利用哈希算法(散列技术)将记录保存到一块连续的存储空间中,这块连续的存储空间就叫做哈希表或散列表。 散列技术 就是根据记录的存储位置和它的关键字KEY建立一个确定的对应关系F,使得每一个关键字key对应一个存储位置F(key)。查找时根据这个确定的对应关系找到给定值key的映射F(key)。 这个确定的对应关系就叫做 散列函数 ,又叫做哈希函数。关键字对应的记录存储位置叫做 散列地址。 2、哈希表的查找步骤: (1)、当存储时,通过散列函数计算出散列地址,然后按照散列地址将记录存储到散列表中。 (2)、当查找时,使用与存储时相同的散列函数计算出散列地址,按次散列地址访问该记录。 所以散列技术即使一种存储方法,又是一种查找方法。 3、哈希表与其他数据结构的区别(如线性表、树、图等)? 其他数据结构存储的数据元素之间存在某种逻辑关系,而哈希表的记录之间不存在任何逻辑关系,记录只和关键字存在关联。即一个关键字对应一个记录。哈希表存储的是键值对的形式。 哈希表的好处是查找速度快,查找时较其他数据结构简化了比较过程,提高了效率。但哈希表不具备很多常规数据结构的能力,如当一个关键字对应多个记录时,不适合用哈希表存储;同时哈希表也不适合范围查找,对与对记录排序、获取最大值最小值也不能得到。 散列冲突

关联规则DHP算法详解

◇◆丶佛笑我妖孽 提交于 2019-12-05 08:00:54
参考文献: [1]Park, J. S., Chen, M. S., & Yu, P. S. (1995). Aneffective hash-based algorithm for mining association rules. Acm SigmodRecord, 24(2), 175-186. [2]潘燕燕. (2012). 关联规则dhp算法的研究与分析. 佛山科学技术学院学报(自然科学版), 30(2), 30-32. 写在前面:上《数据挖掘》这门课的时候,讲关联规则挖掘(Association Rules Mining)的时候,其他几个算法都是简单易懂,符合普通认知规律的。唯有DHP算法是绕了一个小弯。无奈PPT上写的太简略,英文原文也是看得模棱两可。好在,找到了一个中文版的分析,再结合英文版,果然捋得清多了。写在这里,方便自己期末复习。 一、DHP算法的由来 1993 年Agrawal等人首先提出关联规则概念之后关联规则挖掘便迅速受到数据挖掘领域专家的广泛关注。在迄今十几年中,关联规则挖掘技术得到了较为深入的发展。 Apriori算法是关联规则挖掘经典算法,针对该算法的缺点,许多学者提出了改进的算法,主要有基于哈希优化DHP 和基于事务压缩等。 二、DHP算法的过程 1.缩减候选项目集Ck 对于表1 的数据库,算法的条件为:最小支持度为2。哈希函数为:h{ {x,y

Java集合源码之HashMap

纵饮孤独 提交于 2019-12-05 07:39:27
1. 简介 HashMap是一个哈希表,线程不安全, key 唯一, value 可重复,允许 key 和 value 为null。遍历时是无序的。 底层结构是基于链表散列,也就是数组+链表。数组也被称为哈希桶,桶里面就装着链表,链表中的每个节点,就是哈希表中的每个元素。 在JDK8中,当链表长度达到8的时候,就会转为红黑树。 它实现了 Map<K, V>, Cloneable, Serializable 接口。 接下来我们就来看下源码: 2. 属性 // 序列化ID,用于序列化和反序列化 private static final long serialVersionUID = 362498820763181265L; // 默认初始容量也就是16-必须为2的幂。 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 // 最大容量。 // 如果两个构造函数都使用参数隐式指定了更高的值,则使用该容量。 // 必须是2的30次方。 static final int MAXIMUM_CAPACITY = 1 << 30; // 默认的负载因子 static final float DEFAULT_LOAD_FACTOR = 0.75f; // Entry数组,也就是哈希桶,长度为2的n次幂 transient

哈希表(hash)详解

为君一笑 提交于 2019-12-05 05:28:44
哈希表结构讲解: 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 记录的存储位置 = function(关键字) 这里的对应关系function称为散列函数,又称为哈希(Hash函数),采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。 哈希表hashtable(key,value) 就是把Key通过一个固定的算法函数function既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行 取余 ,取余结果就当作数组的 下标 ,将value存储在以该数字为下标的数组空间里。(或者:把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出 ,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。) 而当使用哈希表进行 查询的时候,就是再次使用哈希函数将key转换为对应的数组下标【仍通过映射哈希函数function】

常见的8中数据结构

橙三吉。 提交于 2019-12-05 05:16:34
原文: The top data structures you should know for your next coding interview 译者: Fundebug 本文采用意译,版权归原作者所有 1976 年,一个瑞士计算机科学家写一本书 《Algorithms + Data Structures = Programs》 。即:算法 + 数据结构 = 程序。40 多年过去了,这个等式依然成立。 很多代码面试题都要求候选者深入理解数据结构,不管你来自大学计算机专业还是编程培训机构,也不管你有多少年编程经验。有时面试题会直接提到数据结构,比如“给我实现一个二叉树”,然而有时则不那么明显,比如“统计一下每个作者写的书的数量”。 什么是数据结构? 数据结构是计算机存储、组织数据的方式。对于特定的数据结构(比如数组),有些操作效率很高(读某个数组元素),有些操作的效率很低(删除某个数组元素)。程序员的目标是为当前的问题选择最优的数据结构。 为什么我们需要数据结构? 数据是程序的核心要素,因此数据结构的价值不言而喻。无论你在写什么程序,你都需要与数据打交道,比如员工工资、股票价格、杂货清单或者电话本。在不同场景下,数据需要以特定的方式存储,我们有不同的数据结构可以满足我们的需求。 8 种常用数据结构 数组 栈 队列 链表 图 树 前缀树 哈希表 1. 数组 数组(Array