hash

Redis复习篇

橙三吉。 提交于 2020-03-08 15:15:31
1.Redis(简单的,高效的,分布式,基于内存的缓存机制) 1.1 性能极高: 读 110000次/s 写 81000次/s 1.2 丰富的数据类型: String,List,Hash,Set,Ordered Set 1.3 Redis操作都是具有原子性的 1.4 Redis单个Key能存入512M大小 2.Redis 数据类型 2.1 String 2.1.1 String类型常用命令: 赋值语法: set key value:设置Key的值,如果key已经存在则覆盖。 ++setnx key value:只有key不存在时设置key的值(解决分布式锁方案之一)。++ 取值语法: get key : 获取key对应的值,如果key不存在则返回nil。 getrange key start end :对获取key对应的值进行截取。 getbit key offset :对key所存储的字符串值,获取指定偏量上的位(bit)。 mget [key1,key2…] : 获取给定一个或多个key的值。 getset key value : 该语法用于设定key的值并返回旧值。 strlen key :返回key存储字符串的长度。 删除语法: del key : 删除指定的key,如果存在返回数字类型。 自增自减: incr key : incr命令将key的值增一。如果key不存在

hashmap学习笔记

♀尐吖头ヾ 提交于 2020-03-08 13:21:41
最近开始在阅读一些源码之类的学习,趁着周末,今天详细学习了一些HashMap底层的知识,遂记录下来。有很多理解或者描述不当之处,望请指正。 ## 一、数据底层结构图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190526213014826.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21pYW9wYXMx,size_16,color_FFFFFF,t_70) 首先放一张HashMap底层结构图,由于现在JDK几乎都用8及以上了,因此本文记录的都是基于JDK8的HashMap。 在JDK8以后,HashMap底层采用数组+链表+红黑树的形式来进行存储。 HashMap底层用一个数组来存放节点,节点在数组中的位置是由一个特殊的算法计算出来的(下文会提到)。如果两个节点计算出来的hash值相同,那么就将新的节点以链表的形式,连接在已存在的节点的后面。如果同一位置的节点数超过8个,那么会将链表改成红黑树的形式进行存储。 这样说有点抽象,结合源码一起看吧。 ## 二、HashMap源码解读 首先我们来看HashMap中的基本单位,节点,包括链表节点和红黑树节点。 链表节点: ``` /**

dom0级事件和dom2级事件

前提是你 提交于 2020-03-08 09:15:55
dom0级事件 1 <a href="#" id="hash" onclick="fn();fn1();"> 2 <button type="button">返回上面进行开通</button> 3 </a> 1 var btn=$('#hash').get(0); 2 btn.onclick=function(){ 3 alert('111'); 4 }; 5 btn.onclick=function(){ 6 alert('222'); 7 }; 像上面把onclick写在标签内,都是dom0级事件,fn和fn1依次执行; 第二种获取元素,绑定onclick事件也是dom0级,第二个会覆盖第一个onclick,也会覆盖行内的onclick,只会弹出222。 dom2级事件 $('#hash').click(function(){ alert('jq的dom2级点击第一次') }); $('#hash').click(function(){ alert('jq的dom2级点击第二次') }); btn.addEventListener('click',function(){ alert('原生dom2级第一次click') },false); btn.addEventListener('click',function(){ alert('原生dom2级第二次click') }

vue-router的hash 模式和 history 模式

这一生的挚爱 提交于 2020-03-07 17:45:35
hash 模式 url 中带有#的便是 hash 模式,#后面是 hash 值,它的变化会触发 hashchange 这个事件。 通过这个事件我们就可以知道 hash 值发生了哪些变化。然后我们便可以监听 hashchange 来实现更新页面部分内容的操作: window .onhashchange = function ( event ) { console .log(event.oldURL, event.newURL); let hash = location.hash.slice( 1 ); document .body.style.color = hash; } 另外,hash 值的变化,并不会导致浏览器向服务器发出请求,浏览器不发出请求,也就不会刷新页面。 history 模式 history api 可以分为两大部分,切换和修改 ① 切换历史状态 包括 back,forward,go 三个方法,对应浏览器的前进,后退,跳转操作 history.go( -2 ); //后退两次 history.go( 2 ); //前进两次 history.back(); //后退 hsitory.forward(); //前进 ② 修改历史状态 包括了 pushState,replaceState 两个方法,这两个方法接收三个参数:stateObj,title,url history

看完这篇文章,我彻底懂了 equals( ) 和 hashCode( )

流过昼夜 提交于 2020-03-07 13:11:27
总览equals( ) 方法 理解equals()方法和==运算符的区别是非常重要的。 默认情况下(即没有被重写时)equals()只能比较引用类型,"=="既能 比较引用类型又能比较基本类型。 equals()方法从Object类继承,即比较对象引用的值 一般都被子类方法覆盖,不再比较引用的值 "=="运算符: 比较基本数据类型:相当于算术等号。 比较引用数据类型:比较引用的值,不能被覆盖。 通常情况,子类要重写equals( ),改变它的含义。所以有的类中 equals( )是比较地址,有的类中该方法就不比较地址,具体的,就看子类新定义的该方法的规定。建议看看包装类中的equals()方法,蛮有趣的。 在Java中有个规定:如果equals( )返回两个对象是相等的,那这两个对象上调用hashCode( )返回的整数必须相等。否则在使用Hash类型集合时就会产生错误。 注意:覆盖equals( )方法同时,还要记得覆盖hashCode( )方法。 需要说明,如果equals( )返回两个对象不等,它们的hashCode( )也 可以返回相同的整数。但是最好让它们的hashCode( )返回不同的整 数,这有利于提高Hash类型集合的性能。 重写equals方法时,一定要重写hashcode()方法吗? hashcode的调用的条件: 想往map里面放一个类作为map的键值

ConcurrentHashMap 的实现原理

若如初见. 提交于 2020-03-07 08:57:19
概述 我们在之前的博文中了解到关于 HashMap 和 Hashtable 这两种集合。其中 HashMap 是非线程安全的,当我们只有一个线程在使用 HashMap 的时候,自然不会有问题,但如果涉及到多个线程,并且有读有写的过程中,HashMap 就不能满足我们的需要了(fail-fast)。在不考虑性能问题的时候,我们的解决方案有 Hashtable 或者Collections.synchronizedMap(hashMap),这两种方式基本都是对整个 hash 表结构做锁定操作的,这样在锁表的期间,别的线程就需要等待了,无疑性能不高。 所以我们在本文中学习一个 util.concurrent 包的重要成员,ConcurrentHashMap。 ConcurrentHashMap 的实现是依赖于 Java 内存模型,所以我们在了解 ConcurrentHashMap 的前提是必须了解Java 内存模型。但 Java 内存模型并不是本文的重点,所以我假设读者已经对 Java 内存模型有所了解。 ConcurrentHashMap 分析 ConcurrentHashMap 的结构是比较复杂的,都深究去本质,其实也就是数组和链表而已。我们由浅入深慢慢的分析其结构。 先简单分析一下,ConcurrentHashMap 的成员变量中,包含了一个 Segment 的数组( final

Python-内置模块

浪尽此生 提交于 2020-03-07 06:50:44
内置模块 一、os 用于提供系统级别的操作 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息 os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" os.linesep 输出当前平台使用的行终止符

大数据面试之——大数据解决方案思维题

丶灬走出姿态 提交于 2020-03-06 17:09:11
1.给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:假如每个url大小为10bytes,那么可以估计每个文件的大小为50G×64=320G,远远大于内存限制的4G,所以不可能将其完全加载到内存中处理,可以采用分治的思想来解决。 Step1:遍历文件a,对每个url求取hash(url)%1000,然后根据所取得的值将url分别存储到1000个小文件(记为a0,a1,…,a999,每个小文件约300M); Step2:遍历文件b,采取和a相同的方式将url分别存储到1000个小文件(记为b0,b1,…,b999); 巧妙之处:这样处理后,所有可能相同的url都被保存在对应的小文件(a0vsb0,a1vsb1,…,a999vsb999)中,不对应的小文件不可能有相同的url。然后我们只要求出这个1000对小文件中相同的url即可。 Step3:求每对小文件ai和bi中相同的url时,可以把ai的url存储到hash_set/hash_map中。然后遍历bi的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。 方案2:如果允许有一定的错误率,可以使用Bloomfilter,4G内存大概可以表示340亿bit

redis能做什么

不羁的心 提交于 2020-03-06 14:14:03
  缓存   分布式锁 记录帖子的点赞数、评论数和点击数 (hash)。 记录用户的帖子 ID 列表 (排序),便于快速显示用户的帖子列表 (zset)。 记录帖子的标题、摘要、作者和封面信息,用于列表页展示 (hash)。 记录帖子的点赞用户 ID 列表,评论 ID 列表,用于显示和去重计数 (zset)。 缓存近期热帖内容 (帖子内容空间占用比较大),减少数据库压力 (hash)。 记录帖子的相关文章 ID,根据内容推荐相关帖子 (list)。 如果帖子 ID 是整数自增的,可以使用 Redis 来分配帖子 ID(计数器)。 收藏集和帖子之间的关系 (zset)。 记录热榜帖子 ID 列表,总热榜和分类热榜 (zset)。 缓存用户行为历史,进行恶意行为过滤 (zset,hash)。 来源: https://www.cnblogs.com/82nlf-xlqb/p/12425708.html

前端路由实现原理

六月ゝ 毕业季﹏ 提交于 2020-03-06 09:00:46
何为前端路由? 路由(Router)这个概念最先是后端出现的,是用来跟后端服务器进行交互的一种方式,通过不同的路径,来请求不同的资源,请求不同的页面是路由的其中一种功能。 前端随着 ajax 的流行,数据请求可以在不刷新浏览器的情况下进行。异步交互体验中最盛行的就是 SPA —— 单页应用。单页应用不仅仅是在页面交互时无刷新的,连页面跳转都是无刷新的,为了实现单页应用,所以就有了前端路由。 前端Router基本功能 一个基本的前端路由至少应该提供以下功能: 前端Router可以控制浏览器的 history,使的浏览器不会在 URL 发生改变时刷新整个页面。 前端Router需要维护一个 URL 历史栈,通过这个栈可以返回之前页面,进入下一个页面。 前端路由实现原理就是匹配不同的 url 路径,进行解析,然后动态的渲染出区域 html 内容。但是这样存在一个问题,就是 url 每次变化的时候,都会造成页面的刷新。那解决问题的思路便是在改变 url 的情况下,保证页面的不刷新。目前 Router有两种实现方式 History 和 hash。 Hash 路由 URL Hash 的形式类似如下: // 表示文章列表页面 https://www.limitcode.com/#/list // 表示文章详情页面 https://www.limitcode.com/#/detail #