从3月份开始,陆续面了阿里,头条,美团,快手四家公司的大数据开发岗位,近20场面试面下来挺耗费脑力的,不过结果还行,除了头条外,目前拿到了其他三家的offer,今天把还能记住的题目做个整理,整理是按技术分类的,因为确实记不太清哪一场问了哪些题了。
先说一下这几场面试的整体感受,头条和快手风格相似,每一面基本都有算法或实现题,算法主要是leetcode easy, middle难度的题,这跟你面试情况有关,可能项目上没有亮点的算法题会出的难一点。笔者刷题不多,也就100多道吧,还好没有遇到太难的算法,不过刷题还是平时没事多刷刷的好,毕竟每次面试才突击刷有点累,刷题也有助于开阔思维。实现题主要是让你实现下HashMap,LRU,生产消费者模型,单例模式等,面试官通过这些可以看出你对数据结构的理解和代码实现能力。阿里和美团的话,算法题不是很多,但会比较注重问项目里的亮点,我理解的亮点包括你开发或优化过比较有价值的功能,解决过复杂或有难度的问题等,这个需要自己根据做过的项目总结好。数仓的话SQL,建模理论问的比较多。
建议刚开始面试不要海投简历,可以先找一家练练手,面试过程中查漏补缺,不断完善知识盲点,这些公司,你只要表现不是太差,一个部门面不过还可以面其他部门的。投简历可以在脉脉,拉钩,boss直聘上找HR,内部员工内推,也可以通过猎头投,不过猎头参差不齐,好的猎头会对公司在招的岗位给出详细的介绍,这个尤其在后面你有多个offer做选择时比较方便,你可以通过猎头了解这些offer的利弊,不过好猎头不好碰。
好了,下面开始罗列这次面试中遇到的面试问题,这些题没有答案,不过会先给出一些我看过的书籍和课程。后续的文章中会对这些知识点进行总结,敬请关注。
1 Java基础
- 说说Java里的多态什么意思
- Java 里的final关键用过吗
- 讲讲volatile关键字的作用,与synchronized关键字的不同
- 了解HashMap的内部结构吗?自己实现一个HashMap
- HashMap、Hashtable、ConcurrentHashMap的原理与区别
- 用Java实现一个生产者消费者模型,可以用BlockingQueue阻塞队列
- 了解哪些设计模式,实现一个单例模式
感言:做大数据开发,java基础是必须的,一般一面,二面都会问到,java基础答的不好,一般都不会给过。
推荐阅读:
2 数据结构与算法
算法:
- 搜索旋转排序数组,leetcode 33,中等难度
- 实现一个LRU缓存,leetcode 146 ,中等难度
- 用两个栈实现一个队列,leetcode 232 , 简单难度
- 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。Leetcode 347 , 中等难度
- 二叉树的最近公共祖先, Leetcode 236 , 中等难度
感言:就记住了这几个,大家也能看出来,基本都是leetcode上的题,刷题还是很有必要的。
刷题时建议先按分类刷,像二分查找,动态规划都有一些固定的模式的。
数据结构:
- 布隆过滤器
- Bitmap
- B+树
- LSM Tree
- 跳表
- Hyperloglog
推荐阅读:
强烈推荐极客时间王争老师的《数据结构与算法之美》课程,目前已有8万多人购买,应该是极客时间购买人数最多的课程,有需要的可以扫下面二维码购买。质量绝对优质,反正我读了受益匪浅。比如讲Redis的有序集合底层数据结构为什么用跳表时,老师会从二叉搜索树,B+树开始讲起,让你同时了解了这三种数据结构的异同和应用场景。
3 Hive
做大数据,Hive SQL也是必问的,大厂的ETL任务很多都是Hive SQL,主要问题如下:
- Hive row_number,rank两个函数的区别
- Hive窗口函数怎么设置窗口大小
- Hive order by,sort by,distribute by,cluster by 区别
- Hive map,reduce数怎么设置
- Hive SQL数据倾斜有哪些原因?怎么优化
- parquet数据格式内部结构了解吗
- Hive数据选择的什么压缩格式
- Hive SQL 如何转化成MR任务的
- Hive 分桶了解吗
- Hive的udf、udaf和udtf了解过吗?自己有没有写过udf
- 怎么验证Hive SQL 的正确性
- lateral view explode关键字来拆分数组
- join操作底层的MapReduce是怎么去执行的
SQL应用题:
- 一个login_in表,userid、login_time、ip,数据量很大,一个人可能有多条登录数据,取出最近10个登录的用户。
- 还是login_in表,统计登录的总条数( PV )和登录的总人数 (UV)。
- 一个用户好友表 userid , follow_list (该用户的好友id数组)
A [B, C, D]
B [A, C]
C [D]
统计这个表有多少对好友
感言:这个主要考察你平时写SQL多不多,数仓开发岗会比较在意SQL能力
推荐阅读:
4 MapReduce&Spark
- MapReduce的作业流程,涉及到几次排序
- Spark任务执行过程
- MapReduce Shuffle 和 Spark Shuffle的区别
- Spark的内存管理模型
- 讲讲Spark Shuffle
- Spark Shuffle bypass模型了解吗
- Spark使用中遇到什么问题,怎么解决的
感言:MapReduce&Spark是主要的离线计算引擎,需要对任务调度流程和可能出现性能瓶颈的点熟悉,
懂得组件原理和调优,如果工作中遇到并解决过大数据工程性能问题会有加分
推荐阅读:
MapReduce Shuffle 和 Spark Shuffle 原理概述
5 Spark Streaming&Flink
- Spark Streaming 与Flink的对比
- Flink怎么做到Exactly Once
- Spark Streaming能做到Exactly Once语义吗
- Flink的StateStore有哪些,工作中用过哪些
- 做过Flink内存调优吗
- 遇到过OOM的情况吗,怎么处理的
- 讲讲Spark Streaming 与Flink的反压机制
- Flink的窗口函数,时间机制,CheckPoint机制,两阶段提交
- Flink 双流Join
- Flink State TTL怎么设置
- Flink 维表关联有哪些方式,数据量大时怎么处理
其他一些应用题:
- 实时PV,UV统计
- 实时TOP N 统计
- 广告曝光流和点击流实时join
感言:不仅要对组件的原理清楚,还要实际做过实时相关的业务开发,面试官也会出一些他们场景的业务让你说下你会怎么设计,所以需要多关注些实时业务场景的应用实现。
推荐阅读:
基于 Kafka + Flink + Redis 实现电商大屏实时计算
Flink基础 | 深入理解Apache Flink核心技术
6 数据仓库
- 你们公司数仓是怎么构建的,怎么做的分层
- 说说范式建模和维度建模的区别
- 说说星型模型和雪花模型的区别
- 设计一个统计各渠道用户留存的模型
- 缓慢变化维怎么处理
- 你们数据怎么同步到数仓的,怎么保证数据不丢失
- 数据质量怎么控制
- 数据规范怎么定义的
- 如果进行元数据管理
感言:数仓方法论的东西需要了解,数仓整体的构建理念要对,给一个业务需求,能够给出合理的数仓构建模型。
推荐阅读:
辨析BI、数据仓库、数据湖和数据中台内涵及差异点(建议收藏)
7 Kafka
- 说说对kafka的了解
- Kafka基本原理说一下,和其他的MQ相比的优势
- 讲讲Kafka的高阶,低阶消费者API的区别
- Kafka的ack有哪几种
- Kafka 消费者怎么从Kafka取数据的
- Kafka生产消费怎么保证Exactly Once
- Kafka怎么保证有序性的
- Kafka Controller是做什么用的
- Kafka 多副本leader如何选举
- Kafka 消费者组重平衡流程是怎样的
- 新版和老版Kafka offset的管理有什么不同
- 如何查看消费者的消费进度
推荐阅读:
8 HBase
- HBase rowkey如何设计的
- 谈谈热点问题以及如何解决
- 说下HBase的读写流程
- HBase使用过程中做过哪些优化
- HBase的Compaction机制作用
推荐阅读:
9 Redis
- Redis 包含哪些数据结构
- Redis 有序集合的底层实现
- Redis 有哪几种数据持久化方式及各自优缺点
- 一致性哈希了解吗
推荐阅读:
总结
平时工作中一定要注意总结和积累,查漏补缺,不断完善自己的知识体系。