一 美团
-
自我介绍一下?
-
介绍一下最近的项目?
-
目前在研究什么技术?
-
如何判定一个表是事实表还是维度表?
维度
表示你要对数据进行分析时所用的一个量, 比如你要分析产品销售情况, 你可以选择按类别来进行分析,或按区域来分析. 这样的按…分析就构成一个维度。前面的示例就可以有两个维度:类型和区域。另外每个维度还可以有子维度(称为属性),例如类别可以有子类型,产品名等属性。下面是两个常见的维度表结构:
产品维度表:Prod_id, Product_Name, Category, Color, Size,Price
时间维度表:TimeKey, Season, Year, Month, Date
而事实表
是数据聚合后依据某个维度生成的结果表。它的结构示例如下:
销售事实表:Prod_id(引用产品维度表), TimeKey(引用时间维度表), SalesAmount(销售总量,以货币计), Unit(销售量)
上面的这些表就是存在于数据仓库中的。从这里可以看出它有几个特点:
维度表的冗余很大,主要是因为维度一般不大(相对于事实表来说的),而维度表的冗余可以使事实表节省很多空间。
事实表一般都很大,如果以普通方式查询的话,得到结果一般发的时间都不是我们可以接受的。所以它一般要进行一些特殊处理。如SQL Server 2005就会对事实表进行如预生成处理等。
维度表的主键一般都取整型值的标志列类型,这样也是为了节省事实表的存储空间。
-
数据建模过程说一下?
-
三范式知道吗,说一下?
-
数据仓库模型建设可以使用范式建模吗,你是怎么看的?
-
缓慢变化维处理方式?
-
大宽表的优点与缺点?
-
拉链表的实现逻辑说一下?
-
Mapreduce执行流程说一下?
-
Shulffle过程瓶颈在哪里,你会怎么解决?
-
你刚说到会有小文件和数据倾斜,这个怎么处理?
-
空值key加随机数是一种数据倾斜解决方案,如果有单个key是热点值呢?又如果有多个key是热点值呢?用参数和代码分别怎么解决?
-
Kylin调优?
-
Kylin的优点和缺点?
-
Kylin的rowkey如何设计?
-
Kylin的cuboid,cube和segment的关系?
-
一张hive宽表有5个维度,kylin构建cube的时候我选了4个维度,我select *的时候会有几个维度字段?
-
其他olap工具有了解过吗?
-
Flink savepoint和checkpoint?
-
Flink算子记得哪些?
-
Flink map和flatmap比较?
-
flink双流join说一下?
-
flink两段提交原理说一下?
-
你们数仓用的是hive还是spark,你平常怎么选择?
-
Hive优化说一下
-
用你最熟悉的编程语言(java,python,scala)写一个二分查找(牛客网在线写)
-
订单表,t_order, 字段,user_id,order_id,ctime(10位时间戳),city_id,sale_num,sku_id(商品)
-
问题:20201201至今每日订单量top10的城市及其订单量(订单量对order_id去重)(在线写)
-
你有什么想问我的吗?
二 网易
-
你为什么想换工作?
-
你最近的项目是做了什么?
-
你觉得这个项目你们遇到的最大的挑战是什么?
-
你们开发规范是怎样的?
-
你们公司有哪些主题?
-
日志采集有没做过?
-
流量域一般怎么做?
-
路径分析怎么做?
-
如果你的代码运行很慢,你会怎么开始排查?
-
你们数据量大概有多大?
-
你还有什么想问我的吗?
三 网易
-
spring AOP应用场景
-
分布式锁的几种实现方式
-
一个文件只有一行,但是这行有100G大小,mr会不会切分,我们应该怎么解决
-
hdfs HA机制,一台namenode宕机了,joualnode,namenode,edit.log fsimage的变化
-
你们数仓怎么分层的以及各层主要做了什么
-
你们主题是怎么划分的,举个例子
-
如何判断一个模型的好坏
-
rowkey一般如何设计,你项目中是如何设计的
-
你们需求的开发流程是什么样的
-
kylin熟吗?kylin你一般怎么调优
-
两个数 a=3,b=5,如何不使用中间变量不使用函数的情况下调换他们
-
hive开发过程中,你一般会怎么调优
-
hive的执行计划有看过吗,你一般会关注哪几个点
-
hive底层运行mr或者spark程序的时候语法树说一下
-
ETL过程中,你们数据质量是怎么保证的
-
datax源码有没有看过
-
用phenix和es作为hbase二级索引的区别,最新的hbase已经支持二级索引了,你清楚吗?
-
你有什么问题想问我吗
四 美团
-
开场问项目情况,叙述一遍做过的项目。
-
项目是否搭建数仓?(我做的是银行数仓,但是当时懵了,一直说做的数据集市)
-
主题域是怎么划分的?
-
脏数据怎么处理?
-
举例:客户等级这个属性是怎么加工的?比如金卡、银卡等,怎么划分?(个人感觉是面试官想要问我明细层数据是怎么处理的,而我理解成具体的这件事,这件事没啥划分的。。。银行怎么定义我们就怎么取)
-
怎么进行数据建模?存款、贷款等业务。
-
hive的优化
-
mapreduce的具体流程
-
mr中join操作的具体原理
-
数据倾斜的处理方式
-
有没有用过udf函数,自定义函数分为几种?
-
怎么从一个字符串中把数字拆出来?
-
hbase有了解吗,原理是什么。hbase的优化怎么做
-
spark的原理和优化
-
spark和mr的区别
-
mysql中B树和B+树的原理和区别
-
java的快排算法实现
-
kylin的原理和优化。
-
为什么kylin的维度不建议过多
-
实时数据是否有了解,过程是什么
-
三范式
-
星型建模和雪花建模的区别
-
mysql事务锁有几种,分别是什么
-
storm是否有了解
-
如何计算新用户和老用户?
-
sql题:给定一个表temp,字段是 user_id,clo1,col2…col12 12各字段代表12个月电费,求最终结果展现:user_id,month,money
五 微店
-
数据模型如何构建的,星型、雪花、星座的区别和工作中如何使用;
-
如何优化整个数仓的执行时长,比如7点所有任务跑完,如何优化到5点;
-
数据倾斜,遇到哪些倾斜,怎么发现的?怎么处理的?;
-
如何保证数据质量;
-
如何保证指标一致性;
-
了解onedata吗,说说你的理解;
-
数据漂移如何解决;
-
实时场景如何解决的;
9、拉链表如何设计,拉链表出现数据回滚的需求怎么解决。
六 阿里
-
自我介绍;
-
平台选型依据;
-
数仓分层、模型、每层都是做什么的?为什么这么做?
-
交叉维度的解决方案?
-
数据质量如何保证(DQC)?
-
任务延迟如何优化(SLA)?
-
聊一下数据资产。
-
spark streaming如何保证7*24小时运行机制?
-
spark streaming是Exactly-Once吗?
-
如果让你设计实时数仓你会如何设计,为什么?
-
聊聊hive的执行引擎,spark和mr的区别?
-
hive的jion底层mr是如何实现的?
-
指标如何定义?
-
sql问题:连续活跃n天用户的获取;数据倾斜的sql如何优化;数据量大的sql如何优化?
-
你有什么问我的吗?
七 蚂蚁
-
和一面一样自我介绍;
-
因为简历上写有大数据平台选型,所以问选型的依据,不同大数据平台的优缺点;
-
数据仓库主题的划分,参考Teradata的LDM模型;
-
Kimball和Inmon的相同和不同;
-
数据质量管理、数据治理有什么好的方案?知识库管理有什么好的思路?血缘关系图。
-
元数据管理相关问题,集群存储不够了,需要清理不需要的任务和数据该怎么做?
-
业务库2亿数据入仓的策略,一次全量,之后每次增量;
-
什么场景会出现数据倾斜,怎么解决?比如select user_id,count(1) from table group by user_id,其中某些user_id的访问量很大,查询不出结果该怎么办?
-
sql里面on和where有区别吗?
-
还有一个sql问题,忘掉了;
-
聊一下技术架构,整个项目每个环节用的什么技术这个样子;
-
hive、hbase、spark。。。。这些大数据组件,熟悉哪个或者哪些?我说hive和hbase,对方就问hive和hbase的原理,差异等问题;
-
有没有实时数仓的经验,数据实时入仓思路,canal;
-
你对当前的项目组有没有什么自己的看法、意见或者需要改进的地方,这个改进对你有没有什么影响
-
ods的增量能否做成通用的?
-
公共层和数据集市层的区别和特点?
-
用mr实现用户pv的top10?
-
map输入数据,将数据转换成(用户,访问次数)的键值对,然后reduce端实现聚合,并且将结果写入用户、访问次数的实体类,并且实现排序,最后的结果做一个top10的筛选
-
sql问题,连续几天活跃的用户?
-
使用row number排序,然后时间-排序字段,减的结果分组,相同的就是连续的
-
从原理上说一下mpp和mr的区别
-
对了中间还有问数仓数据的输出主要是哪些还有数仓的分层;
八 蚂蚁
-
两轮技术面、一轮人事面
-
手写sql问题:连续活跃…
-
left semi join和left join区别;
-
维度建模和范式建模的区别;
-
埋点的码表如何设计;
-
数据倾斜(hive+spark);
-
group by为什么要排序;
-
集市层和公共层的区别;
-
缓慢变化维的处理方式;
-
boss问了jvm、堆栈;
-
说说印象最深的一次优化场景,hive常见的优化思路;
-
数据质量相关;
-
说说你从0-1搭建数仓都做了什么?你觉得最有挑战的是什么?
-
你有什么问题问我。
九 蚂蚁
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%)。
十 蚂蚁
-
设计并实现一个简易的缓存框架,要求支持并发的读写和LRU缓存淘汰算法,并考虑性能
-
编写一个程序,开启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
/ \
2 4
/ \
2 3
目标值= 5时返回结果:
1 2 2
1 4
- 使用两个栈来实现队列的一些操作。
队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。
pop和top方法都应该返回第一个元素的值。
样例:比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2
要求:仅使用两个栈来实现它,不使用任何其他数据结构,push,pop 和 top的复杂度都应该是均摊O(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应该怎么排序呢,我把什么放在前面,有什么通用的原则吗,这样设计之查询速度能快呢?
十二 字节
-
sparkstreaming的书写结构
-
rdd、ck、cache
-
topn的具体步骤
-
怎么可以实现在一小时topn的固定窗口情况下,0-10、0-20也会有结果的显示
-
架构?
-
怎样建模?
-
一天多少任务,多少表
-
什么技术进行存储
-
内外部表的区别、优缺点
-
数据存在hdfs上回有压缩吗?有什么优缺点?
-
hdfs为什么会比较厌恶小文件
-
数据源是来自于哪里
-
flume会不会丢数据
-
数据倾斜问题
-
二次聚合对uv的话有没有什么问题
-
二面:
-
数仓的搭建
-
分工 角色
-
分层怎么分的
-
sqoop怎么解决数据变动的问题
-
维度退化具体的内容
-
每天的数据量
-
你们有主题的概念吗?
-
主题的划分原则
-
7日的留存率怎么求?
-
有一些任务需要回溯,就是比如说历史时间需要重新执行,有遇到这种情况吗?
-
核心指标都有哪些?
-
怎么保证每天能在固定的时间数据产出?
-
数仓建模的方式?
-
模型的选取?
-
stage的划分依据?
-
shuffle什么原因引起的?
-
哪一些算子会引起shuffle?
-
怎么识别抖音种的大学生用户?用什么数据识别
十三 虾皮
-
什么RDD可以用repartition?
-
coaldesce shuffle为true
-
flume断点续传多久保留一次offset
-
整个flume有使用高可用吗?怎么配置高可用?
-
对kafka有一定了解吗?
-
能大致说一下kafka的写流程吗?
-
ack的情况
-
kafka的最终文件夹存储方式是什么样子的?
-
kafka为什么可以快速根据分区和offset找到我们的数据记录?
-
索引文件中是怎么记录这些消息的?
-
消费者组的概念怎么理解?
-
kafka的选举机制?
-
azkaban怎么调度的?
-
hive做过哪些参数的优化?
-
mapjoin有什么缺点?
-
分桶表分区表区别?各自的优点?
-
大表join分桶的原因?
-
join的时候依照哪一个关键字?对字段有没有限制?
-
怎么把表分桶的?join的时候分桶的key不同怎么办?
-
数据倾斜怎么解决?distinct数据倾斜怎么办?
-
sparkstreaming的ck有什么好处?
-
ck、persist、cache分别有什么区别?
-
怎么定义算子是转换算子还是行动算子?(怎么知道这个算子是行动算子?)
-
有状态缓存的算子?
-
怎么实时查看用户访问数?这种实时变动的需求怎么实现?
-
flink的ck了解吗?可以说一下大致流程吗?
-
如果有多个barrier对齐时,有一两个一直没到该怎么处理?有没有情况下不进行等待对齐?
-
窗口和wm的关系
-
窗口的状态数据什么时候清楚?
-
HDFS中datanode之间怎么保证备份数量的同步?
-
2NN的作用?高可用中的standby namenode的作用?
-
怎么进行故障转移的?
十四 字节
- 编程算法题:
a. 将字符串进行编码,如aabbcc编码成a_2_b_2_c_2;b. 将输入的UNIX路径格式化,如/a/b/./…/c,格式化为/a/c
-
建立数据仓库的一般流程,你的思路是什么;
-
写hive sql题,以及进行hive sql优化的思路;
-
对spark/spark streaming的原理了解,以及优化的思路;
-
对项目相关的一些问题;
数据清洗做过没?
离线方面碰到什么困难
数据倾斜怎么优化
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值进行加和
- 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
-
自我介绍
-
数仓为什么是五层?(简历上写五层)
-
dwd,dws,dwt之间有什么区别?
-
dwd的表是全量的吗?为什么?
-
有一个订单表记录,根据你的数仓结构,说说怎么求出用户最近7天的最后一次下单记录?
-
hive去重的几种方法?
-
为什么要升级成Flink?(简历上写的)
-
为什么Flink可以处理乱序,给了个关注和取消的场景,问你如何实现最终一致性问题!
-
说说SparkStreaming和Flink的区别?
-
说说Flink的精准一次性!
-
开始我提问
总结:该面试官属于我回答什么就问什么类型,且行且珍惜
十七 华为
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的日志后发现是路径配置错误了
错误的配置
<property>
<name>dfs.namenode.name.dir</name>
<value>/mnt/hadoop/dfs/name</value>
</property>
正确的配置
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/mnt/hadoop/dfs/name</value>
</property>
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集群并且把业务迁移过去么
给钱就做
十八 袋鼠云
-
Flink的join相关的源码你看过吗?
-
CheckPoint源码和算法有了解过吗?
-
Yarn的源码和参数配置相关的源码细节你知道吗?
-
Flink On Yarn 之后 Yarn 会发生什么变化,源码里面的细节你知道吗?
-
Flink中状态相关的源码你知道吗?比如可以修改状态大小,取出状态的值进行修改,再放回去,等其他状态相关的操作?
-
Flink的为算子提供的状态的源码你看过吗?
-
kafka分区数和Flink的并行度关系,这方面的源码你看过吗?