公众号(五分钟学大数据)已推出大数据面试系列文章—五分钟小面试,此系列文章将会深入研究各大厂笔面试真题,并根据笔面试题扩展相关的知识点,助力大家都能够成功入职大厂!
此面试题来自牛客网友分享的美团优选一面,面试时长一小时。网友情况:海外水本,在某三线中厂工作2年。
参考答案由本公众号提供。如有错误,欢迎指正!
以下为面试过程中提问,岗位为大数据开发,根据提问内容看出,主要偏数仓方向
- 自我介绍
- 到北京工作的意愿
- SQL题,给一张城市和交易额表,一张城市对应省份表, 取出 省份 总 交易额大于 500 的 省份 的名字
- SQL题,基于刚才, 得出 省份 总 交易额 [0,500 ] , [500,1000 ] , [1000,+∞ ] 在以下三个区间的 省份 的 数量
- SQL题,还是基于刚才, 按从小到大的顺序得出每个城市的累计交易额,可以用窗口
- 根据分隔符划分字段,可以用正则表达
- 主要负责的产品
- 产品的指标如何知道带来多少价值
- 指标如何做到精准
- 就项目中提到的某个实体,讲一下他对应的属性有哪些
- 如果你建模的话,你会如何建模
- 主要都抽取哪些数据源,使用什么工具
- 描述一下抽取的内部逻辑,怎么实现的
- 除了工作,有去读什么书学习吗
- 你觉得flink和spark streaming有什么区别
- spark streaming相比flink有什么优点
- 有什么想问的吗
答案详细解析
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 推荐: 衡量用户自传播程度和口碑情况。涉及关键指标例如 邀请率、裂变系数等。