hash函数

数据挖掘、数据分析、海量数据处理的面试题(总结july的博客)

家住魔仙堡 提交于 2019-12-08 18:04:35
缘由 由于有面试通知,现在复习一下十道和海量数据处理相关的题。两篇博客已经讲的非常完备了,但是我怕读懂了并非真的懂,所以必须自己复述一遍。 教你如何迅速秒杀掉:99%的海量数据处理面试题 海量数据处理:十道面试题与十个海量数据处理方法总结 MapReduce技术的初步了解与学习 面试归类 下面6个方面覆盖了大多数关于海量数据处理的面试题: 分而治之/hash映射 + hash统计 + 堆/快速/归并排序; 双层桶划分 Bloom filter/Bitmap; Trie树/数据库/倒排索引; 外排序; 分布式处理之Hadoop/Mapreduce。 下面我讲针对上两篇博客里的海量数据处理的题的解法再复述一遍。 第一类:分治后hash统计再排序 第一题:海量日志数据,提取出某日访问百度次数最多的那个IP 解答: 该题解题思路总共分为三步 分而治之/hash映射:如果该文件过大,不能全部读入内存。我们就必须先利用hash函数将其分割成若干小文件。再分别对各个小文件进行处理。注意这一步我们肯定会将相同的ip放在同一个文件。由于这个题干给的比较少。我只有自己脑补一下,大概给我们的日志中就是百度web服务器自己记录的来自不同的ip的访问。这个日志是按天生成的,所以现在我们要统计一天内,哪一个ip访问本网站百度的次数最多。那么日志中肯定就是记录是访问ip和时间,但是相同的ip肯定是单独的一条

海量数据处理问题学习笔记

早过忘川 提交于 2019-12-08 18:04:20
海量数据处理问题的常见场景有两种:(1)给定一定大小的数据(文件),数据(文件)大小大于内存容量,无法全部同时转载进内存中,然后需要对其进行处理,比如找重复项,或者找TOP k 项;( 2 )给出非常大的待处理数据,比如 100 万个数找前 100 大的数,然后需要对其进行高效的处理(不可直接排序然后提取,因为这要太慢了)。总的来说,海量数据处理问题 主要需要处理的两个方面的问题,一是内存不够,二是时间不够。内存不够,则要遵循“分而治之”的思想去寻找解决方案,把待处理数据化大为小,然后装进内存里面处理。时间不够,则需要合理的利用数据结构,设计合适的算法解决问题。 ——————————————————————————————————————————————————— 方法&工具 处理这样子的问题,主要的工具有: ( 1 ) Hash Hash 被译为哈希,或者散列。 Hash Function 在维基百科上的定义是: A hash function is any algorithm that maps data of variable length to data of a fixed length. Hash Table (散列表)是 Hash 的一个重要应用。散列表通过把关键码值( key value )映射到表中的一个位置来访问记录,以加快查找的速度。 Hash 是一种映射关系

教你如何迅速秒杀99%的海量数据处理面试题

倖福魔咒の 提交于 2019-12-08 18:01:26
前言 一般而言,标题含有“秒杀”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章: 十道海量数据处理面试题与十个方法大总结 的一般抽象性总结。 毕竟受文章和理论之限,本文摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐述相关问题。最后,有一点必须强调的是,全文行文是基于面试题的分析基础之上的,具体实践过程中,还是得具体情况具体分析,且场景也远比本文所述的任何一种场景复杂得多。 OK,若有任何问题,欢迎随时不吝赐教。谢谢。 何谓海量数据处理? 所谓海量数据处理,其实很简单,海量,海量,何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如 Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie/ ,针对空间,无非就一个办法:大而化小: 分而治之/hash映射 ,你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。 至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘的数据交互),而集群,机器有多辆,适合分布式处理,并行计算

【大数据】海量数据处理方法

不问归期 提交于 2019-12-08 17:58:33
  1、海量日志数据,提取出某日访问百度次数最多的那个IP。     首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。   或者如下阐述(雪域之鹰):   算法思想:分而治之+Hash   1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理;   2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址;   3.对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个IP地址;   4.可以得到1024个小文件中的出现次数最多的IP,再依据常规的排序算法得到总体上出现次数最多的IP;     2、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。   假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万

十道海量数据处理面试题与十个方法大总结

筅森魡賤 提交于 2019-12-08 17:53:38
海量数据处理:十道面试题与十个海量数据处理方法总结 作者:July、youwang、yanxionglu。 时间:二零一一年三月二十六日 本文之总结: 教你如何迅速秒杀掉:99%的海量数据处理面试题 。有任何问题,欢迎随时交流、指正。 出处: http://blog.csdn.net/v_JULY_v 。 第一部分、十道海量数据处理面试题 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。 或者如下阐述(雪域之鹰): 算法思想:分而治之+Hash 1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理; 2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址; 3.对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map

大数据——海量数据处理的基本方法总结

时间秒杀一切 提交于 2019-12-08 17:50:28
原文地址为: 大数据——海量数据处理的基本方法总结 声明: 原文引用参考July大神的csdn博客文章 => 海量处理面试题 海量数据处理概述 所谓海量数据处理,就是数据量太大,无法在较短时间内迅速解决,无法一次性装入内存。本文在前人的基础上总结一下解决此类问题的办法。那么有什么解决办法呢? 时间复杂度方面,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树。空间复杂度方面,分而治之/hash映射。 海量数据处理的基本方法总结起来分为以下几种: 分而治之/hash映射 + hash统计 + 堆/快速/归并排序; 双层桶划分; Bloom filter/Bitmap; Trie树/数据库/倒排索引; 外排序; 分布式处理之Hadoop/Mapreduce。 前提基础知识: 1 byte= 8 bit。 int整形一般为4 bytes 共32位bit。 2^32=4G。 1G=2^30=10.7亿。 1 分而治之+hash映射+快速/归并/堆排序 问题1 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 分析 :50亿*64=320G大小空间。 算法思想1 :hash 分解+ 分而治之 + 归并 遍历文件a

海量数据处理相关面试问题

自作多情 提交于 2019-12-08 17:50:05
常见的海量数据处理、操作的题目: 1.给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 2.有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。 3.有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。 4.海量日志数据,提取出某日访问百度次数最多的那个IP。 5.在2.5亿个整数中找出不重复的整数,内存不足以容纳这2.5亿个整数。 6.海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10。 7.怎么在海量数据中找出重复次数最多的一个? 8.上千万或上亿数据(有重复),统计其中出现次数最多的钱N个数据。 9.1000万字符串,其中有些是重复的,需要把重复的全部去掉,保留没有重复的字符串。请怎么设计和实现? 10.一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。 11.一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入内存,问最优解。 12. 100w个数中找出最大的100个数。 13.寻找热门查询:

[笔试题目] 简单总结笔试和面试中的海量数据问题

半城伤御伤魂 提交于 2019-12-08 17:49:17
最近在笔试和面试中遇到了很多关于海量数据的问题,在此进行简单的记录, 写一篇方便自己下次学习的处理海量数据的文章及 在线笔记,同时也希望对你有所帮助。当然,海量数据最出名的还是 七月July ,但这里我是想直接从实际题目出发,并参考及摘抄了他们那些大牛的文章及自己的想法进行简单总结记录。 一. 原题重现 2015年9月27日百度笔试论述题二选一,其中第一道是关于MapReduce相关的;第二道是搜索引擎中url去重,海量数据集url如何在爬取过程中避免重复爬取过的url。 PS:通常搜索引擎网页去重是通过文档特征提取,再计算相似性或集合Hash实现。 下面是常见的题型: 1.Hash算法处理海量数据部分 【题目1】(安卓越 2012) 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 【题目2】海量日志数据,提取出某日访问百度次数最多的那个IP。 【题目3】有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。 【题目4】有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。 2.Top-K海量数据部分 【题目1】(360公司 2012) 100万条记录的文本文件

面试经典的海量数据处理(TOPK)问题—转载+个人见解!

不想你离开。 提交于 2019-12-08 17:48:35
常见问题: ① Top K问题 : 分治+Trie树/Hash_map+小顶堆 。采用Hash(x)%M将原文件分割成小文件,如果小文件太大则继续Hash分割,直至可以放入内存。 ② 重复问题 : BitMap位图 或 Bloom Filter布隆过滤器 或 Hash_set集合 。每个元素对应一个bit处理。 ③ 排序问题 : 外排序 或 BitMap位图 。分割文件+文件内排序+文件之间归并。 Top K问题: 1. 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。 ①分治:顺序读文件,对每个词x取Hash(x)%2000,按照该值存到2000个小文件中。每个文件是500k左右。如果有文件超过了1M则继续分割。O(N) ②Trie树/Hash_map:字符串用Trie树最好。对每个小文件,统计其中出现的词频。 O(N)*(平均字符长度),长度一般是常数,也就是O(N). ③小顶堆:用容量为100的小顶堆,以频率为value值插入,取每个文件现频率最大的100个词,把这100个词及相应的频率存入文件。最差O(N)*lg(100),也就是O(N). 注:2,3步骤合起来需要一轮磁盘存取过程。存入文件的个数可以缩减一下,因为主要开销在磁盘读取上,减少文件读取次数,可以在每个文件存取最大容量的字符数量,比如这道题1*(

面试笔记–海量数据题目处理总结

房东的猫 提交于 2019-12-08 17:46:57
面试笔记–海量数据题目处理总结 何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小,分而治之(hash映射),你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。 至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘的数据交互),而集群,机器有多辆,适合分布式处理,并行计算(更多考虑节点和节点间的数据交互)。 海量数据处理的方法 处理海量数据问题,无非就是 6 种方法: 分而治之/hash映射 + hash统计 + 堆/快速/归并排序; 分而治之/hash映射:针对数据太大,内存受限,只能把大文件化成(取模映射)小文件 hash_map统计:当大文件转化了小文件,那么我们便可以采用常规的hash_map(key,value)来进行频率统计。 堆/快速排序:统计完了之后,便进行排序(可采取堆排序),得到次数最多的key。 多层划分 多层划分—-其实本质上还是分而治之的思想,重在“分”的技巧上!