2020年最新大数据面试题,你都会吗?

关注上方“ 小晨说数据 ”,一起学习,一起进步!

1、怎么定位数据倾斜,真实场景!

2、多个shuffle算子 怎么确定那个算子产生的数据倾斜

3、作业的监控 我的作业正常10000条,一会变成3条了。怎么处理!谁监控

4、SparkStreaming 消费 kafka 保证数据不丢失 不重复(在redis和mysql中保存时间戳,判断redis时间戳 mysql时间戳。假如redis挂了,程序启动判断mysql的时间戳是否比redis时间戳大时间戳大的数据删掉。)

5、hashMap怎么存储数据

6、JVM原理

7、Spark中遇到的问题

8、使用过什么自定义函数吗

小步:

1、Flink的watermark

2、mr shuffle spark shuffle

3、快排 归并 空间复杂度 时间复杂度

4、三天连续登录

1、工作内容 技术点

2、统计一年的销售额,截止到每个月的和

3、行转列 列转行

4、快照 拉链表快照

YOHO

1、Flink kafka的offset怎么保存 (flink对接kafka这方面对接的比较好,由kafka自身维护就可以,外部并设置了checkpoint保存 高版本;低版本的kafka保证存在ZK中)

2、Spark 消费kafka怎么保证精准一次

3、Kafka的优化

4、redis了解的多吗?AOF RDB 使用的什么类型

5、String 可被继承吗(不可被继承,final修饰的

6、hashMap安全吗 怎么实现安全

    • HashMap线程不安全,扩容完会将原数组导入到新数组,有两层循环,先循环数组,再循环每个数组下标位置的链表。多个线程同时扩容的情况可能会导致闭环单链表 put的时候可能多线程数据不一致。两个线程A和线程B , 线程A插入数据,获取到链表头的节点。线程A的时间片用完了,此时B起来了,插入数据,并成功,此时A再次被调起来, 假设两者插入的链表中的索引一致,但是此时的A是有过期的链表头的,他并不知道B已经插入过去了,此时就会覆盖掉B插入的数据,数据丢失     • HashTable:HashTable底层使用synchronized来保证线程安全,get方法 put方法 都加了 synchronized所有线程竞争一把锁,效率低。     • ConcurrentHashmap:JDK1.7 使用锁分段技术,它包含一个segment数组,将数据分段存储,给每一段数据配一把锁,效率高 JDK1.8 ConcurrentHashMap 舍弃了segment的概念,直接对数组上,即每个链表的头节点加锁,当有现成访问时,就给这个元素加锁synchronize 运用CAS比较并替换,是一种实现并发算法时常用到的技术 CAS是乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。1、hashTable是现场安全的,底层用的synchronized来保证线程安全,所有线程竞争一把锁,效率低、

7、sum() over()

8、hive UDF写的多吗

9、Spark on Yarn job死了,怎么拉起来 HA高可用 通过什么参数设置

10、Spark Flink的反压

11、Flink DataSet(离线)

12、Flink 容错机制 状态管理3

    • checkpoint检查点使Flink具有容错能力     • 其实感觉容错机制做大的技术就是checkpoint内部的barrier,他会在内部等待其他流的相对应的数据到来,而且内部还会缓存,这样一来生成快照的的时间点就是数据处理完的时刻

13、Spark消费kafka 记录的是哪个offset 获取的? 一个批次的?还是一个窗口的? 拿到的是批次的RDD。 每一个批次是一个RDD , 拿到的是每个RDD的offset

14、mysql索引?引擎 ?底层结构?

15、对象何时进入老年代?

当对象在新生代存活次数达到15次,会进入老年代 当对象是个大对象,年轻代放不下去,会放到老年代 有个值可以设置对象的大小,大于这个值就会被放入老年代 Java中 spark怎么拿线程 年轻 老年代 GC 发生在什么时候 1、当jvm无法为新创建的对象分配空间时发生Minor GC 2、Minor GC的时候可能就会触发Full FC 因为年老代动态估算要盛出多少空间接收年轻代过来的对象,为其腾地方

1、Flink kafka的offset怎么保存 ,存在checkpoint中能保证精准一次吗

2、工作中对于kafka的优化

3、Flink 容错机制

理想汽车:

1、a.txt存储:id name age school ee awk  b.txt id name age c.txt id school ee 然后合并b c 文件 返回a文件状态 awk -F '\t' -v OFS='\t' 'NR==FNR{S[$1]=$0;next}NR>FNR{print S[$1],$2,$3}' b.txt c.txt >> d.txt

2、hive函数 lag lead 用法 lead(col,1) over(order by time)

3、grep 参数 区分大小写 存在A不存在BC cat d.txt | grep "A" | grep -v "BC"

4、了解一下 自动驾驶 的技术 以及 自动驾驶辅助系统 二面要问的

5、 300W * 50 1 5000 0000K 150000M 150G

6、数据传过来:操作数据 车轮转速 传感器数据 与前方车辆的距离(取平均值) (打包发送过来 1M的包)

7、离线架构 实时架构(可以有点延迟)

头条:

链表反转

数组排序:

sql 尽可能join就行了

TCP UDP区别:两个不同的传输协议,UDP 面向无连接 随时可以发送数据 数据会乱序,且可能会丢失,并不会重发 , 没有流量控制,照收不误 数据报模式 占用系统资源少 首部开销小,只有8个字节 TCP 面向连接的 发送数据之前需要先建立连接,连接建立好之后再发送数据,发送完数据确认之后再关闭连接。(只有建立连接,对方存在时才会发送数据) 数据有顺序。乱了也会重新排好序,丢失的话会反馈并重发 会有流量控制 流模式 占用系统资, 源多 首部开销20字节

进程 线程 区别

1、进程:系统进行分配的和管理资源的基本单位

2、线程:进程的一个执行单元。进程内调度的实体。是程序执行的最小单位。轻量级进程 一个程序至少一个进程,一个进程至少一个线程

Flink项目:讲项目讲的细一点

数仓 离线方面 数据分层 维度建模 数据分层(ods dwd dws ads 详细的分层) 维度建模---星型模型 (往上说 雪花模型)

Atlas元数据管理 血缘关系图

Java用过 python不了解

String 不可变 stringBuilder StringBuffer String:不可变字符串,字符串本身不会发生变化,在常量区中只存储一个 StringBuffer:JDK1.0 可变字符串 字符串本身可以发生变化 效率低 多线程 线程安全 StringBuilder:JDK1.5 可变字符串 字符串本身可以发生变化 效率高 单线程 线程不安全

Java的GC 清除策略 赋值算法 年老:标记清除 标记整理

hive 的排序:order by sort by cluster by

hive UDF UDTF UDAF UDF:继承UDF类 重写 evaluate 方法 一对一 输入输出 UDTF:继承 GenericUDTF 实现里面的方法 一对多的输入输出 UDAF: 多进一出 继承UDAF类 重写方法:初始化 合并

MR Combiner (归并排序生成文件之后进行Combiner)

kafka 数据丢失 (Spark怎么保证的消费kafka精准 Flink怎么保证消费的kafka) 两阶段提交的保证

B树 B+树区别 数据库 为什么用B+树 (B+树找数据比B树更好) 数据库使用B+树肯定是从查找效率上来考虑的,B+树的查询首先是二分查找,而且每个根结点只存的是索引ID,这样以页为单位的索引终究可以放置更多的节点,减少更多的IO。拿到索引ID,然后去叶子节点找到数据

left semi join 各种join的区别

二叉树的镜像????

归并排序 复杂度

Spark组件?

1、client:客户端 提交应用程序

2、master:控制,管理和监控整个Spark集群

3、worker:集群工作节点 汇报执行进度和结果给master 节点会运行一个或者多个executor进程

4、Driver:主要就是执行代码,切分任务,接收executor的心跳信息,初始化SparkContext

5、executor:负责运行Task 负责将数据存储在内存或者磁盘

6、RDD:Spark的核心数据结构 通过算子进行转换

复杂类型的指标?

自己职业规划?

问什么离职

单链表实现两个数字相加 例如:1234+567=?

redis rdb以及AOF 持久化

Spark 和 hive 比有什么区别?

1、hive本身是不存储数据的,他是基于hdfs的。只不过的计算引擎分为mr spark 通过hive封装schema具有结构化的数据,通过sql进行交互式查询 hive是具有元数据信息的,构成的血缘关系 处理海量数据

2、Spark的数据来源不一定是hdfs上的数据,加快了数据仓库的计算速度,基于他的内存式计算,

持久化机制 支持sql方式开发 通过DF加上schema

UDF UDTF UDAF区别?UDF 继承 UDF 一对一 UDTF 继承 GenericUDTF 一进多出 UDAF 继承 UDAF 多进 一出

七层协议 四层协议 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 网络接口层  网络层 传输层 应用层 物理层 数据链路层 网络层 传输层 应用层

JVM G1和CMS的区别?

Flink 实时的维度发生变化,不停任务 (广播流) 广播流 MapStateDescriptor

mysql的主从复制 谁读谁写

1、主库master的一些更新时间会记录在binlog中

2、从库启动,启动一个IO线程,连接主库

3、主库把binlog的内容发送到从库

4、从节点slave会去读取这个binlog,将读取的内容写到他的中继日志

5、slave重做中继日志的事件,数据重演,得到一样的数据

主master负责写入数据 从slave负责 读取数据

Flink 的checkpoint机制

Flink 的保证精准一次性

Flink 的数据积压了怎么办?(Flink内部背压 开启静态限速)

Flink 结果写到mysql保证效率

hive 的执行计划

1、用户提交查询等任务提交到Driver

2、解析器将SQL转回为抽象语法树

3、遍历抽象语法树,抽出基本的查询单元QueryBlock

4、遍历QueryBlock 翻译为执行操作数

5、逻辑层优化器进行执行操作树的优化,减少shuffle数据量

6、遍历执行操作数,翻译为MR任务。最终生成之中的 执行计划

7、执行并输出结果

Volatile:线程间可见,禁止指令重排序,被volatile修饰的变量在初始化过程不会重新排序

JVM垃圾回收器:最常用的ParNew(年轻代) + CMS(老年代) 目前有的垃圾回收器:Serialize 序列化的 parallel 并行的 CMS 这几种的问题就是正在运行的程序需要被停止进行垃圾回收(STW) 目前最新的是ZGC,还在处于测试阶段。比较新的是G1 JDK1.7出来的,JDK1.9比较稳定的,现在JDK12 可控的

设计目标:追求最短的垃圾停顿,让程序的响应速度最快,默认是200ms,即垃圾回收时间不会超过200ms,程序在200ms之内肯定会响应 G1管理内存,会把内存分为一块一块的region,不一定是连续的。每个region可能会使老年代,也可能是伊甸区或幸存区,并不是固定的。当对象比较大的时候可以申请多个region 每个region不能超过32M 最小1M (1 2 4 8 16 32)只能是2的几次方 默认目标是2048个 G1的特点: 

1、追求响应速度,一般垃圾回收控制在200ms之内。

2、比较灵活,分region回收,优鲜回收花费时间少,垃圾比例高的region 关于对象的存活次数,超过一定次数放入老年代------》 Parallel Scavenge 默认15 CMS默认是6 G1默认15 还会有动态年龄,当to区域放不下去的时候,会把年龄比较大的直接放到老年代 再就是大对象直接放到老年代

G1 分为4步:

1、初始标记STW:找根没有引用的

2、并发标记:

3、最终标记STW:

4、并行回收STW:最终的回收算法还是复制算法 如果200ms没有完成垃圾回收,没关系,可以重复这个动作,默认是8次

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章