大数据面试题总结

一 美团

  1. 自我介绍一下?

  2. 介绍一下最近的项目?

  3. 目前在研究什么技术?

  4. 如何判定一个表是事实表还是维度表?
    维度表示你要对数据进行分析时所用的一个量, 比如你要分析产品销售情况, 你可以选择按类别来进行分析,或按区域来分析. 这样的按…分析就构成一个维度。前面的示例就可以有两个维度:类型和区域。另外每个维度还可以有子维度(称为属性),例如类别可以有子类型,产品名等属性。下面是两个常见的维度表结构:

产品维度表:Prod_id, Product_Name, Category, Color, Size,Price 
时间维度表:TimeKey, Season, Year, Month, Date

事实表是数据聚合后依据某个维度生成的结果表。它的结构示例如下:

销售事实表:Prod_id(引用产品维度表), TimeKey(引用时间维度表), SalesAmount(销售总量,以货币计), Unit(销售量)

上面的这些表就是存在于数据仓库中的。从这里可以看出它有几个特点:

维度表的冗余很大,主要是因为维度一般不大(相对于事实表来说的),而维度表的冗余可以使事实表节省很多空间。

事实表一般都很大,如果以普通方式查询的话,得到结果一般发的时间都不是我们可以接受的。所以它一般要进行一些特殊处理。如SQL Server 2005就会对事实表进行如预生成处理等。

维度表的主键一般都取整型值的标志列类型,这样也是为了节省事实表的存储空间。

  1. 数据建模过程说一下?

  2. 三范式知道吗,说一下?

  3. 数据仓库模型建设可以使用范式建模吗,你是怎么看的?

  4. 缓慢变化维处理方式?

  5. 大宽表的优点与缺点?

  6. 拉链表的实现逻辑说一下?

  7. Mapreduce执行流程说一下?

  8. Shulffle过程瓶颈在哪里,你会怎么解决?

  9. 你刚说到会有小文件和数据倾斜,这个怎么处理?

  10. 空值key加随机数是一种数据倾斜解决方案,如果有单个key是热点值呢?又如果有多个key是热点值呢?用参数和代码分别怎么解决?

  11. Kylin调优?

  12. Kylin的优点和缺点?

  13. Kylin的rowkey如何设计?

  14. Kylin的cuboid,cube和segment的关系?

  15. 一张hive宽表有5个维度,kylin构建cube的时候我选了4个维度,我select *的时候会有几个维度字段?

  16. 其他olap工具有了解过吗?

  17. Flink savepoint和checkpoint?

  18. Flink算子记得哪些?

  19. Flink map和flatmap比较?

  20. flink双流join说一下?

  21. flink两段提交原理说一下?

  22. 你们数仓用的是hive还是spark,你平常怎么选择?

  23. Hive优化说一下

  24. 用你最熟悉的编程语言(java,python,scala)写一个二分查找(牛客网在线写)

  25. 订单表,t_order, 字段,user_id,order_id,ctime(10位时间戳),city_id,sale_num,sku_id(商品)

  26. 问题:20201201至今每日订单量top10的城市及其订单量(订单量对order_id去重)(在线写)

  27. 你有什么想问我的吗?

二 网易

  1. 你为什么想换工作?

  2. 你最近的项目是做了什么?

  3. 你觉得这个项目你们遇到的最大的挑战是什么?

  4. 你们开发规范是怎样的?

  5. 你们公司有哪些主题?

  6. 日志采集有没做过?

  7. 流量域一般怎么做?

  8. 路径分析怎么做?

  9. 如果你的代码运行很慢,你会怎么开始排查?

  10. 你们数据量大概有多大?

  11. 你还有什么想问我的吗?

三 网易

  1. spring AOP应用场景

  2. 分布式锁的几种实现方式

  3. 一个文件只有一行,但是这行有100G大小,mr会不会切分,我们应该怎么解决

  4. hdfs HA机制,一台namenode宕机了,joualnode,namenode,edit.log fsimage的变化

  5. 你们数仓怎么分层的以及各层主要做了什么

  6. 你们主题是怎么划分的,举个例子

  7. 如何判断一个模型的好坏

  8. rowkey一般如何设计,你项目中是如何设计的

  9. 你们需求的开发流程是什么样的

  10. kylin熟吗?kylin你一般怎么调优

  11. 两个数 a=3,b=5,如何不使用中间变量不使用函数的情况下调换他们

  12. hive开发过程中,你一般会怎么调优

  13. hive的执行计划有看过吗,你一般会关注哪几个点

  14. hive底层运行mr或者spark程序的时候语法树说一下

  15. ETL过程中,你们数据质量是怎么保证的

  16. datax源码有没有看过

  17. 用phenix和es作为hbase二级索引的区别,最新的hbase已经支持二级索引了,你清楚吗?

  18. 你有什么问题想问我吗

四 美团

  1. 开场问项目情况,叙述一遍做过的项目。

  2. 项目是否搭建数仓?(我做的是银行数仓,但是当时懵了,一直说做的数据集市)

  3. 主题域是怎么划分的?

  4. 脏数据怎么处理?

  5. 举例:客户等级这个属性是怎么加工的?比如金卡、银卡等,怎么划分?(个人感觉是面试官想要问我明细层数据是怎么处理的,而我理解成具体的这件事,这件事没啥划分的。。。银行怎么定义我们就怎么取)

  6. 怎么进行数据建模?存款、贷款等业务。

  7. hive的优化

  8. mapreduce的具体流程

  9. mr中join操作的具体原理

  10. 数据倾斜的处理方式

  11. 有没有用过udf函数,自定义函数分为几种?

  12. 怎么从一个字符串中把数字拆出来?

  13. hbase有了解吗,原理是什么。hbase的优化怎么做

  14. spark的原理和优化

  15. spark和mr的区别

  16. mysql中B树和B+树的原理和区别

  17. java的快排算法实现

  18. kylin的原理和优化。

  19. 为什么kylin的维度不建议过多

  20. 实时数据是否有了解,过程是什么

  21. 三范式

  22. 星型建模和雪花建模的区别

  23. mysql事务锁有几种,分别是什么

  24. storm是否有了解

  25. 如何计算新用户和老用户?

  26. sql题:给定一个表temp,字段是 user_id,clo1,col2…col12 12各字段代表12个月电费,求最终结果展现:user_id,month,money

五 微店

  1. 数据模型如何构建的,星型、雪花、星座的区别和工作中如何使用;

  2. 如何优化整个数仓的执行时长,比如7点所有任务跑完,如何优化到5点;

  3. 数据倾斜,遇到哪些倾斜,怎么发现的?怎么处理的?;

  4. 如何保证数据质量;

  5. 如何保证指标一致性;

  6. 了解onedata吗,说说你的理解;

  7. 数据漂移如何解决;

  8. 实时场景如何解决的;

9、拉链表如何设计,拉链表出现数据回滚的需求怎么解决。

六 阿里

  1. 自我介绍;

  2. 平台选型依据;

  3. 数仓分层、模型、每层都是做什么的?为什么这么做?

  4. 交叉维度的解决方案?

  5. 数据质量如何保证(DQC)?

  6. 任务延迟如何优化(SLA)?

  7. 聊一下数据资产。

  8. spark streaming如何保证7*24小时运行机制?

  9. spark streaming是Exactly-Once吗?

  10. 如果让你设计实时数仓你会如何设计,为什么?

  11. 聊聊hive的执行引擎,spark和mr的区别?

  12. hive的jion底层mr是如何实现的?

  13. 指标如何定义?

  14. sql问题:连续活跃n天用户的获取;数据倾斜的sql如何优化;数据量大的sql如何优化?

  15. 你有什么问我的吗?

七 蚂蚁

  1. 和一面一样自我介绍;

  2. 因为简历上写有大数据平台选型,所以问选型的依据,不同大数据平台的优缺点;

  3. 数据仓库主题的划分,参考Teradata的LDM模型;

  4. Kimball和Inmon的相同和不同;

  5. 数据质量管理、数据治理有什么好的方案?知识库管理有什么好的思路?血缘关系图。

  6. 元数据管理相关问题,集群存储不够了,需要清理不需要的任务和数据该怎么做?

  7. 业务库2亿数据入仓的策略,一次全量,之后每次增量;

  8. 什么场景会出现数据倾斜,怎么解决?比如select user_id,count(1) from table group by user_id,其中某些user_id的访问量很大,查询不出结果该怎么办?

  9. sql里面on和where有区别吗?

  10. 还有一个sql问题,忘掉了;

  11. 聊一下技术架构,整个项目每个环节用的什么技术这个样子;

  12. hive、hbase、spark。。。。这些大数据组件,熟悉哪个或者哪些?我说hive和hbase,对方就问hive和hbase的原理,差异等问题;

  13. 有没有实时数仓的经验,数据实时入仓思路,canal;

  14. 你对当前的项目组有没有什么自己的看法、意见或者需要改进的地方,这个改进对你有没有什么影响

  15. ods的增量能否做成通用的?

  16. 公共层和数据集市层的区别和特点?

  17. 用mr实现用户pv的top10?

  18. map输入数据,将数据转换成(用户,访问次数)的键值对,然后reduce端实现聚合,并且将结果写入用户、访问次数的实体类,并且实现排序,最后的结果做一个top10的筛选

  19. sql问题,连续几天活跃的用户?

  20. 使用row number排序,然后时间-排序字段,减的结果分组,相同的就是连续的

  21. 从原理上说一下mpp和mr的区别

  22. 对了中间还有问数仓数据的输出主要是哪些还有数仓的分层;

八 蚂蚁

  1. 两轮技术面、一轮人事面

  2. 手写sql问题:连续活跃…

  3. left semi join和left join区别;

  4. 维度建模和范式建模的区别;

  5. 埋点的码表如何设计;

  6. 数据倾斜(hive+spark);

  7. group by为什么要排序;

  8. 集市层和公共层的区别;

  9. 缓慢变化维的处理方式;

  10. boss问了jvm、堆栈;

  11. 说说印象最深的一次优化场景,hive常见的优化思路;

  12. 数据质量相关;

  13. 说说你从0-1搭建数仓都做了什么?你觉得最有挑战的是什么?

  14. 你有什么问题问我。

九 蚂蚁
SQL笔试题

题目1

背景说明:

以下表记录了用户每天的蚂蚁森林低碳生活领取的记录流水。

table_name:user_low_carbon

seq(key) user_id data_dt low_carbon

流水号 用户 日期 减少碳排放(g)

xxxxx01 u_001 2017/1/1 10

xxxxx02 u_001 2017/1/2 150

xxxxx03 u_001 2017/1/2 110

xxxxx04 u_001 2017/1/2 10

xxxxx05 u_001 2017/1/4 50

xxxxx06 u_001 2017/1/4 10

xxxxx07 u_001 2017/1/6 45

xxxxx08 u_001 2017/1/6 90

xxxxx09 u_002 2017/1/1 10

xxxxx10 u_002 2017/1/2 150

xxxxx11 u_002 2017/1/2 70

xxxxx12 u_002 2017/1/3 30

xxxxx13 u_002 2017/1/3 80

xxxxx14 u_002 2017/1/4 150

xxxxx14 u_002 2017/1/5 101

xxxxx15 u_002 2017/1/6 68

xxxxx16 u_002 2017/1/6 120

蚂蚁森林植物换购表,用于记录申领环保植物所需要减少的碳排放量

table_name: plant_carbon

plant_id plant_name low_carbon

植物编号 植物名 换购植物所需要的碳

p001 梭梭树 17900

p002 沙柳 19680

p003 樟子树 146210

p004 胡杨 215680

1、蚂蚁森林植物申领统计

问题:假设2017年1月1日开始记录低碳数据(user_low_carbon),假设2017年10月1日之前满足申领条件的用户都申领了一颗p004-胡杨,剩余的能量全部用来领取“p002-沙柳” 。

统计在10月1日累计申领“p002-沙柳” 排名前10的用户信息;以及他比后一名多领了几颗沙柳(加分选项,可不做)。

得到的统计结果如下表样式:

user_id plant_count less_count(比后一名多领了几颗沙柳)

u_101 1000 100

u_088 900 400

u_103 500 …

2、蚂蚁森林低碳用户排名分析

问题:查询user_low_carbon表中每日流水记录,条件为:用户在2017年,连续三天(或以上)的天数里,每天减少碳排放(low_carbon)都超过100g的用户低碳流水。

需要查询返回满足以上条件的user_low_carbon表中的记录流水。例如用户u_002符合条件的记录如下,因为2017/1/2~2017/1/5连续四天的碳排放量之和都大于等于100g:

seq(key) user_id data_dt low_carbon

xxxxx10 u_002 2017/1/2 150

xxxxx11 u_002 2017/1/2 70

xxxxx12 u_002 2017/1/3 30

xxxxx13 u_002 2017/1/3 80

xxxxx14 u_002 2017/1/4 150

xxxxx14 u_002 2017/1/5 101

题目2

学校的期末考试结束后,考试成绩被存储在一张表中TableA中,包含信息:sn(学号), sourse(课程),score(成绩)。班主任想做如下统计:

1、统计每个学生的总分,排名,当前排名与下一名次总分差(如:第n名总分-第n+1名总分,即为分差);

2、统计英语(sourse=ENG)挂科(score<60),但是总分排名进入前20%的学生名单以及他们的总分成绩;

3、统计至少两门科目满分(score=100)的同学中,总分排名第二的学生的学号;

题目3

计算90分位。有10000个用户,每个用户有user_id,和不同的交易量trd_cnt。

求:按照交易量从大到小排序,选出最少的、能占总体交易量90%的用户id(这些用户交易量占整体交易量的90%)。

十 蚂蚁

  1. 设计并实现一个简易的缓存框架,要求支持并发的读写和LRU缓存淘汰算法,并考虑性能

  2. 编写一个程序,开启3个线程,

这3个线程的ID分别为A、B、C,3个线程交替打印1-100的整数,要求输出结果有序,

样例Sample:

Thread1: 1

Thread2: 2

Thread3: 3

Thread1: 4

Thread2: 5

Thread3: 6

Thread3: 99

Thread1: 100

  1. 遍历一个二叉树,打印出该路径中每个节点数字的和与给定目标值一致的有效路径。

有效路径:从根节点到叶节点的路径。

给定一个二叉树 :

 1

/ \

2 4

/ \

2 3

目标值= 5时返回结果:

1 2 2

1 4

  1. 使用两个栈来实现队列的一些操作。

队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。

pop和top方法都应该返回第一个元素的值。

样例:比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2

要求:仅使用两个栈来实现它,不使用任何其他数据结构,push,pop 和 top的复杂度都应该是均摊O(1)的

  1. 比较一个源字符串和一个目标字符串,

如果在源字符串中包含目标字符串全部字符,输出所包含的第一个最小子串;

如果不存在,输出空。

:样例

source = “BPDAUNZHGAHSIWBADNC”,target = “BDN” 满足要求的解 “BADN”

要求:时间复杂度为O(n^2)

十一 贝壳
1、你们这边数据量有多少呢,就是从ods到ads层一共多少数据量?

2、拉链表如果有一天的数据错了,比如说到12月15号,但是发现11月10号拉链的数据错了,导致后续拉链的结果都错了,这个应该怎么修正

拉链表的回滚问题,网上找答案

3、Parquet和Orc和Rc的比较?

4、列式存储是什么?行数比较大的情况,比如说上亿,那么列式存储是怎么做的?列式存储是为了解决什么问题?

5、dwd层有多少张表,每张表多少数据量

6、null值怎么打散,打散的伪代码或者sql

使用concat,split

7、如果一张表的某个字段作为join的字段,但是这个字段有倾斜的非常厉害,比如性别这个字段,有男1000万个,女5万,这时候数据倾斜如何解决?

8、一个SQL在MR中经过哪些过程,比如说

select a.id, b.id

from a

join b

on a.id = b.id

在MR中是怎么join的,left join在MR中是怎么实现的?

9、Kylin的构建过程是怎么样的

10、Kylin维度优化有几种类型

比如说强制维度,层级维度

11、Kylin的构建算法

逐层构建,快速构建

12、HBase的Rowkey优化

有多个维度,怎么设计Rowkey才能查询的快(就是维度要体现到Rowkey的设计里面)

比如有如下维度

year

month

day

事业部

大区

分行

工号

RowKey应该怎么排序呢,我把什么放在前面,有什么通用的原则吗,这样设计之查询速度能快呢?

十二 字节

  1. sparkstreaming的书写结构

  2. rdd、ck、cache

  3. topn的具体步骤

  4. 怎么可以实现在一小时topn的固定窗口情况下,0-10、0-20也会有结果的显示

  5. 架构?

  6. 怎样建模?

  7. 一天多少任务,多少表

  8. 什么技术进行存储

  9. 内外部表的区别、优缺点

  10. 数据存在hdfs上回有压缩吗?有什么优缺点?

  11. hdfs为什么会比较厌恶小文件

  12. 数据源是来自于哪里

  13. flume会不会丢数据

  14. 数据倾斜问题

  15. 二次聚合对uv的话有没有什么问题

  16. 二面:

  17. 数仓的搭建

  18. 分工 角色

  19. 分层怎么分的

  20. sqoop怎么解决数据变动的问题

  21. 维度退化具体的内容

  22. 每天的数据量

  23. 你们有主题的概念吗?

  24. 主题的划分原则

  25. 7日的留存率怎么求?

  26. 有一些任务需要回溯,就是比如说历史时间需要重新执行,有遇到这种情况吗?

  27. 核心指标都有哪些?

  28. 怎么保证每天能在固定的时间数据产出?

  29. 数仓建模的方式?

  30. 模型的选取?

  31. stage的划分依据?

  32. shuffle什么原因引起的?

  33. 哪一些算子会引起shuffle?

  34. 怎么识别抖音种的大学生用户?用什么数据识别

十三 虾皮

  1. 什么RDD可以用repartition?

  2. coaldesce shuffle为true

  3. flume断点续传多久保留一次offset

  4. 整个flume有使用高可用吗?怎么配置高可用?

  5. 对kafka有一定了解吗?

  6. 能大致说一下kafka的写流程吗?

  7. ack的情况

  8. kafka的最终文件夹存储方式是什么样子的?

  9. kafka为什么可以快速根据分区和offset找到我们的数据记录?

  10. 索引文件中是怎么记录这些消息的?

  11. 消费者组的概念怎么理解?

  12. kafka的选举机制?

  13. azkaban怎么调度的?

  14. hive做过哪些参数的优化?

  15. mapjoin有什么缺点?

  16. 分桶表分区表区别?各自的优点?

  17. 大表join分桶的原因?

  18. join的时候依照哪一个关键字?对字段有没有限制?

  19. 怎么把表分桶的?join的时候分桶的key不同怎么办?

  20. 数据倾斜怎么解决?distinct数据倾斜怎么办?

  21. sparkstreaming的ck有什么好处?

  22. ck、persist、cache分别有什么区别?

  23. 怎么定义算子是转换算子还是行动算子?(怎么知道这个算子是行动算子?)

  24. 有状态缓存的算子?

  25. 怎么实时查看用户访问数?这种实时变动的需求怎么实现?

  26. flink的ck了解吗?可以说一下大致流程吗?

  27. 如果有多个barrier对齐时,有一两个一直没到该怎么处理?有没有情况下不进行等待对齐?

  28. 窗口和wm的关系

  29. 窗口的状态数据什么时候清楚?

  30. HDFS中datanode之间怎么保证备份数量的同步?

  31. 2NN的作用?高可用中的standby namenode的作用?

  32. 怎么进行故障转移的?

十四 字节

  1. 编程算法题:

a. 将字符串进行编码,如aabbcc编码成a_2_b_2_c_2;b. 将输入的UNIX路径格式化,如/a/b/./…/c,格式化为/a/c

  1. 建立数据仓库的一般流程,你的思路是什么;

  2. 写hive sql题,以及进行hive sql优化的思路;

  3. 对spark/spark streaming的原理了解,以及优化的思路;

  4. 对项目相关的一些问题;

数据清洗做过没?

离线方面碰到什么困难

数据倾斜怎么优化

spark的数据倾斜

小文件优化的原理

Spark的源码,例如:框架层面、算子具体实现

Spark什么时候用到内存,什么用到磁盘

算子collect分为

Spark堆内内存和堆外内存的区别,什么时候用到堆内,什么时候用到堆外

堆内内存

堆内内存的大小,由 Spark 应用程序启动时的 –executor-memory 或 spark.executor.memory 参数配置。Executor 内运行的并发任务共享 JVM 堆内内存,这些任务在缓存 RDD 数据和广播(Broadcast)数据时占用的内存被规划为存储(Storage???,而这些任务在执行 Shuffle 时占用的内存被规划为执行(Execution)内存,剩余的部分不做特殊规划,那些 Spark 内部的对象实例,或者用户定义的 Spark 应用程序中的对象实例,均占用剩余的空间。不同的管理模式下,这三部分占用的空间大小各不相同。

堆外内存

为了进一步优化内存的使用以及提高 Shuffle 时排序的效率,Spark 引入了堆外(Off-heap)内存,使之可以直接在工作节点的系统内存中开辟空间,存储经过序列化的二进制数据。

堆外内存意味着把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机)。这样做的结果就是能保持一个较小的堆,以减少垃圾收集对应用的影响。

2张大表,超过几百G,join优化,按照什么条件区分区

1.对RDD进行repartition重分区

先依据Executor数和内存情况估算出对RDD分为多少个partition比较合适,因为一个partition对应一个task,会分发给一个Executor的core去执行运算操作。

所以首先对RDD进行重分区,将数据打散。

2.采用mapPartition算子,一次性处理一个分区的数据

在这一步进行group by操作,将相同key的value值进行加和

  1. reduceByKey算子,对不同的key进行聚合

经过上面的重分区,以及预聚合(group by,func加和),此时reduce端的计算压力就小了很多

归并排序,将2个数组合并到一个数组,并排好序

十五 丰巢
第一面是技术人员面:一般就对着你的简历问,挨着问,实时方面比较关心Flink,他们实时就用Flink,spark基本没问 有点难,但是面试小哥人很好,不懂可以请教,现场教学

1.JVM原理,GC回收机制,hashMap底层原理

2.hadoop的组件,各自的作用,SecondNode的作用

3.es的倒排索引原理

4.看过什么框架的源码,选取一个简单讲解一下 (我讲的MR,我感觉他更想听Flink)

5.Flink有哪些窗口,介绍一下区别?会话窗口关闭是什么控制得(我不会,他说是nameSpace,源码里展示了的)

6.flink的提交方式?(一脸懵逼,我说的是打jar包上传,打jar包之后给运维上线,然后用指令进行提交,

他给我分享的是丰巢已经做了自己的Flink提交平台,虽然还不完善,但是一些基本的功能都能实现了,比如说提交,我直呼贵公司nb)

7.Flink的编程模型

8.Flink的状态有了解吗?有哪些?

9.Kafka读数据的原理(二分法的那个 )

10.scala的尾递归知道吗?(一脸懵逼)

十六 vivo

  1. 自我介绍

  2. 数仓为什么是五层?(简历上写五层)

  3. dwd,dws,dwt之间有什么区别?

  4. dwd的表是全量的吗?为什么?

  5. 有一个订单表记录,根据你的数仓结构,说说怎么求出用户最近7天的最后一次下单记录?

  6. hive去重的几种方法?

  7. 为什么要升级成Flink?(简历上写的)

  8. 为什么Flink可以处理乱序,给了个关注和取消的场景,问你如何实现最终一致性问题!

  9. 说说SparkStreaming和Flink的区别?

  10. 说说Flink的精准一次性!

  11. 开始我提问

总结:该面试官属于我回答什么就问什么类型,且行且珍惜

十七 华为
1.Flink的指标

2.Flink怎么对接ES

自带的,创建ES对象,addSink(ES对象)

3.Flink遇到的问题

a:运行一段时间后发觉报错

报错信息: Size of the state is larger than the maximum permitted memory-backed state. Size=7061809 , maxSize=5242880 . Consider using a different state backend, like the File System State backend.

然后就修改了状态后端:为FS

b:长时间运行后,多次重启

报错信息:Could not materialize checkpoint

通过查询HDFS的日志后发现是路径配置错误了

错误的配置



  dfs.namenode.name.dir

  /mnt/hadoop/dfs/name


正确的配置



  dfs.namenode.name.dir

  file:/mnt/hadoop/dfs/name


c:背压问题

产生背压的时候常常出现在热门活动中, 短时间内流量陡增导致数据的堆积,系统整体的吞吐量无法提升。

ss和flink的区别:

Spark Streaming 在原有的架构上加入了一个 RateController,利用的算法是 PID,需要的反馈数据是任务处理的结束时间、调度时间、处理时间、消息条数,这些数据是通过 SparkListener 体系获得,然后通过 PIDRateEsimator 的 compute 计算得到一个速率,进而可以计算得到一个 offset,然后跟限速设置最大消费条数比较得到一个最终要消费的消息最大 offset。

Flink 背压是 jobmanager 针对每一个 task 每 50ms 触发 100 次 Thread.getStackTrace() 调用,求出阻塞的占比

4.使用ES遇到的瓶颈

5.Mysql的索引结构和同步机制

同步机制原理:

主库开启binary log,开启后每一次操作更新、修改、删除等都会记录在案,所以从库的同步过程其实就是获得这些过程,然后将现场还原,就达到了数据同步的目的。

Slave的线程分成两个线程,一个做binlogs的同步(我们称为IO线程),一个做还原现场的工作(我们称为SQL线程)

索引结构b+树:平衡多叉数,有索引页和叶子页,B+数的高度一般2-4层,只有叶子节点有数据,其他的都是索引,(快,小)

B+树索引可以分为聚集索引和辅助索引。

聚集索引就是按照每一张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的行记录数据,也将聚集索引的叶子节点称为数据页。聚集索引的这个特征决定了索引组织表中的数据是索引的一部分。同B+树的数据结构一样,每个数据页都是通过一个双向链表来进行链接的。

由于实际的数据页只能按照一棵B+树的进行排序,因此每张表只能拥有一个聚集索引。

事务:原子性一致性持久性隔离性

隔离级别:读未提交,读已提交,可重复读,串行化四个!默认是可重复读

二、事务的并发问题

1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

6.JVM的内存模型

方法区:常量池,字节码

堆:初始化对象,成员变量,数组

栈:由栈帧,调用方法就压栈,8大基本数据类型

本地方法栈:主要为Native方法服务

程序计数器:记录当前线程执行的行号

7.新生代GC什么时候触发

新生代内存不够用时候发生 MGC 也叫 YGC,JVM 内存不够的时候发生 FGC

8.新生代交换区???

9.谈谈java设计模式

10.多线程下单例模式的实现

饿汉天生线程安全

懒汉双null volatile singleton 和 syn(singleton3)

11.StackOverflowError和OutofMemoryError出现场景及怎么解决

递归->迭代 尾递归 | 数据倾斜->hash打乱 二次聚合

12.说说Zookeeper的Pzxos算法

Paxos:

是一致性算法,然后没了

13.谈谈你知道的分布式缓存算法

LRU

14.一天可以搭建flink集群并且把业务迁移过去么

给钱就做

十八 袋鼠云

  1. Flink的join相关的源码你看过吗?

  2. CheckPoint源码和算法有了解过吗?

  3. Yarn的源码和参数配置相关的源码细节你知道吗?

  4. Flink On Yarn 之后 Yarn 会发生什么变化,源码里面的细节你知道吗?

  5. Flink中状态相关的源码你知道吗?比如可以修改状态大小,取出状态的值进行修改,再放回去,等其他状态相关的操作?

  6. Flink的为算子提供的状态的源码你看过吗?

  7. kafka分区数和Flink的并行度关系,这方面的源码你看过吗?

你可能感兴趣的:(面试,面试,大数据)