摘要: 作者:July、youwang、yanxionglu。时间:二零一一年三月二十六日说明:本文分为俩部分,第一部分为10道海量数据处理的面试题,第二部分为10个海量数据处理的方法总结。有任何问题,欢迎交流、指正。出处:http://blog.csdn.net/v_JULY_v。第一部分、十道海量数据处理面试题1、海量日志数据,提取出某日访问百度次数最多的那个IP。首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以 阅读全文
posted @ 2013-05-19 18:46 simon1024 阅读(9434) 评论(0) 推荐(3) 编辑
摘要: 有25匹马,速度都不同,但每匹马的速度都是定值。现在只有5条赛道,无法计时,即每赛一场最多只能知道5匹马的相对快慢。问最少赛几场可以找出25匹马中速度最快的前3名?(百度2008年面试题)每匹马都至少要有一次参赛的机会,所以25匹马分成5组,一开始的这5场比赛是免不了的。接下来要找冠军也很容易,每一组的冠军在一起赛一场就行了(第6场)。最后就是要找第2和第3名。我们按照第6场比赛中得到的名次依次把它们在前5场比赛中所在的组命名为A、B、C、D、E。即:A组的冠军是第6场的第1名,B组的冠军是第6场的第2名……每一组的5匹马按照他们已经赛出的成绩从快到慢编号:A组:1,2,3,4,5B组:1,2 阅读全文
posted @ 2013-05-19 18:44 simon1024 阅读(579) 评论(0) 推荐(0) 编辑
摘要: 算法内容来源于网络,本人增加对算法的证明。百度面试题:现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。 答案1: 创建一个hash_map,key为数组中的数,value为此数出现的次数。遍历一遍数组,用hash_map统计每个数出现的次数,并用两个值存储目前出现次数最多的数和对应出现的次数。 这样可以做到O(n)的时间复杂度和O(n)的空间复杂度,满足题目的要求。 但是没有利用“一个数出现的次数超过了一半”这个特点。也许算法还有提高的空间。 答案2: 使用两个变量A和B,其中A存储某个数组中的数,B用来计数。开始时将B初始化为0。 ... 阅读全文
posted @ 2013-05-19 18:41 simon1024 阅读(387) 评论(0) 推荐(0) 编辑
摘要: 转自:http://blog.csdn.net/qibaoyuan/article/details/5914746代码实现:通过mod操作将指定数i映射到bitmap[i/32]的第imod32(从0开始)位。bitmap的基本操作: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define WORD 32 4 #define SHIFT 5 ////移动5个位,左移则相当于乘以32,右移相当于除以32取整 5 #define MASK 0x1F //16进制下的31 6 #define N 10000000 7 /* 8 阅读全文
posted @ 2013-05-19 17:54 simon1024 阅读(906) 评论(0) 推荐(0) 编辑
摘要: Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。 1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。 (1).所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库... 阅读全文
posted @ 2013-05-19 17:47 simon1024 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 原文地址:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 阅读全文
posted @ 2013-05-19 17:42 simon1024 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 阿里面试题:一个含有n个互不相同的整数的数组,任意一个数a[i]的现有位置i和它排序后的位置j的距离不超过k(即i-j的绝对值小于等于k),2=<k<n;n远远大于k;根据数组特点设计一算法对数组进行排序。分析:从左往右排序,i位置上最终放的数一定在区间[i,i+k]上。可以每次只对[i,i+k]区间的数进行排序,确定i位置上的数据,然后区间向右移动一个位置。重复以上操作直到确定所有位置上的数据。那么对于区间[i,i+k]上的数据该采用什么方法来排序呢。如果选择插入排序,每次移动位置后需要o(k)来确定i上的元素;实际上在移动位置后,补充一个新的数据到原有区间时,完全可以采用二分查 阅读全文
posted @ 2013-05-19 17:36 simon1024 阅读(2818) 评论(0) 推荐(0) 编辑
摘要: 题目:频繁的内存操作new,delete是比较耗时的操作,为了减少这些操作,一般都会设计自己的内存分配器。一个程序需要频繁使用大小在512Byte到200KByte不定长的内存,请您设计一个高效的内存分配器?考虑设计的重要关注点和大致思路,空间使用率等。一、结构:1) 首先假设内存分配器的最小内存分配单元为mem_unit,需要确定最小分配单元的大小。如果设置太小,将使得内存单元过于琐碎,过大则造成空间浪费。基于这个考虑,设置多个大小类别的mem_unit。申请内存单元时,将分配能够满足该大小的最小内存单元。2) 由于同一类别的mem_unit是随机申请的,空间不连续,所以采用单向链表结构管理 阅读全文
posted @ 2013-05-19 17:05 simon1024 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 题目:搜索功能一般都有根据你的输入快速显示对应关键字的功能,比如你输入”刘”, 搜索框的下拉列表会显示“刘德华”,”刘若英”,”刘欢”等,你继续输入‘德’,将查询关键字变成”刘德”,显示的候选字列表会显示”刘德华”,”刘德华专辑”,”刘德华演唱会”等。如果让你用算法和数据结构实现这个功能(用户每次多输入一个字母都可以得到最佳的查询结果,每次返回最多不超过10条),你会如何设计。能否用程序实现。一、算法设计1) 采用trie树来实现前缀匹配,如果匹配成功,返回所有前缀相同的字符串,否则返回空;2) 如果匹配上的字符串超过10条,用堆排找出搜索热度前10的字符串(这部分没有写代码);二、代码与运行 阅读全文
posted @ 2013-05-19 16:44 simon1024 阅读(939) 评论(0) 推荐(0) 编辑
摘要: 这是腾讯的一道面试题,因为平时这方面接触比较少,所以想法比较浅。虽然最终没有通过面试,但仍然记录如下,希望以后回头看的时候能够想出更好的答案。或许可以问下博客园的开发,下文中的脏子竟然被禁止使用了,只能用xx代替之。题目:网络发表评论模块设计时会有一个难题,用户的输入的聊天字符串要进行过滤,如果其中含有脏话,比如中文的“他妈的”,英文的“Fuck”,。就必须将这些脏话进行过滤,替换。聊天模块有一个脏话库,脏话库中含有多个要求过滤的词汇。请你设计一个算法对发表评论输入字符串的脏话过滤,同时请描述你的算法的大致的时间复杂度。举例:中文“他妈的,我要找到那个联盟。”要过滤掉“------,我要……” 阅读全文
posted @ 2013-05-19 16:23 simon1024 阅读(1067) 评论(0) 推荐(0) 编辑
摘要: 将一个整数拆分成不重复的整数之和。example:6=1+5=1+2+3=2+4采用递归方法实现。 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 /** 6 6 = 1 + 5 = 1 + 2 + 3 7 = 2 + 4 8 **/ 9 10 void split( int n, int s, vector<int> ret) 11 { 12 // 递归结束条件 13 if ( n <= 2*s) 14 { 15... 阅读全文
posted @ 2013-05-19 12:54 simon1024 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 1.还原到某个版本svnup-r版本号svnup-r版本号文件名称2.还原改动对应提交(commit),要有类似回滚(rollback)的操作。svnrevert或者通过tortoiseSVN,eclipse插件。这个操作对开发人员十分有用,在改动被人很多代码后可以“一键恢复”。3.“还原”已提交的改动revert只适合未提交的情况。如果已经提交,发现问题,要回退到之前的修订版。首先需要:svnup让本地工作拷贝更新到最新状态。然后:svnlogyour_file_path查看文件日志,这时候提交时填写的说明信息就派上用场了。查看两个修订版之间的不同:svndiff-r旧修订版序号:新修订版序 阅读全文
posted @ 2013-05-19 12:49 simon1024 阅读(4148) 评论(0) 推荐(0) 编辑
摘要: 但凡初次接触MongoDB的人,无不惊讶于它对内存的贪得无厌,至于个中缘由,我先讲讲Linux是如何管理内存的,再说说MongoDB是如何使用内存的,答案自然就清楚了。据说带着问题学习更有效,那就先看一个MongoDB服务器的top命令结果:shell>top-p$(pidofmongod)Mem:32872124ktotal,30065320kused,2806804kfree,245020kbuffersSwap:2097144ktotal,100kused,2097044kfree,26482048kcachedVIRTRESSHR%MEM1892g21g21g69.6这台Mong 阅读全文
posted @ 2013-05-19 12:20 simon1024 阅读(333) 评论(0) 推荐(0) 编辑