博客
关于我
精选大数据面试真题10道(附答案详细解析)
阅读量:533 次
发布时间:2019-03-09

本文共 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/

    你可能感兴趣的文章
    设计模式之——桥接模式(Bridge)
    查看>>
    高性能MySQL——第三章服务器性能剖析
    查看>>
    【PTA】 敲笨钟 (20 分)
    查看>>
    nuxt.js项目在启动时设置默认跳转页面
    查看>>
    信号和槽
    查看>>
    redis只能做缓存?你错了
    查看>>
    材料学博士转型大数据开发,是一种什么体验?
    查看>>
    16-Android屏幕亮度调节
    查看>>
    17-Android系统应用默认开机启动
    查看>>
    Android Launcher 之源码下载
    查看>>
    设计模式(18)——中介者模式
    查看>>
    net start mysql 发生系统错误2 系统找不到指定的文件
    查看>>
    发工资的骚操作。。
    查看>>
    送一个ipad【最后一个】
    查看>>
    重磅!大数据《实战全栈工程师成长手册》,附 PDF & PPT 下载
    查看>>
    JAVA异常和基础类库
    查看>>
    洛谷【数据结构1-1】线性表
    查看>>
    AI技术国际领先!一文回顾百度大脑的2020
    查看>>
    CVPR 2021 | 港科大&旷视提出ACON:激活还是不激活?学习自定义激活函数
    查看>>
    EfficientNetV2震撼发布!更小的模型,更快的训练
    查看>>