hash

Passwords and different types of encryption

天涯浪子 提交于 2020-03-03 01:08:05
问题 I know, I know, similar questions have been asked millions and billions of times already, but since most of them got a different flavor, I got one of my own. Currently I'm working on a website that is meant to be launched all across my country, therefore, needs some kind of protection for user system. I've been lately reading alot about password encryption, hashing, salting.. you name it, but after reading that much of articles, I get confused. One says that plain SHA512 encryption is enough

Java 并发编程(一)

谁说我不能喝 提交于 2020-03-02 13:13:08
#Java 并发编程(一) ##同步容器 1.Vector,Hashtable。 实现线程安全的方式是:将它们的状态封装起来,并对每个共有方法进行同步,使得每次只有一个线程能访问容器的状态。使用了Java监视器模式。 2.Vector代码分析 //根据下标获取数据,都是使用synchronized实现同步 public synchronized E get(int index) { if (index >= elementCount) throw new ArrayIndexOutOfBoundsException(index); return elementData(index); } //添加数据 public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = e; return true; } //扩容 private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (

HashMap O(1) 复杂度的分析

六月ゝ 毕业季﹏ 提交于 2020-03-02 11:38:27
**C++**在使用STL时,经常混淆的几个数据结构, map,hash Map,unordered_map 事实上,三个容器,有着比较大的区别. Map 内部数据的组织,基于红黑树实现,红黑树具有自动排序的功能,因此map内部所有的数据,在任何时候,都是有序的。 所以复杂度为 O(LogN) Hash map 基于哈希表,数据插入和查找的时间复杂度很低,几乎是常数时间,而代价是消耗比较多的内存。底层实现上,使用一个下标范围比较大的数组来存储元素,形成很多的桶,利用hash函数对key进行映射到不同区域(桶)进行保存。 插入 得到key, 通过hash函数得到hash值 根据hash值 找到对应的桶号(区域), hash值对(桶数)求模 存放key和value 在对应桶内 取值 分四步: 判断key,根据key算出索引。 根据索引获得索引位置所对应的键值对链表。 遍历键值对链表(当每个桶内只有一个元素时,查找时只进行一次比较),根据key找到对应的Entry键值对。 拿到value。 分析: 以上四步要保证HashMap的时间复杂度O(1),需要保证每一步都是O(1),现在看起来就第三步对链表的循环的时间复杂度影响最大,链表查找的时间复杂度为O(n),与链表长度有关。我们要保证那个链表长度为1,才可以说时间复杂度能满足O(1)。但这么说来只有那个hash算法尽量减少冲突

Redis五种数据类型的应用场景

纵然是瞬间 提交于 2020-03-02 11:14:57
Redis五种数据类型的应用场景 String应用场景 string类型是二进制安全的,redis的string可以包含任何数据,如图像、序列化对象。一个键最多能存储512MB。==二进制安全是指,在传输数据的时候,能保证二进制数据的信息安全,也就是不会被篡改、破译;如果被攻击,能够及时检测出来 1.String通常用于保存单个字符串或JSON字符串存储数据 2.因为String是二进制安全的,所以可以把保密性要求高的图片文件内容作为字符串来存储 3.计数器:常规key-value缓存应用,如微博数、粉丝数,INCR本身就具有原子性特性,所以不会有线程安全问题。 hash应用场景 Redis hash是一个string类型的field和value的映射表,hash特别适用于存储对象。每个hash可以存储232-1键值对。可以看成KEY和VALUE的MAP容器。相比于JSON,hash占用很少的内存空间。Hash的应用场景,通常用来存储一个用户信息的对象数据。 1、相比于存储对象的string类型的json串,json串修改单个属性需要将整个值取出来。而hash不需要。 2、相比于多个key-value存储对象,hash节省了很多内存空间 3、如果hash的属性值被删除完,那么hash的key也会被redis删除 list应用场景 1.对数据大的集合数据删减,如列表显示、关注列表

Vue的基础理解(七)

我们两清 提交于 2020-03-02 10:34:49
Vue常用的修饰符有哪些? Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。 .prevent : 拦截默认事件 .passive: 不拦截默认事件 .stop : 阻止冒泡事件 .self : 事件不是从内部元素触发的,是前元素自身时触发处理函数 .self.prevent 只会阻止对元素自身的点击。 .once : 只会触发一次 .capture :事件侦听,事件发生的时候会调用 vue的单页面应用有啥优缺点? 优点: Vue的目的是通过尽可能简单的API实现相应的数据绑定和组合视图组件,核心是响应式数据绑定,MVVM 轻量、组件化、简洁、高效、快速 缺点: 不支持低版本浏览器,最低只支持IE9 不利于SEO的优化 第一次加载页面耗时相对长一些,不可以使用浏览器的导航按钮需要自行实现前进和后退 路由,$route和$router有什么区别? route 表示路由信息对象,包括path,params,hash,query,fullpath,matched,name等路由信息参数 router表示路由实例对象,包括了路由的跳转方法,钩子函数等。 vue-Router中有哪些导航守卫? 「全局前置钩子」:beforeEach,beforeResolve,afterEach 「路由独享守卫」:beforeEnter 「组件内部守卫」

ConcurrentHashMap源码解析

北慕城南 提交于 2020-03-02 10:33:41
ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现 ConcurrentHashMap在并发编程的场景中使用频率非常之高,本文就来分析下ConcurrentHashMap的实现原理,并对其实现原理进行分析(JDK1.7). ConcurrentHashMap实现原理   众所周知,哈希表是中非常高效,复杂度为O(1)的数据结构,在Java开发中,我们最常见到最频繁使用的就是HashMap和HashTable,但是在线程竞争激烈的并发场景中使用都不够合理。    HashMap :先说HashMap,HashMap是 线程不安全 的,在并发环境下,可能会形成 环状链表 (扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,所以,在并发环境中使用HashMap是非常危险的。    HashTable : HashTable和HashMap的实现原理几乎一样,差别无非是 1.HashTable不允许key和value为null;2.HashTable是线程安全的。 但是HashTable线程安全的策略实现代价却太大了,简单粗暴,get/put所有相关操作都是synchronized的,这相当于给整个哈希表加了一把 大锁 ,多线程访问时候,只要有一个线程访问或操作该对象,那其他线程只能阻塞

HashTable源码解析

回眸只為那壹抹淺笑 提交于 2020-03-02 10:32:00
Hashtable 简介 和HashMap一样,Hashtable 也是一个 散列表 ,它存储的内容是 键值对(key-value)映射 。 Hashtable 继承于Dictionary ,实现了Map、Cloneable、java.io.Serializable接口。 Hashtable 的函数都是 同步的 ,这意味着它是线程安全的。它的key、value都不可以为null。此外,Hashtable中的映射不是有序的。 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。 为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。 Hashtable 的实例有两个参数影响其性能: 初始容量 和 加载因子 。容量 是哈希表中桶 的数量,初始容量 就是哈希表创建时的容量。 注意,哈希表的状态为 open:在发生“哈希冲突”的情况下,单个桶会存储多个条目,这些条目必须按顺序搜索。 加载因子 是对哈希表在其容量自动增加之前可以达到多满的一个尺度。初始容量和加载因子这两个参数只是对该实现的提示。 关于何时以及是否调用 rehash 方法的具体细节则依赖于该实现。 通常, 默认加载因子是 0.75 , 这是在时间和空间成本上寻求一种折衷。加载因子过高虽然减少了空间开销, 但同时也增加了查找某个条目的时间

Map,Map.Entry<K,V>源码分析

Deadly 提交于 2020-03-02 02:15:15
一、简单介绍。 1、Map是java中的接口,Map.Entry是Map的一个内部接口。 2、Map提供了一些常用方法,如keySet()、entrySet()等方法 ,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。 3、Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。 二、源码分析。 Map源码(包含Entry的定义): package java.util; public interface Map<K,V> { int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); V put(K key, V value); V remove(Object key); void clear(); Set<K> keySet(); Collection<V> values(); Set<Map.Entry<K, V>> entrySet(); interface Entry<K,V>

预备役3.1学习总结

女生的网名这么多〃 提交于 2020-03-02 00:41:33
1.上午 看Java视频 看到了 HashMap 有关内容,与昨天看的散列查找很少相似 哈希表的基本结构就是“数组+链表” 我们的目的是将”key-value两个对象”成对存放到HashMap的Entry[]数组中 (1) 获得key对象的hashcode 首先调用key对象的hashcode()方法,获得hashcode。 (2) 根据hashcode计算出hash值(要求在[0, 数组长度-1]区间) hashcode是一个整数,我们需要将它转化成[0, 数组长度-1]的范围。我们要求转化后的hash值尽量均匀地分布在[0,数组长度-1]这个区间,减少“hash冲突” i. 一种极端简单和低下的算法是: hash值 = hashcode/hashcode; 也就是说,hash值总是1。意味着,键值对对象都会存储到数组索引1位置,这样就形成一个非常长的链表。相当于每存储一个对象都会发生“hash冲突”,HashMap也退化成了一个“链表”。 ii. 一种简单和常用的算法是(相除取余算法): hash值 = hashcode%数组长度 这种算法可以让hash值均匀的分布在[0,数组长度-1]的区间。 早期的HashTable就是采用这种算法。但是,这种算法由于使用了“除法”,效率低下。JDK后来改进了算法。首先约定数组长度必须为2的整数幂,这样采用位运算即可实现取余的效果

HashMap原理分析及性能优化

╄→гoц情女王★ 提交于 2020-03-01 22:17:36
文章目录 一.HashMap是什么 二.HashMap继承类对比分析 三.HashMap源码相关单词含义 四.HashMap如何确定哈希桶数组索引位置 五. HashMap 的 put 方法分析 六.HashMap扩容机制 七.HashMap线程安全性 一.HashMap是什么 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。 HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。 这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。 数据结构(JDK1.8): Node<K,V>[] table; 数组+链表+红黑树 二.HashMap继承类对比分析 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是 HashMap、Hashtable、LinkedHashMap和TreeMap , 类继承关系如下图所示: ① HashMap :它 根据键的hashCode值存储数据 ,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。 HashMap非线程安全 ,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致