当前位置:文档之家› 大数据面试题

大数据面试题

大数据面试题
大数据面试题

1、给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。

s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。

s 遍历文件b,采取和a相同的方式将url分别存储到1000个小文件(记为)。这样处理后,所有可能相同的url都在对应的小文件()中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。s 求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。

方案2:如果允许有一定的错误率,可以使用Bloom filter,4G内存大概可以表示340亿bit。将其中一个文件中的url使用Bloom filter映射为这340亿bit,然后挨个读取另外一个文件的url,检查是否与Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)。2、有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。

方案1:

s、顺序读取10个文件,按照hash(query)的结果将query写入到另外10个文件(记为)中。这样新生成的文件每个的大小大约也1G(假设hash函数是随机的)。s、找一台内存在2G左右的机器,依次对用hash_map(query, query_count)

来统计每个query出现的次数。利用快速/堆/归并排序按照出现次数进行排序。将排序好的query和对应的query_cout输出到文件中。这样得到了10个排好序的文件(记为)。

s、对这10个文件进行归并排序(内排序与外排序相结合)。

方案2:

一般query的总量是有限的,只是重复的次数比较多而已,可能对于所有的query,一次性就可以加入到内存了。这样,我们就可以采用trie树/hash_map等直接来统计每个query 出现的次数,然后按出现次数做快速/堆/归并排序就可以了。

方案3:

与方案1类似,但在做完hash,分成多个文件后,可以交给多个文件来处理,采用分布式的架构来处理(比如MapReduce),最后再进行合并。

3、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

方案1:顺序读文件中,对于每个词x,取,然后按照该值存到5000个小文件(记为)中。这样每个文件大概是200k左右。如果其中的有的文件超过了1M大小,还可以按照类似的方法继续往下分,知道分解得到的小文件的大小都不超过1M。对每个小文件,统计每个文件中出现的词以及相应的频率(可以采用trie树/hash_map等),并取出出现频率最大的100个词(可以用含100个结点的最小堆),并把100词及相应的频率存入文件,这样又得到了5000个文件。下一步就是把这5000个文件进行归并(类似与归并排序)的过程了。

4、海量日志数据,提取出某日访问百度次数最多的那个IP。

方案1:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。

注意到IP是32位的,最多有个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map 进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP 中,找出那个频率最大的IP,即为所求。

5、在2.5亿个整数中找出不重复的整数,内存不足以容纳这2.5亿个整数。

方案1:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数输出即可。

方案2:也可采用上题类似的方法,进行划分小文件的方法。然后在小文件中找出不重复的整数,并排序。然后再进行归并,注意去除重复的元素。

6、海量数据分布在100台电脑中,想个办法高校统计出这批数据的TOP10。

方案1:

s 在每台电脑上求出TOP10,可以采用包含10个元素的堆完成(TOP10小,用最大堆,TOP10大,用最小堆)。比如求TOP10大,我们首先取前10个元素调整成最小堆,如果发现,然后扫描后面的数据,并与堆顶元素比较,如果比堆顶元素大,那么用该元素替换堆顶,然后再调整为最小堆。最后堆中的元素就是TOP10大。

s 求出每台电脑上的TOP10后,然后把这100台电脑上的TOP10组合起来,共1000个数据,再利用上面类似的方法求出TOP10就可以了。

7、怎么在海量数据中找出重复次数最多的一个?

方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数。然后找出上一步求出的数据中重复次数最多的一个就是所求(具体参考前面的题)。

8、上千万或上亿数据(有重复),统计其中出现次数最多的钱N个数据。

方案1:上千万或上亿的数据,现在的机器的内存应该能存下。所以考虑采用hash_map/搜索二叉树/红黑树等来进行统计次数。然后就是取出前N个出现次数最多的数据了,可以用第6题提到的堆机制完成。

9、1000万字符串,其中有些是重复的,需要把重复的全部去掉,保留没有重复的字符串。请怎么设计和实现?

方案1:这题用trie树比较合适,hash_map也应该能行。

10、一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。

方案1:这题是考虑时间效率。用trie树统计每个词出现的次数,时间复杂度是O(n*le)(le 表示单词的平准长度)。然后是找出出现最频繁的前10个词,可以用堆来实现,前面的题中已经讲到了,时间复杂度是O(n*lg10)。所以总的时间复杂度,是O(n*le)与O(n*lg10)中较大的哪一个。

11、一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入内存,问最优解。

方案1:首先根据用hash并求模,将文件分解为多个小文件,对于单个文件利用上题的方法求出每个文件件中10个最常出现的词。然后再进行归并处理,找出最终的10个最常出现的词。

12、100w个数中找出最大的100个数。

方案1:在前面的题中,我们已经提到了,用一个含100个元素的最小堆完成。复杂度为O(100w*lg100)。

方案2:采用快速排序的思想,每次分割之后只考虑比轴大的一部分,知道比轴大的一部分在比100多的时候,采用传统排序算法排序,取前100个。复杂度为O(100w*100)。方案3:采用局部淘汰法。选取前100个元素,并排序,记为序列L。然后一次扫描剩余的元素x,与排好序的100个元素中最小的元素比,如果比这个最小的要大,那么把这个最小的元素删除,并把x利用插入排序的思想,插入到序列L中。依次循环,知道扫描了所有的元素。复杂度为O(100w*100)。

13、寻找热门查询:

搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录,这些查询串的重复读比较高,虽然总数是1千万,但是如果去除重复和,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。

(1) 请描述你解决这个问题的思路;

(2) 请给出主要的处理流程,算法,以及算法的复杂度。

方案1:采用trie树,关键字域存该查询串出现的次数,没有出现为0。最后用10个元素的最小推来对出现频率进行排序。

14、一共有N个机器,每个机器上有N个数。每个机器最多存O(N)个数并对它们操作。如何找到个数中的中数?

方案1:先大体估计一下这些数的范围,比如这里假设这些数都是32位无符号整数(共有个)。我们把0到的整数划分为N个范围段,每个段包含个整数。比如,第一个

段位0到,第二段为到,…,第N个段为到。然后,扫描每个机器上的N个数,把属于第一个区段的数放到第一个机器上,属于第二个区段的数放到第二个机器上,…,属于第N个区段的数放到第N个机器上。注意这个过程每个机器上存储的数应该是O(N)的。下面我们依次统计每个机器上数的个数,一次累加,直到找到第k

个机器,在该机器上累加的数大于或等于,而在第k-1个机器上的累加数小于,并把这个数记为x。那么我们要找的中位数在第k个机器中,排在第位。然后我们对第k个

机器的数排序,并找出第个数,即为所求的中位数。复杂度是的。

方案2:先对每台机器上的数进行排序。排好序后,我们采用归并排序的思想,将这N个

机器上的数归并起来得到最终的排序。找到第个便是所求。复杂度是的。15、最大间隙问题。

给定n个实数,求着n个实数在实轴上向量2个数之间的最大差值,要求线性的时间算法。

方案1:最先想到的方法就是先对这n个数据进行排序,然后一遍扫描即可确定相邻的最大间隙。但该方法不能满足线性时间的要求。故采取如下方法:

s、找到n个数据中最大和最小数据max和min。

s、用n-2个点等分区间[min, max],即将[min, max]等分为n-1个区间(前闭后开区间),将这些区间看作桶,编号为,且桶的上界和桶i+1的下届相同,即每个桶的大小相同。每个桶的大小为:。实际上,这些桶的边界构成了一个等差数列(首项为min,公差为),且认为将min放入第一个桶,将max

放入第n-1个桶。

s、将n个数放入n-1个桶中:将每个元素分配到某个桶(编号为index),其中

,并求出分到每个桶的最大最小数据。

s、最大间隙:除最大最小数据max和min以外的n-2个数据放入n-1个桶中,由抽屉原理可知至少有一个桶是空的,又因为每个桶的大小相同,所以最大间隙不会在同一桶中出现,一定是某个桶的上界和气候某个桶的下界之间隙,且该量筒之间的桶(即便好在该连个便好之间的桶)一定是空桶。也就是说,最大间隙在桶i的上界和桶j的下界之间产生,一遍扫描即可完成。

16、将多个集合合并成没有交集的集合:给定一个字符串的集合,格式如:

。要求将其中交集不为空的集合合并,要求合并完成的集合之间无交集,例如上例应输出。

(1) 请描述你解决这个问题的思路;

(2) 给出主要的处理流程,算法,以及算法的复杂度;

(3) 请描述可能的改进。

方案1:采用并查集。首先所有的字符串都在单独的并查集中。然后依扫描每个集合,顺序合并将两个相邻元素合并。例如,对于,首先查看aaa和bbb是否在同一个并查集中,如果不在,那么把它们所在的并查集合并,然后再看bbb和ccc是否在同一个并查集中,如果不在,那么也把它们所在的并查集合并。接下来再扫描其他的集合,当所有的集合都扫描完了,并查集代表的集合便是所求。复杂度应该是O(NlgN)的。改进的话,首先可以记录每个节点的根结点,改进查询。合并的时候,可以把大的和小的进行合,这样也减少复杂度。

17、最大子序列与最大子矩阵问题

数组的最大子序列问题:给定一个数组,其中元素有正,也有负,找出其中一个连续子序列,使和最大。

方案1:这个问题可以动态规划的思想解决。设表示以第i个元素结尾的最大子序列,那么显然。基于这一点可以很快用代码实现。最大子矩阵问题:给定一个矩阵(二维数组),其中数据有大有小,请找一个子矩阵,使得子矩阵的和最大,并输出这个和。

方案2:可以采用与最大子序列类似的思想来解决。如果我们确定了选择第i列和第j列之间的元素,那么在这个范围内,其实就是一个最大子序列问题。如何确定第i列和第j列可以词用暴搜的方法进行。

大数据量的问题是很多面试笔试中经常出现的问题,比如baidu、google、腾讯这样的一些涉及到海量数据的公司经常会问到。

下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。

1、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内存上通常都是节省的。

扩展:

Bloom filter将集合中的元素映射到位数组中,用k(k为哈希函数个数)个映射位是否全1表示元素在不在这个集合中。Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作。Spectral Bloom Filter(SBF)将其与集合元素的出现次数关联。SBF采用counter中的最小值来近似表示元素的出现频率。

问题实例:给你A、B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。如果是三个乃至n个文件呢?

根据这个问题我们来计算下内存的占用,4G=2^32大概是40亿*8大概是340亿,n=50亿,如果按出错率0.01算需要的大概是650亿个bit。现在可用的是340亿,相差并不多,这样可能会使出错率上升些。另外如果这些urlip是一一对应的,就可以转换成ip,则大大简单了。

2、Hashing

适用范围:快速查找,删除的基本数据结构,通常需要总数据量可以放入内存

基本原理及要点:

hash函数选择,针对字符串,整数,排列,具体相应的hash方法。

碰撞处理,一种是open hashing,也称为拉链法;另一种就是closed hashing,也称开地址法,opened addressing。

扩展:

d-left hashing中的d是多个的意思,我们先简化这个问题,看一看2-left hashing。2-left hashing指的是将一个哈希表分成长度相等的两半,分别叫做T1和T2,给T1和T2分别配备一个哈希函数,h1和h2。在存储一个新的key时,同时用两个哈希函数进行计算,得出两个地址h1[key]和h2[key]。这时需要检查T1中的h1[key]位置和T2中的h2[key]位置,哪一个位置已经存储的(有碰撞的)key比较多,然后将新key存储在负载少的位置。如果两边一样多,比如两个位置都为空或者都存储了一个key,就把新key 存储在左边的T1子表中,2-left也由此而来。在查找一个key时,必须进行两次hash,同时查找两个位置。

问题实例:

1)、海量日志数据,提取出某日访问百度次数最多的那个IP。

IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。

3、bit-map

适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下基本原理及要点:使用bit数组来表示某些元素是否存在,比如8位电话号码

扩展:bloom filter可以看做是对bit-map的扩展

问题实例:

1)已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。

8位最多99 999 999,大概需要99m个bit,大概10几m字节的内存即可。

2)2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。

将bit-map扩展一下,用2bit表示一个数即可,0表示未出现,1表示出现一次,2表示出现2次及以上。或者我们不用2bit来进行表示,我们用两个bit-map即可模拟实现这个2bit-map。

4、堆

适用范围:海量数据前n大,并且n比较小,堆可以放入内存

基本原理及要点:最大堆求前n小,最小堆求前n大。方法,比如求前n小,我们比较当前元素与最大堆里的最大元素,如果它小于最大元素,则应该替换那个最大元素。这样最后得到的n个元素就是最小的n个。适合大数据量,求前n小,n的大小比较小的情况,这样可以扫描一遍即可得到所有的前n元素,效率很高。

扩展:双堆,一个最大堆与一个最小堆结合,可以用来维护中位数。

问题实例:

1)100w个数中找最大的前100个数。

用一个100个元素大小的最小堆即可。

5、双层桶划分

适用范围:第k大,中位数,不重复或重复的数字

基本原理及要点:因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。可以通过多次缩小,双层只是一个例子。

扩展:

问题实例:

1)、2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。

有点像鸽巢原理,整数个数为2^32,也就是,我们可以将这2^32个数,划分为2^8个区域(比如用单个文件代表一个区域),然后将数据分离到不同的区域,然后不同的区域在利用bitmap就可以直接解决了。也就是说只要有足够的磁盘空间,就可以很方便的解决。

2)、5亿个int找它们的中位数。

这个例子比上面那个更明显。首先我们将int划分为2^16个区域,然后读取数据统计落到各个区域里的数的个数,之后我们根据统计结果就可以判断中位数落到那个区域,同时知道这个区域中的第几大数刚好是中位数。然后第二次扫描我们只统计落在这个区域中的那些数就可以了。

实际上,如果不是int是int64,我们可以经过3次这样的划分即可降低到可以接受的程度。即可以先将int64分成2^24个区域,然后确定区域的第几大数,在将该区域分成2^20个子区域,然后确定是子区域的第几大数,然后子区域里的数的个数只有2^20,就可以直接利用direct addr table进行统计了。

6、数据库索引

适用范围:大数据量的增删改查

基本原理及要点:利用数据的设计实现方法,对海量数据的增删改查进行处理。

扩展:

问题实例:

7、倒排索引(Inverted index)

适用范围:搜索引擎,关键字查询

基本原理及要点:为何叫倒排索引?一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。

以英文为例,下面是要被索引的文本:

T0 = "it is what it is"

T1 = "what is it"

T2 = "it is a banana"

我们就能得到下面的反向文件索引:

"a": {2}

"banana": {2}

"is": {0, 1, 2}

"it": {0, 1, 2}

"what": {0, 1}

检索的条件"what", "is" 和"it" 将对应集合的交集。

正向索引开发出来用来存储每个文档的单词的列表。正向索引的查询往往满足每个文档有序频繁的全文查询和每个单词在校验文档中的验证这样的查询。在正向索引中,文档占据了中心的位置,每个文档指向了一个它所包含的索引项的序列。也就是说文档指向了它包含的那些单词,而反向索引则是单词指向了包含它的文档,很容易看到这个反向的关系。

扩展:

问题实例:文档检索系统,查询那些文件包含了某单词,比如常见的学术论文的关键字搜索。

8、外排序

适用范围:大数据的排序,去重

基本原理及要点:外排序的归并方法,置换选择败者树原理,最优归并树

扩展:

问题实例:

1).有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M。返回频数最高的100个词。

这个数据具有很明显的特点,词的大小为16个字节,但是内存只有1m做hash有些不够,所以可以用来排序。内存可以当输入缓冲区使用。

9、trie树

适用范围:数据量大,重复多,但是数据种类小可以放入内存

基本原理及要点:实现方式,节点孩子的表示方式

扩展:压缩实现。

问题实例:

1)、有10个文件,每个文件1G,每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。要你按照query的频度排序。

2)、1000万字符串,其中有些是相同的(重复),需要把重复的全部去掉,保留没有重复的字符串。请问怎么设计和实现?

3)、寻找热门查询:查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个,每个不超过255字节。

10、分布式处理mapreduce

适用范围:数据量大,但是数据种类小可以放入内存

基本原理及要点:将数据交给不同的机器去处理,数据划分,结果归约。

扩展:

问题实例:

1)、The canonical example application of MapReduce is a process to count the appearances of

each different word in a set of documents:

void map(String name, String document):

// name: document name

// document: document contents

for each word w in document:

EmitIntermediate(w, 1);

void reduce(String word, Iterator partialCounts):

// key: a word

// values: a list of aggregated partial counts

int result = 0;

for each v in partialCounts:

result += ParseInt(v);

Emit(result);

Here, each document is split in words, and each word is counted initially with a "1" value by the Map function, using the word as the result key. The framework puts together all the pairs with the same key and feeds them to the same call to Reduce, thus this function just needs to sum all of its input values to find the total appearances of that word.

2)、海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10。

3)、一共有N个机器,每个机器上有N个数。每个机器最多存O(N)个数并对它们操作。如何找到N^2个数的中数(median)?

经典问题分析:

上千万or亿数据(有重复),统计其中出现次数最多的前N个数据,分两种情况:可一次读入内存,不可一次读入。

可用思路:trie树+堆,数据库索引,划分子集分别统计,hash,分布式计算,近似统计,外排序

所谓的是否能一次读入内存,实际上应该指去除重复后的数据量。如果去重后数据可以放入内存,我们可以为数据建立字典,比如通过map,hashmap,trie,然后直接进行统计即可。当然在更新每条数据的出现次数的时候,我们可以利用一个堆来维护出现次数最多的前N个数据,当然这样导致维护次数增加,不如完全统计后在求前N大效率高。

如果数据无法放入内存。一方面我们可以考虑上面的字典方法能否被改进以适应这种情形,可以做的改变就是将字典存放到硬盘上,而不是内存,这可以参考数据库的存储方法。

当然还有更好的方法,就是可以采用分布式计算,基本上就是map-reduce过程,首先可以根据数据值或者把数据hash(md5)后的值,将数据按照范围划分到不同的机子,最好可以让数据划分后可以一次读入内存,这样不同的机子负责处理各种的数值范围,实际上就是map。得到结果后,各个机子只需拿出各自的出现次数最多的前N个数据,然后汇总,选出所有的数据中出现次数最多的前N个数据,这实际上就是reduce过程。

实际上可能想直接将数据均分到不同的机子上进行处理,这样是无法得到正确的解的。

因为一个数据可能被均分到不同的机子上,而另一个则可能完全聚集到一个机子上,同时还可能存在具有相同数目的数据。比如我们要找出现次数最多的前100个,我们将1000万的数据分布到10台机器上,找到每台出现次数最多的前100个,归并之后这样不能保证找到真正的第100个,因为比如出现次数最多的第100个可能有1万个,但是它被分到了10台机子,这样在每台上只有1千个,假设这些机子排名在1000个之前的那些都是单独分布在一台机子上的,比如有1001个,这样本来具有1万个的这个就会被淘汰,即使我们让每台机子选出出现次数最多的1000个再归并,仍然会出错,因为可能存在大量个数为1001个的发生聚集。因此不能将数据随便均分到不同机子上,而是要根据hash 后的值将它们映射到不同的机子上处理,让不同的机器处理一个数值范围。

而外排序的方法会消耗大量的IO,效率不会很高。而上面的分布式方法,也可以用于单机版本,也就是将总的数据根据值的范围,划分成多个不同的子文件,然后逐个处理。处理完毕之后再对这些单词的及其出现频率进行一个归并。实际上就可以利用一个外排序的归并过程。

另外还可以考虑近似计算,也就是我们可以通过结合自然语言属性,只将那些真正实际中出现最多的那些词作为一个字典,使得这个规模可以放入内存。

从海量数据中找出中位数

题目:在一个文件中有10G 个整数,乱序排列,要求找出中位数。内存限制为2G。只写出思路即可(内存限制为2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。

关于中位数:数据排序后,位置在最中间的数值。即将数据分成两部分,一部分大于该数值,一部分小于该数值。中位数的位置:当样本数为奇数时,中位数=(N+1)/2 ; 当样本数为偶数时,中位数为N/2与1+N/2的均值(那么10G个数的中位数,就第5G大的数

与第5G+1大的数的均值了)。

分析:明显是一道工程性很强的题目,和一般的查找中位数的题目有几点不同。

1、原数据不能读进内存,不然可以用快速选择,如果数的范围合适的话还可以考虑桶排序或者计数排序,但这里假设是32位整数,仍有4G种取值,需要一个16G大小的数组来计数。

2、若看成从N个数中找出第K大的数,如果K个数可以读进内存,可以利用最小或最大堆,但这里K=N/2,有5G个数,仍然不能读进内存。

3、接上,对于N个数和K个数都不能一次读进内存的情况,《编程之美》里给出一个方案:设k

解法:首先假设是32位无符号整数。

1、读一遍10G个整数,把整数映射到256M个区段中,用一个64位无符号整数给每个相应区段记数。

说明:整数范围是0 - 2^32 - 1,一共有4G种取值,映射到256M个区段,则每个区段有16(4 G/256M = 16)种值,每16个值算一段,0~15是第1段,16~31是第2段,……2^32-16 ~2^32-1是第256M段。一个64位无符号整数最大值是0~8G-1,这里先不考虑溢出的情况。总共占用内存256M×8B=2GB。

2、从前到后对每一段的计数累加,当累加的和超过5G时停止,找出这个区段(即累加停止时达到的区段,也是中位数所在的区段)的数值范围,设为[a,a+15],同时记录累加到前一个区段的总数,设为m。然后,释放除这个区段占用的内存。

3、再读一遍10G个整数,把在[a,a+15]内的每个值计数,即有16个计数。

4、对新的计数依次累加,每次的和设为n,当m+n的值超过5G时停止,此时的这个计数所对应的数就是中位数。

性能测试模拟笔试题目(一)new

软件性能测试模拟笔试题目(一) 注:本试卷中题目所涉及性能测试工具如无特殊说明则均为LoadRunner。 一、简答题(2*10=20分) 1.客户交付一个性能测试项目,请阐述你的实施流程。 2.解释5个常用的性能指标的名称与具体含义。 3.写出5个Loadrunner中常用函数,并对其中2个举例说明用法。 4.简述LoadRunner的工作原理? 5.什么是集合点?设置集合点有什么意义?LoadRunner中设置集合点的函数是哪个? 6.HTML-based script与URL-based script的脚本有什么区别? 7.如何设置LaodRunner才能让集合点只对一半的用户生效? 8.LoadRunner的Controller组件中Pacing参数的作用是什么? 9.LoadRunner中如何监控Windows资源? 10.如果让QALoad模拟LoadRunner中只对关注的性能点进行迭代测试,你有什么好方法? 二、选择题(2*5=10分) 1.During the run of a scenario, which LoadRunner component stores the performance monitoring data? A. Analysis B. Controller C. File server D. Load generator/host 2.Where are the results stored during the run of a scenario? A. Analysis B. Controller C. Utility server D. Load generator 3. A script was recorded with an average think time for an advanced user. An advanced user pauses 5 seconds between clicks. A first-time user pauses an average of 10 seconds between clicks. How can you modify the think time run-time settings to emulate a first-time user? A. Set the think time to s recorded B. Set the think time to multiply the recorded think time by 4 C. Set the think time to a random percentage between 150% - 250% D. Set the think time to replay as recorded, but limit the think time to 10 seconds 4.Which HTTP error code indicates that an individual business process is failing under load or the web application itself has crashed? A.200 B. 403 C. 401 D. 500 5.What is an intersection point in a business process? A. Scenario B. Rendezvous C. Transaction D. Service level agreement 三、LoadRunner工具使用题:(10*2=20分) 1.web系统中,username参数表为file类型,表中有12个值,分别A、B、C、D、E、F、G、 H、I、J、K、L。测试场景中虚拟并发用户数设为4,迭代次数设为3,参数中Select next row 与Update value on分别为(Sequential, Each Iteration)与(Unique, Once)时,写出迭代3次的取值情况。

最全大数据程序员面试题库

最全大数据程序员面试题库 大数据开发面试题库,千锋讲师总结了很多,经过总结学生在面试中遇到的问题,还有讲师多年的经验精心编制。就是要宠千锋学生到底,不仅教授你专业的大数据技术,更要让你从容的面对面试官,在众多的竞争者中脱颖而出。 好了,废话不多说,直接上题库。。。。。。 1.scala 语言有什么特点,什么是函数式编程?有什么优点 2.scala 伴生对象有什么作用 3.scala 并发编程是怎么弄得,你对actor 模型怎么理解有何优点 4.scala case class 有什么重要 5.scala akka 框架有没有接触过,有什么重要 6.scala 为什么设计var 和val 7.SDD,DAG,Stage怎么理解? 8.宽依赖窄依赖怎么理解? 9.Stage是基于什么原理分割task的? 10.血统的概念

11.任务的概念 12.容错方法 13.粗粒度和细粒度 14.Spark优越性 15.Spark为什么快 16.Transformation和action是什么?区别?举几个常用方法 17.SDD怎么理解 18.spark 作业提交流程是怎么样的,client和cluster 有什么区别,各有什么作用 19.spark on yarn 作业执行流程,yarn-client 和yarn cluster 有什么区别 20.spark streamning 工作流程是怎么样的,和storm 比有什么区别 21.spark sql 你使用过没有,在哪个项目里面使用的 22.spark 机器学习和spark 图计算接触过没,,能举例说明你用它做过什么吗? 23.spark sdd 是怎么容错的,基本原理是什么? 大数据时代,中国IT环境也将面临重新洗牌,不仅仅是企业,更是程序员们转型可遇而不可求的机遇。随着互联网时代的迅猛发展,大数据全面融入了现代社会的生产、生活中,并将大大改变全球的经济。大数据,它其实不仅仅是一种技术,更是战略资源。 千锋不仅仅注重学生的专业技能培训,还注重学生的素质培养,开班第一天起,每节课的课前十分钟分享,锻炼学员的沟通表达能力,在工作中减少沟通成

软件性能测试岗位常见面试题

软件性能测试岗位常见面试题 一、基础篇 1、较为完整的性能测试的流程 一个完整的性能测试流程 2、性能测试的基础理论、常见术语 性能测试常见术语浅析 3、性能测试模型、类型 常见的性能测试类型、性能测试模型 4、HTTP、TCP协议相关知识 HTTP协议入门系列 5、连接池、线程相关知识 连接池和线程 二、工具篇

①、Jmeter的工作原理是什么? ②、常用的元件、插件有哪些?各自的作用是什么? ③、几个典型的场景,如何基于jmeter设计测试脚本? 比如:参数化、关联、控制TPS、接口加密验签、阶梯式加压、集合点、检查点等; ④、是否会二次开发?如果会,怎么二次开发的(介绍大概过程和原因)? 2、Loadrunner 3、其他开源/商业性能测试工具 比如:Ngrinder、Locust、Wrk、Artillery等; 4、前端、服务器、数据库性能监测工具 三、系统架构篇 1、服务集群 2、负载均衡 负载均衡原理、实现方式 3、容量规划 4、缓存应用 缓存原理、缓存优点、缓存命中、缓存穿透、多层缓存 4、分布式框架 分布式的特点、面临的挑战:CAP理论(数据一致性、服务可用性、分区容错性) 5、全链路压测 四、服务器&中间件篇 1、JVM JVM原理、启动参数配置、堆栈原理、垃圾回收原理、OOM原因和表现 2、Tomcat 配置、使用方法、启动参数配置

配置、使用方法 4、Dubbo 服务注册、消息队列 5、RabbitMQ/Kafka 本身的特点、生产者、消费者如何管理 五、数据库篇 1、锁 2、索引 3、读写分离 4、分库分表 六、方案篇 1、设计性能测试方案需要考虑哪些问题? 时间成本、人力成本、环境&脚本可复用性、实现难度 2、针对某些情况,你会如何设计、优化方案? 七、案例篇 1、如何测试MQ? 2、压测中TPS上不去的原因分析? 3、测试环境和生产环境服务器配比如何选择? 服务器配置版本保持一致,容量测试后等量代换、考虑边际递减效应、容灾方案4、发现瓶颈,如何分析? 自上而下,从局部到整体,瓶颈分析粒度

大数据工程师面试题

大数据工程师面试题 大数据工程师面试,对于很多人来说应该都不陌生了吧,虽说大数据就业前景很好,但想要成功进入名企,并不是一件容易的事情,不仅仅需要专业的技能,还需要你在面试的时候认真准备一下。面试的时候,我们会遇到各种各样的问题,千锋讲师今天就先讲解一下面试经常会遇到的问题,Hadoop是如何工作的? Hadoop是一个分布式文件系统(Hadoop Distributed File System),简称HDFS。Hadoop是一个能够对大量数据进行分布式处理的软件框架,以一种可靠、高效、可伸缩的方式进行数据处理。所以说Hadoop解决了大数据如何存储的问题,因而在大数据培训机构中是必须学习的课程,也是面试中面试官非常注重的一个技术点。 Hadoop是如何工作的? Hadoop是从Google文件系统发源而来,并且他是一个用Java开发的跨平台的应用。核心组件有: Hadoop Common,拥有其他模块所依赖的库和基础

工具,Hadoop分布式文件系统(HDFS),负责存储,Hadoop YARN,管理计算资源,和Hadoop MapReduce,负责处理的过程。 Hadoop把文件拆成小块并且把他们分发给集群中的节点。然后,它使用打包的代码分发到节点上并行处理数据。这意味着可以处理数据的速度会比使用传统的体系结构的更快。 一个典型的Hadoop集群都会有主节点和从节点或者叫工作节点。主节点有一个任务跟踪器,任务调度,名字节点和数据节点组成。从节点通常作为一个数据节点和任务调度器,不过特殊的场景下程序可能只有数据节点然后在其他的从节点进行处理计算。 在大的Hadoop集群中,通常会使用一个专用的名字节点来管理HDFS节点的文件系统索引信息,这防止了文件系统的数据丢失和损坏。 千锋教育拥有一支的强师队伍,在教学研究方面,我们老师不断的推陈出新,探索更新的教学方式,结合时代所需不断更新课程大纲,加强学生对于知识的理解和运用。千锋讲师对于大数据行业时刻保持一定的敏感性和前瞻性,定期与各大企业的技术官交流分析,掌握大数据的发展动向,不仅仅可以帮助同学们更好的学习大数据技术,还会预测一些大数据工程师面试题,为同学们的就业之路披荆斩棘。 关键词:大数据工程师面试题

应届生进入大数据领域面试题大全

应届生进入大数据领域面试题大全 如今参加大数据培训学习大数据开发技术的小伙伴越来越多,因为现在就是大数据时代,所以想要加入到大数据领域的人越来越多,对于刚入门大数据领域的小伙伴来说,如果敲响企业的大门就很重要了,本篇文章小编给大家分享一下应届生进入大数据领域有哪些大数据面试题,对小伙伴感兴趣的小伙伴可以来了解一下哦。 1、频繁项集、频繁闭项集、最大频繁项集之间的关系是:(C) A、频繁项集频繁闭项集=最大频繁项集 B、频繁项集= 频繁闭项集最大频繁项集 C、频繁项集频繁闭项集最大频繁项集 D、频繁项集= 频繁闭项集= 最大频繁项集 2、考虑下面的频繁3-项集的集合:{1,2,3},{1,2,4},{1,2,5},{1,3,4},{1,3,5},{2,3,4},{2,3,5},{3,4,5}假定数据集中只有5个项,采用合并策略,由候选产生过程得到4-项集不包含(C) A、1,2,3,4 B、1,2,3,5 C、1,2,4,5 D、1,3,4,5 3、在图集合中发现一组公共子结构,这样的任务称为( B ) A、频繁子集挖掘 B、频繁子图挖掘 C、频繁数据项挖掘

D、频繁模式挖掘 4、下面选项中t不是s的子序列的是( C ) A、s=<{2,4},{3,5,6},{8}> t=<{2},{3,6},{8}> B、s=<{2,4},{3,5,6},{8}> t=<{2},{8}> C、s=<{1,2},{3,4}> t=<{1},{2}> D、s=<{2,4},{2,4}> t=<{2},{4}> 5、下列__(A)__不是将主观信息加入到模式发现任务中的方法。 A、与同一时期其他数据对比 B、可视化 C、基于模板的方法 D、主观兴趣度量 6、下列度量不具有反演性的是(D) A、系数 B、几率 C、Cohen度量 D、兴趣因子 7、以下哪些算法是分类算法,(B) A,DBSCAN

大数据面试题试卷

大数据面试题及答案 汇总版

第1部分选择题 1.1 Hadoop选择题 1.1.1 HDFS 1.下面哪个程序负责 HDFS 数据存储?A.NameNode B.Jobtracker C.Datanode D.secondaryNameNode E.tasktracker 2. HDFS 中的 block 默认保存几份? A.3份 B.2份 C.1份 D.4份 3. 下列哪个程序通常与NameNode 在一个节点启动? A. SecondaryNameNode B.DataNode C.TaskTracker D. Jobtracker 4. HDFS 默认 Block Size(新版本)

A. 32MB B.64MB C.128MB D.256MB 5. Client 端上传文件的时候下列哪项正确 A. 数据经过 NameNode 传递给 DataNode B.Client端将文件切分为Block,依次上传 C.Client 只上传数据到一台DataNode,然后由 NameNode 负责Block 复制工作 6. 下面与 HDFS 类似的框架是? A.NTFS B.FAT32 C.GFS D.EXT3 7. 的 8. 的 1.1.2 集群管理 1. 下列哪项通常是集群的最主要瓶颈 A. CPU B.网络 C.磁盘IO

D.存 2. 关于SecondaryNameNode 哪项是正确的? A.它是 NameNode 的热备 B.它对存没有要求 C.它的目的是帮助NameNode合并编辑日志,减少NameNode启动时间 D.SecondaryNameNode 应与 NameNode 部署到一个节点 3. 下列哪项不可以作为集群的管理? A. Puppet B.Pdsh C.ClouderaManager D.Zookeeper 4. 配置机架感知的下面哪项正确 A. 如果一个机架出问题,不会影响数据读写 B.写入数据的时候会写到不同机架的 DataNode 中 C.MapReduce 会根据机架获取离自己比较近的网络数据 5. 下列哪个是 Hadoop 运行的模式 A. 单机版B.伪分布式C.分布式 6. Cloudera 提供哪几种安装 CDH 的方法 A. Cloudera manager B.Tarball C.Yum D.Rpm 7. 1.2 Hbase选择题 1.2.1 Hbase基础

大数据hadoop面试题-企业项目实战

大数据hadoop面试题-企业项目实战 大数据技术逐渐被企业所重视,其带来的益处其实是可以被无限放大的,要知道,现在的市场都是,得数据者得天下!而数据的获得还是要靠大数据技术的,Hadoop作为大数据技术的一个重要技术点,在面试大数据工程师的时候是肯定要被问及的,千锋小编整理一些关于大数据Hadoop的面试题,预祝每一位大数据工程师都能找到自己理想的工作。 1、在Hadoop中定义的主要公用InputFormat中,默认是哪一个?(A) A、TextInputFormat B、KeyValueInputFormat C、SequenceFileInputFormat 2、下面哪个程序负责HDFS 数据存储?(C) https://www.doczj.com/doc/2410595869.html,Node B.JobTracker C.DataNode

D.SecondaryNameNode E.tasktracker 3、HDFS 中的block 默认保存几份?(A) A.3 份 B.2 份 C.1 份 D.不确定 4、下列哪个程序通常与NameNode 在一个节点启动?(D) A.SecondaryNameNode B.DataNode C.TaskTracker D.JobTracker 解析:hadoop的集群是基于master/slave模式,namenode和jobtracker 属于master,datanode和tasktracker属于slave,master只有一个,而slave 有多个. SecondaryNameNode内存需求和NameNode在一个数量级上,所以通常secondary NameNode(运行在单独的物理机器上)和NameNode 运行在不同的机器上。 JobTracker对应于NameNode,TaskTracker对应于DataNode. DataNode和NameNode是针对数据存放来而言的.JobTracker和TaskTracker是对于MapReduce执行而言的. mapreduce中几个主要概念,mapreduce 整体上可以分为这么几条执行

性能测试面试题附答案范文

1、哪个函数是用来截取虚拟用户脚本中的动态值?(手工关联) Web_reg_save_param 2、你如何识别系统瓶颈? 从TPS指标分析(即系统每秒处理可处理事务数)当前随着用户数的增长其系统每秒可处理的事务数是否也会增长 3、think_time有什么用? Think_time作用主要有以下几种: 1)降低当前运行时压力,缓解对应用服务器所造成的压力 2)模拟真实生产用户操作,考察对服务器所造成的影响 4、一般什么时候开始进行性能测试 被测系统的正常业务流程通过,即集成测试通过后。 5、进行参数化的目的 1)减少脚本的大小 2)提供不同的值以提高执行脚本的能力,从而更加真实的模拟生产环境的数据 6、容量测试方法中为什么要以逐步递增的的方式进行 虚拟用户数随着负载时间的延长而增加,可以帮助确定系统响应时间减慢的准确时间点以及准确用户数 7、假设在测试过程中发现某些事务的响应时间过长,但分析应用服务、数据库服务以及网络都属于 正常现象,问题可能出现的原因 1)LR客户端机器是否已无法承载当前运行压力导致LR无法及时获取从服务端返回的信息2)Think_time(即思考时间)是否已忽略 3)确定当前被测系统架构,是否为在每次测试过程中清除缓存所导致 8、如何发现应用服务的相关问题? 1)通过某些事务的运行,判断是否在应用代码层未进行调优导致事务响应事件过长 2)通过实时监控工具(nmon等)监控分析: a)系统在运行过程其CPU是否稳定运行或CPU耗用是否过高 b)在系统运行过程中其内存是否存在内存泄露现象 3)打开应用相应日志,分析在运行过程中是否存在交易报错并获取错误原因查看是否由于代码原因导致交易错误发生 9、如何发现数据库的相关问题? 1)通过运行某些相应的已获取的SQL语句,判断是否由于数据库索引所导致的事务响应过长的问题发生 2)通过实时监控工具(nmon等)监控分析: a)在系统运行过程中CPU是否可稳定运行或CPU耗用过高; b)在系统运行过程中其内存是否存在内存泄露等现象。

面试题目

一·主观题 1.你认为app测试过程中,相对于web,要更多注意哪些测试点?或者说app测试和 web测试有哪些不同之处? 答:1、“点击加载更多”的分页处理技术,是否有重复的数据,数据显示是否完整,到达最后一页后是否还有数据进行显示; 2、数据的排序方式; 2、界面跳转是否正确; 3、出现异常情况是否有提示,是否跳转到已经设定好的默认页面,如断网情况下,显示网络未连接,数据加载失败,或者如果此页面没有数据显示,显示友好提示信息; 4、图片处理的地方,是否容易出现程序崩溃现象,主要是图片压缩机制; 5、前台展示的数据,后台进行变动(增、删、改),是否是实时更新还是app一开始运行再进行加载; 6、前台主动发出请求,后台数据库中是否存在相应的数据同时包括数据的关联性(商家的会员进行下订单,数据库中生成一条订单的记录的同时,生成一条积分记录,该会员的积分进行相应的变化); 7、手机app网络环境测试重点:主要是针对2G、3G、4G、wifi三种网络环境进行测试; 8、手机app兼容性测试:主要是针对android各个系统版本进行测试,及测试屏幕分辨率进行测试; 2.请说明 Android手机和oS手机,系统有什么区别? 答:安卓是开源的,苹果ios是闭源的 1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。 2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。 3、IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。 3.请试着说明一下黑盒测试,白盒测试,单元测试,集成测试,系统测试,验收测试的区别和联系 答:黑盒测试:把测试对象当成一个黑盒子,测试人员完全不考虑逻辑结构和内部特性,只依据程式的需求说明书来检查程式的功能是否满足它的功能说明。 白盒测试:把测试对象当成一个透明的盒子,允许测试人员利用程序内部逻辑结构 及相关信息,设计或选择测试用例,对程式所有逻辑路径进行测试。 单元测试:白盒测试的一种,对软件设计中的单元模块进行测试。 集成测试:在单元测试的基础上,对单元模块之间的连接和组装进行测试。 系统测试:在所有都考虑的情况下,对系统进行测试。 验收测试:第三方进行的确认软件满足需求的测试。 4.你认为性能测试工作的目的是什么?做好性能测试工作的关键是什么 答:性能测试的目的--- 1)评估系统的能力----测试中得到的负荷和响应时间数据可被用于验证所计划的模型的能力,并帮助作出决策。 2)识别体系中的弱点----受控的负荷被增加到一个极端水平,并突破它,从而修复体系的

软件测试工程师经典面试题目

软件测试工程师面试题汇总 测试技术面试题 (5) 1、什么是兼容性测试?兼容性测试侧重哪些方面? (5) 2、我现在有个程序,发现在Windows上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题? (5) 3、测试的策略有哪些? (5) 4、正交表测试用例设计方法的特点是什么? (5) 5、描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程? (5) 6、你觉得bugzilla在使用的过程中,有什么问题? (5) 7、描述测试用例设计的完整过程? (6) 8、单元测试的策略有哪些? (6) 9、LoadRunner分哪三部分? (6) 10、LoadRunner进行测试的流程? (6) 什么是并发?在lordrunner中,如何进行并发的测试?集合点失败了会怎么样? (6) 12、使用QTP做功能测试,录制脚本的时候,要验证多个用户的登录情况/查询情况,如何操作? (6) 13、QTP中的Action有什么作用?有几种? (6) 14、TestDirector有些什么功能,如何对软件测试过程进行管理? (7) 15、你所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性 能测试......)? .. (7) 16、条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录? (8) 17、Beta测试与Alpha测试有什么区别? (8) 18、软件的评审一般由哪些人参加?其目的是什么? (8) 19、测试活动中,如果发现需求文档不完善或者不准确,怎么处理? (8) 20、阶段评审与项目评审有什么区别? (8) 21、阐述工作版本的定义? (8) 22、什么是桩模块?什么是驱动模块? (8) 23、什么是扇入?什么是扇出? (8) 24、你认为做好测试计划工作的关键是什么? (8) 25、你认为做好测试用例工作的关键是什么? (9) 26、简述一下缺陷的生命周期? (9) 27、软件的安全性应从哪几个方面去测试? (9) 28、软件配置管理工作开展的情况和认识? (9) 29、你觉得软件测试通过的标准应该是什么样的? (10) 30、引入测试管理的含义? (10) 31、一套完整的测试应该由哪些阶段组成? (10) 32、单元测试的主要内容? (10) 33、集成测试也叫组装测试或者联合测试,请简述集成测试的主要内容? (10) 34、简述集成测试与系统测试关系? (10) 35、软件测试的文档测试应当贯穿于软件生命周期的全过程,其中用户文档是文档测试的重点。那么软件系统 的用户文档包括哪些? (10) 36、软件系统中除用户文档之外,文档测试还应该关注哪些文档? (10) 37、简述软件系统中用户文档的测试要点? (11) 38、单元测试主要内容是什么? (11) 39、如何理解强度测试? (13) 40、如何理解压力、负载、性能测试测试? (13) 41、什么是系统瓶颈? (13) 42、文档测试主要包含什么内容? (13)

大数据常见面试题

大数据常见面试题 经历了水深火热的大数据学习,终于拨开云雾见天明了,但你离成功总是还差了一步,那就是拿到大数据工程师的Offer。 在电脑旁奋斗了无数个日夜,代码敲了无数遍,项目整改了无数遍,只为了得到一份自己满意的高薪资高待遇的Offer。但这个收获不仅仅需要你学到娴熟的大数据技术,还需要在面试之前精心准备,了解自己要应聘的企业发展状况、自己应聘岗位的技术要求等等,除此之外,多看一些大数据面试题也是很有必要的,给自己涨涨经验。 千锋小编虽然不能帮你调查你理想企业的发展状况,但大数据常见面试题早已经为你准备好了,需要的尽快收入囊中吧! 1.scala 语言有什么特点,什么是函数式编程?有什么优点 2.scala 伴生对象有什么作用 3.scala 并发编程是怎么弄得,你对actor 模型怎么理解有何优点 4.Spark如何处理结构化数据,Spark如何处理非结构话数据? 5.Spark性能优化主要有哪些手段?

6.对于Spark你觉得他对于现有大数据的现状的优势和劣势在哪里? 7.对于算法是否进行过自主的研究设计? 8.简要描述你了解的一些数据挖掘算法与内容 9.怎么用spark做数据清洗 10.跟我聊聊spark的应用,商场里广告投放,以及黄牛检测 11.spark读取数据,是几个Partition呢?hdfs几个block 就有几个Partition? 12.Mogodb和hbase的区别 13.开发中遇到的问题 14.HIVE的优化 15.linux的启动顺序 16.编译好的scala程序,运行时还需要scala环境吗 17.Write a java program to implement Stack in java. 18.Linkedlist和ArrayList的区别 19.hadoop中combiner的作用 20.用mr设计一个分组排重计数算法 21.用MapReduce找出存在公共好友的两个人 22.hdfs存储机制 23.MapReduce原理 24.hadoop运行原理 25.hadoop 的namenode 宕机,怎么解决 26.Hbase 的特性,以及你怎么去设计rowkey 和columnFamily ,怎么去

大数据技术Hadoop面试题

大数据技术Hadoop面试题,看看你能答对多少? 单项选择题 1. 下面哪个程序负责HDFS 数据存储。 a)NameNode b)Jobtracker c)Datanode d)secondaryNameNode e)tasktracker 2. HDfS 中的block 默认保存几份? a)3 份 b)2 份 c)1 份 d)不确定 3. 下列哪个程序通常与NameNode 在一个节点启动? a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker 4. Hadoop 作者 a)Martin Fowler b)Kent Beck c)Doug cutting 5. HDFS 默认Block Size a)32MB b)64MB c)128MB 6. 下列哪项通常是集群的最主要瓶颈 a)CPU b)网络 c)磁盘 d)内存 7. 关于SecondaryNameNode 哪项是正确的? a)它是NameNode 的热备 b)它对内存没有要求 c)它的目的是帮助NameNode 合并编辑日志,减少NameNode 启动时间 d)SecondaryNameNode 应与NameNode 部署到一个节点 多选题: 8. 下列哪项可以作为集群的管理工具 a)Puppet b)Pdsh c)Cloudera Manager d)d)Zookeeper

9. 配置机架感知的下面哪项正确 a)如果一个机架出问题,不会影响数据读写 b)写入数据的时候会写到不同机架的DataNode 中 c)MapReduce 会根据机架获取离自己比较近的网络数据 10. Client 端上传文件的时候下列哪项正确 a)数据经过NameNode 传递给DataNode b)Client 端将文件切分为Block,依次上传 c)Client 只上传数据到一台DataNode,然后由NameNode 负责Block 复制工作 11. 下列哪个是Hadoop 运行的模式 a)单机版 b)伪分布式 c)分布式 12. Cloudera 提供哪几种安装CDH 的方法 a)Cloudera manager b)Tar ball c)Yum d)Rpm 判断题: 13. Ganglia 不仅可以进行监控,也可以进行告警。() 14. Block Size 是不可以修改的。() 15. Nagios 不可以监控Hadoop 集群,因为它不提供Hadoop 支持。() 16. 如果NameNode 意外终止,SecondaryNameNode 会接替它使集群继续工作。() 17. Cloudera CDH 是需要付费使用的。() 18. Hadoop 是Java 开发的,所以MapReduce 只支持Java 语言编写。() 19. Hadoop 支持数据的随机读写。() 20. NameNode 负责管理metadata,client 端每次读写请求,它都会从磁盘中读取或则会写入metadata 信息并反馈client 端。() 21. NameNode 本地磁盘保存了Block 的位置信息。() 22. DataNode 通过长连接与NameNode 保持通信。() 23. Hadoop 自身具有严格的权限管理和安全措施保障集群正常运行。() 24. Slave 节点要存储数据,所以它的磁盘越大越好。() 25. hadoop dfsadmin –report 命令用于检测HDFS 损坏块。() 26. Hadoop 默认调度器策略为FIFO() 27. 集群内每个节点都应该配RAID,这样避免单磁盘损坏,影响整个节点运行。() 28. 因为HDFS 有多个副本,所以NameNode 是不存在单点问题的。() 29. 每个map 槽就是一个线程。() 30. Mapreduce 的input split 就是一个block。() 31. NameNode 的Web UI 端口是50030,它通过jetty 启动的Web 服务。() 32. Hadoop 环境变量中的HADOOP_HEAPSIZE 用于设置所有Hadoop 守护线程的内存。它默认是200 GB。() 33. DataNode 首次加入cluster 的时候,如果log 中报告不兼容文件版本,那需要NameNode执行“Hadoop namenode -format”操作格式化磁盘。() 【编辑推荐】 没有数据分析大数据什么也不是...... 大数据告诉你,真正的白富美的生活是怎样的呢?

大数据面试题

1、给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。 s 遍历文件b,采取和a相同的方式将url分别存储到1000个小文件(记为)。这样处理后,所有可能相同的url都在对应的小文件()中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。s 求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。 方案2:如果允许有一定的错误率,可以使用Bloom filter,4G内存大概可以表示340亿bit。将其中一个文件中的url使用Bloom filter映射为这340亿bit,然后挨个读取另外一个文件的url,检查是否与Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)。2、有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。 方案1: s、顺序读取10个文件,按照hash(query)的结果将query写入到另外10个文件(记为)中。这样新生成的文件每个的大小大约也1G(假设hash函数是随机的)。s、找一台内存在2G左右的机器,依次对用hash_map(query, query_count)

性能测试人员面试经典技术问题

1.请问什么是性能测试、负载测试、压力测试? 性能测试:对一个软件系统而言,包括执行效率、资源占用、系统稳定性、安全性兼容性、可扩展性等。 负载测试:通过逐步加压的方式来确定系统的处理能力,确定系统能承受的各项阀值。 压力测试:逐步增加负载,使系统某些资源达到饱和甚至失效的测试。 2.请分别针对性能测试、负载测试和压力测试试举一个简单的例子? 性能测试例子:公司开发了一个小型项目管理系统,上线前需要做负载、压力、大数据量、强度测试等。 负载测试:逐步加压,从而得到“响应时间不超过10秒”,“服务器平均CPU利用率低于85%”等指标阀值。 “服务器平均CPU利用率高于90%” 压力测试:逐步加压,从而使“响应时间超过10秒”, 等指标来确定系统能承受的最大负载量。 3.请例举出常用的性能测试工具,并指出这些工具的优缺点? LoadRunner,录制脚本快捷操作简便,需要一定的学习时间,有采购成本。 4.请问您是如何得到性能测试需求?怎样针对需求设计、分析是否达到需求? 在查看需求文档,从中提取性能测试需求,与用户交流,了解实际使用情况。 结合业务信息设计操作场景总结出需测试的性能关键指标。 执行用例后根据提取关键性能指标来分析是否满足性能需求。 5.什么时候可以开始执行性能测试? 在产品相对比较稳定,功能测试结束后。灵活性比较强。 6.什么是集合点?设置集合点有什么意义?LoadRunner中设置集合点的函数是哪个? 集合点可以控制各个Vuser以便在同一时刻执行任务。 借助集合点,可以再LoadRunner中实现真正意义上的并发。 lr_rendezvous()

7.性能测试时,是不是必须进行参数化?为什么要创建参数?LoadRunner中如何创建参数? 8是。 模拟用户真实的业务操作。 创建参数列表,用参数替换固定的文本。 8.您了解关联吗?如何找出哪里需要关联?请给一些您所在项目的实例。 了解。 使用LoadRunner自动关联功能。手动关联:录制两份相同操作步骤的脚本,找出不同的部分进行判断。 一个项目管理系统,每次登录后服务器都自动分配一个sessionID以便之后每次表单提交后验证。 9.您如何调试LoadRunner脚本? 设置断点、增加log。 10.在LoadRunner中如何编写自定义函数?请给出一个您在以前项目中编写的函数。 11.请问您是如何理解LoadRunner中集合点、事务以及检查点等概念? 集合点:可以控制各个Vuser以便在同一时刻执行任务,可实现真正意义上的并发。 事务:事务是用来度量服务器响应时间的操作集。 检查点:在回放脚本期间搜索特定内容,从而验证服务器响应内容的正确性。 12.如何应用LoadRunner进行性能测试? 使用虚拟用户生成器创建脚本,使用控制器设定场景、运行脚本,使用分析器分析运行后得到的数据。 13.LoadRunner中思考时间有什么作用? 用户执行两个连续操作期间等待的时间。模拟用户真实的使用情况。 14.LoadRunner中如何实现多用户并发操作,需要进行哪些设置? 设置集合点来实现,在脚本中加入lr_rendezvous(),然后可以在控制器中设定集结百分

大数据工程师笔试题

链表排序 Java: class Node{ Int value; Node next; } C++: struct Node{ int nValue; Node* pNext; } 请实现如下函数对任意给定链表按照其中的value字段排序 Java: Node sortList(Node head); C++: Node* sortList(Node* pHead); 解答: 编写归并排序迭代器 java: class MergeIterator implements Iterator{ Public MergeIterator(Iterator a,Iterator b){} Public boolean hasNext(){} Public Integer next(){} } 测试用例: Class MockIterator implements Iterator{ Int current,step,endValue; Public MockIterator(int step,int endValue){ this.step=step; This.endValue=endValue; This.current=endValue%step; } Public boolean hasNext(){return this.current < this.endValue;} Public Integer next(){return this.current += this.step;} } Iterator it=new MergeIterator(new MockIterator(2,10),new MockIterator(2,9)); //输出2 3 4 5 6 7 8 9 10 C++: Struct Iterator{ Virtual bool hasNext()=0; Virtual int next()=0;

大数据面试题剖析讲课稿

单项选择题 1. 下面哪个程序负责 HDFS 数据存储。 a)NameNode b)Jobtracker c)Datanode d)secondaryNameNode e)tasktracker 2. HDfS 中的 block 默认保存几份? a)3 份 b)2 份 c)1 份 d)不确定 3. 下列哪个程序通常与 NameNode 在一个节点启动? a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker

4. Hadoop 作者 a)Martin Fowler b)Kent Beck c)Doug cutting 5. HDFS 默认 Block Size a)32MB b)64MB c)128MB 6. 下列哪项通常是集群的最主要瓶颈 a)CPU b)网络 c)磁盘 d)内存 7. 关于 SecondaryNameNode 哪项是正确的? a)它是 NameNode 的热备 b)它对内存没有要求

c)它的目的是帮助NameNode 合并编辑日志,减少NameNode 启动时间 d)SecondaryNameNode 应与 NameNode 部署到一个节点 多选题 8. 下列哪项可以作为集群的管理工具 a)Puppet b)Pdsh c)Cloudera Manager d)d)Zookeeper 9. 配置机架感知的下面哪项正确 a)如果一个机架出问题,不会影响数据读写 b)写入数据的时候会写到不同机架的 DataNode 中 c)MapReduce 会根据机架获取离自己比较近的网络数据 10. Client 端上传文件的时候下列哪项正确 a)数据经过 NameNode 传递给 DataNode b)Client 端将文件切分为 Block,依次上传

性能测试人员面试经典技术问题

性能测试人员面试经典技术问题 请分别针对性能测试、负载测试和压力测试试举一个简单的例子? 性能测试例子:公司开发了一个小型项目管理系统,上线前需要做负载、压力、大数据量、强度测试等。 负载测试:逐步加压,从而得到“响应时间不超过10秒”,“服务器平均CPU利用率低于85%”等指标阀值。 压力测试:逐步加压,从而使“响应时间超过10秒”,“服务器平均CPU利用率高于90%”等指标来确定系统能承受的最大负载量。 2.请问什么是性能测试、负载测试、压力测试? 性能测试:对一个软件系统而言,包括执行效率、资源占用、系统稳定性、安全性兼容性、可扩展性等。 负载测试:通过逐步加压的方式来确定系统的处理能力,确定系统能承受的各项阀值。 压力测试:逐步增加负载,使系统某些资源达到饱和甚至失效的测试。 3.请例举出常用的性能测试工具,并指出这些工具的优缺点? LoadRunner,录制脚本快捷操作简便,需要一定的学习时间,有采购成本。 4.请问您是如何得到性能测试需求?怎样针对需求设计、分析是否达到需求? 在查看需求文档,从中提取性能测试需求,与用户交流,了解实际使用情况。 结合业务信息设计操作场景总结出需测试的性能关键指标。 执行用例后根据提取关键性能指标来分析是否满足性能需求。 5.什么时候可以开始执行性能测试? 在产品相对比较稳定,功能测试结束后。灵活性比较强。 6.什么是集合点?设置集合点有什么意义?LoadRunner中设置集合点的函数是哪个? 集合点可以控制各个Vuser以便在同一时刻执行任务。 借助集合点,可以再LoadRunner中实现真正意义上的并发。 lr_rendezvous() 7.性能测试时,是不是必须进行参数化?为什么要创建参数?LoadRunner中如何创建参数? 8是。 模拟用户真实的业务操作。

大数据面试

大数据面试:面对众多的offer,该如何选择 大数据的就业前景,相信就不用小编多赘述了吧,从千锋大数据培训班毕业的学生平均每个人都能拿到2到3个大数据岗位的offer,由此可见,各大企业对于大数据技术人才的渴求真的是求贤若渴!那面对众多企业向我们抛来的橄榄枝,我们该如何选择呢? 首先先解决大家都比较困惑两点,一是薪资问题,二如何选择公司。 一、薪资问题 其实对于刚毕业几年的大学生来说,不要太看重薪资,除非薪资的差距是在数量级间的差距,如果只是几千块的差距这个不算差距,现在的工资并不代表你未来的工资,学会投资自己看未来,成长性好的员工未来的收益差距是在数量级,比如几年后,同学A的薪水比另外一个同学B的薪水高上百万都是非常正常的。 其次要学会比较薪水。收到Offer时,首先要知道薪酬福利的组成,比如月薪,年终奖,期权,商业保险,补贴等。不要单纯的比较月薪,而是综合比较年薪和福利。A同学月薪比B低几千,但是A同学年薪和福利加在一起可能比B同学高好几倍。除了期权外,福利上主要关注以下几点:(1)公积金,等你买房或

退休的时候可以取出来,这个我认为可以算在薪水里;(2)补贴,不同的公司补贴不一样,大致有住房补贴,异地补贴,汽油补贴,餐补等。另外补贴有个期限,是一年还是几年,这个也要问清楚。(3)商业保险,过节费等。 二、如何选择公司 我自己也经历过几个不同类型的公司,小型私企,大型私企,大型国企,互联网企业。从我的经历来看,如果你想学技术可以选择互联网公司,外企和创业公司,如果你想做管理,可以选择创业公司和中大型私企。 我总结了一下各种类型公司的状态,仅供参考: 三、其他问题 1、某某公司的招聘我是否应该参加? 如果有时间尽量参加,好处很多,第一拿到offer越多选择就多,也有和想去的公司谈offer的资本。其次是参加了一些面试也能意识到自己的不足,比如先去意愿不强的企业面试,发现自己的不足后回来复习,再继续面试。 2、选择大公司还是小公司?

相关主题
相关文档 最新文档