美团-外卖-25届校招内推 数据开发直面
可帮查面试进度。
数据开发方向使用内推码直接进核心本地商业-外卖数据组池子。外卖数据组是美团核心数据团队,接触美团体量最大最丰富数据,比较有挑战性。
非数据开发也可用。
详细的关于数据开发岗位的介绍、认知、常见的面试题单独整理在这里,比较长有兴趣可以看下。下面是摘的部分。
「数据开发面经、岗位认知」https://www.nowcoder.com/discuss/644915178596769792
5 常见面试问题
以下的内容只是可能会考察的点,不一定是遇上的所有面试官都会考虑的点。
5.2 SQL
数据开发都爱考察SQL,但是SQL会不会写并没有太大的区分度。但还是讲下SQL考察常见点:
(1)连接,考察对左右连接、内外连接的理解。
(2)关键字,GROUP BY、HAVING、DISTRIBUTE BY、CLUSTER BY。
(3)窗口函数,row_number() rank() dense_rank() lag() lead()。
(4)行列转化,熟练运用CASE WHEN + GROUP BY,熟练运用EXPLODE() + LATERAL VIEW。
(5)自定义UDF/UDTF/UDAF
5.3 算法
工作过程中,面对真正困难的性能、优化问题时,对数据结构、算法的了解程度直接决定了能否解决这些问题。
1、推荐一个Github上的记录,可以按该记录系统练习。 ****************************************
(1)链表,考虑它的操作方法,插入、删除、遍历。大多考察指针修改、合并。考虑头结点的设置、快慢指针、画图。
(2)树,考虑树的遍历,前中后序、广度深度。一些特殊的树结构,完全二叉树、二叉搜索树。递归。
(3)堆,考虑最大堆、最小堆特点,理解其构建特性,动态求极值。
(4)二分,提到搜索或者想到要用搜索,联想到二分。考虑边界。
(5)dp,状态、状态转移、递归。
(6)回溯,递归、剪枝、递归的终止状态。回溯一般是有比较结构化的写法。
还有一些其他的,前缀树、并查集、位运算,这些在上面的github链接里都有介绍。
2、先讲思路。
3、注意代码风格。
5.4 计算机基础
这方面网上总结已经非常多了,重点是要有意识准备,并且对于常见的问题需要能够结合实际情况、自身经历作出解释,背下来八股只是基本要求,进一步解释才能体现对问题的理解。
考察的方向主要是计网、操作系统、数据结构和算法、数据库。
(1)计网,五层/七层结构,TCP\UDP\IP,挥手握手,常见状态码,是很高频的考察点。
(2)操作系统,线程、进程、通信,LRU/LFU,死锁相关问题比较常见。
(3)数据库, mysql,索引、事务、b+\b\红黑,这些非常八股。
(4)数据结构和算法,这个方向把上面算法题刷一刷其实就不用太担心会答不上数据结构算法的问题。常见的能口头问的问题,排序的对比、不同类型树的特点、哈希冲突。找数据结构方面问题可以分方向去找,对哪一方面不熟悉,搜哪一方面面试题。
(5)编程语言,常见的问题通常和Java集合类、内存模型、多态、抽象类/接口、文件IO、多线程、框架(Spring)有关。Java的面试题归纳非常多,稍微找一找就能找到很多,有余力可以看看阿里巴巴Java开发手册,内容非常丰富。
八股背了再尽可能结合自己所学、所经历的思考下具体的应用场景。
5.5 大数据组件
大数据组件,在学校的经历中确实能接触到的机会比较少,所以这部分如果不了解,可以多准备计算机基础、算法、SQL。如果希望对大数据的基础有初步了解,除了前面推荐的《大数据技术原理与应用》,还可以看下谷歌的三篇论文概述,有余力可以看原文:
《The Google File System》 、《MapReduce: Simplified Data Processing on Large Clusters》 、《Bigtable: A Distributed Storage System for Structured Data》
(1)Spark,
- API抽象,DataFrame Dataset上的常见操作;
- 执行计划,逻辑计划、物理计划、访问者模式;
- RDD,弹性的含义、RDD特性、动作和转换原理及常见的算子;
- Spark提交任务过程、运行任务过程、DAG。
- 常见Spark任务性能问题及调优方式,结合SparkSQL中的算子、stage思考,另外可以找下网上介绍SparkUI的内容看下。
一些常见面试题总结,里面有的是确实常问,有的需要有实际经历才会有深入认识,找常见题目时按上面几个方向去找,没找到答案的,拿大模型扩展下。 有余力可以看看源码,Spark源码注释比较完善。比如.sql()点下去,可以看到背的八股里的执行计划如何转化;map、reduce、count等常见算子点下去,对API抽象、算子设计都会有更深入理解。
(2)Hive,
- 存储和计算,一定注意它并不自己存储数据,计算借助MR实现。Hive的元数据(如表的定义等)本质上是Hadoop的目录文件,达到元数据与数据存储分离的目的。
- 算子,常考察的是Hive比较有特点的算子,Sort By 、Distribute By、Map join;
- 列式存储,Hive底层的列式存储结构。
- 执行过程,HiveSQL转换成MR的过程。建议先看SparkSQL转换成执行计划的过程,现在Hive用的相对少。
- 调优,Map端、Reduce端、shuffle、combiner、小文件调整。
- MR过程,很多人都背过,我也背过,但最重要的是了解MR的思想,有余力则看下Google的MR论文。
(3)HDFS、Yarn, 涵盖了大部分,但是启动方法、配置方法,如果不是找平台开发的岗,这些不用看,主要关注其工作原理、小文件问题、namenode/datanode相关的内容。
(4)Flink,
- 内部组件结构,JobManager ResourceManager TaskManager Dispatch,怎么交互任务如何提交;事件时间处理,水位线的定义;状态管理、状态后端;checkpoints、savepoints。
- Datastream,常见的Datasteam,keyed、connected、joined;
- 时间相关操作,如何生成水位线;processFunction;触发器;窗口算子,窗口中如何聚合、如何根据水位触发;流之间join;迟到数据测流输出。
- 状态,流式操作中如何保持之前发生的一些计算的结果,常见的状态算子。端到端一致性。
(5)HBase,
- 结构,表、列族、行、行键、Region;
- HFile、KeyValue、WAL、HLog、回放;
- 读写过程;
- 实际适用的场景。
(6)OLAP相关,如果没实习经历,接触OLAP的可能性比较小。只是校招面试,可以多了解下OLAP和OLTP区别,为什么OLAP效率比关系型数据库高得多。如果已经有实习经历了,就结合经历谈一下认识。下面列的比较基础,不一定全,不了解OLAP可以看下官网的简介,有个初步映像。
- Clickhouse,核心特性,列式存储、向量化计算、表引擎、数据分片;MergeTree,存储结构、索引结构;数据分片、副本。
- Doris
- Kylin
(7)一些比较新的大数据组件,数据湖Hudi、Iceberg、Paimon;数据编排Alluxio;内存计算Ignite,如果有了解肯定也对面试有帮助。
以上的很多内容只提了考察方向,没有答案,如果找不到答案,建议用大模型扩展。
5.6 数据仓库
- 回答数据仓库相关的问题前,先想下数据仓库是什么。它通常是面向业务的、经过整序的、高质量的数据集合,用于支撑业务决策、运营或算法优化。
因为要面向业务,要整序,要保障质量,所以数仓要划分主题。主题内部的数据是针对某个特定业务诉求或分析领域,有高内聚特性。同质的数据汇总在一起可以有效地保障其一致性、质量。同质的数据存放在一起,提升使用效率。
因为要保障数据质量,数据做了分层,公共逻辑下沉到底层,下游使用相同的上游加工逻辑从而获得一致的字段逻辑;在聚合层进行维度建模,实现指标、维度标准化,下游基于此进行加工保障指标一致性且能够获得较高的效率。
因为要对数据做整序、面向业务,所以有建模方法作为数据整序的基础方法论。常见的数仓建模是Kimball的维度建模和Inmon的实体建模。常见的针对维度建模的问题,维度建模过程,事实、维度、粒度的含义,快照,雪花和星形,一致性维度,总线矩阵,度量。常见的针对实体建模的问题,实体建模的流程(业务-领域-逻辑-物理),领域建模,范式。
- 很多问题并没有标准答案,核心是记住数仓的目标。这里写的七点目标来自Kimball的《数据仓库工具箱》1、方便地保存数据;2、数据一致性;3、适应变化;4、及时展现数据;5、信息安全;6、数据权威;7、支撑业务。
这七点可以与许多数仓问题产生关联,例如前面已经提到的主题、分层;没有提到的诸如缓慢变化、桥接维度等诸多数仓技术。最重要的是从目标出发回答数仓相关的问题,例如建模方法,并不存在好坏,核心是抽离出变与不变的内容,组织数据,适应变化,保持数据一致性,同时提升扩展性;数据分层或者不分层,也不是绝对的,如果性能足够、能够满足及时展现数据的诉求、质量能够保障,那也无所谓分层不分层;数仓中的诸多技术,各种类型的事实表,很多时候并不是因为技术原因选择事实表建设类型而是为了支撑业务而选择。
数据开发方向使用内推码直接进核心本地商业-外卖数据组池子。外卖数据组是美团核心数据团队,接触美团体量最大最丰富数据,比较有挑战性。
非数据开发也可用。
详细的关于数据开发岗位的介绍、认知、常见的面试题单独整理在这里,比较长有兴趣可以看下。下面是摘的部分。
「数据开发面经、岗位认知」https://www.nowcoder.com/discuss/644915178596769792
5 常见面试问题
以下的内容只是可能会考察的点,不一定是遇上的所有面试官都会考虑的点。
5.2 SQL
数据开发都爱考察SQL,但是SQL会不会写并没有太大的区分度。但还是讲下SQL考察常见点:
(1)连接,考察对左右连接、内外连接的理解。
(2)关键字,GROUP BY、HAVING、DISTRIBUTE BY、CLUSTER BY。
(3)窗口函数,row_number() rank() dense_rank() lag() lead()。
(4)行列转化,熟练运用CASE WHEN + GROUP BY,熟练运用EXPLODE() + LATERAL VIEW。
(5)自定义UDF/UDTF/UDAF
5.3 算法
工作过程中,面对真正困难的性能、优化问题时,对数据结构、算法的了解程度直接决定了能否解决这些问题。
1、推荐一个Github上的记录,可以按该记录系统练习。 ****************************************
(1)链表,考虑它的操作方法,插入、删除、遍历。大多考察指针修改、合并。考虑头结点的设置、快慢指针、画图。
(2)树,考虑树的遍历,前中后序、广度深度。一些特殊的树结构,完全二叉树、二叉搜索树。递归。
(3)堆,考虑最大堆、最小堆特点,理解其构建特性,动态求极值。
(4)二分,提到搜索或者想到要用搜索,联想到二分。考虑边界。
(5)dp,状态、状态转移、递归。
(6)回溯,递归、剪枝、递归的终止状态。回溯一般是有比较结构化的写法。
还有一些其他的,前缀树、并查集、位运算,这些在上面的github链接里都有介绍。
2、先讲思路。
3、注意代码风格。
5.4 计算机基础
这方面网上总结已经非常多了,重点是要有意识准备,并且对于常见的问题需要能够结合实际情况、自身经历作出解释,背下来八股只是基本要求,进一步解释才能体现对问题的理解。
考察的方向主要是计网、操作系统、数据结构和算法、数据库。
(1)计网,五层/七层结构,TCP\UDP\IP,挥手握手,常见状态码,是很高频的考察点。
(2)操作系统,线程、进程、通信,LRU/LFU,死锁相关问题比较常见。
(3)数据库, mysql,索引、事务、b+\b\红黑,这些非常八股。
(4)数据结构和算法,这个方向把上面算法题刷一刷其实就不用太担心会答不上数据结构算法的问题。常见的能口头问的问题,排序的对比、不同类型树的特点、哈希冲突。找数据结构方面问题可以分方向去找,对哪一方面不熟悉,搜哪一方面面试题。
(5)编程语言,常见的问题通常和Java集合类、内存模型、多态、抽象类/接口、文件IO、多线程、框架(Spring)有关。Java的面试题归纳非常多,稍微找一找就能找到很多,有余力可以看看阿里巴巴Java开发手册,内容非常丰富。
八股背了再尽可能结合自己所学、所经历的思考下具体的应用场景。
5.5 大数据组件
大数据组件,在学校的经历中确实能接触到的机会比较少,所以这部分如果不了解,可以多准备计算机基础、算法、SQL。如果希望对大数据的基础有初步了解,除了前面推荐的《大数据技术原理与应用》,还可以看下谷歌的三篇论文概述,有余力可以看原文:
《The Google File System》 、《MapReduce: Simplified Data Processing on Large Clusters》 、《Bigtable: A Distributed Storage System for Structured Data》
(1)Spark,
- API抽象,DataFrame Dataset上的常见操作;
- 执行计划,逻辑计划、物理计划、访问者模式;
- RDD,弹性的含义、RDD特性、动作和转换原理及常见的算子;
- Spark提交任务过程、运行任务过程、DAG。
- 常见Spark任务性能问题及调优方式,结合SparkSQL中的算子、stage思考,另外可以找下网上介绍SparkUI的内容看下。
一些常见面试题总结,里面有的是确实常问,有的需要有实际经历才会有深入认识,找常见题目时按上面几个方向去找,没找到答案的,拿大模型扩展下。 有余力可以看看源码,Spark源码注释比较完善。比如.sql()点下去,可以看到背的八股里的执行计划如何转化;map、reduce、count等常见算子点下去,对API抽象、算子设计都会有更深入理解。
(2)Hive,
- 存储和计算,一定注意它并不自己存储数据,计算借助MR实现。Hive的元数据(如表的定义等)本质上是Hadoop的目录文件,达到元数据与数据存储分离的目的。
- 算子,常考察的是Hive比较有特点的算子,Sort By 、Distribute By、Map join;
- 列式存储,Hive底层的列式存储结构。
- 执行过程,HiveSQL转换成MR的过程。建议先看SparkSQL转换成执行计划的过程,现在Hive用的相对少。
- 调优,Map端、Reduce端、shuffle、combiner、小文件调整。
- MR过程,很多人都背过,我也背过,但最重要的是了解MR的思想,有余力则看下Google的MR论文。
(3)HDFS、Yarn, 涵盖了大部分,但是启动方法、配置方法,如果不是找平台开发的岗,这些不用看,主要关注其工作原理、小文件问题、namenode/datanode相关的内容。
(4)Flink,
- 内部组件结构,JobManager ResourceManager TaskManager Dispatch,怎么交互任务如何提交;事件时间处理,水位线的定义;状态管理、状态后端;checkpoints、savepoints。
- Datastream,常见的Datasteam,keyed、connected、joined;
- 时间相关操作,如何生成水位线;processFunction;触发器;窗口算子,窗口中如何聚合、如何根据水位触发;流之间join;迟到数据测流输出。
- 状态,流式操作中如何保持之前发生的一些计算的结果,常见的状态算子。端到端一致性。
(5)HBase,
- 结构,表、列族、行、行键、Region;
- HFile、KeyValue、WAL、HLog、回放;
- 读写过程;
- 实际适用的场景。
(6)OLAP相关,如果没实习经历,接触OLAP的可能性比较小。只是校招面试,可以多了解下OLAP和OLTP区别,为什么OLAP效率比关系型数据库高得多。如果已经有实习经历了,就结合经历谈一下认识。下面列的比较基础,不一定全,不了解OLAP可以看下官网的简介,有个初步映像。
- Clickhouse,核心特性,列式存储、向量化计算、表引擎、数据分片;MergeTree,存储结构、索引结构;数据分片、副本。
- Doris
- Kylin
(7)一些比较新的大数据组件,数据湖Hudi、Iceberg、Paimon;数据编排Alluxio;内存计算Ignite,如果有了解肯定也对面试有帮助。
以上的很多内容只提了考察方向,没有答案,如果找不到答案,建议用大模型扩展。
5.6 数据仓库
- 回答数据仓库相关的问题前,先想下数据仓库是什么。它通常是面向业务的、经过整序的、高质量的数据集合,用于支撑业务决策、运营或算法优化。
因为要面向业务,要整序,要保障质量,所以数仓要划分主题。主题内部的数据是针对某个特定业务诉求或分析领域,有高内聚特性。同质的数据汇总在一起可以有效地保障其一致性、质量。同质的数据存放在一起,提升使用效率。
因为要保障数据质量,数据做了分层,公共逻辑下沉到底层,下游使用相同的上游加工逻辑从而获得一致的字段逻辑;在聚合层进行维度建模,实现指标、维度标准化,下游基于此进行加工保障指标一致性且能够获得较高的效率。
因为要对数据做整序、面向业务,所以有建模方法作为数据整序的基础方法论。常见的数仓建模是Kimball的维度建模和Inmon的实体建模。常见的针对维度建模的问题,维度建模过程,事实、维度、粒度的含义,快照,雪花和星形,一致性维度,总线矩阵,度量。常见的针对实体建模的问题,实体建模的流程(业务-领域-逻辑-物理),领域建模,范式。
- 很多问题并没有标准答案,核心是记住数仓的目标。这里写的七点目标来自Kimball的《数据仓库工具箱》1、方便地保存数据;2、数据一致性;3、适应变化;4、及时展现数据;5、信息安全;6、数据权威;7、支撑业务。
这七点可以与许多数仓问题产生关联,例如前面已经提到的主题、分层;没有提到的诸如缓慢变化、桥接维度等诸多数仓技术。最重要的是从目标出发回答数仓相关的问题,例如建模方法,并不存在好坏,核心是抽离出变与不变的内容,组织数据,适应变化,保持数据一致性,同时提升扩展性;数据分层或者不分层,也不是绝对的,如果性能足够、能够满足及时展现数据的诉求、质量能够保障,那也无所谓分层不分层;数仓中的诸多技术,各种类型的事实表,很多时候并不是因为技术原因选择事实表建设类型而是为了支撑业务而选择。
全部评论
相关推荐