20210419面试题

一、java

1、java有哪些classloader?

启动类加载器、扩展类加载器、应用程序类加载器(系统类加载器)、用户自定义类加载器

2、java对象引用有哪些?

强引用 软引用 弱引用 虚引用

3、AQS?

AQS定义了一套多线程访问共享资源的同步器框架,维护一个共享资源状态volatile int state和先进先出的线程等待队列,如ReentrantReadWriteLock就是实现了AQS

 

二、hive

1、hive有哪些join方式?

common join (Reduce Join/Shuffle Join)、map join 、sort-merge-buket join

2、left join与left semi join区别

部分场景下可以使用left semi join替代 left join因为

left semi join 是 in(keySet) 的关系, 遇到右表重复记录,左表会跳过 ,性能更
高 ,而 left join 则会一直遍历。但是 left semi join 中最后 select 的结果中只许出现左表中
的列名,因为右表只有 join key 参与关联计算了

三、spark

1、RDD五大特性

 

 

2、Spark有哪几种分区?

spark包括两种数据分区方式:HashPartitioner(默认)和RangePartitioner,还可以自定义分区器(继承Partitioner,实现numPartitions和getPartition两个方法)

Spark中分区器直接决定了RDD中分区的个数,只有Key-Value类型的RDD才有分区器的,非Key-Value类型的RDD分区器的值是None

3、spark有哪些Shuffle?

spark1.2以前,Hash-based Shuffle包括未优化的 HashShuffle、优化的 HashShuffle、

spark1.2以后,Sort-based Shuffle包括普通的 SortShuffle与 bypass的SortShuffle

(当shuffle read task的数量小于等于spark.shuffle.sort.bypassMergeThreshold参数的值时(默认为200),就会启用bypass机制)

bypass的SortShuffle与普通的SortShuffle区别?

---shuffle write过程中,不需要进行数据的排序操作

4、Spark内存管理

四、flink

1、flink 批处理与流处理区别?

流处理:节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理。

批处理:当一条数据被处理完成后,序列化到缓存中,并不会立刻通过网络传输到下一个节点,当缓存写满,就持久到本地硬盘上,当所有数据处理完成后才

开始将处理后的数据通过网络传输到下一节点。

posted @ 2021-04-19 16:14  再见傅里叶  阅读(59)  评论(0编辑  收藏  举报