金山云于2月21日下午4点进行了第一次电话面试,主要针对数据平台的二次开发和源代码修改。面试持续了一个小时。
HashMap、HashTable、ConcurrentHashMap的区别及HashMap的扩容机制:讲解了不同哈希表的数据结构及其应用场景。此外,还讨论了注解的使用和背后的原理。
Spark任务划分和作业提交流程:解释了Spark的任务分配和作业提交的具体步骤。
根据进程名杀死进程和查看端口占用情况:介绍了如何通过命令行操作来终止特定进程以及查看端口占用情况。
Flume数据可靠传输和TailDir数据完整性保障机制:讨论了Flume如何确保数据不丢失,以及TailDir如何保障数据的完整性。
Flink的exactly-once语义保障机制和Flink与Spark的区别:解释了Flink如何实现精确一次处理,并对比了Flink与Spark的主要差异。
Kylin和Druid的应用场景和原理,以及CDH集群监控相关问题:探讨了Kylin和Druid这两种OLAP解决方案的特点及其应用场景,同时讨论了在CDH集群中如何进行有效监控。
Kafka速率调节和背压机制:介绍了如何调整Kafka的消息处理速度,并解释了背压机制的工作原理。此外,还谈到了广播变量的用途以及项目性能优化的相关策略。
JVM参数调优及垃圾回收算法:详细讲述了JVM参数设置的方法,以及各种垃圾回收算法的原理,特别是标记-清除算法的运作机制。
算法题:包括从两个数组中找到中位数的方法,以及两个线程交替打印递增自然数的问题。
金山云于2月25日上午11点进行了第二次电话面试,主要考察了以下几个方面:
分享一个最擅长的项目及所用的大数据组件:介绍了个人参与的一个重要项目,并说明了其中应用的大数据技术栈。
Azkaban与其他调度工具的比较及作业失败后的恢复机制:分析了Azkaban的特点,并讨论了其他调度工具的优势和劣势,以及如何确保任务失败后能自动恢复执行。
熟悉Spark算子:分享了自己在使用Spark过程中常用的算子及其应用场景。
对Presto的理解:阐述了Presto作为一种分布式SQL查询引擎的基本概念和使用场景。
HashMap与HashTable的区别,ConcurrentHashMap的理解:再次探讨了上述数据结构之间的区别,并分享了关于ConcurrentHashMap的深入了解。
网络编程和NIO、BIO的并发处理:讨论了网络编程中的NIO和BIO模式,并分享了并发编程的经验。
硬币问题:通过分组查找的方法解决了八个硬币中找出最重的那个的问题。
斐波那契数列问题:分析了计算N阶楼梯走法数量的问题,即经典的斐波那契数列应用。