hash函数

HashMap实现原理

喜你入骨 提交于 2019-11-27 03:35:38
HashMap以键值对(key-value)的形式来储存元素,但调用put方法时,HashMap会通过hash函数来计算key的hash值,然后通过hash值&(HashMap.length-1) 判断当前元素的存储位置,如果当前位置存在元素的话,就要判断当前元素与要存入的key是否相同,如果相同则覆盖,如果不同则通过 拉链表来解决。JDk1.8时,当链表长度大于8时,将链表转为红黑树。 来源: https://www.cnblogs.com/linliquan/p/11342062.html

webpack 热更新源码实现

a 夏天 提交于 2019-11-27 03:15:14
一、 热更新原理 服务端: 1.启动 webpack-dev-server 服务器 2.创建 webpack 实例 3.创建 Server 服务器 4.添加 webpack 的 done 事件回调 编译完成向客户端发送消息 (hash和描述文件oldhash.js和oldhash.json ) 5.创建express应用app 6.设置文件系统为内存文件系统 7.添加 webpack-dev-middleware 中间件 负责返回生成的文件 8.创建http服务 启动 9.使用socket 实现浏览器和服务器的通信(这里先发送一次hash,将socket存入到第四步,初次编译完第四步中的socket是空,不会触发hash下发) 客户端: 1. webpack-dev-server/client-src 下文件监听hash,保存此hash值 2.客户端收到ok消息执行reload更新 3.在reload中进行判断,如果支持热更新执行webpackHotUpdate,不支持的话直接刷新页面 4.在 webpack/hot/dev-server.js 监听 webpackHotUpdate 然后执行 check() 方法进行检测 5.在 check 方法里面调用 module.hot.check 6.通过调用 JsonpMainTemplate.runtime 的

字符串匹配(hash算法)

我与影子孤独终老i 提交于 2019-11-27 03:08:27
字符串匹配(hash算法) 转载 hash函数对大家来说不陌生吧 ? 而这次我们就用hash函数来实现字符串匹配。 首先我们会想一下二进制数。 对于任意一个二进制数,我们将它化为10进制的数的方法如下(以二进制数1101101为例): hash用的也是一样的原理,为每一个前缀(也可以后缀,笔者习惯1 base,所以喜欢用前缀来计算,Hash[i] = Hash[i - 1] * x + s i 。 一般地, 而对于l - r区间的hash值,则为: 但是如果n很大呢?那样不是会溢出了吗? 因此我们把hash值储存在unsigned long long里面, 那样溢出时,会自动取余2的64次方,but这样可能会使2个不同串的哈希值相同,但这样的概率极低(不排除你的运气不好)。 因此我们可以通过Hash值来比较两个字符串是否相等。 给出多项式hash的处理: typedef unsigned long long ull; const int N = 100000 + 5; const ull base = 163; char s[N]; ull hash[N]; void init(){//处理hash值 p[0] = 1; hash[0] = 0; int n = strlen(s + 1); for(int i = 1; i <=100000; i ++)p[i] =p[i-1]

用js 监听url的hash变化

孤街浪徒 提交于 2019-11-27 02:59:26
原文链接: https://www.cnblogs.com/web-chuan/p/9777740.html 简单粗暴代码如下 ... if( ("onhashchange" in window) && ((typeof document.documentMode==="undefined") || document.documentMode==8)) { // 浏览器支持onhashchange事件 window.onhashchange = hashChangeFire; // TODO,对应新的hash执行的操作函数 } else { // 不支持则用定时器检测的办法 setInterval(function() { var ischanged = isHashChanged(); // TODO,检测hash值或其中某一段是否更改的函数 if(ischanged) { hashChangeFire(); // TODO,对应新的hash执行的操作函数 } }, 150); } function hashChangeFire(){ alert("URL产生了变化") } ... 来源: https://www.cnblogs.com/xiaoyuchen/p/11340261.html

Yii 的登录流程

。_饼干妹妹 提交于 2019-11-27 00:19:46
下面是关于 Yii (Yii PHP Framework) 中登录流程的一些梳理. 流程中包含了web开发中关于session,cookie和用户验证方面的一些通用知识. 1. 概述 Yii是一个全栈式的MVC框架,所谓全栈式指的是Yii框架本身实现了web开发中所要用到的所有功能,比如MVC,ORM(DAO/ActiveRecord), 全球化(I18N/L10N), 缓存(caching), 基于jQuery Ajax支持(jQuery-based AJAX support), 基于角色的用户验证(authentication and role-based access control), 程序骨架生成器(scaffolding), 输入验证(input validation), 窗体小部件(widgets), 事件(events), 主题(theming), web服务(Web services),日志(logging)等功能. 详见 官方说明 .   这里要说的只是Yii的登录流程. 用Yii开发一般是用一个叫做Yii shell的控制台工具生成一个程序的骨架,这个骨架为我们分配好了按MVC方式开发web程序的基本结构,并且是一个可以直接运行的程序. 如果你了解 Ruby on Rails的话,原理是一样的. 2.网站登录流程 生成的程序中有一个protected目录

数据结构 : Hash Table [I]

孤者浪人 提交于 2019-11-26 21:43:19
引子 这篇仍然不讲并行/并发。 Hash table,国内相当一部分书籍将其直译为哈希表,但博主本人喜欢称其为散列表。 散列表支持任何基于 Key-Value 对的插入,检索,删除操作。 比如在 .NET 1.x 版本下,我们可以这样使用: 10 namespace Lucifer.CSharp.Sample 11 { 12 class Program 13 { 14 public static void Main() 15 { 16 Hashtable table = new Hashtable (); 17 18 //插入操作 19 table[1] = "A" ; 20 table.Add(2, "B" ); 21 table[3] = "C" ; 22 23 //检索操作 24 string a = ( string )table[1]; 25 string b = ( string )table[2]; 26 string c = ( string )table[3]; 27 28 //删除操作 29 table.Remove(1); 30 table.Remove(2); 31 table.Remove(3); 32 } 33 } 34 } 而在 .NET 2.0 及以上版本下,我们则这样使用: 10 namespace Lucifer.CSharp.Sample 11

内置函数和匿名函数

非 Y 不嫁゛ 提交于 2019-11-26 20:27:49
楔子 在讲新知识之前,我们先来复习复习函数的基础知识。 问:函数怎么调用? 函数名() 如果你们这么说。。。那你们就对了!好了记住这个事儿别给忘记了,咱们继续谈下一话题。。。 来你们在自己的环境里打印一下自己的名字。 你们是怎么打的呀? 是不是print('xxx'),好了,现在你们结合我刚刚说的函数的调用方法,你有没有什么发现? 我们就猜,print有没有可能是一个函数? 但是没有人实现它啊。。。它怎么就能用了呢? 早在我们“初识函数”的时候是不是就是用len()引出的? 那现在我们也知道len()也是一个函数,也没人实现,它好像就自己能用了。。。 之前老师给你讲你可以这样用你就用了,那你有没有想过像这样直接拿来就能用的函数到底有多少? 内置函数 接下来,我们就一起来看看python里的内置函数。截止到python版本3.6.2,现在python一共为我们提供了 68个内置函数 。它们就是python提供给你直接可以拿来使用的所有函数。这些函数有些我们已经用过了,有些我们还没用到过,还有一些是被封印了,必须等我们学了新知识才能解开封印的。那今天我们就一起来认识一下python的内置函数。这么多函数,我们该从何学起呢? Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next()

Java——HashMap底层源码分析

不问归期 提交于 2019-11-26 20:05:04
1.简介 HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有 很快的访问速度,但遍历顺序却是不确定 的。 HashMap 最多只允许一条记录的key为 null,允许多条value的值为 null。 HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导致数据的不一致。(如果需要满足线程安全,可以 用 Collections 的 synchronizedMap 方法使HashMap 具有线程安全的能力 ,或者使用 ConcurrentHashMap。 ) 2.HashMap结构jdk1.7和jdk1.8区别 JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“ 拉链法 ”解决冲突)。JDK1.8以后在解决哈希冲突时有了解较大的变化,当 链表长度大于阈值(默认为8)时,将链表转化为红黑树(桶结点个数少于6个重新转换为链表) ,以减少搜索时间。 HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色的实体是嵌套类 Entry 的实例, Entry 包含四个属性: key, value, hash 值和用于单向链表 的 next。 1) capacity :当前数组容量,始终保持 2^n,可以扩容

ConcurrentHashMap底层实现原理(JDK1.8)源码分析

孤街醉人 提交于 2019-11-26 18:36:07
ConcurrentHashMap数据结构   ConcurrentHashMap相比HashMap而言,是多线程安全的,其底层数据与HashMap的数据结构相同,数据结构如下:      说明:ConcurrentHashMap的数据结构(数组+链表+红黑树),桶中的结构可能是链表,也可能是红黑树,红黑树是为了提高查找效率。 ConcurrentHashMap源码分析   1、类的继承关系  public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, Serializable {}   说明:ConcurrentHashMap继承了AbstractMap抽象类,该抽象类定义了一些基本操作,同时,也实现了ConcurrentMap接口,ConcurrentMap接口也定义了一系列操作,实现了Serializable接口表示ConcurrentHashMap可以被序列化。   2、类的内部类   ConcurrentHashMap包含了很多内部类,其中主要的内部类框架图如下图所示:         说明:可以看到,ConcurrentHashMap的内部类非常的庞大,第二个图是在JDK1.8下增加的类,下面对其中主要的内部类进行分析和讲解。   1. Node类

python hash 哈希值

て烟熏妆下的殇ゞ 提交于 2019-11-26 17:28:52
自增知识点 1,哈希 什么是可哈希(hashable)? 简要的说可哈希的数据类型,即不可变的数据结构(字符串str、元组tuple、对象集objects)。   哈希有啥作用? 它是一个将大体量数据转化为很小数据的过程,甚至可以仅仅是一个数字,以便我们可以用在固定的时间复杂度下查询它,所以,哈希对高效的算法和数据结构很重要。 什么是不可哈希(unhashable)? 同理,不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集合set) hash(object) hash() 用于获取取一个对象(字符串或者数值等)的哈希值。返回对象的哈希值。 Hash算法(含python实现) 简介 哈希(hash)也翻译作散列。Hash算法,是将一个不定长的输入,通过散列函数变换成一个定长的输出,即散列值。 这种散列变换是一种单向运算,具有不可逆性即不能根据散列值还原出输入信息,因此严格意义上讲Hash算法是一种消息摘要算法,不是一种加密算法。常见的hash算法有:SM3、MD5、SHA-1等 。 应用 Hash主要应用在数据结构以及密码学领域。 在不同的应用场景下,hash函数的选择也会有所侧重。比如在管理数据结构时,主要要考虑运算的快速性,并且要保证hash均匀分布;而应用在密码学中就要优先考虑抗碰撞性,避免出现两段不同明文hash值相同的情况发生。 2.1