大数据处理面试题

针对求多个数据中出现最多的Top(K)

数据重复率高

首先看看数据重复率,若重复率很高,可以直接在内存中将数据存进HashMap,然后利用最大堆求出出现次数最多的K个数据。

数据重复率低

化大为小,hash分割文件

将大文件用hash划分为多个小文件,如果小文件还超出了所需内存怎么办?没事,再对其进行hash,将其分为更多的小文件。如果多次hash文件大小仍然超出内存,就不用管它了,因为这说明那个文件内的数组重复率非常高。

分而治之,hash统计频率

分别对每个小文件用hashtable统计数据频率。

合并结果,堆排序

用最大堆对其排序。


针对大量数据排序

化大为小

将大文件直接分割为多个小文件。

分而治之

分别对小文件进行内排序。

合并结果

采用败者树进行多路合并。
若是对频率排序,还是得先用hash分割,再统计频率,视统计结果确定对其直接排序或者外排序。


找出两个大文件中相同的数据

化大为小

用相同的hash函数分别对这两个文件进行hash。编号为a1,a2,a3……和b1,b2,b3……

分而治之

分别对对应的小文件进行hash查找。


大量数据查重,过滤

bitmap

一个文件中查找在另一个文件中没有出现过的数:
在数据位数较小,如32位整型情况下,可以采用bitmap,将整型所有数映射为bitmap上对应的位。
一个文件中查找没有重复的数:
使用2bitmap,00代表没有出现过,01代表出现过一次,10代表重复多次。

布隆过滤器

数据位数较大,bitmap无法存储,采用布隆过滤器。利用多个hash函数映射到多个bitmap上。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaScript前端数据处理面试中常见的热点话题,因为它涉及到DOM操作、数组处理、异步编程和各种数据结构的理解。面试时可能会问到以下几个方面: 1. **数组操作**: - 如何使用map(), filter(), reduce()等高阶函数对数组进行处理? - 对象数组去重和扁平化的方法是什么? 2. **DOM操作**: - 如何实现元素添加、删除和修改操作? - 理解事件委托和事件冒泡/阻止默认行为吗? 3. **数据绑定和状态管理**: - 了解React、Vue或Angular中的数据流管理和响应式编程吗? - 对于Redux、Vuex这类状态管理库有深入理解吗? 4. **JSON和序列化**: - JSON.stringify()和JSON.parse()的用途是什么? - 了解如何处理跨域请求中的JSONP或CORS? 5. **ES6新特性**: - let和const的区别?块级作用域的理解? - Promise、async/await的使用及其错误处理? 6. **性能优化**: - 如何避免不必要的DOM操作?使用虚拟DOM的概念吗? - 对于大数据量的渲染,如何利用分页、懒加载等策略? 7. **数据结构**: - 理解数组和对象在JavaScript中的区别以及它们各自的优缺点? - 对哈希表(如Map)和集合(Set)的使用场景有了解吗? 相关问题: 1. 你能描述一下JavaScript中的事件循环机制吗? 2. 如何在JavaScript中实现一个简单的Promise链式调用? 3. 你能否举一个实际的例子说明深度克隆和浅克隆的区别? 如果你准备面试,建议熟悉这些概念,并能提供相关的代码示例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值