bit

经典大数据处理十道题

我与影子孤独终老i 提交于 2019-12-08 18:40:36
第一部分、十道海量数据处理 1、海量日志数据,提取出某日访问百度次数最多的那个IP。   此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。   再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。 2、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节   假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。   典型的Top K算法,还是在这篇文章里头有所阐述。 文中,给出的最终算法是:第一步、先对这批海量数据预处理,在O(N)的时间内用Hash表完成排序;然后,第二步、借助堆这个数据结构,找出Top K,时间复杂度为N

海量数据面试题分析

倾然丶 夕夏残阳落幕 提交于 2019-12-08 18:29:48
https://zhuanlan.zhihu.com/p/40648295 ,转知乎,手敲一遍,加深记忆 箴言:无论是这些海量数据处理面试题也好,还是算法也好,面试时,70~80%的人不是倒在这两方面,而是倒在基础之上(诸如语言,数据库,操作系统,网络协议等等),所以, 无论任何时候,基础最重要,没了基础,便什么都不是 。 何谓海量数据处理? 无非就是基于海量数据上的存储,处理,操作。海量就是数据量太大。导致要么无法再较短时间解决,要么是数据太大,无法一次性装入内存。 解决方案: 针对时间:可以采取巧妙的算法搭配合适的数据结构,如Bloom filter、Hash、bit-map、Heap、数据库索引或者倒排索引、Trie树 针对空间:无非就是大而化小,分而治之(hash映射),不就是规模大嘛,我就化成小的,各个击破。 关于单机和集群问题: 单机:处理装载数据的机器有限(只需考虑CPU,内存,硬盘的数据交互) 集群:机器有多辆,适合分布式处理,并行计算(更多考虑节点和节点间的数据交互) 通过另一篇:Big Data Processing,知道,处理海量数据无非就是: 分而治之/hash映射 + hash统计 + 堆/快速/归并排序 双层桶划分 Bloom filter/Bitmap Trie树/数据库/倒排索引 外排序 分布式处理之Hadoop/Mapreduce 本文第一部分

海量数据分析处理方法

夙愿已清 提交于 2019-12-08 17:57:11
海量数据分析处理方法 一、Bloom filter 适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集 基本原理及要点: 对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是 counting Bloom filter,用一个counter数组代替位数组,就可以支持删除了。 还有一个比较重要的问题,如何根据输入元素个数n,确定位数组m的大小及hash函数个数。当hash函数个数k=(ln2)*(m/n)时错误率最小。在错误率不大于E的情况下,m至少要等于n*lg(1/E)才能表示任意n个元素的集合。但m还应该更大些,因为还要保证bit数组里至少一半为0,则m应该>=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2为底的对数)。 举个例子我们假设错误率为0.01,则此时m应大概是n的13倍。这样k大概是8个。 注意这里m与n的单位不同,m是bit为单位,而n则是以元素个数为单位(准确的说是不同元素的个数)。通常单个元素的长度都是有很多bit的。所以使用bloom filter内存上通常都是节省的。 扩展:

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

半城伤御伤魂 提交于 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万条记录的文本文件

海量数据处理面试题集锦与Bit-map详解

你离开我真会死。 提交于 2019-12-08 17:44:58
十七道海量数据处理面试题与Bit-map详解 作者:小桥流水,redfox66,July。 前言 本博客内曾经整理过有关海量数据处理的10道面试题( 十道海量数据处理面试题与十个方法大总结 ),此次除了重复了之前的10道面试题之后,重新多整理了7道。仅作各位参考,不作它用。 同时, 程序员编程艺术系列 将重新开始创作,第十一章以后的部分题目来源将取自下文中的17道海量数据处理的面试题。因为,我们觉得,下文的每一道面试题都值得重新思考,重新深究与学习。再者,编程艺术系列的前十章也是这么来的。若您有任何问题或建议,欢迎不吝指正。谢谢。 第一部分、十五道海量数据处理面试题 1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 遍历文件a,对每个url求取 ,然后根据所取得的值将url分别存储到1000个小文件(记为 )中。这样每个小文件的大约为300M。 遍历文件b,采取和a相同的方式将url分别存储到1000小文件中(记为 )。这样处理后,所有可能相同的url都在对应的小文件( )中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。

bit count function in K&R [closed]

拈花ヽ惹草 提交于 2019-12-08 17:39:45
问题 Closed . This question is opinion-based. It is not currently accepting answers. Want to improve this question? Update the question so it can be answered with facts and citations by editing this post. Closed 5 years ago . In the book "C Programming Language" by K&R, there is a bit count function: int bitsCount(unsigned x) { int b; for (b = 0; x != 0; x >>= 1) if (x & 01) b++; return b; } My question is why they use x & 01 but not x & 1 or x & 00000001 ? Isn't that 01 means octal 1? 回答1:

What is the most suitable type of vector to keep the bytes of a file?

旧巷老猫 提交于 2019-12-08 17:38:11
问题 What is the most suitable type of vector to keep the bytes of a file? I'm considering using the int type, because the bits "00000000" (1 byte) are interpreted to 0! The goal is to save this data (bytes) to a file and retrieve from this file later. NOTE: The files contain null bytes ("00000000" in bits)! I'm a bit lost here. Help me! =D Thanks! UPDATE I: To read the file I'm using this function: char* readFileBytes(const char *name){ std::ifstream fl(name); fl.seekg( 0, std::ios::end ); size_t

What is lower and higher bits?

烈酒焚心 提交于 2019-12-08 14:55:57
问题 Can anyone tell me what is lower and higher bits?. How to identify a higher and lower bit?. Below is binary form. How does 0110 is higher bit in it?. 0110 0111 1100 1010 1100 0111 1001 1011 回答1: Just like in decimal, higher places are generally written to the left in binary. So if you see 0111 , the 0 is the high bit. So this would represent 7 in decimal. The same applies when spaces are used, just like when commas (or dots, depending on your locale) are used to separate groups of digits in

Want to use journaling enabled DB in 32 bit system-MongoDB

流过昼夜 提交于 2019-12-08 09:38:48
问题 I want to run an existing application, that was developed earlier on 64 bit machine. It already has an existing database mongoDB with journaling enabled for 64 bit. In 32 bit system journaling is not enabled, so when I try to run MongoDB service with this DB, it does not work How can i reuse this DB and able to run this application in my 32 bit system? 回答1: You can manually enable journaling in 32bit MongoDB by starting mongod with the command line parameter --journal . When it still doesn't

python--ctypes模块:调用C函数

拈花ヽ惹草 提交于 2019-12-08 08:31:31
Python 的 ctypes 要使用 C 函数,需要先将 C 编译成动态链接库的形式,即 Windows 下的 .dll 文件,或者 Linux 下的 .so 文件 Windows 系统下的 C 标准库动态链接文件为 msvcrt.dll (一般在目录 C:\Windows\System32 和 C:\Windows\SysWOW64 下分别对应 32-bit 和 64-bit,使用时不用刻意区分,Python 会选择合适的) 资料: https://blog.csdn.net/m0_37822019/article/details/79709617 来源: https://www.cnblogs.com/liming19680104/p/12004547.html