2021超全大数据面试宝典,吐血总结十万字,大数据面试收藏这一篇就够了

Posted 五分钟学大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021超全大数据面试宝典,吐血总结十万字,大数据面试收藏这一篇就够了相关的知识,希望对你有一定的参考价值。

本文最新版已发布至公众号【五分钟学大数据】

获取此套面试题最新pdf版,请搜索公众号【五分钟学大数据】,对话框发送 面试宝典

扫码获取最新PDF版

版本

时间

描述

V1.0

2020-02-18

创建

V1.2

2020-06-17

新增 spark 、flink相关面试题

V1.3

2021-03-18

新增 java、JVM、mysql、JUC等

持续更新中…

本文档更新只发于公众号:五分钟学大数据


本套面试题堪称史上最全,既有面试技巧,面试流程,还有技术总结,面试真题,包含算法,Java,Mysql,大数据框架,大数据项目等(持续更新中最新版请扫描下方二维码关注公众号:五分钟学大数据,回复【面试宝典】获取)。

第一版是按照大数据技术进行划分(另一版,可在公众号【五分钟学大数据】后台发送 面试 获取),第二版是综合版 (此版)。

扫码关注公众号,获取最新PDF版:(对话框发送 面试宝典)

目   录

第1章        找工作流程. 1

1.1         学习技能. 1

1.2         编写简历. 1

1.3         投简历. 1

1.4         约面试时间. 1

1.5         面试. 1

1.6         等回复. 1

1.7         拿offer 2

1.8         入职. 2

1.9         准备必备资料,签合同. 2

第2章        面试说明. 2

2.1         笔试. 2

2.2         面试. 3

2.2.1 人事面试. 3

2.2.2 ·手写代码. 3

2.2.3 技术经理面试. 3

2.2.4 CTO/技术架构师等面试(如果过了技术经理面试). 4

2.3         机试. 4

2.4         面试考察方式. 4

2.4.1 知识广度. 4

2.4.2 知识深度. 6

2.5         面试过程最关键的是什么?. 7

2.6         面试要点. 7

2.7         面试技巧. 7

2.7.1 六个常见问题. 7

2.7.2 两个注意事项. 8

2.7.3 自我介绍(控制在4分半以内,不超过5分钟). 8

第3章        手写代码. 9

3.1         冒泡排序. 9

3.2         二分查找. 10

3.3         快排. 12

3.4         归并. 13

3.5         二叉树之Scala实现. 15

3.5.1 二叉树概念. 15

3.5.2 二叉树的特点. 15

3.5.3 二叉树的Scala代码实现. 15

3.6         手写Spark-WordCount 21

第4章        项目架构. 21

4.1         数仓概念. 21

4.2         系统数据流程设计. 22

4.3         框架版本选型. 22

4.4         服务器选型. 22

4.5         集群规模. 23

4.6         人员配置参考. 23

4.6.1 整体架构. 23

4.6.2 你们部门的职级等级,晋升规则. 23

4.6.3 人员配置参考. 23

第5章        项目涉及技术. 24

5.1         Linux&Shell相关总结. 24

5.1.1 Linux常用命令. 24

5.1.2 Shell常用工具. 24

5.2         Hadoop相关总结. 24

5.2.1 Hadoop常用端口号. 24

5.2.2 Hadoop配置文件以及简单的Hadoop集群搭建. 25

5.2.3 HDFS读流程和写流程. 25

5.2.4 MapReduce的Shuffle过程及Hadoop优化(包括:压缩、小文件、集群优化). 26

5.2.5 Yarn的Job提交流程. 28

5.2.6 Yarn的默认调度器、调度器分类、以及他们之间的区别. 29

5.2.7 项目经验之LZO压缩. 30

5.2.8 Hadoop参数调优. 31

5.2.9 项目经验之基准测试. 32

5.2.10 Hadoop宕机. 33

5.3         Zookeeper相关总结. 33

5.3.1 选举机制. 33

5.3.2 常用命令. 34

5.4         Flume相关总结. 34

5.4.1 Flume组成,Put事务,Take事务. 34

5.4.2 Flume拦截器. 34

5.4.3 Flume Channel选择器. 35

5.4.4 Flume监控器. 35

5.4.5 Flume采集数据会丢失吗?(防止数据丢失的机制). 36

5.4.6 Flume内存. 36

5.4.7 FileChannel优化. 36

5.4.8 HDFS Sink小文件处理. 37

5.5         Kafka相关总结. 38

5.5.1 Kafka架构. 38

5.5.2 Kafka压测. 38

5.5.3 Kafka的机器数量. 38

5.5.4 Kafka的日志保存时间. 38

5.5.5 Kafka的硬盘大小. 38

5.5.6 Kafka监控. 38

5.5.7 Kakfa分区数. 39

5.5.8 副本数设定. 39

5.5.9 多少个Topic 39

5.5.10 Kafka丢不丢数据. 39

5.5.11 Kafka的ISR副本同步队列. 39

5.5.12 Kafka中数据量计算. 39

5.5.13 Kafka挂掉. 40

5.5.14 Kafka消息数据积压,Kafka消费能力不足怎么处理?. 40

5.5.15 Kafka的再平衡机制. 40

5.6         Hive相关总结. 47

5.6.1 Hive的架构. 47

5.6.2 Hive和数据库比较. 48

5.6.3 内部表和外部表. 48

5.6.4 4个By区别. 48

5.6.5 窗口函数. 48

5.6.6 自定义UDF、UDTF 49

5.6.7 Hive优化. 49

5.7         HBase相关总结. 51

5.7.1 HBase存储结构. 51

5.7.2 读流程. 51

5.7.3 写流程. 52

5.7.4 数据flush过程. 52

5.7.5 数据合并过程. 52

5.7.6 hbase-default.xml中相关参数. 53

5.7.7 rowkey设计原则. 54

5.7.8 RowKey如何设计. 54

5.8         Sqoop参数. 54

5.8.1 Sqoop导入导出Null存储一致性问题. 54

5.8.2 Sqoop数据导出一致性问题. 54

5.8.3 Sqoop底层运行的任务是什么. 55

5.8.4 Sqoop数据导出的时候一次执行多长时间. 55

5.9         Scala相关总结. 55

5.9.1 元组. 55

5.9.2 隐式转换. 55

5.9.3 函数式编程理解. 56

5.9.4 样例类. 56

5.9.5 柯里化. 56

5.9.6 闭包. 57

5.9.7 Some、None、Option的正确使用. 57

5.10       Spark相关总结. 57

5.10.1 Spark有几种部署方式?请分别简要论述. 57

5.10.2 Spark任务使用什么进行提交,javaEE界面还是脚本. 58

5.10.3 Spark提交作业参数(重点). 58

5.10.4 简述Spark的架构与作业提交流程(画图讲解,注明各个部分的作用)(重点). 59

5.10.5 如何理解Spark中的血统概念(RDD)(笔试重点). 59

5.10.6 简述Spark的宽窄依赖,以及Spark如何划分stage,每个stage又根据什么决定task个数? (笔试重点). 59

5.10.7 请列举Spark的transformation算子(不少于8个),并简述功能(重点). 59

5.10.8 请列举Spark的action算子(不少于6个),并简述功能(重点). 60

5.10.9 请列举会引起Shuffle过程的Spark算子,并简述功能。. 61

5.10.10 简述Spark的两种核心Shuffle(HashShuffle与SortShuffle)的工作流程(包括未优化的HashShuffle、优化的HashShuffle、普通的SortShuffle与bypass的SortShuffle)(重点). 61

5.10.11 Spark常用算子reduceByKey与groupByKey的区别,哪一种更具优势?(重点). 62

5.10.12 Repartition和Coalesce关系与区别. 63

5.10.13 分别简述Spark中的缓存机制(cache和persist)与checkpoint机制,并指出两者的区别与联系. 63

5.10.14 简述Spark中共享变量(广播变量和累加器)的基本原理与用途。(重点). 63

5.10.15 当Spark涉及到数据库的操作时,如何减少Spark运行中的数据库连接数?. 64

5.10.16 简述SparkSQL中RDD、DataFrame、DataSet三者的区别与联系? (笔试重点). 64

5.10.17 SparkSQL中join操作与left join操作的区别?. 65

5.10.18 SparkStreaming有哪几种方式消费Kafka中的数据,它们之间的区别是什么? (重点). 65

5.10.19 简述SparkStreaming窗口函数的原理(重点). 66

5.10.20 请手写出wordcount的Spark代码实现(Scala)(手写代码重点). 67

5.10.21 如何使用Spark实现topN的获取(描述思路或使用伪代码)(重点). 67

5.10.22 京东:调优之前与调优之后性能的详细对比(例如调整map个数,map个数之前多少、之后多少,有什么提升). 67

5.11       Flink相关总结. 68

5.11.1 简单介绍一下Flink 68

5.11.2 Flink相比Spark Streaming有什么区别?. 68

5.11.3 Flink中的分区策略有哪几种?. 70

5.11.4 Flink的并行度有了解吗?Flink中设置并行度需要注意什么?. 76

5.11.5 Flink支持哪几种重启策略?分别如何配置?. 76

5.11.6 Flink的分布式缓存有什么作用?如何使用?. 76

5.11.7 Flink中的广播变量,使用广播变量需要注意什么事项?. 77

5.11.8 Flink中对窗口的支持包括哪几种?说说他们的使用场景. 77

5.11.9 Flink 中的 State Backends是什么?有什么作用?分成哪几类?说说他们各自的优缺点?. 78

5.11.10 Flink中的时间种类有哪些?各自介绍一下?. 79

5.11.11 WaterMark是什么?是用来解决什么问题?如何生成水印?水印的原理是什么?. 79

5.11.12 Flink的table和SQL熟悉吗?Table API和SQL中TableEnvironment这个类有什么作用. 79

5.11.13 Flink如何实现SQL解析的呢?. 80

5.11.14 Flink是如何做到批处理与流处理统一的?. 80

5.11.15 Flink中的数据传输模式是怎么样的?. 81

5.11.16 Flink的容错机制. 82

5.11.17 Flink在使用Window时出现数据倾斜,你有什么解决办法?. 82

5.11.18 Flink任务,delay极高,请问你有什么调优策略?. 82

第6章        业务交互数据分析. 83

6.1         电商常识. 83

6.2         电商业务流程. 83

6.3         业务表关键字段. 83

6.3.1 订单表(order_info. 83

6.3.2 订单详情表(order_detail. 84

6.3.3 商品表. 84

6.3.4 用户表. 84

6.3.5 商品一级分类表. 84

6.3.6 商品二级分类表. 85

6.3.7 商品三级分类表. 85

6.3.8 支付流水表. 85

6.4         MySql中表的分类. 85

6.5         同步策略. 86

6.6         关系型数据库范式理论. 86

6.7         数据模型. 87

6.8         业务数据数仓搭建. 87

6.8.1 ods. 88

6.8.2 dwd. 88

6.8.3 dws. 88

6.9         需求一:GMV成交总额. 89

6.10       需求二:转化率. 89

6.10.1 新增用户占日活跃用户比率表. 89

6.10.2 用户行为转化率表. 89

6.11       需求三:品牌复购率. 89

6.11.1 用户购买商品明细表(宽表). 89

6.11.2 品牌复购率表. 89

6.12       项目中有多少张宽表. 90

6.13       拉链表. 90

第7章        项目中遇到过哪些问题. 91

7.1         Hadoop宕机. 91

7.2         Ganglia监控. 92

7.3         Flume小文件. 92

7.4         Kafka挂掉. 92

7.5         Kafka消息数据积压,Kafka消费能力不足怎么处理?. 92

7.6         Kafka数据重复. 92

7.7         Mysql高可用. 92

7.8         自定义UDF和UDTF解析和调试复杂字段. 93

7.9         Sqoop数据导出Parquet 93

7.10       Sqoop数据导出控制. 93

7.11       Sqoop数据导出一致性问题. 93

7.12       SparkStreaming优雅关闭. 94

7.13       Spark OOM、数据倾斜解决. 94

第8章        项目经验. 94

8.1         框架经验. 94

8.1.1 Hadoop 94

8.1.2 Flume 95

8.1.3 Kafka 95

8.1.4 Tez引擎优点(略过)?. 96

8.1.5 Sqoop参数. 96

8.1.6 Azkaban每天执行多少个任务. 96

8.2         业务经验. 97

8.2.1 ODS层采用什么压缩方式和存储格式?. 97

8.2.2 DWD层做了哪些事?. 97

8.2.3 DWS层做了哪些事?. 97

8.2.4 分析过哪些指标(一分钟至少说出30个指标). 99

8.2.5 分析过最难的两个指标,现场手写. 102

8.2.6 数据仓库每天跑多少张表,大概什么时候运行,运行多久?. 103

8.2.7 数仓中使用的哪种文件存储格式. 103

8.2.8 数仓中用到过哪些Shell脚本及具体功能. 104

8.2.9 项目中用过的报表工具. 104

8.2.10 测试相关. 104

8.2.11 项目实际工作流程. 104

8.2.12 项目中实现一个需求大概多长时间. 104

8.2.13 项目在3年内迭代次数,每一个项目具体是如何迭代的。. 105

8.2.14 项目开发中每天做什么事. 105

第9章        JavaSE(答案精简). 105

9.1         hashMap底层源码,数据结构. 105

9.2         Java自带有哪几种线程池?. 108

9.3         HashMap和HashTable区别. 109

9.4         TreeSet和HashSet区别. 110

9.5         String buffer和String build区别. 110

9.6         Final、Finally、Finalize 110

9.7         ==和Equals区别. 111

第10章     Redis(答案精简). 111

10.1       缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级. 111

10.2       哨兵模式. 118

10.3       数据类型. 119

10.4       持久化. 119

10.5       悲观锁. 120

10.6       乐观锁. 120

10.7       redis是单线程的,为什么那么快. 120

第11章     MySql 121

11.1       MyISAM与InnoDB的区别. 121

11.2       索引. 121

11.3       b-tree和b+tree的区别. 122

11.4       MySQL的事务. 122

11.5       常见面试sql 123

第12章     JVM 128

12.1       JVM内存分哪几个区,每个区的作用是什么? 128

12.2       Java类加载过程? 129

12.3       java中垃圾收集的方法有哪些? 130

12.4       如何判断一个对象是否存活?(或者GC对象的判定方法) 131

12.5       什么是类加载器,类加载器有哪些? 131

12.6       简述Java内存分配与回收策略以及Minor GC和Major GC(full GC)  132

第13章     JUC 132

13.1       Synchronized与Lock的区别. 132

13.2       Runnable和Callable的区别. 133

13.3       什么是分布式锁. 133

13.4       什么是分布式事务. 133

  1. 找工作流程
  1. 学习技能

1.1.1

  1. 编写简历

简历编写可在公众号【五分钟学大数据】后台发送:简历,获取大数据简历的模板,包含各个行业及各个项目,非常全。可直接扫码:

  1. 投简历

如能内推,尽量走内推路线,可免简历筛选,如果找不到内推路径,可在牛客网上搜内推码,上面有很多公司的员工发内推码。

招聘软件推荐 Boss直聘,这个软件还是很靠谱的,其他的智联招聘,拉勾,前程无忧,猎聘也不错。

  1. 约面试时间
  1. 一般需要多轮面试
  2. 不想去的公司先去面试,积累面试经验,想去的公司约到最后
  3. 合理安排面试时间,给自己尽可能的留一些复习的时间
  1. 面试
  1. 人事面试,了解基本情况--笔试/填表
  2. 一面:技术经理面试(面试官一般是入职之后你的直接上级,此面很重要)
  3. 二面:技术老大面试
  4. 三面:架构师/大Boss面试
  5. .....
  1. 等回复
  1. 不要立马入职
  1. 拿offer
  2. 入职
  3. 准备必备资料,签合同
  1. 面试说明
  1. 笔试
  1. 试题量:一般两页纸,多的有3页纸
  2. 考题类型:选择和简答,简答居多

选择题:基础知识类型的选择题(编程语言,数据库,操作系统,大数据要点知识,网络,计算机组成原理等)

    简答题

    1. 知识点的详细解释类,比如,MapReduce的Shuffle详细过程
    2. 对比之类,Hive内部表和外部表的区别,MapReduce和Spark的异同?

    编程题:算法题(考察逻辑思维,考察解答问题的方式方法等)

    数据库类型的SQL编写题目(MySQL或者Hive)这是必出题,也是分必拿题。否则就全盘覆没了。

SQL:必有(Hive和MySQL)

    场景题

    给你假定一种场景,让你给出解决方案,面试问的最多的也是这种

    遇到了问题(集群节点宕机,任务运行出错,数据丢失等),该如何解决?

    简单脚本题

    写出一个简单的数据处理脚本,或者运维脚本(会的就自己写,不会的就百度搜,或者求救于小伙伴)

  1. 面试
      1. 人事面试

聊基本情况,聊工作经历,聊人生价值观,聊对工作的态度,聊方方面面,就是不聊技术

请事先准备好针对你个人基本情况的面试题

1、比如你原来在上海,为何10月份来北京找工作?

2、比如工作经历中,有4个月是不上班的,怎么解释?

.....

      1. ·手写代码

也就是做题 

当然技术面试过程中,也有可能会出现手写代码的问题

经典手写代码:

  • 快速排序和归并排序,冒泡排序(优先级由高到低)
  • 一个设计模式的实现:比如单例,比如代理,比如装饰器
  • 多线程相关,比如两个线程交替执行
  • java,mapreduce,scala,spark的wordcount
  • 画出你的项目的架构图 或者 数据处理流程架构图
      1. 技术经理面试

基本只聊技术。

基本套路:

  • 先自我介绍
  • 然后介绍项目
  • 从项目入手
  • 先聊业务
  • 再切入到技术点
  • 问如何实现、项目结构、数据处理流程
  • 问遇到过什么难题,怎么解决的,怎么发现的和怎么避免
  • 问相类似的场景,如何做技术选型
  • 问相类似的突发情况,应该怎么决策快速解决问题

    考察广度的同时,也会考察深度

通俗的说,也就是会在不同的方向,不同的领域问各种问题,然后针对你能回答的问题,就深入探讨,以此得知你对这门技术的掌握程度

    所以:

    考察广度,就是看你的技术领域分布

    考察深度,就是看你你对这个技术掌握程度如何

    总体来说:

  • 聊业务
  • 聊技术
  • 聊问题
  • 聊解决方案
  • ....
      1. CTO/技术架构师等面试(如果过了技术经理面试)

    到了这种级别的面试,一般考察技术的就少了。

    更多的是考察发展,眼光更长远的,考察你的职业生涯规划,考察你的价值观,考察你是否符合公司的长期发展战略

    能了解公司更多信息,就切合公司实际去描述

    如果不了解公司的,那就尽量按照通用套路说

  1. 机试

少数场景会有的。但是不要慌。按照自己的本事来。

有些是现场的,这种很少。有些是给出需求之后让你回来之后自己做。

  1. 面试考察方式
      1. 知识广度

编程语言方向

    java是重点(重中之重),其次:scala、python

    java中的重点考察方向:

        集合(优缺点,底层实现,更好的替代方案,如何根据场景选择和使用)

        并发(锁,JMM,各种关键字(volite),技术点,线程池,......)

        面向对象

    数据库方向

    mysql是重点,其次是hbase,redis

    sql语句的编写和优化就不说了,没有不考查的 

    Hadoop体系/Spark体系

    架构原理

    工作机制

    典型的常见流程

    某个功能的详细分析

    问题和运维难点

    集群规模/集群规划

    任务多少

    任务运行总时长

    每天数据量

    总数据量

    多少条记录

    每条记录多大

    每条记录多少个字段

    hive的总表数等等

    其他知识:

        ElasticSearch

        Flink

        机器学习

        架构

        优化

        源码

        数据结构

        算法

      1. 知识深度

追根究底的问各种你答的上来的东西的底层实现细节,直到你答不上来为止,或者到他满意为止  

关于HashMap的问题: