ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大数据开发工程师面试题 (20.04.14)

2020-04-16 12:04:19  阅读:233  来源: 互联网

标签:面试题 14 flag 线程 key 算子 Spark 数据 20.04


概述

本篇博客将收集总结一些,本博主面试 大数据开发工程师 岗位遇到的面试题,虽然不一定高频,但是也算经验之谈,希望对各位有所帮助。

1.什么是Spark RDD

RDD:弹性分布式数据集 (Resilient Distributed DataSet)。

Spark 中最基本的数据抽象是 RDD。

创建RDD方法两种: 1.Driver并行化现有的Scala集合 2.引用外部存储系统

2.Spark算子有哪些

动作算子:map、filter、flatMap、mapPartition、mapPartitionwithIndex、coalesce、repartition、union、join、 cogroup、reduceByKey、aggregateByKey(部分即可)

转换算子:reduce、collect 、first、take 、aggregate、countByKey、foreach(部分即可)

所有的转换算子都是lazy执行的,只有在动作算子触发的时候任务才会被提交,这个时候转换算子才 会真正去执行。转换算子的返回值是RDD、而动作算子的返回值可以是Unit、Array,一个任务中只 能有一个动作算子,但是允许有多个转换算子。

3.Spark 有几种部署方式

①.Local: 运行在一台机器上,通常是练手或者测试环境。

②.Standalone:构建一个基于Mster+Slaves的资源调度集群,Spark任务提交给Master运行。是Spark自身的一个调度系统。

③.Yarn: Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。

④.Mesos:国内大环境比较少用。

4.什么是kafka 架构

kafka: 开源的流处理平台,该平台提供了消息的订阅与发布的消息队列,一般用作系统间解耦、异步通信、削峰填谷等作用。

5.hive出现reduce端OOM,怎么检查问题

这种情况一般是数据倾斜造成的,这时去查找聚合算子,修改该算子。

数据倾斜只会发生在shuffle过程中。这里给大家罗列一些常用的并且可能会触发shuffle操作的算子:distinct、groupByKey、reduceByKey、aggregateByKey、join、cogroup、repartition等。出现数据倾斜时,可能就是你的代码中使用了这些算子中的某一个所导致的。

6.什么是Hbase

HBase 是一个基于Hadoop的分布式,可扩展,巨大数据仓库.

7.Hbase的Rowkey设计原则

.固定格式

.不可使用随机的 UUID

.将查询的数据作为rowKey的组成部分

8.规避Hbase热点写问题

.Rowkey设计为Hash、随机值

.在Hbase上嫁接MQ充当缓冲区

.Rowkey设计为 hash+ElasticSearch 充当二次索引

9.多线程的创建

.继承Thread类

.实现Runnable接口

.通过Callable和FutureTask创建线程

.通过线程池创建线程

10.线程池 (根据个人理解)

线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。

参考博客: https://www.cnblogs.com/jiawen010/p/11855768.html

1.怎么保证kafka的数据顺序消费

:写N个queue,将具有相同key的数据都存储在同一个queue,然后对于N个线程,每个线程分别消费一个queue即可。

参考博客: https://blog.csdn.net/qq_31329893/article/details/90451889

2.hive中,一个10条数据的表left join 一个5条数据的表 on l.key=r.key 会产生多少条数据

答: 10条或以上

存在,第二个表中存在多个key相等的状态,这时,对于第一个表就有一行数据对应多行。

3.hbase与传统数据库的区别

.数据类型
.数据操作
.存储模式
.数据维护
.可伸缩性
.事务

参考博客: https://blog.csdn.net/joananjin/article/details/80002364

4.抽象类和接口有何区别

.构造方法
.成员变量
.抽象方法
.方法的访问类型
.静态方法
.静态成员变量
.实现与继承

参考博客: https://blog.csdn.net/qq_41933748/article/details/82670072

5.SpringBoot的入口类、入口类的一些注解和配置文件

@SpringBootApplication
@MapperScan(…)
用在入口类上{}

application.yml 配置文件(<==>application.properties

6.Yarn的调度器

FIFO 单一队列 生产环境不使用

Capacity Scheduler(容量调度器) 多队列,同时执行 ,并行度=队列数

Fair Sceduler(公平调度器) 多队列,执行并行度 >=队列数

7.HashMap

又是你!!!HashMap !!! 参考博客: https://www.cnblogs.com/duodushuduokanbao/p/9492952.html

1. 计算插入元素的key的hash值(n-1)& hash ,判断数组中是否存在该值,不存在则直接放入。存在,进行 key的 equals 判断。
2. 如果,2个key相等,则覆盖。如果key不等 :分为 如果是链表结构 则放入链表,判断长度是否>8,大于则链表转为红黑树。如果是红黑树,则直接放入节点中。
3..计算节点数是否大于阈值 (),大于,则扩容2倍。

8.算法 (这个题的我的答案肯定不是最优解,希望有仁兄给小弟指正~)

:假设某几天的股票价格已知【假设数组的数据已知】,你要先买进股票(必须先买)再卖出,求你采用最优化交易手段后,获得的最大利润是多少。

CODE:

package com.baizhi;

public class Temp {
    public static void main(String[] args) {
        /**
         * 根据题意,假设,我们已知某5天的股票价格是 3,4,1,2,5
         */
        double[] prices = {3.0, 4.0, 1.0, 2.0, 5.0};

        //定义一个标记值,这个值是个负值
        double flag = Integer.MAX_VALUE+1;
        /**
         * 思路:我们总是要先买股票,然后才能卖出,也就是说,卖出的价格只可能是在前一次价格之后
         */
        System.out.println("flag = " + flag);
        for (int i = 0; i < prices.length ; i++) {
            for (int j = i+1; j < prices.length; j++) {
                /**
                 * 后面的价格减去前面的价格,获取差价是正数并且是最大的部分,即是我们的最大收益
                 */
                double temp =  prices[j] - prices[i];
                //如果,这个差值大于flag,对flag,进行交换
                if(temp>flag){
                    flag = temp;
                }
            }
        }
        System.out.println("最大可获取收益是 \t" + flag);
    }
}
9.你设计的第8个程序的时间复杂度是多少(告辞,日后再解决)

参考博客:https://blog.csdn.net/virus2014/article/details/52274849

标签:面试题,14,flag,线程,key,算子,Spark,数据,20.04
来源: https://blog.csdn.net/ASYMUXUE/article/details/105522330

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有