hash

ConcurrentHashMap源码解析(1.8)

末鹿安然 提交于 2020-03-20 07:58:47
一、简介 上篇文章 详细介绍了HashMap的源码及原理,本文趁热打铁继续分析ConcurrentHashMap的原理。 首先在看本文之前,希望对HashMap有一个详细的了解。不然看直接看ConcurrentHashMap的源码还是有些费劲的。 相信对HashMap,HashTable有一定了解,应该知道HashMap是不具备线程安全性的,在resize时会丢数据(JDK8),而HashTable虽然保证了线程安全性,但是其是通过给每个方法加Synchronized关键字达到的同步目的。但是都知道Synchronized在竞争激烈的多线程并发环境中,在性能上的表现是非常不如人意的。那在高并发环境中HashMap如何保证线程安全而又不浪费太多性能呢?答案就是Java J.U.C并发包中的ConcurrentHashMap。 依然开局一张图。JDK8中的ConcurrentHashMap数据结构。 呃呵,和HashMap的结构是一样的,没错在数据结构层面,ConcurrentHashMap和HashMap是完全一样的。有了这个基础继续往下看。 二、历史版本 ConcurrentHashMap的历史版本大致分界线在JDK8。也就是可以分为JDK8和JDK8以前版本。 数据结构的区别 在JDK8之前HashMap没有引入红黑树,同样的ConcurrentHashMap也没有引入红黑树

深入set和dict

送分小仙女□ 提交于 2020-03-20 05:11:08
一. 浅拷贝和深拷贝 浅拷贝:就是创建一个具有相同类型,相同值但不同id的新对象。 浅拷贝产生的新对象中可变对象的值在发生改变时,会对原对象的值也做出改变,因为这些值是同一个引用。 a = [1, 2] b = [3, 4, a] c = b.copy() a[0] = 0 print(b) print(c) 输出 [3, 4, [0, 2]] [3, 4, [0, 2]] 深拷贝:不仅仅拷贝了原始对象自身,也对其包含的值进行拷贝,它会递归的查找对象中包含的其他对象的引用,来完成更深层次拷贝。 深拷贝产生的副本可以随意修改而不需要担心会引起原始值的改变 import copy a = [1, 2] b = [3, 4, a] c = copy.deepcopy(b) a[0] = 0 print(b) print(c) 输出结果 [3, 4, [0, 2]] [3, 4, [1, 2]] 二. dict的常用方法 1. fromkeys把可迭代的对象转变为dict 基本语法:dict.fromkeys(可迭代对象作为keys,默认值作为value) new_list = ["name1", "name2"] new_dict = dict.fromkeys(new_list, 34) print(new_dict) 输出如下 {'name1': 34, 'name2': 34} 2

Mysql数据库分区和分表

安稳与你 提交于 2020-03-19 17:37:39
3 月,跳不动了?>>> 一: 分区简介 分区是根据一定的规则,数据库把一个表分解成多个更小的、更容易管理的部分。就访问数据库应用而言,逻辑上就只有一个表或者一个索引,但实际上这个表可能有N个物理分区对象组成,每个分区都是一个独立的对象,可以独立处理,可以作为表的一部分进行处理。分区对应用来说是完全透明的,不影响应用的业务逻辑。 分区有利于管理非常大的表,它采用分而治之的逻辑,分区引入了分区键的概念,分区键用于根据某个区间值(或者范围值)、特定值列表或者hash函数值执行数据的聚集,让数据根据规则分布在不同的分区中,让一个大对象碧昂城一些小对象。 MySQL分区即可以对数据进行分区也可以对索引进行分区。 分区类型 range分区:基于一个给定的连续区间范围(区间要求连续并且不能重叠),把数据分配到不同的分区 list分区:类似于range分区,区别在于list分区是居于枚举出的值列表分区,range是基于给定的连续区间范围分区 hash分区:基于给定的分区个数,把数据分配到不同的分区 key分区:类似于hash分区 注意:无论哪种分区,要么你分区表上没有主键/唯一键,要么分区表的主键/唯一键都必须包含分区键,也就是说不能使用主键/唯一键字段之外的其它字段分区。 ####MySQL分区的有限主要包括以下4个方面: 和单个磁盘或者文件系统分区相比,可以存储更多数据 优化查询

How to retrieve the Signature hash algorithm friendly name using c# cryptography?

冷暖自知 提交于 2020-03-19 06:29:00
问题 The following function uses a certificate to sign and verify. private static bool Sign_Verify(X509Certificate2 x509, byte[] random_data) { // // Local variable definitions // bool isVerified = false; byte[] buffer = Encoding.Default.GetBytes("Hello World ... !"); byte[] signature_Data = null; byte[] signature_Hash = null; // // Retrieve the private key of the certificate selected. // RSACryptoServiceProvider privateKey = x509.PrivateKey as RSACryptoServiceProvider; if (null == privateKey) {

Discuz XSS得webshell

不羁的心 提交于 2020-03-19 04:35:52
By racle @tian6.com 欢迎转帖.但请保留版权信息. 受影响版本:Discuz<6.1.0,gbk+utf+big5 3天前有朋友在论坛问过,说Discuz有个非论坛创始人获得WEBSHELL的漏洞,是superhei早前发出来的一大堆DISCUZ漏洞之一.见原帖:http://bbs.tian6.com/redirect.php?goto=findpost&pid=54794&ptid=8706当时我说一会就弄出来给大家,但是实际上一接触,发现这个漏洞本身需要管理员权限,要广泛普遍的利用还是很复杂的,主要是以下几个问题,所以拖到今天才基本完工.分析和写EXP的过程中,得到t0by57的大力帮助.他PHP和JS都不错的哦!我也希望大家看这篇文章时,更注意分析和明白的过程,毕竟XSS是目前WEB安全的最大头戏.各种形式:XSIO,Cross Iframe Trick,crsf等等.. ----------------------------------------------------------前言分隔线----------------------------------------------------------------------------- problem1:漏洞页面runwizard.inc.php数据提交方式为post.需要模拟POST提交

php常用加密函数和算法

♀尐吖头ヾ 提交于 2020-03-19 03:12:10
关键词: 不可逆: md5(); 计算字符串的 MD5 散列值 不可逆 默认返回32位的16进制 crypt(); 单向字符串散列 可以混淆盐值 不可逆 sha1(); 计算字符串的 sha1 散列值 默认返回值是一个 40 字符长度的十六进制数字。 不可逆 hash() hash($ago,$data); $ago是可以指定加密使用的哈希算法,例如:"md5","sha256","haval160,4" 等。$data是要加密的数据 不可逆 password_hash() – 对密码加密. $hash = password_hash($passwod, PASSWORD_DEFAULT); 现在PHP的官方都是推荐这种方式来加密用户的密码,很多流行的框架比如Laravel就是用的这种加密方式。 可逆: URL编码加密 urlencode() urldecode() url传递 保护特殊字符串使用 $str=" http://guojiadong.com?name= ".urlencode('guojiadong&123'); 可逆 Base64编码加密 base64_encode() base64_decode() base64加密本质上说就是把数据转换为ASCLL码 ,这会更有利于文件的传输,当然base64的作用在与文件的传输 可逆 PHP的openssl扩展

关于分区表和分区索引

人盡茶涼 提交于 2020-03-18 19:34:14
关于 分区表 和 分区索引 (About Partitioned Tables and Indexes) 对于10gR2而言,基本上可以分成几类: v Range(范围)分区 v Hash(哈希)分区 v List(列表)分区 v 以及组合分区:Range-Hash,Range-List。 对于表而言(常规意义上的堆组织表),上述分区形式都可以应用(甚至可以对某个分区指定compress属性),只不过分区依赖列不能是lob,long之类数据类型,每个表的分区或子分区数的总数不能超过1023个。 对于索引组织表,只能够支持普通分区方式,不支持组合分区,常规表的限制对于索引组织表同样有效,除此之外呢,还有一些其实的限制,比如要求索引组织表的分区依赖列必须是主键才可以等。 注:本篇所有示例仅针对常规表,即堆组织表! 对于索引,需要区分创建的是全局索引,或本地索引: l 全局索引(global index):即可以分区,也可以不分区。即可以建range分区,也可以建hash分区,即可建于分区表,又可创建于非分区表上,就是说,全局索引是完全独立的,因此它也需要我们更多的维护操作。 l 本地索引(local index):其分区形式与表的分区完全相同,依赖列相同,存储属性也相同。对于本地索引,其索引分区的维护自动进行,就是说你add/drop/split/truncate表的分区时

集合框架系列 Map(十一):LinkeHashMap

a 夏天 提交于 2020-03-18 18:31:25
目录 1 概述 2 原理 3 源码分析  3.0 Entry 的继承体系  3.1 链表的建立过程  3.2 链表节点的删除过程  3.3 访问顺序的维护过程  3.4 基于 LinkedHashMap 实现缓存 4 总结 1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。所以,要看懂 LinkedHashMap 的源码,需要先看懂 HashMap 的源码。关于 HashMap 的源码分析,本文并不打算展开讲了。大家可以参考我之前的一篇文章“ HashMap 源码详细分析(JDK1.8) ”。在那篇文章中,我配了十多张图帮助大家学习 HashMap 源码。 本篇文章的结构与我之前两篇关于 Java 集合类( 集合框架 )的源码分析文章不同,本文将不再分析集合类的基本操作(查找、遍历、插入、删除),而是把重点放在双向链表的维护上。包括链表的建立过程,删除节点的过程,以及访问顺序维护的过程等。好了,接下里开始分析吧。 2. 原理 上一章说了

集合框架系列 Map(十):HashMap

柔情痞子 提交于 2020-03-18 18:17:13
目录 1 概述 2 原理 3 源码分析  3.1 构造方法   3.1.1 构造方法分析   3.1.2 初始容量、负载因子、阈值  3.2 查找  3.3 遍历  3.4 插入   3.4.1 插入逻辑分析   3.4.2 扩容机制   3.4.3 链表树化、红黑树链化与拆分  3.5 删除  3.6 其他细节  3.7 总结 1. 概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap 。HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现。HashMap 允许 null 键和 null 值,在计算哈键的哈希值时,null 键哈希值为 0。HashMap 并不保证键值对的顺序,这意味着在进行某些操作后,键值对的顺序可能会发生变化。另外,需要注意的是,HashMap 是非线程安全类,在多线程环境下可能会存在问题。 在本篇文章中,我将会对 HashMap 中常用方法、重要属性及相关方法进行分析。需要说明的是,HashMap 源码中可分析的点很多,本文很难一一覆盖,请见谅。 2. 原理 上一节说到 HashMap 底层是基于散列算法实现,散列算法分为散列再探测和拉链式。HashMap 则使用了拉链式的散列算法,并在 JDK 1.8 中引入了红黑树优化过长的链表。数据结构示意图如下: 对于拉链式的散列算法,其数据结构是由数组和链表(或树形结构)组成

python内置模块[sys,os,os.path,stat]

不羁岁月 提交于 2020-03-18 14:52:06
内置模块是python自带功能,在使用内置模块时,需要遵循 先导入 在 使用 一、sys 对象 描述 sys.argv 命令行参数获取,返回类型为列表,第一个元素为程序的本身的路径 sys.path 返回模块的搜索路径列表,第一个元素为当前程序所在目录;初始化时使用PYTHONPATH环境变量的值 sys.modules.keys() 返回所有已经导入的模块列表 sys.modules 返回所有已经导入的模块字典,key模块名,value是模块路径 sys.exc_info() 获取当前正在处理的异常类,exc_type,exc_value,exc_traceback当前处理的异常详细信息 sys.exc_clear() 用来清除当前线程所出现的当前的或最近的错误信息 sys.exec_prefix 返回python文件安装的位置 sys.exit(n) 退出程序,正常退出时exit(0) sys.hexversion 获取python解释程序的版本值,16进制格式如:0x020103F0 sys.version 获取python解释程序的版本信息 sys.displayhook(value) 如果value非空,这个函数会把他输出到sys.stdout(详细使用参考文档) sys.excepthook 异常回溯相关 sys.stdin 标准输入 sys.stdin.read()