快手大数据开发工程师面经
一面(40min)
- 自我介绍
- Spark任务调度(源码)
- Kafka基本原理说一下(生产消费模型,存储,Leader选举,ISR,反正想到啥就说啥了)
- Consumer Group中Consumer和Partition的对应关系(Range和RoundRobin)
- Kafka支持什么语义(三种语义),怎么实现Exactly Once
- Spark Streaming和Flink的区别(说部门主要用Flink,奈何我没怎么用过)
- Scala的模式匹配和Java有什么区别
- 用Kafka的过程中有过什么问题,怎么解决
- 实习做了什么
- 撕代码:
有序链表合并
n*m的带有数字的矩阵,从左上角走到右下角,问最短的路径上经过的数字的和是多少?(dp)
二面(1h20min)
- 自我介绍
- Java多线程了解吗?写个生产者消费者模型吧(wtf?上来就搞这个)
- 写完讲了讲
- 线程池熟悉是吧?写个线程池(??还好我看过源码)
- 写完问怎么改进让它支持切换到SHUTDOWN状态?因为我只是参考了源码实现了一个能提交任务的简单线程池,没考虑别的,要改进的话有点麻烦,就大概说了下思路,也不知道对不对。
- Java线程同步啥的,不太记得了。
- Flink了解吗,基本的概念说一下
- 撕算法:给一个不带分隔符的IP字符串,要给出所有的可能的IP地址,返回一个List(懵逼,用回溯写了个大概)。
三面(40min)
- 自我介绍
- 实习做了什么
- Kafka基本原理说一下,和其他的MQ相比的优势
- Kafka 消费者怎么从Kafka取数据的
- 消费者怎么保证ExactlyOnce(感觉跟前两面的问题的有点重复)
- Kafka消费者怎么保证有序性
- Kafka生产者怎么保证不丢不重复(幂等)
- Kafka生产者写入怎么保证有序
- 撕算法:两字符串最长公共子串(一开始是别的题,我没太搞懂他什么意思,就换这个了,反正dp做呗)