【面经】阿里数据研发多面面经

作者:SJZ97
链接:https://www.nowcoder.com/discuss/612313?type=0&order=0&pos=78&page=1&channel=-1&source_id=0
来源:牛客网

主要是看了一下技术问题,其他一些因人而异的问题删掉了。

一面

自我介绍
针对简历中尤其是字节实习中的相关项目经历展开询问
主要工作介绍
你说熟悉上下游,能否挑一个项目具体讲一讲
数仓建模应该分为哪几个部分

1.选择业务板块-电商 物流。

2.规范定义-规范的命名体系、数据域。

  • 业务板块-基于业务的命名空间
  • 数据域-当前业务板块下一组业务活动的集合,项目属于具体的业务板块,数据域面向业务分析,对业务过程或维度进行抽象
  • 修饰类型-从属于某个业务域,比如日志域中访问终端包括无线、PC
  • 维度-从属于一个数据域,表示度量的环境,是描述信息,如地理,时间维度等,原子指标如下单金额,派生指标=原子+修饰词+时间,比如1天海外买家支付金额

3.模型设计

  • 选择业务过程-比如下单
  • 声明粒度-一行表示什么,确定维度,确定事实
  • 层次
    • 数据操作层 ODS:把操作系统数据几乎无处理地存放在数据仓 库系统中。
    • 公共维度模型层 CDM:存放明细事实数据、维表数据及公共指标汇总数据 , 其中明细事实数据、维表数据一般根据 ODS 层数据加工生成,CDM 层又细分为明细数据层 DWD 和汇总数据层 DWS ,采用维度模型方法作为理论基础,更多地采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联,提高明细数据表的易用性:同时在汇总数据层,加强指标的维度退化,采取更多的宽表化手段构建公共指标数据层,提升公共指标的复用性。
    • 应用数据层 APP:存放数据产品个性化的统计指标数据,根据 CDM 层与 ODS 层加工生成 。(个性化指标:排名型、比值型等))

4.维度设计

  • 维度的定义-度量称为“事实” ,将环境描述为“维度”。
  • 维度设计步骤-选择或新建维度-唯一,确定主维表-ODS表 直接与业务系统同步,确定相关维度-确定哪些表与主维表的关联关系 如商品与类目、spu、卖家、店铺等存在维度关系,确定维度属性-从主维表、相关维表中选择维度属性或新的维度属性。
  • 一致性-保证交叉探查不会出现问题,例如计算转化率。具体方法:共享维表-只有一个,一致性上卷-子集,交叉属性-两个维度部分属性相同。
  • 维度整合(垂直-不同来源但有相同的数据集,如淘宝 天猫。水平-不同来源相同数据集,如蚂蚁金服的数仓来自淘宝、支付宝、1688。
  • 维度拆分-水平-机票酒店和普通商品拆开,它们有特殊维度属性。垂直-有的热度低,或者属性经常变化,或者产出时间晚。
  • 缓慢变化维-快照维表,历史拉链表,极限存储-底层是历史拉链,上层多了视图,对下游用户透明,微型维度-垂直拆分,经常变化的拆分出去,比如注册时间不变,但等级经常改变。

5.事实表设计

  • 事务型事实表-任何类型的事件都可以被理解为一种事务。比如创建订单、付款。
  • 周期快照事实表:当需要一些状态度量时,比如账户余额、买卖家星级 、 商品库存、卖家累积交易额等,则需要聚集与之相关的事务才能进行识别计算,于是便有了周期快照事实表。快照事实表在确定的问隔内对实体的度量进行抽样,这样可以很容易地研究实体的度量值,而不需要聚集长期的事务历史。
  • 累计快照事实表:事务型事实表能够很好的记录单一事务的发生,但对于统计不同的事务时间的关系逻辑较为复杂。比如统计买家下单到支付的时长、买家支付到卖家发货的时长、买家从下单到确认收货的时长等。如果使用事务事实表进行统计,则逻辑复杂且性能很差。对于类似于研究事件之间时间间隔的需求,采用累积快照事实表可以很好地解决。
工作中主要使用的的 Hive 吧,有没有做过什么 Hive 调优
  • set hive.map.aggr=true,即开启 map 端的 combiner,减少传到 reducer 的数据量,同时需设置参数hive.groupby.mapaggr.checkinterval 规定在 map 端进行聚合操作的条目数目。
  • 设置 mapred.reduce.tasks 为较大数量,降低每个 reducer 处理的数据量。
  • set hive.groupby.skewindata=true,该参数可自动进行负载均衡。生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce中),最后完成最终的聚合操作。
你的上游是广告,讲一讲广告有哪些具体的计价规则
  • CPT cost per time

  • CPC cost per click

  • CPM cost per mile 千次广告收入。

  • CPA cost per action 按转化次数计费,无转化不计费。

  • CPS cost per sale 按订单计费

  • CPV cost per view 有效播放计费,例如:播放时间 >= 10s

  • CPD cost per download

  • CPI cost per install

  • OCPC optimized cost per click 本质是 CPC,采用更科学的转化率预估机制。

  • OCPM 本质还是 CPM

  • OCPA optimized cost per action,根据转化去优化出价。

  • ECPM 每次曝光价格

  • Cost 广告成本 + 货品成本。

二面

作为数据研发最核心的三个能力是什么

我回答的 “1、业务(商业) 2、技术 3、耐心细心沉得住气”面试官很满意,还给我补充了一点就是“数据分析和算法能力”

做的什么业务,具体讲一讲上下游,涉及到的业务方是什么,有哪些基本诉求?

业务方就是用数据的人。

ER 模型和维度模型的区别,分别适合什么样的场景

ER模型严格遵守第三范式,适合对性能要求较高的场景。注重的是精简高效,更多是面向数据的整合和一致性治理,期望达到“single version of the truth”。

维度建模更多面向业务,可以通过指标来定义的场景。

四层模型了解吗?为什么要这么设计,有什么用

ODS,DWD,DWS,APP。

  • 复杂问题简单化。
  • 结构清晰方便管理。
  • 减少重复开发。
  • 隔离原始数据。
事务了解吗

一个程序执行单元,例如:在关系数据库中,一个事务可以是一条 SQL 语句,一组 SQL 语句或整个程序。事务应该具有4个属性:原子性、一致性、隔离性、持久性。

  • 原子性-做完或不做
  • 一致性-完整性不破坏
  • 隔离性-数据只能被一个事务请求
  • 持久性-完成后不回滚,故障时不受影响
作为一个数据研发,怎么样提高效率,或者说都是数据研发,效率差异会体现在哪里?
  • 业务理解
  • 上下游业务方沟通
  • 经验和制定复杂技术方案的能力
Hadoop 和 Spark 的区别,Spark 做了哪些优化,好在哪里?

主要是 MapReduce vs Spark。

  • Spark 和 Hadoop 的根本差异是多个作业之间的数据通信问题 : Spark 多个作业之间数据通信是基于内存,而 MR 是基于磁盘。
  • Spark 只有在 shuffle 的时候将数据写入磁盘,而 MR 中多个 MR 作业之间的数据交互都要依赖于磁盘交互。
  • Spark 更擅长函数处理和迭代,模型更加丰富。

三面

三面 35 mins 部门交叉面。

交叉面一般不会问技术。因为是不同岗位的人来面试。

数据研发和算法,职业规划

讲了一些重构和优化工作,然后被追问 “既然都已经优化了,那么你觉得还有哪里不够好呢?”

随机森林用过吧,讲一讲集成学习中 boosting 和 bagging 的区别

四面

说实话当时都没有把这当成一场面试,而是不断和阿里的前辈交流数据对于业务的价值,可以做哪些事情。后来也从大老板(没错,就是我实习组的大老板)那里了解到因为已经通过了手淘数据团队的面试,所以他面我的时候也是比较宽松的,基本是让我问他问题…

加了一轮技术笔试

笔试没有发挥太好,所以加一轮技术笔试。

一共10道题,5道简答题,5道 SQL,给了2个小时,不太难。

终面

45 mins 天猫精灵技术团队大老板

数据质量监控,字节是怎么做的?
  • 产生-加工-消费的整个数据生命周期的质量管控
  • 准确性、完整性、一致性、及时性、有效性

表字段是否一致,数据条目数量、空值比例、电话告警数、最晚产出时间、不同表相同维度聚合结果是否一致。

数据任务调度平台的原理知道吗
如果同时有10万个任务,他们的启动逻辑是什么样子的?
血缘分析原理
  • Hive:Hive 提供了 Hook 机制,在 Hive 编译、执行的各个阶段,可以调用参数配置的各种 Hook。我们利用 hive.exec.post.hooks 这个钩子,在每条语句执行结束后自动调用该钩子。
  • MapReduce:由于输入输出均是由各种 InputFormat/OutFormat 执行,因此可以在 Job 提交时获取。在 org.apache.hadoop.mapreduce.JobSubmitter#submitJobInternal 方法中添加一些逻辑,如在 submitJob 之后。
  • Spark:可以通过自定义 org.apache.spark.scheduler.SparkListener。然后在 spark/conf 中指定 spark.sql.queryExecutionListeners 和 spark.extraListeners 订阅事件总线上的事件。
实习阶段做了哪些数据服务
微服务框架的原理和一些基本概念

终面总结:

(面试结束后分析和自我安慰)
可能前几轮面试官重点考察的是我的能力下限,也就是能不能胜任这些实习工作,而终面大老板的面试风格则是考察我的能力上限,这个主要体现在对于已经做过的业务和掌握知识的底层技术的好奇,对于曾经学过的知识的迁移运用能力等等。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值