本文共 2389 字,大约阅读时间需要 7 分钟。
大数据笔面试系列第一篇(混合型)
第一题:Java相关(美菜网)
题目: 则是该类和子类的一个静态代码块,一个非静态代码块,以及一个构造函数的输出结果。
解析:
- 静态代码块 static {}: 类加载时执行一次,不与任何对象相关只用于静态初始化。
- 非静态代码块 {} (构造代码块): 对于每个对象都会执行一次,用于初始化实例变量。
- 构造函数/类的初始化语句: 对于每个对象都会执行一次,用于初始化对象的状态。
运行结果示例:
Static FatherStatic SonFirst SonConstructor FatherNon-static FatherConstructor FatherNon-static SonConstructor SonSecond SonConstructor SonNon-static SonConstructor Son
结论: 该程序主要演练了Java中的静态代码块、构造代码块和构造函数的调用顺序和时间点。
第二题:JVM相关(丰巢科技)
问题: 请解释内存中的栈(stack)、堆(heap)、静态存储区的用法?
解析:
- 栈(stack): 用于存储方法调用的现场信息,如局部变量、操作数栈等。操作速度快,但容量有限。
- 堆(heap): 用于存储对象实例。通过new操作创建的对象会被放置在堆中。
- 静态存储区: 存储类字段、常量、静态变量等。在类加载时初始化。
示例代码解析:
String str = new String("hello");"hello" 放 instanceof ELEMENTARY_LENGTH longitude 存放在静态存储区。str 存放在堆中。
补充: Java 6及之后支持逃逸分析技术,可将部分堆对象放至栈上以提升性能。
第三题:海量数据相关(腾讯)
问题: 40亿个不重复的UIint数,且未排序。给定一个数,如何快速判断其是否存在?
解析:
方案1:位运算法
- 申请512M内存,覆盖40亿个数。
- 读取40亿数,设置相应bit。
- 查询数时,检查对应bit是否为1。
方案2:分治法
- 按最高bit切分数到两个文件:最高bit为0或1。
- 继续切分次高bit,直至每个分组包含 logically < 2^30/2 个数。
- 逐级查找,最终在确定的分组中进行精确查找。
结论: 方法1耗时O(1),方法2时间复杂度O(log n)。
第四题:Hadoop相关(阿里)
问题: MapReduce中排序发生在哪些阶段?能否避免?原因是什么?
解析:
Map阶段:
- Map函数输出的中间结果按照key排序,并写入本地文件。
Reduce阶段:
- Reduce函数接收已按key排序的中间文件,对各分区的数据分别排序后进行处理。
是否能避免:
- Hadoop MapReduce默认会对输出数据进行排序。
- 不能避免,因为Map阶段的中间数据排序是为了减轻Reduce阶段的负担。
优化方法: 使用Combiner减少Map阶段输出文件数量,提升读写效率。
第五题:Kafka相关(商汤科技)
问题: Kafka的数据分区和消费者关系? 数据offset读取流程是什么?Kafka如何保证数据顺序?
解析:
- 分区与消费者关系: 每个分区只能由一个消费者组中的成员消费。
- offset读取流程:
- 连接ZK集群,获取topic的分区信息。
- 连接Leader Broker,获取offset。
- 通过offset定位到具体段落和位置,读取数据。
Kafka数据顺序性: 只保证同一分区内数据顺序,无法保证分区间的顺序。建议将相关业务逻辑放入同一分区。
第六题:分布式相关(阿里)
问题: 三种分布式锁分别是什么?
解析:
基于数据库的分布式锁:
- 悲观锁: 使用for update锁定资源,实现基于数据库的分布式锁。
- 乐观锁: 使用递增版本号字段,基于CAS算法实现。
基于缓存的分布式锁:
- 使用Redis等缓存工具,通过setnx实现锁定。可以设置过期时间,防止死锁。
基于Zookeeper的分布式锁:
- 在Zookeeper的节点下生成唯一的顺序节点,通过检查当前节点序号是否最小来获取锁。
优缺点:
- Zookeeper锁: 高可用性,但性能较低。
- 数据库锁、缓存锁: 需要频繁轮询,性能较差。
第七题:Hadoop和Spark的区别(京东金融)
问题: Hadoop和Spark的相同点和不同点?
解析:
- 相同点: 都基于 MapReduce 计算架构。
- 主要区别: Spark是内存计算框架,支持迭代式操作;Hadoop基于磁盘IO适合大数据批处理。
- 性能对比: Spark速度更快,但内存使用比Hadoop更容易溢出。
第八题:Yarn相关(特斯拉)
问题: Yarn程序在集群上如何执行?
解析:
- YARN通过 ResourceManager 分配资源和监控任务。
- ApplicationMaster申请资源并分配任务给节点。
- 每个节点上运行NodeManager,负责任务的启动和资源监控。
第九题:数据质量相关(蚂蚁金服)
问题: 数据质量如何监控?
解析:
- 数据量监控: 通过SQL查询数据量,设置阈值判断。
- 单表空值检测: 查询空值数量,设置百分比阈值。
- 重复值检测: 去重统计,计算异常数据量。
- 跨表对比: 通过発生率计算数据一致性。
第十题:海量数据相关(百度)
问题: 在40亿次请求日志中,找出访问百度次数最多的IP?
解析:
- 使用分而治之法:按照IP地址的Hash值将日志分分布存储。
- 对每个分区构建频率统计,找出最大频率IP。
算法思路:
将IP按Hash值分配到多个文件中。 每个文件内用HashMap按频率统计。 找出频率最高的文件,进行细分。
如需进一步交流,欢迎与我私聊!
转载地址:http://rbgiz.baihongyu.com/