hash函数

【BZOJ4917】Hash Killer IV 乱搞

被刻印的时光 ゝ 提交于 2020-03-11 05:41:06
【BZOJ4917】Hash Killer IV Description 有一天,tangjz造了一个Hash函数: unsigned int Hash(unsigned int v){ unsigned int t = v; t = t + (t << 10); t = t ^ (t >> 6); t = t + (t << 3); t = t ^ (t >> 11); t = t + (t << 16); return t; } 小Q发现这个函数非常不靠谱,对于任意的t,他可以随手构出个数字v使得Hash(v)=t。 小Q现在想考考你,他将给出Q个t,你需要构造出满足条件的v。 Input 第一行包含一个正整数Q(1<=Q<=100000),表示询问的个数。 接下来Q行,每行一个整数t(0<=t<2^32),表示询问的t。 输入数据保证对于每个t至少存在一组解。 Output 对于每组数据输出一行一个整数,即合法的v,若有多组可行解,输出任意一组。 Sample Input 4 614278301 1228622139 1841720774 2457244278 Sample Output 1 2 3 4 题解 :发现每个操作都是能反过来的。对于操作1,3,5,可以看成是原数*一个数,因为乘的是奇数而模数是偶数,所以反过来做的话直接乘逆元就行了。对于2,4操作,首先最高的6

DBEX-1-5-2014数据库开发技术

蹲街弑〆低调 提交于 2020-03-10 14:02:45
一、论述题(10分) 1)简述DBMS对SQL解析执行的步骤(2) 1语法分析:分析语句的语法是否符合规范,衡量语句中各表达式的意义 2语义分析:检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限 3视图转换:将涉及视图的查询语句转换为相应的对基表查询语句。 4表达式转换:将复杂的SQL表达式转换为较简单的等效连接表达式 5选择优化器:不同的优化器一般产生不同的“执行计划” 6选择连接方式 Oracle有三种连接方式、对多表连接Oracle可选择适当的连接方式 7选择连接顺序:对多表连接Oracle选择哪对表先连接,选择这两表中哪个表做为源数据表 8选择数据的搜索路径:根据以上条件选择合适的数据搜索路径,如是选用全表搜索还是利用索引或是其他的方式。 9运行“执行计划” 运行执行计划,返回执行结果。运行执行计划的代价根据sql语句的不同可大可小。 1:语法分析 2:权限与对象检查 3: 在共享池中检查是否有完全相同的之前完全解析好的. 如果存在,直接跳过4和5,运行Sql, 此时算soft parse. 4:选择执行计划 5:产生执行计划 2)解释硬解析和软解析的含义和区别(3) 解析:分为硬解析和软解析。 若在共享池中没有找到已有的执行计划,则进行硬解析,否则为软解析。 硬解析指使用优化器对sql语句进行优化,将sql转化为一些等价语句,并选择代价最小的语句生成执行计划;

Perl语言入门笔记 第六章 哈希(hash)

旧巷老猫 提交于 2020-03-07 20:06:55
=pod 哈希 哈希表里只是一堆的键值对而已,而没有任何顺序,键可以是任意字符串,值也是 awk的哈希键值对增多的时候会逐渐变慢,而perl没有这个缺点 访问哈希元素: $hash{$some_key} foreach my $person (qw< barney fred >) { print "I'v heared of $person $family_name{$person}.\n"; } 在挑选哈希名的时候,最好使得哈希名和键之间能放进去一个"for"字,比如"family_name for fred"是filntstone, 因此把哈希命名为family_name能清晰地反映出键和值之间的关系。 $foo = 'bar'; print $family_name{$foo . 'ney'}; #打印"rubble",连接在一块 哈希可以被转换成列表 哈希赋值: 不是常见用法,但哈希真的可以用一般的赋值语法来赋值; my %new_hash = %old_hash; 得到一个反序的哈希:键值互换 my %inverse_hash = reverse %any_hash; 胖箭头: my $last_name = ( 'fred' => 'flintstone', 'dino' => 'undef', ); 哈希函数: perl中有很多有用的函数可以一次处理整个哈希。

php操作redis

我的梦境 提交于 2020-03-07 01:02:15
**php.ini文件添加:extension=php_redis.dll 重启php, phpinfo可以看到redis则证明安装成功** php连接redis测试 <?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379);//serverip port $redis->auth('mypassword');//my redis password $redis ->set( "test" , "Hello World"); echo $redis ->get( "test"); php操作redis函数封装 1 /** 2 * 如果不传入$host和$port默认读取Laravel环境变量的参数 3 * redis Set/setex封装,可直接传入数组,可设置过期时间 written:yangxingyi 4 */ 5 function RedisSet($key,$value,$expire=0,$host='',$port=''){ 6 if(!$key||!$value) return false; 7 $host = $host?$host:getenv('REDIS_HOST'); 8 $port = $port?$port:getenv('REDIS_PORT'); 9 $redis = new

router

橙三吉。 提交于 2020-03-06 17:21:13
### Vue.js ## 一、 课堂目标 1. 掌握前端单页应用的原理 2. 掌握vue-router工作机制 3. 手写vue-router ## 二、 知识点 ### 2.1 什么是路由?前端有哪些路由?他们有 哪些特性? #### 2.1.1 History API #### 2.1.2 hash 模式 hash 路由模式是这样的:http://xxx.abc.com/#/xx。 有带#号,后面就是 hash 值的变化。 改变后面的 hash 值,它不会向服务器发出请求,因此也就不会刷新页面。并且每次 hash 值发生改变的时候,会触发 hashchange 事件。因此我们可以通过监听该事件,来知道 hash 值发生了哪些变化。比如我们可以如下简单的监听: function hashAndUpdate () { // todo 匹配 hash 做 dom 更新操作 }window.addEventListener('hashchange', hashAndUpdate); 我们先来了解下 location 有哪些属性,如下 * location.href 完整的 url * location.protocol 当前 URL 的协议,包括 :; 比如 https: * location.host 主机名和端口号,如果端口号是 80(http)或 443(https),

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

丶灬走出姿态 提交于 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

JAVA学习要点总结

落花浮王杯 提交于 2020-03-05 09:38:26
文章目录 缓存 memcache的分布式原理 memcache的内存分配机制 如何存放数据到memcached缓存中?(memcache内存分配机制) memcache的惰性失效机制 memcache缓存的无底洞现象 一致性Hash算法的实现原理 Hash环 一致性Hash算法 Hash环的倾斜 虚拟节点解决Hash环倾斜 hash算法平衡性 memcached与redis的区别 Redis的主从复制 Redis的部分复制过程 Redis的主从复制阻塞模式 Redis的数据持久化方式 Redis的高可用部署方式 哨兵模式 Redis哨兵主要功能 Redis哨兵的高可用 哨兵如何判断redis主从节点是否正常? 集群模式 Redis可以在线扩容吗?zk呢 Redis高并发和快速的原因 浏览器本地缓存的了解和使用 缓存雪崩 缓存穿透 HashMap HashMap的Hash碰撞 HashMap的get和put原理 HashMap的rehash HashMap的线程不安全问题 HashMap和Hashtable的区别 为什么collection没有实现clonable接口 为什map没有实现collection接口 Map接口的实现有哪些,区别是什么 线程池 Executors框架的四种线程池及拒绝策略 四种线程池 JDK拒绝策略 Reactor模式 Reactor单线程模型

浅谈C# Dictionary实现原理

孤人 提交于 2020-03-04 15:39:32
使用C#已经有好多年头了,然后突然有一天被问到C#Dictionary的基本实现,这让我反思到我一直处于拿来主义,能用就好,根本没有去考虑和学习一些底层架构,想想令人头皮发麻。下面开始学习一些我平时用得理所当然的东西,今天先学习一下字典,Dictionary 一、Dictionary源码学习 Dictionary实现我们主要对照源码来解析,目前对照的源码版本是.Net Framwork4.8, 源码地址 。 这边主要介绍Dictionary中几个比较关键的类和对象,然后跟着代码来走一遍插入、删除和扩容的流程。 1、Entry结构体 首先,我们引入Entry这样一个结构体,它的定义如下面代码所示,这是Dictionary中存放数据的最小单位,调用Add(Key,Value)方法添加的元素都会被封装在这样的一个结构体中。 1 private struct Entry 2 { 3 public int hashCode; // Lower 31 bits of hash code, -1 if unused 4 public int next; // Index of next entry, -1 if last 5 public TKey key; // Key of entry 6 public TValue value; // Value of entry 7 } 2

40: 分拆素数和

≡放荡痞女 提交于 2020-03-04 13:00:45
40 分拆素数和 作者: xxx时间限制: 1S章节: 函数 问题描述 : 把一个偶数拆成两个不同素数的和,有几种拆法呢? 说明: 比如10,可以拆成3+7和5+5以及7+3, 但是3+7与7+3相同,只算一种,5+5由于两个素数相同,不计算在内。 因此,10的拆法只有一种。 输入说明 : 首先输入一个T(不超过500),然后输入T个正的偶数,其值不会超过10000。 输出说明 : 对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。 输入范例 : 4 4 6 8 10 输出范例 : 0 0 1 1 代码: #include <stdio.h> int main() { int hash[10000] = { 0 }; hash[0] = hash[1] = 1; for (int i = 2; i < 10000; i++) { if (hash[i] == 0) { for (int j = i + i; j < 10000; j = j + i) { hash[j] = 1; } } } int n, m; int num = 0; while (scanf("%d", &n) != EOF) { for (int k = 0; k < n; k++) { scanf("%d", &m); for (int i = 2; i < m/2; i++) { if ((hash

python 内置函数 和 匿名函数

我们两清 提交于 2020-03-04 04:01:57
作用域相关 locals :函数会以字典的类型返回当前位置的全部局部变量。 globals:函数以字典的类型返回全部全局变量。 a = 1 b = 2 print(locals()) print(globals()) # 这两个一样,因为是在全局执行的。 ########################## def func(argv): c = 2 print(locals()) print(globals()) func(3) eval:执行字符串类型的代码,并返回最终结果。会执行其中的内容 exec:执行字符串类型的代码。会执行其中的内容 循环 compile:将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值。 >>> #流程语句使用exec >>> code1 = 'for i in range(0,10): print (i)' >>> compile1 = compile(code1,'','exec') >>> exec (compile1) >>> #简单求值表达式用eval >>> code2 = '1 + 2 + 3 + 4' >>> compile2 = compile(code2,'','eval') >>> eval(compile2) >>> #交互语句用single >>> code3 = 'name = input(