1、给一个超过100G大小的log file,log中存着IP地址,设计算法找到出现次数最多的IP地址?(与如何知道top K的IP,如何使用Linux系统命令实现)
Hash分桶法:
将100G文件分成1000份,将每个IP地址映射到相应文件中:file_id = hash(ip) % 1000
在每个文件中分别求出最高频的IP,再合并Hash分桶法;
使用Hash分桶法把数据分发到不同的文件;
各个文件分别统计top K;
2、给定100亿个整数,设计算法找到只出现一次的整数。
Hash分桶法,将100亿个整数映射到不同的区间,在每个区间中分别找只出现一次的整数。
3、给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集
扫描每个整数是否出现过,节省内存方法使用bitmap。
桶分 + bitmap。如果整数是32bit,直接使用bitmap的方法实现。
所有整数共232种可能,每个数用两位表示,00表示文件均没出现,10表示文件1出现过,01表示文件2出现过,11表示两文件均出现过,共需要232*2/8 = 1GB内存,遍历两个文件中的所有整数,然后寻找bitmap中11对应的整数即是两个文件的交集,这样即可线性时间复杂度完成。
4、1个文件有100亿个int,1G内存,设计算法找大出现次数超过2次的所有整数。
Bitmap扩展:用2个bit表示状态,0表示未出现,1出现过1次,2出现过2次或以上。
5、给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法?
精确算法:Hash分桶法
将两个文件中的query hash到N个小文件中,并标明query的来源;
在各个小文件中找到重合的query
将找到的重合query汇总
近似算法:BloomFilter算法
5、说说Zookeeper
Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
当leader崩溃或者leader失去大多数的follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态。
ZooKeeper学习第一期---Zookeeper简单介绍
6、说说HBase
7、说说ETL
ETL (Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)
是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。