zoukankan      html  css  js  c++  java
  • 蚂蚁金服电话面试问题

    我面试的职位是数据研发工程师。

    前几天投了蚂蚁金服的简历,之后打电话通知我第二天进行电话面试。由于只剩一晚上的时间了准备不够充分,回答的不是很好,在此再次重温一下面试过程。

    刚开始面试官就让我自我介绍嘛,就是说了说自己的情况以及做过的项目。(这点包括简历上写的很重要,因为面试官会根据你的回答来进行下一步的提问,没有做过的千万不要去说)。

    因为投的是大数据方向的,所以面试官问的全是大数据方向的。

    1.阿里云和腾讯云的区别。(由于我是有阿里云和腾讯云服务器搭建大数据平台的,所以面试官问了这个)

      操作系统
        阿里云:CentOS、openSUSE、Ubuntu、Windows Server 2008 R2、Aliyun Linux、Debian(所Aliyun Linux外,所有系统均提供32位和64位版本、Win2008提供中/英文)
        腾讯云:CentOS、SUSE、Ubuntu、Windows Server 2008 R2(所有系统仅支持64位)
      特色系统
        阿里云:北京、杭州、青岛机房支持“镜像市场”,可选择已集成建站系统、开发环境的系统,如集成wordpress、LAMP、LNMP、ASP/.NET、JDK、WEB管理面板等等。
      数据盘
        阿里云:购买时最多可添加4块,每块最高2000GB,购买后不支持卸载。
        腾讯云:购买时可购一块,最高500G
      独立磁盘
        阿里云:可添加“独立的磁盘”,不限数量与容量,“独立云磁盘可以单独购买,按需付费,独立存在。独立云磁盘可以在同一可用区内的不同ECS实例间自由挂载和卸载。”
        腾讯云:暂无

    2.HDFS上传文件的过程(工作机制)

      1)客户端向namenode发送上传文件请求,namenode对要上传目录和文件进行检查,判断是否可以上传,并向客户端返回检查结果。

      2)客户端得到上传文件的允许后读取客户端配置,如果没有指定配置则会读取默认配置(例如副本数和块大小默认为3和128M,副本是由客户端决定的)。向namenode请求上传一个数据块。

      3)namenode会根据客户端的配置来查询datanode信息,如果使用默认配置,那么最终结果会返回同一个机架的两个datanode和另一个机架的datanode。这称为“机架感知”策略。

      4)客户端在开始传输数据块之前会把数据缓存在本地,当缓存大小超过了一个数据块的大小,客户端就会从namenode获取要上传的datanode列表。之后会在客户端和第一个datanode建立连接开始流式的传输数据,这个datanode会一小部分一小部分(4K)的接收数据然后写入本地仓库,同时会把这些数据传输到第二个datanode,第二个datanode也同样一小部分一小部分的接收数据并写入本地仓库,同时传输给第三个datanode,依次类推。这样逐级调用和返回之后,待这个数据块传输完成客户端后告诉namenode数据块传输完成,这时候namenode才会更新元数据信息记录操作日志。

      5)第一个数据块传输完成后会使用同样的方式传输下面的数据块直到整个文件上传完成。

    3.yarn的工作原理

      ·当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序:

      第一个阶段是启动ApplicationMaster;

      第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。

      步骤1 用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

      步骤2 ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

      步骤3 ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。

      步骤4 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

      步骤5 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。

      步骤6 NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

      步骤7 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。

           在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。

       步骤8 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。

      参考博客:https://blog.csdn.net/zmx729618/article/details/73321316

    4.Hadoop的伪分布式运行模式

      伪分布式只有一个节点

      这种模式也是在一台单机上运行,但用不同的Java进程模仿分布式运行中的各类结点: (NameNode,DataNode,JobTracker,TaskTracker,SecondaryNameNode)

      请注意分布式运行中的这几个结点的区别:

    1. 从分布式存储的角度来说,集群中的结点由一个NameNode和若干个DataNode组成,另有一个SecondaryNameNode作为NameNode的备份。
    2. 从分布式应用的角度来说,集群中的结点由一个JobTracker和若干个TaskTracker组成,JobTracker负责任务的调度,TaskTracker负责并行执行任务。TaskTracker必须运行在DataNode上,这样便于数据的本地计算。JobTracker和NameNode则无须在同一台机器上。一个机器上,既当namenode,又当datanode,或者说 既 是jobtracker,又是tasktracker。没有所谓的在多台机器上进行真正的分布式计算,故称为"伪分布式"。开启多个进程模拟完全分布式,但是并没有真正提高程序执行的效率。

     5.HDFS和Spark的对比

      参考博客:https://blog.csdn.net/yanjiangdi/article/details/78260186

    6.除了spark你还了解过其他大数据框架么,有什么区别

    Hadoop框架

    提起大数据,第一个想起的肯定是Hadoop,因为Hadoop是目前世界上应用最广泛的大数据工具,他凭借极高的容错率和极低的硬件价格,在大数据市场上风生水起。Hadoop还是第一个在开源社区上引发高度关注的批处理框架,他提出的Map和Reduce的计算模式简洁而优雅。迄今为止,Hadoop已经成为了一个广阔的生态圈,实现了大量算法和组件。由于Hadoop的计算任务需要在集群的多个节点上多次读写,因此在速度上会稍显劣势,但是其吞吐量也同样是其他框架所不能匹敌的。

    Storm框架

    与Hadoop的批处理模式不同,Storm采用的是流计算框架,由Twitter开源并且托管在GitHub上。与Hadoop类似的是,Storm也提出了两个计算角色,分别为Spout和Bolt。

    如果说Hadoop是水桶,只能一桶一桶的去井里扛,那么Storm就是水龙头,只要打开就可以源源不断的出水。Storm支持的语言也比较多,Java、Ruby、Python等语言都能很好的支持。由于Storm是流计算框架,因此使用的是内存,延迟上有极大的优势,但是Storm不会持久化数据。

    Samza框架

    Smaza也是一种流计算框架,但他目前只支持JVM语言,灵活度上略显不足,并且Samza必须和Kafka共同使用。但是响应的,其也继承了Kafka的低延时、分区、避免回压等优势。对于已经有Hadoop+Kafka工作环境的团队来说,Samza是一个不错的选择,并且Samza在多个团队使用的时候能体现良好的性能。

    Spark框架

    Spark属于前两种框架形式的集合体,是一种混合式的计算框架。它既有自带的实时流处理工具,也可以和Hadoop集成,代替其中的MapReduce,甚至Spark还可以单独拿出来部署集群,但是还得借助HDFS等分布式存储系统。Spark的强大之处在于其运算速度,与Storm类似,Spark也是基于内存的,并且在内存满负载的时候,硬盘也能运算,运算结果表示,Spark的速度大约为Hadoop的一百倍,并且其成本可能比Hadoop更低。但是Spark目前还没有像Hadoop哪有拥有上万级别的集群,因此现阶段的Spark和Hadoop搭配起来使用更加合适。

    Flink框架

    Flink也是一种混合式的计算框架,但是在设计初始,Fink的侧重点在于处理流式数据,这与Spark的设计初衷恰恰相反,而在市场需求的驱使下,两者都在朝着更多的兼容性发展。Flink目前不是很成熟,更多情况下Flink还是起到一个借鉴的作用。

     6.Java的内容泄漏

      内存泄露是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄露。内存泄露有时不严重且不易察觉,这样开发者就不知道存在内存泄露,但有时也会很严重,会提示你Out of memory。

      参考博客:https://www.cnblogs.com/panxuejun/p/5883044.html

  • 相关阅读:
    Intellij IDEA 关闭阿里编码规约“请不要使用行尾注释”提醒
    VS 进行了无法编译的编辑
    IntelliJ IDEA lombok log 报红
    SQL Server 事务执行SQL
    Linux 检查应用不在现就重启
    Java入门5.2---String类、StringBuffer类、StringBuilder类、System类、Data类、SimpleDataFormat类、Calendar类、Math类、BigInteger类与BigDecimal类
    为什么要进行补偿
    解决flex布局中 space-between方法的排版问题
    桑基图的使用场景
    清蒸罗非鱼的做法和步骤
  • 原文地址:https://www.cnblogs.com/aishanyishi/p/10525801.html
Copyright © 2011-2022 走看看