美团-外卖-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、支撑业务。
这七点可以与许多数仓问题产生关联,例如前面已经提到的主题、分层;没有提到的诸如缓慢变化、桥接维度等诸多数仓技术。最重要的是从目标出发回答数仓相关的问题,例如建模方法,并不存在好坏,核心是抽离出变与不变的内容,组织数据,适应变化,保持数据一致性,同时提升扩展性;数据分层或者不分层,也不是绝对的,如果性能足够、能够满足及时展现数据的诉求、质量能够保障,那也无所谓分层不分层;数仓中的诸多技术,各种类型的事实表,很多时候并不是因为技术原因选择事实表建设类型而是为了支撑业务而选择。
全部评论

相关推荐

03-28 10:27
已编辑
门头沟学院 Java
没有手撕算法环节一面 技术面1.==和equal的区别2.主要考察的是对jvm的理解吧静态变量 实例变量 局部变量的存储在jvm哪个位置,什么时候会释放2.集合遍历的时候能删除元素吗3.SpringBean的生命周期4.设计模式 讲一讲策略模式 然后问了一下优缺点5.如何做一个接口限流 一分钟限制一百次?我答用redis在拦截器层直接做就好了 有请求过来用户标识对应的接口路径请求次数+1  用过期时间来维护一分钟然后我突然想到了边界性问题 万一是还剩五秒过期请求了80次然后过期后的五秒钟又请求了80次 不是还会突破限流吗 然后我在那里想这个 卡了一下面试官问有什么疑问吗 我重新回答了一下 说可能会临界窗口突刺 这种情况要用滑动窗口了 他说没事 不用考虑这种复杂情况 就是很简单的做限流就好了 所以考察的应该是redis的简单使用吧6.在5的基础上问的 说这个接口限流要一起给同事用 怎么操作 其实我没太听明白这道题的意思 我问了两遍啥意思 还是没太听懂 最后他引导了我一下 我答出来了 原来考察的是aop 用注解的形式对方法进行功能增强拓展7.在6的基础上问了spring三大特性应该就没了…中间可能有一点点遗漏的问题 前一段时间面的 不太记得了 但一面整体难度偏低二面 技术面纯项目 无自我介绍1.让我说说我的项目2.问我项目中用到微信支付 出现一笔订单支付两次的情况怎么办 第一次支付了回调没过来 第二次又支付了 这一点我没考虑过 我一直觉得一笔订单只能支付一次 支付过的订单就没法支付了 微信服务端会替我处理好 下来问了问ai 还真有可能出现这种情况 还是太才疏学浅了3.问微信支付回调中 如果我代码逻辑有问题 或者网络抖动 没有回调成功 边界性问题我怎么处理的我稍微答出来一点点 微信回调避免业务逻辑耦合 直接推rabbitmq处理 其它是真想不到了 因为我做的平台和pdd这种电商平台是完全不一样的 实体产品可能网络恢复后还可以做重发货处理 但我是虚拟产品 用户也不用注册没有标识 都是匿名操作 退出页面 我也没办法继续操作了 只能用户手动补偿 我觉得面试官没太理解我的项目的机制 他直接按传统的货物交易平台来直接问我经典的场景问题了 导致我对他的问题感觉无从下手 因为很多策略都不通用4.问我对ai的了解和使用5.分享一下用ai的技巧6.prompt在哪个文件里改…基本就没了 二面整体感觉强度挺大的 每一个点都要刨根问底 你回答的时候他觉得你会的就会直接跳过 然后你不会的 他就会一直逮着问 问的很具体很细致 给我营造了一种我什么都答不上来的感觉 到后面直接压力爆炸了 感觉二面应该是G了
查看14道真题和解析
点赞 评论 收藏
分享
查看13道真题和解析
点赞 评论 收藏
分享
评论
1
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务