大数据面试题总结

1.大数据技术

1.1 描述一下checkpoint的流程?
Checkpoint其实就是所有任务的状态,在某个时间点的一份拷贝(一份快照),这个时间点应该是所有任务都恰好处理完一个相同的输入数据的时候。
1.2 描述一下两阶段提交?
对于每个checkpoint,sink任务会启动一个事务,并将接下来所有接收的数据添加到事务里,然后将这些数据(流式的)写入外部sink系统,但不提交他们 -- 这时只是预提交(一个个写入),当它收到checkpoint完成的通知时,它才正式提交事务,实现结果的真正写入(一次性确认),这种方式真正实现了exactly-once,它需要一个提供事务支持的外部sink系统,Flink提供了TwoPhaseCommitSinkFunction接口。
两阶段提交保证了flink段到sink段的精确一次语义(exactly-once)
1.3 描述一下Spark的DAG原理?
DAG(Directed Acyclic Graph)有向无环图,Spark中使用DAG对RDD的关系进行建模,描述了RDD的依赖关系,这种关系也被称之为lineage"血统",RDD的依赖关系使用Dependency维护,Dependency分为宽依赖(一个父RDD被多个子RDD分区使用,有shuffle)和窄依赖(一个父RDD只被一个子RDD分区使用),DAG在Spark中的对应的实现为DAGScheduler。
flink使用的是一个Dataflow图。
1.4 简述一下spark和flink的区别
技术理念不同:spark使用微批来模拟流的计算,而flink是基于事件驱动的,也就是有状态的流处理应用程序,是真正的流式计算。
1.5 flink如何处理延迟数据?
在处理事件时间时可以使用水印机制处理延迟数据,水印(watermark)就是一个时间戳,Flink可以给数据流添加水印,允许一定延迟的时间戳。
1.6 flink容错机制如何保证?
checkpoint机制
1.7 flink支持哪些时间语义?
(1)处理时间(Processing Time):时间被处理时机器的系统时间。
(2)事件时间(Event Time):事件自身的时间。
(3)摄入时间(Ingestion Time):事件进入Flink的时间。
1.8 spark和flink的action操作有哪些?
Spark:
(1)获取元素
collect(), first(), take(n), takeSample(withReplacement, num, [seed]), takeOrdered(n, [ordering])
(2)计数元素
count(), countByKey()
(3)迭代元素
reduce(func), foreach(func)
(4)保存元素
saveAsTextFile(path), saveAsSequenceFile(path), saveAsObjectFile(path)
Flink:
似乎没有action操作这概念,一定要说就是execute()执行方法。flink程序都是通过延迟计算(lazily execute)的方式执行,只有在调用execute()方法时,系统才会触发程序执行。
1.9 hadoop HA高可用?
hadoop高可用有ActiveNameNode和StandbyNameNode,使用zookeeper服务进行主备NN的切换。namenode主要是给子节点分配任务。
1.10 spark调优?
可以通过运行时参数进行Executor个数、内存、核数等设置。
1.11 描述一下mapreduce计算模型?
大数据面试题总结_第1张图片
1.12 flink checkpoint和savepoint的区别?
保存点和检查点的工作原理一致,保存点是手动触发的,检查点是自动触发的。

2.Java

2.1 对jvm的理解?
在Java SE 7版中可以将jvm分成5个区域,分别是
(1)所有线程共享的数据区:方法区(编译器编译后的代码等数据),堆(对象实例和数组)
(2)线程隔离的数据区:虚拟机栈,本地方法栈,程序计数器
大数据面试题总结_第2张图片
Spark中的RDD实际上是Java对象,所以它被存放在JVM中的堆中,因为堆中存放的是对象与数组实例,所以垃圾回收主要在堆中进行(也有可能在方法区中)
2.2 反射可以做到什么?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
2.3 多态的理解?
java多态存在的三个必要条件(1)继承(2)重写(3)父类引用指向子类对象

3.scala

3.1 Trait特征的理解?
特征相当于java的接口,与接口不同的是它可以定义属性和方法的实现(强大),通过trait可以实现scala的多重继承。子类继承特征可以实现未被实现的方法。所以其实 Scala Trait(特征)更像 Java 的抽象类。
3.2 scala和java的区别?
scala不支持接口,采用trait特征;scala提供伴生对象来实现单例;scala支持以函数为参数的方法Java不支持

4.算法

4.1 描述一下动态规划的基本思想?
动态规划和分治法类似,都是构造子问题的解来求解原问题,不同的是动态规划是解决重叠子问题的,将子问题求解结果记录在表格中,以空间换取时间。
其次是最优子结构,最优解肯定是有最优的子解转移推导而来,子解必定也是子问题的最优解。
最后是无后效性,也就是求出来的子问题并不会因为后面求出来的改变。
典型动态规划问题:背包问题:01背包问题,完全背包问题。
4.2 理解哪些数据结构?简述一下链表、红黑树等数据结构
队列:单队列、循环队列;集合:HashSet(哈希表结构)、TreeSet(红黑树结构);链表:单链表、双链表、循环链表;树:二叉树、完全二叉树、堆、二叉查找树、平衡二叉树

5.其他

5.1 大数据常用组件和功能?
hdfs是分布式存储系统;yarn是分布式资源管理系统;mapreduce是hadoop的计算框架;zookeeper是分布式协调服务;hbase是hadoop下的分布式数据库;hive是分布式数据仓库,是一个数据分析工具,底层使用mapreduce;Sqoop将传统数据导入hdfs或hbase的一个工具;spark基于内存的分布式处理框架;flink是分布式流处理框架;
5.2 深拷贝和浅拷贝的区别?
深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。深拷贝(实体)浅拷贝(引用)
5.3 队列模型和kafka模型的区别?
队列模型一条消息只能被一个消费者使用,kafka使用发布订阅模型,采用topic发布消息给所有订阅者,也就是可以被多个消费者使用。

6.linux

6.1 linux进行大数据故障的排错命令你用到哪些?
查看端口占用情况:(1)lsof -i:端口号(2)netstat -tunlp |grep 端口号
查看内存使用情况:(1)实时使用情况"top"(2)free -m

7.操作系统

7.1 死锁产生的四个必要条件
(1)互斥(2)不可剥夺(3)部分分配(4)循环等待

你可能感兴趣的:(大数据,flink,spark,java,scala)