日常实习面经:字节-数据分析师
TimeLine:一面20211108,二面20211110,三面20211112
当时的BG:北邮本硕,管理类专业,一段实习经历:美团商业分析师
写在前面的话:该文档记录日常实习面试的相关问题,面试时间为2021年。以下问题的答案可能存在错误,敬请读者批评指正
一面
1. SQL考察
数据表:用户表user_profile,字段有:user_id'用户id'和login_date'用户登录日期'
1)20211107登录的用户中,次日留存的数量
select count(t1.user_id) from user_profile t1 where t1.login_date = '20211107' and exists ( select 1 from user_profile t2 where datediff(t2.login_date, t1.login_date) = 1
2)20211107登录用户的次日留存率
with a as ( select count(user_id) as user_cnt_07 from user_profile where login_date = '20211107' ), with b as ( select count(t1.user_id) as user_cnt_08 from user_profile t1 where t1.login_date = '20211107' and exists ( select 1 from user_profile t2 where datediff(t2.login_date, t1.login_date) = 1 ) select b.user_cnt_08 / a.user_cnt_07 from a, b
3)2021年11月每一天用户的次日留存率
select t1.login_date, count(t2.user_id) / count(t1.user_id) as retention_rate from user_profile t1, user_profile t2 where t1.user_id = t2.user_id and t1.login_date like '202111__' and datediff(t2.login_date, t1.login_date) = 1 group by t1.login_date
2. 举几个正态分布的例子?
高尔顿板、一个班级的身高分布、一个班级的成绩分布等等
此处有追问:若男生的身高分布和女生的身高分布分别服从正态分布,混合在一起是否还是正态分布?如果男生和女生的身高分布差异特别大的时候,混合在一起是否还是正态分布呢?
假定男生的身高X和女生的身高Y这两个随机变量相互独立,根据正态分布的可加性,X - Y可表示为男生身高与女生身高之间的差异,依然服从正态分布
注:此处回答存疑,期待读者指正
3. 如何检验两组样本的均值是否相等?
采用假设检验的思路,根据样本量大小的差异构造统计量,若样本量偏小且总体方差未知,采用t检验,若样本量大或样本量小但总体方差已知,可采用Z检验
二面
1. SQL考察
有如下数据表:
员工表employee,字段有id'员工id',salary''员工薪资,dep_id'部门id'
部门表department,字段有dep_id'部门id',dep_name'部门名称'
求:各部门薪资水平排名前十的员工id和salary
with a as ( select id, dep_name, salary from employee join department using(dep_id) ), with b as ( select dep_name, id, salary, row_number() over(partition by dep_name order by salary desc) as rn from a ) select dep_name, id, salary from b where rn <= 10
2. Python考察
现有一个pd.dataframe格式的数据表'user',字段有:user_id'用户id', date'用户登录日期', duration'使用时长'
求:每个用户的总使用时长?
user ['duration'].groupby('user_id').sum()
三面
1. 搭建一个评价抖音的指标体系,请给出最重要的5个指标并给出原因?
1)消费价值:留存,或活跃天数(本质上是留存率曲线对时间的积分)
2)生产价值:平均投稿数、投稿渗透率
3)社交价值:平均好友数、好友间视频分享平均数
4)电商价值:人均消费、人均订单量
5)广告主价值:ARPU(展现-点击-下单-完单)
2. 简要介绍一下Hive
先介绍Hadoop,Hadoop是一整套大数据生态系统,主要包括:
1)HDFS:海量数据的存储
2)MapReduce:海量数据的分析和计算
3)Yarn:资源管理和作业调度
其中,MapReduce本质上是一类分布式计算框架,底层由Java写成,在实现海量数据的分析和计算上具有一定的开发难度,Hive应运而生
Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射成一张类似关系型数据库的数据表,提供了类似SQL(通常称其为HQL)的查询功能,简言之,Hive是一个将SQL任务转换为MR任务的工具
3. 简要介绍一下MapReduce
以统计单词数量为例子进行讲解:
本质上是分治法:
1)分:将问题分解为规模更小的子问题
2)治:将这些规模更小的子问题逐个击破
3)合:将已解决的子问题合并,最终得出“母”问题的解
4. 简要介绍一下数据倾斜和相应的解决方法
注:仅记录当时的回答,读者可自行搜索相关文档以形成自身观点
数据倾斜的表现是:
1)某一个/多个Reducer读写的数据量极大,远超剩余的Reducer,运行进度一直卡着
2)容器OOM报错
数据倾斜的原因是:
HQL中涉及到count distinct、group by、join on等操作都会触发Shuffle。一旦触发Shuffle,将会导致所有相同Key值的数据会被拉到某一个/多个Reducer,发生数据倾斜
数据倾斜的解决方案为:
1)参数优化
提高Shuffle并行度(通用优化),即适当增大并行度,可以将原本被分配到同一个Task的不同Key分配到不同Task
负载均衡(适用于group by 造成的数据倾斜),即将计算过程分解为两个MapReduce,第一个MR的Shuffle过程会随机给Key值打标记,使得每个Key均匀分布到相同Reducer;第二个MR正常执行
Map join(适用于小表 join 大表),即将小表数据全部读入内存中,在Map阶段直接拿大表数据与内存中的小表数据做匹配,避免了Shuffle阶段,因此避免了数据倾斜
Skew Join,即在运行时检测哪个Key值发生了数据倾斜,对会倾斜的Key值使用Map join,不会倾斜的Key值正常处理
2)SQL代码优化
count distinct优化:将count distinct修改成先group by再count
空值优化:给空值随机赋值
group by优化:原理同负载均衡,在需要聚合的Key值随机添加前缀/后缀,得到均匀的Key值后做第一次聚合,再对聚合的结果按照原始Key值做第二次聚合
5. 场景题:Tiktok在两年前进入了美国市场,发现iOS端和安卓客户端的日活、留存率没有太大差异,现在进入了墨西哥市场,发现安卓客户端的日活和留存率显著低于iOS端,如何分析这一现象?
首先,可以探究美国市场和墨西哥市场双端的运营活动是否对齐
其次,众所周知美国的经济发展水平优于墨西哥,猜测美国的iOS端用户和安卓高端机用户的占比相对较高,而墨西哥这两部分用户的占比相对较低,可以探究美墨两国双端高中低端机型的分布差异来验证此猜想
#日常实习##数据分析##字节跳动#