乐趣区

关于大数据:美团优选大数据开发岗面试真题附答案详细解析

公众号(五分钟学大数据)已推出大数据面试系列文章—五分钟小面试 ,此系列文章将会 深入研究各大厂笔面试真题 ,并依据笔面试题 扩大相干的知识点,助力大家都可能胜利入职大厂!

此面试题来自牛客网友分享的 美团优选一面 ,面试时长 一小时 。网友状况:海内 水本 ,在某三线中厂 工作 2 年
参考答案由本公众号提供。如有谬误,欢送斧正!

以下为面试过程中发问,岗位为大数据开发,依据发问内容看出,次要偏数仓方向

  1. 自我介绍
  2. 到北京工作的志愿
  3. SQL 题,给一张城市和交易额表,一张城市对应省份表,取出 省份 总 交易额大于 500 的 省份 的名字
  4. SQL 题,基于方才,得出 省份 总 交易额 [0,500] , [500,1000] , [1000,+∞] 在以下三个区间的 省份 的 数量
  5. SQL 题,还是基于方才,按从小到大的程序得出每个城市的累计交易额,能够用窗口
  6. 依据分隔符划分字段,能够用正则表白
  7. 次要负责的产品
  8. 产品的指标如何晓得带来多少价值
  9. 指标如何做到精准
  10. 就我的项目中提到的某个实体,讲一下他对应的属性有哪些
  11. 如果你建模的话,你会如何建模
  12. 次要都抽取哪些数据源,应用什么工具
  13. 形容一下抽取的外部逻辑,怎么实现的
  14. 除了工作,有去读什么书学习吗
  15. 你感觉 flink 和 spark streaming 有什么区别
  16. spark streaming 相比 flink 有什么长处
  17. 有什么想问的吗

答案具体解析

1. 自我介绍

面试的时候,面试官说的第一句话就是:“介绍一下你本人吧。”

很多人真的很实诚的就只说一句:“我叫 xx,来自 xx,往年 xx 岁。”而后单方冷场。

这样的自我介绍还不如前段时间风行的一句话:“我叫 xx, 我喜爱唱跳、rap、篮球。”起码你还让面试官晓得了你的专长。

所以这里就须要你用最短的工夫让面试官记住你,突出本人的劣势、有论证力的压服对方。

准则如下:不要大段背诵简历内容;不要说流水账,内容简短;自我介绍工夫尽量管制在一分钟左右

那么怎么在最短时间内满足以上三条。

罗振宇说过:“蠢笨的人讲道理,而聪慧的人会说故事。”

所以面试时咱们要解脱惯例答复,学会“讲故事”。那故事怎么讲,记住以下八个字,将本人的经验或想法套进去:

  • 指标:就是我想要做什么,我想要成为什么样的人;
  • 妨碍:做这件事的难点是什么,有哪些“质疑”点;
  • 致力:为了克服难点和“质疑”,我做了哪些事件;
  • 后果:通过我的致力,我当初取得了什么样的成就。

有工夫了针对 自我介绍 我再具体的解说下,这部分还是很重要的,因为这部分就是“采购”本人,给本人打广告的工夫。

2. 到北京工作的志愿

招人必定是心愿找到一个虚浮,稳固的人,而不是那种来了几天或一段时间就走的人。面试官问你这个问题,一是在看你大略能在公司呆多久,二是看公司是否有必要造就你或者录用你。

所以答复时肯定要表白出你肯定能来北京并且能长时间待上来(即便你不是这样),具体答复施展集体设想。

3. SQL 题,给一张城市和交易额表,一张城市对应省份表,取出 省份 总 交易额大于 500 的 省份 的名字

为了便于了解,依据下面的问题,咱们先结构这两张表:

城市交易额表 business_table

city_num:城市编号
gmv:交易额

| city_num | gmv |
| :–: | :–:|
| 1001 | 210 |
| 1001 | 90 |
| 1002 | 250 |
| 1003 | 200 |
| 1004 | 700 |
| 1005 | 350 |
| 1005 | 150 |
| 1006 | 250 |
| 1007 | 150 |

城市对应省份表:province_table

province_num:省份编号
province_name:省份名称
city_num:城市编号

province_num province_name city_num
11 a 1001
11 a 1005
12 b 1002
12 b 1003
13 c 1004
13 c 1006
13 c 1007

依据以上表,sql 语句如下(以下仅为其中一种写法,仅供参考)

SELECT MAX(tmp.province_name)
FROM (
    SELECT bt.city_num, bt.gmv, pt.province_num, pt.province_name
    FROM business_table bt
        LEFT JOIN province_table pt ON bt.city_num = pt.city_num
) tmp
GROUP BY tmp.province_num
HAVING SUM(tmp.gmv) > 500;

4. SQL 题,基于方才,得出 省份 总 交易额 [0,500] , [500,1000] , [1000,+oo] 在以下三个区间的 省份 的 数量

参考 sql 语句如下:

SELECT 
  COUNT(CASE 
      WHEN tmp2.pro_gmv >= 0
      AND tmp2.pro_gmv < 500 THEN tmp2.pro_name
      ELSE NULL END) AS gmv_0_500,
  COUNT(CASE 
      WHEN tmp2.pro_gmv >= 500
      AND tmp2.pro_gmv < 1000 THEN tmp2.pro_name
      ELSE NULL END) AS gmv_500_1000, 
  COUNT(CASE 
      WHEN tmp2.pro_gmv >= 1000 THEN tmp2.pro_name
      ELSE NULL END) AS gmv_1000_
FROM (SELECT MAX(tmp.province_name) AS pro_name, SUM(tmp.gmv) AS pro_gmv
    FROM (
        SELECT bt.city_num, bt.gmv, pt.province_num, pt.province_name
        FROM business_table bt
            LEFT JOIN province_table pt ON bt.city_num = pt.city_num
    ) tmp
    GROUP BY tmp.province_num
) tmp2;

5. SQL 题,还是基于方才,按从小到大的程序得出每个城市的累计交易额,能够用窗口

参考 sql 语句如下:

# 既然面试官让用窗口函数,那咱们就别客气了
SELECT city_num, gmv
FROM (SELECT DISTINCT city_num, SUM(gmv) OVER(PARTITION BY city_num) AS gmv
    FROM business_table
) tmp
ORDER BY gmv;

6. 依据分隔符划分字段,能够用正则表白

# java
String address="上海 | 上海市 | 闵行区 | 吴中路"; 
String[] splitAddress=address.split("\\|"); // 如果以竖线为分隔符,则 split 的时候须要加上两个斜杠 \\ 进行本义

#sql
hive> select split('abcdef', 'c') from test;
["ab", "def"]

7. 次要负责的产品

这个依据简历或者你本人的状况理论实说就行。

8. 产品的指标如何晓得带来多少价值

这题没有标准答案,依据本人的了解答复即可。

以下仅供参考:

在《精益数据分析》一书中给出了两套比拟罕用的指标体系建设方法论,其中一个就是比拟有名的 海盗指标法 ,也就是咱们常常听到的AARRR 海盗模型。海盗模型是用户剖析的经典模型,它反映了增长是系统性地贯通于用户生命周期各个阶段的: 用户拉新 (Acquisition) 用户激活 (Activation) 用户留存 (Retention) 商业变现 (Revenue) 用户举荐(Referral)

为什么要说这个模型呢,因为通过这个模型中的一些要害指标咱们能够反推出产品的指标所带来的价值有哪些。

AARRR 模型:

A 拉新: 通过各种推广渠道,以各种形式获取指标用户,并对各种营销渠道的成果评估,一直优化投入策略,升高获客老本。波及要害指标例如 新增注册用户数、激活率、注册转化率、新客留存率、下载量、装置量等,咱们通过这些指标就可反馈出获取指标用户的成果是怎么的。

A 沉闷:沉闷用户指真正开始应用了产品提供的价值,咱们须要把握用户的行为数据,监控产品衰弱水平。这个模块次要反映用户进入产品的行为表现,是产品体验的外围所在。波及要害指标例如 DAU/MAU、日均应用时长、启动 APP 时长、启动 APP 次数等。通过这些指标能够反映出用户的沉闷状况。

R 留存:掂量用户粘性和品质的指标。波及要害指标例如 留存率、流失率等。通过这些指标能够反映出用户的留存状况。

R 变现: 次要用来掂量产品商业价值。波及要害指标例如 生命周期价值(LTV)、客单价、GMV 等。这些指标能够反映出产品的商业价值。

R 举荐:掂量用户自流传水平和口碑状况。波及要害指标例如 邀请率、裂变系数等。

9. 指标如何做到精准

同上题,没有标准答案。

仅供参考:

指标要做到精准,就必须应用迷信办法选指标。

选指标罕用办法是 指标分级办法 OSM 模型

1. 指标分级办法:指标分级次要是指标内容纵向的思考,依据企业战略目标、组织及业务过程进行自上而下的指标分级,对指标进行层层分析,次要分为三级 T1、T2、T3。

  • T1 指标:公司策略层面指标 用于掂量公司整体指标达成状况的指标,次要是决策类指标,T1 指标应用通常服务于公司策略决策层。
  • T2 指标:业务策略层面指标 为达成 T1 指标的指标,公司会对指标拆解到业务线或事业群,并有针对性做出一系列经营策略,T2 指标通常反映的是策略后果属于支持性指标同时也是业务线或事业群的外围指标。T2 指标是 T1 指标的纵向的门路拆解,便于 T1 指标的问题定位,T2 指标应用通常服务业务线或事业群。
  • T3 指标:业务执行层面指标 T3 指标是对 T2 指标的拆解,用于定位 T2 指标的问题。T3 指标通常也是业务过程中最多的指标。依据各职能部门指标的不同,其关注的指标也各有差别。T3 指标的应用通常能够领导一线经营或剖析人员发展工作,内容偏过程性指标,能够疾速疏导一线人员做出相应的动作。

2. OSM 模型 (Obejective,Strategy,Measurement):是指标体系建设过程中辅助确定外围的重要办法,蕴含 业务指标、业务策略、业务度量,是指标内容横向的思考。

O:用户应用产品的指标是什么?产品满足了用户的什么需要?次要从用户视角和业务视角确定指标,准则是切实可行、易了解、可干涉、正向无益。

S:为了达成上述指标我采取的策略是什么?

M:这些策略随之带来的数据指标变动有哪些?

10. 就我的项目中提到的某个实体,讲一下他对应的属性有哪些

理论我的项目问题,依据简历中写的叙述。

这里也给咱们提个醒:简历中所写的我的项目咱们必须 十分相熟 才行,并且咱们须要相熟所写我的项目的整个生命周期,包含我的项目开发 前中后 期的所有内容,说的时候能够比简历上写的更具体,然而千万不能和简历上有出入。

11. 如果你建模的话,你会如何建模

具体的建模可看这篇文章:数仓建设中最罕用模型 –Kimball 维度建模详解

以下内容截取自上述文章

提到建模,就牢记 维度建模四步走,模型怎么建,就围绕以下四步叙述:

1、抉择业务过程
维度建模是紧贴业务的,所以必须以业务为根基进行建模,那么抉择业务过程,顾名思义就是在整个业务流程中选取咱们须要建模的业务,依据经营提供的需要及日后的易扩展性等进行抉择业务。

2、申明粒度
从关注原子粒度开始设计,也就是从最细粒度开始,因为原子粒度可能接受无奈预期的用户查问。然而上卷汇总粒度对查问性能的晋升很重要的,所以对于有明确需要的数据,咱们建设针对需要的上卷汇总粒度,对需要不明朗的数据咱们建设原子粒度。

3、确认维度
维度表是作为业务剖析的入口和描述性标识,所以也被称为数据仓库的“灵魂”。申明完粒度之后,就要确定哪些属性是维度,那么怎么确定哪些属于维度属性呢,这里就不具体开展了,能够点击下面的文章链接,有具体阐明。

4、确认事实
维度建模的外围准则之一 是同一事实表中的所有度量必须具备雷同的粒度 。这样能确保不会呈现反复计算度量的问题。有时候往往不能确定该列数据是事实属性还是维度属性。记住 最实用的事实就是数值类型和可加类事实

这块内容太多了,说完以上四步之后能够在 具体的聊下数仓是怎么分层的,每层都寄存什么数据 等。具体文章可点击:联合公司业务剖析离线数仓建设

12. 次要都抽取哪些数据源,应用什么工具

依据简历的我的项目答复。

以下仅供参考,次要抽取的数据:

  1. 业务库数据,应用 sqoop 进行抽取
  2. 流量日志数据,应用 flume 实时采集
  3. 第三方公司数据,应用通用接口采集

13. 形容一下抽取的外部逻辑,怎么实现的

依据简历的我的项目答复。

以下仅供参考:

在开始创立抽取零碎之前,须要一份逻辑数据映射,它形容了那些 提交到前台的表中原始字段和最终目标字段之间的关系。该文档贯通 ETL 零碎。

设计逻辑:

  1. 有一个布局
  2. 确定候选的数据源
  3. 应用数据评估剖析工具剖析源零碎
  4. 承受数据线和业务规定的遍历
  5. 充沛了解数据仓库数据模型
  6. 验证计算和公式的有效性

逻辑数据映射的组成:指标表名称、表类型、SCD(迟缓变动维度)、源数据库、源表名称、源列名称、转换。

这个表必须清晰的形容在转换的过程中蕴含的流程,不能有任何疑难的中央。

表类型给了咱们数据加载过程执行的秩序:先是维表,而后是事实表。
与表类型一起,加载维表过程 SCD 类型很重要,开发之前须要了解哪些列须要保留历史信息以及如何获取历史信息所需的策略。

在源零碎失去确认和剖析之前,残缺的逻辑数据映射是不存在的,源系统分析通常分为两个次要阶段:数据发现阶段 异样检测阶段

数据发现阶段:须要 ETL 小组深刻到数据的需要中,确定每一个须要加载到数据仓库中的源零碎,表和属性,为每一个元素确定适当的源或者记录零碎是一个挑战,必须认真评估。

异样检测阶段:查看源数据库中每一个外键是否有 NULL 值。如果存在 NULL 值,必须对表进行外关联。如果 NULL 不是外键而是一个列,那么必须有一个解决 NULL 数据的业务规定。只有容许,数据仓库加载数据肯定用默认值代替 NULL。

14. 除了工作,有去读什么书学习吗

仅供参考:

前段时间读了《数仓工具箱 - 维度建模权威指南》这本书,受害颇多,对维度建模有了一个清晰的认知,维度建模就是时刻思考如何可能提供简略性,以业务为驱动,以用户了解性和查问性能为指标的这样一种建模办法。

目前正在读《大数据日知录:架构与算法》,这本书波及到的常识十分多,全面梳理了大数据存储与解决的相干技术,看书能让我更加系统化,体系化的学习大数据的技术。

注:以上两本书的电子版,可在 五分钟学大数据 公众号后盾获取,回复关键字:数仓工具箱 大数据日知录

15. 你感觉 flink 和 spark streaming 有什么区别

这个问题是一个十分宏观的问题,因为两个框架的不同点十分之多。然而在面试时有十分重要的一点肯定要答复进去:Flink 是规范的实时处理引擎,基于事件驱动。而 Spark Streaming 是微批(Micro-Batch)的模型

上面就分几个方面介绍两个框架的次要区别:

  1. 架构模型

    • Spark Streaming 在运行时的次要角色包含:Master、Worker、Driver、Executor;
    • Flink 在运行时次要包:Jobmanager、Taskmanager 和 Slot。
  2. 任务调度

    • Spark Streaming 连续不断的生成渺小的数据批次,构建有向无环图 DAG,Spark Streaming 会顺次创 DStreamGraph、JobGenerator、JobScheduler;
    • Flink 依据用户提交的代码生成 StreamGraph,通过优化生成 JobGraph,而后提交给 JobManager 进行解决,JobManager 会依据 JobGraph 生成 ExecutionGraph,ExecutionGraph 是 Flink 调度最外围的数据结构,JobManager 依据 ExecutionGraph 对 Job 进行调度。
  3. 工夫机制

    • Spark Streaming 反对的工夫机制无限,只反对解决工夫。
    • Flink 反对了流处理程序在工夫上的三个定义:解决工夫、事件工夫、注入工夫。同时也反对 watermark 机 制来解决滞后数据。
  4. 容错机制

    • 对于 Spark Streaming 工作,咱们能够设置 checkpoint,而后如果产生故障并重启,咱们能够从上次 checkpoint 之处复原,然而这个行为只能使得数据不失落,可能 会反复解决,不能做到恰好一次解决语义。
    • Flink 则应用 两阶段提交协定 来解决这个问题。

Flink 的两阶段提交协定具体能够看这篇文章:八张图搞懂 Flink 端到端精准一次解决语义 Exactly-once

16. Spark Streaming 相比 Flink 有什么长处

个别都是问 Flink 比 Spark 有什么劣势,这个是反过来问的,要留神哦

微批处理劣势

Spark Streaming 的微批处理尽管实时性不如 Flink,然而微批对于实时性要求不是很高的工作有着很大劣势。

  • 比方 10W+ 的数据写入 MySql,如果采纳 Flink 实时处理,Sink 到 MySql 中,Flink 是事件驱动的,每条都去插入或更新数据库,显著不靠谱,因为数据库扛不住。如果在 Flink 的 Sink 处加上批处理,尽管能够进步性能,然而如果最初一个批次没有达到批大小阈值,数据就不会刷出进而导致数据失落。
  • Flink 是基于状态的计算,所以在多个窗口内做关联操作是很难实现的,只能把所有状态丢到内存中,但如果超出内存,就会间接内存溢出。Spark 因为是基于 RDD 的能够利用 RDD 的劣势,哪怕数据超出内存一样算,所以在较粗工夫粒度极限吞吐量上 Spark Streaming 要优于 Flink。

语言劣势

  • Flink 和 Spark 都是由 Scla 和 Java 混合编程实现,Spark 的外围逻辑由 Scala 实现,而 Flink 的次要外围逻辑由 Java 实现。在对第三方语言的反对上,Spark 反对的更为宽泛,Spark 简直完满的反对 Scala,Java,Python,R 语言编程。

17. 有什么想问的吗

面试是单方相互了解的过程,所以出于礼貌在面试完结询问一下你有没有什么想问的。当然面试官也想借此理解你对他们公司的理解水平及感兴趣水平。

所以请不要答复“我没有问题了”,而是要把这个问题当作最初一次发言机会。问的问题要围绕着这家公司自身,要让对方感觉你很关怀、关注公司。

以下是 能够问的

  1. 公司对这个岗位的冀望是什么样的?其中,哪些局部是我须要特地致力的?
  2. 是否有资深的人员可能率领新进者,并让新进者有施展的机会?
  3. 公司强调团队单干。那在这个工作团队中,哪些集体特质是公司所心愿的?
  4. 是否为我介绍一下工作环境?

以下是 不该问的

  1. 薪资待遇
  2. 过于浅近的问题
  3. 超出应聘岗位的问题

退出移动版