去年秋招拿了携程-大数据底层框架开发岗位的offer,想着还是把面试回顾下吧,给后面的朋友一个参考。
这个岗位是做大数据组件底层二次开发的,我面试的是偏向离线方面,因此面试都是围绕hadoop、spark、hbase、hive这几个组件的底层原理去问,因为是偏向底层,所以也会注重java语言和多线程并发的知识。
- HDFS的写入流程?如果一台机器宕机,HDFS怎么保证数据的一致性?如果只存活一台机器又会发生什么情况?
- NameNode HA的实现原理?如何避免NameNode脑裂的情况?
- 如果数据量比较大,如何解决NameNode 的内存瓶颈?
- MapReduce Shuffle中Reduce是怎么获得Map输出的分区文件,Map主动推还是Reduce主动拉?
- Kafka如何实现顺序消费?
- Spark Streaming消费Kafka的两种方式比较。如何提高Spark Streaming消费Kafka的并行度?
- 如何保证Spark Streaming的精准一次性消费?
- 项目中Spark Streaming消费Kakfa的offset保存在哪里?为什么不采用checkpoint保存offset,有什么缺点?
- 对Spark RDD的理解。
- Spark作业运行流程?(从standalone和yarn两种模式进行阐述)
- 项目中Spark采用的那种模式搭建的?为什么采用standalone而不采用yarn模式?
- 为什么Spark Shuffle比MapReduce Shuffle快(至少说出4个理由)?
- Spark3新特性
- Java中保证线程安全的方法有哪些?
- 一个volatile修饰的变量,如果两个线程同时去写这个变量,线程安全吗?如果不安全该怎么使他变得安全?
- Linux中怎么查看一个进程打开了哪些文件?
- 算法题:二叉树非递归中序遍历
这是三轮技术面里面能回忆起来的了,先暂时写这些吧
#大数据开发面经##携程秋招#