hash

webpack中hash、chunkhash、contenthash区别

烈酒焚心 提交于 2019-12-27 01:06:51
webpack中对于输出文件名可以有三种hash值: 1. hash 2. chunkhash 3. contenthash 这三者有什么区别呢? hash 如果都使用hash的话,因为这是工程级别的,即每次修改任何一个文件,所有文件名的hash至都将改变。所以一旦修改了任何一个文件,整个项目的文件缓存都将失效。如: 可以从上图清晰的看见每个压缩后的文件的hash值是一样的,所以对于没有改变的模块而言,这样做显然不恰当,因为缓存失效了嘛。此时,chunkhash的用途随之而来。 chunkhash chunkhash根据不同的入口文件(Entry)进行依赖文件解析、构建对应的chunk,生成对应的哈希值。在生产环境里把一些公共库和程序入口文件区分开,单独打包构建,接着我们采用chunkhash的方式生成哈希值,那么只要我们不改动公共库的代码,就可以保证其哈希值不会受影响。并且webpack4中支持了异步import功能,固,chunkhash也作用于此,如下: 我们将各个模块的hash值 (除主干文件) 改为chunkhash,然后重新build一下,可得下图: 我们可以清晰地看见每个chunk模块的hash是不一样的了。 但是这样又有一个问题,因为我们是将样式作为模块import到JavaScript文件中的,所以它们的chunkhash是一致的,如test1.js和test1

最全的Redis解析,赶紧收藏

扶醉桌前 提交于 2019-12-26 22:49:27
在这篇文章中,我们将彻底了解 Redis 的使用场景、Redis 的五种数据结构,以及如何在 Spring Boot 中使用 Redis,文章的最后还会列举面试过程中经常被问到的关于 Redis 的问题以及其解决方案。 Redis 简介 Redis 是一个开源(BSD 许可)、内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合等数据类型。内置复制、Lua 脚本、LRU 收回、事务以及不同级别磁盘持久化功能,同时通过 Redis Sentinel 提供高可用,通过 Redis Cluster 提供自动分区。在实际的开发过程中,多多少少都会涉及到缓存,而 Redis 通常来说是我们分布式缓存的最佳选择。Redis 也是我们熟知的 NoSQL(非关系性数据库)之一,虽然其不能完全的替代关系性数据库,但它可作为其良好的补充。 Redis 使用场景 微服务以及分布式被广泛使用后,Redis 的使用场景就越来越多了,这里我罗列了主要的几种场景。 分布式缓存 :在分布式的系统架构中,将缓存存储在内存中显然不当,因为缓存需要与其他机器共享,这时 Redis 便挺身而出了,缓存也是 Redis 使用最多的场景。 分布式锁 :在高并发的情况下,我们需要一个锁来防止并发带来的脏数据,Java 自带的锁机制显然对进程间的并发并不好使,此时可以利用

并发编程—6ConcurrentHashMap1.7 & 1.8

隐身守侯 提交于 2019-12-26 20:41:47
目录 6 ConcurrentHashMap jdk1.7 6.1 预备知识 6.2 jdk1.7原理和实现 6.3 源码 6.3.1 构造方法 6.2.2 get方法 6.2.3 put方法 8.ConcurrentHashMap jdk1.8 8.1与1.7相比的重大变化 8.2 主要数据结构和关键变量 8.3sizeCtl: 8.4 源码 8.4.1 初始化做了什么事? 8.4.2 在get和put操作中,是如何快速定位元素放在哪个位置的? 8.4.3 扩容操作 6 ConcurrentHashMap jdk1.7 hash算法的介绍 构造方法做了什么 get方法做了什么 put方法做了什么 动态扩容逻辑 6.1 预备知识 hash算法: 就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。在jdk1.7为了使得hash出来的值更加均匀,在concurrentHashMap里面使用了Wang/Jenkins hash算法再做了一次hash。 HashMap和HashTable的缺陷:

造个轮子-HashMap

浪子不回头ぞ 提交于 2019-12-26 13:39:24
造个轮子-HashMap 发现自己对看源码特别痛苦,而且看了就忘。有必要按照源码已有的功能需求按照自己的想法去写一个轮子,然后比对着看才能理解。 需求分析 hashMap 功能很多,结构为数组 链表(暂时忽略红黑树),准备就写两个基本功能: put 存数:懒加载数组,到达阈值(负载因子0.75)扩容,hash冲突开始链表模式。 get 取数:能在hash冲突的情况下取出正确的数。 我就围绕这两个功能来仿照写一个 WheelHashMap 。 开始 新建 WheelHashMap 类 基本属性和 hashMap 保持一致 hash 方法复制 hashMap 的 put 方法 resize 扩容方法 get 方法 总结 在造轮子的过程中体会到为什么数组长度要是2的倍数 通过hash值去计算数组坐标 hash & (length-1) ,一般是通过取余实现,这里用与运算效率比取余高,正是因为2的倍数,才能这样设计。 扩容时对于hash冲突的链表rehash的高低位设计,也是因为2的倍数才能这么巧妙。 代码可以在 Github 上找到 本文来自 chentiefeng的博客 来源: CSDN 作者: 东方茄子_1990 链接: https://blog.csdn.net/chentiefeng/article/details/103712992

HashMap源码记录1|火影凡酷

☆樱花仙子☆ 提交于 2019-12-26 12:07:58
前言:由于笔者所在的公司用的是jdk1.8,故该源码是针对1.8分析的。 首先:我们看一张长的很丑的HashMap的结构图: 再看看几个核心的常量: 复制代码 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 默认初始化容器大小,当自己指定容器大小时,必须为2的幂次方 static final int MAXIMUM_CAPACITY = 1 << 30; //容器的最大容量值 static final float DEFAULT_LOAD_FACTOR = 0.75f; //加载因子 static final int TREEIFY_THRESHOLD = 8; //把桶中链表转换为红黑树的阈值 static final int UNTREEIFY_THRESHOLD = 6; //把红黑树转换成链表的阈值 static final int MIN_TREEIFY_CAPACITY = 64; //最小的表容量使桶被树化,当表的容量小于该值时,先扩容解决hash冲突而不是树化 复制代码 putVal()方法: 复制代码 1 /** 2 * 实现Map.put和相关方法 3 * 4 * @param hash 根据key计算出来的hash值 5 * @param key 键 6 * @param value 值 7 *

Java面试篇:手撕hashmap与ArrayList,LinkedList。

◇◆丶佛笑我妖孽 提交于 2019-12-26 09:56:26
这两个月来第一次8点下班,没有到12点甚至有点不习惯,马上就要到跳槽旺季,那么我给大家整理一套最常问的几个集合面条题,废话不多说,直接进入正题。 一、HASHMAP 1.如果想要了解hashmap首先要了解其数据结构 ①.hashmap数据结构是什么? hashmap数据结构中有数组和链表来实现对数据的存储 数组:数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1),随机读取效率很高。因为数组是连续的,知道每一个数据的内存地址,可以直接找到给定地址的数据,但是插入数据和删除数据效率低,插入数据时,这个位置后面的数据在内存中都要向后移。所以数组的特点是:寻址容易,插入和删除困难; 链表:链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N),链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是寻找某个元素较为困难。所以链表的特点是:寻址困难,插入和删除容易。 哈希表:那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表。哈希表((Hash table)既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。 哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法—— 拉链法,我们可以理解为“链表中的数组“

Need to understand hash of hashes in ruby [closed]

不想你离开。 提交于 2019-12-26 09:18:09
问题 Closed . This question needs details or clarity. It is not currently accepting answers. Want to improve this question? Add details and clarify the problem by editing this post. Closed 3 years ago . I came to know that we can create hash of hashes as below: Hash.new{|hash, key| hash[key] = Hash.new} But I dont understand whether the key and value getting converted as hash. Can someone explain me in brief about this. 回答1: If you define hash this way, ruby set the default value on every key in

How to create hash with duplicate keys

∥☆過路亽.° 提交于 2019-12-26 08:15:23
问题 Now i am modifying the code a little I am using the code for creating hash haivng duplicate keys. Its giving the syntax error. use strict; use warnings; my $s = "12 A P1 23 B P5 24 C P2 15 D P1 06 E P5"; my $hash; my @a = split(/\n/, $s); foreach (@a) { my $c = (split)[2]; my $d = (split)[1]; my $e = (split)[0]; push(@{$hash->{$c}}, $d); } print Dumper($hash ); i am getting the output as $VAR1 = { 'P5' => [ 'B', 'E' ], 'P2' => [ 'C' ], 'P1' => [ 'A', 'D' ] }; But i want the output like $VAR1

数组去重方法

随声附和 提交于 2019-12-26 01:15:08
// 定义函数,去掉数组中的重复元素 返回一个新的数组,没有重复项 一;用关联数组的方式: function ee(arr){ for(var i = 0,result = [],hash=[];i < arr.length;i++){ // 如果hash中以arr当前元素作为key的元素是undefined if(hash[arr[i]] === undefined){ // 为hash添加新元素,key值为arr当前元素,value值赋值为 true hash[arr[i]] = true; // 将arr中当前元素,追加到result末尾 result.push(arr[i]); } } console.log(result); } ee([1,1,2,3,2]); 二;用indexOf方式: function ff(arr){ for(var i = 0,result = [];i < arr.length;i++){ //在result里找arr里的元素 等于-1 就是没找到 就将arr中当前元素,追加到result末尾 if(result.indexOf(arr[i]) == -1){ result.push(arr[i]); } } console.log(result); } ff([1,1,2,3,2]); 三;双层循环 function dd(arr){ //

给HashMap做个深度剖析手术

纵饮孤独 提交于 2019-12-25 22:28:16
人们 对于任何事物的认知,往往都存在这么一个现象:只有你了解的东西,你才会感兴趣。 HashMap 之于 Java 开发者来说,也是如此。相信多数人在起初相当长的时间内,对HashMap的印象都是“Map接口的实现类,是基于哈希的,用于存放键-值对,允许 null 作为键和值,非线程安全的”,仅此而已。于是在程序编写过程中便“肆无忌惮”往里放键-值对。而只有你对 HashMap 的实现有了一定的了解之后,你才会有兴趣研究HashMap深层次的问题,比如“HashMap最多能放多少个键-值对?如何提高HashMap的使用效率?”。其实,我一直都对HashMap的“线性数组+链表”的实现机制充满好奇,刚刚有时间研究了一下源码,现把心得与大家分享。 首先 ,我们来看看HashMap的数据结构: /** * 初始容量,大小必须是2的指数次方,默认是16. */ static final int DEFAULT_INITIAL_CAPACITY = 16; /** * 默认最大容量,值为1<<30 */ static final int MAXIMUM_CAPACITY = 1 << 30; /** * 哈希表的默认加载因子,值为0.75. */ static final float DEFAULT_LOAD_FACTOR = 0.75f; /** * 存储元素的数组,大小必须是2的指数次方