美团数据开发工程师暑期实习生招聘一面面经。同学们一定不要等准备好了再去面试。先投递简历进行面试,将面试中每次被问到的问题都记录下来并针对性学习,可以发现自己成长非常快。下面给出面试中遇到的问题。

自我介绍

介绍自己研究生阶段的研究方向,做过的项目,毕业时间,本科生阶段的情况,为什么想要投递这个岗位。

从项目中学到了什么?

这个问题比较重要,可以反映一个人的工作能力,可以回答:

  1. 解决问题的流程:先调研问题背景,查找已有的解决方案,针对需要解决的问题进行改进,制定出整体的框架,最后实施并测试效果。
  2. 技术栈:比如熟悉了大数据领域的技术栈,熟悉了建模的流程。
  3. 沟通:需要和多方进行对接,沟通十分重要,搞清楚需求是什么,我们需要拿到什么数据,下一步要做什么。
  4. 合作:一个人不可能每个方面都精通,需要多方合作。
  5. 工作态度:认真仔细,少出 bug。
  6. 思考:独立思考的能力。
  7. 总结:介绍之后对项目的执行进行复盘。
项目中遇到的最大的问题是什么?怎么解决的?

这个问题是用来考察一个人解决问题的能力,可以根据自己的项目提前准备,往自己熟悉的地方说。要包含下面的要素:

  1. 遇到的问题是什么,问题有什么表现。
  2. 如何找到问题的发生的原因。
  3. 如何解决。

下面举几个例子:

  • 项目中数据并不多,但是 Hadoop 的 NameNode 内存被占用了很多,并且 MR 计算启动了很多 MapTask,每个 MapTask 处理的数据量却很小,MapTask 的处理时间比启动时间还小,白白浪费资源。通过这些表现定位到是小文件过多,于是采用了小文件的解决方法,具体方法如下:

    • 数据采集时就将小文件合并成大文件再上传到 HDFS。
    • 业务处理前在 HDFS 上使用 MapReduce 程序对小文件进行合并。
    • MapReduce 处理时采用 CombineTextInputFormat。
    • 开启 JVM 重用。
    • 采用 Hadoop Archive 将多个小文件打包成 HAR 文件。
  • MapReduce 计算过程中,发现某些 reducer 的资源消耗远大于其他 reducer。这种情况就是发生了数据倾斜。项目中发生数据倾斜的原因是有很多空值。此时可以将表 a 中 key 为空的字段赋予一个随机值,使得数据均匀地分布到不同的 reducer 上。
  • Flink 计算过程中通过 Flink Web UI(localhost:8081) 监控发现发生了背压报警,数据流的速度过快,下游的算子来不及消费。通过调试发现是 watermark 的最大延迟时间设置过大。将它设置小一些,把迟到的元素发送到侧输出流中晚一点更新结果。

以上只是举例。可以给自己每个项目准备一个问题。

数据倾斜怎么解决?

太多了。单独写一篇来讲解。

你对数仓分层有什么理解?

推荐学习阿里的《大数据之路》。需要回答出的要点:

  1. 为什么要分层:

    • 复杂问题简单化,每层只处理简单的问题,方便问题定位
    • 减少重复开发,增加每次结果的复用性
    • 隔离原始数据,真实数据与统计数据解耦
  2. 分哪些层:
    • ODS(Operation Data Store):原始数据,保持原貌不做修改
    • DWD(Data Warehouse Detail):明细数据,对 ODS 进行清洗,保存业务事实明细,一行是一次业务行为
    • DWS(Data Warehouse Summary):汇总数据,例如按天进行轻度汇总
    • ADS(Application Data Store):统计报表
说一下(**)算法?有哪些?怎么用?

自己简历里提到了研究生阶段的一些研究性的问题,每个人不一样,这里不做回答。但是需要注意,只要写到了简历里面的东西,就必须要熟悉,即使和应聘的岗位没有关系,也要能有条理地讲出来,而且要做到:

  • 通俗:面试官没有研究过这一领域,需要用通俗的、易理解的方式讲解,让他能够理解。
  • 背景:先讲背景,不然很抽象。即要解决什么问题。
  • 常用的解决方法。
  • 自己的解决方法。
  • 应用场景。
  • 最后复盘,学到了什么。
数仓的数据从哪来?
  • 业务数据:MySQL数据库。
  • 用户行为日志:前端埋点的日志数据。
用户行为数据怎么来的?

前端埋点。建议看阿里的《大数据之路》这本书,讲得很详细。这里简单提一下:

  • 日志分类:浏览日志-PV、UV的统计基础,页面交换日志-用户的操作行为。
  • 采集的过程:这里涉及到 HTTP 协议。
  • 清洗:识别流量攻击、流量作弊、缺失数据补正、无效数据剔除、日志隔离分发。
埋点要记录些什么字段?
  • 公共信息:地区、手机品牌、操作系统、设备 id、会员 id、app 版本号 等等
  • 动作:动作 id、目标 id、目标类型(例如 SKU_id)、动作时间戳 等等
  • 曝光:曝光类型、曝光对象 id、出现顺序、曝光位置 等等
  • 页面信息:持续时间、页面 id、来源类型 等等
  • 错误:错误码、错误信息
spark了解吗?

开放性问题,能说多少说多少,往重要的地方说,往熟悉的地方说,引导面试官对自己熟悉的地方提问。

大数据平台是不是自己搭的?有什么问题?

开放性问题。提前准备一些问题。比如版本兼容性问题,操作系统的问题。以后专门写一篇文章总结搭建大数据平台可能遇到的问题。

实时计算了解吗?

很可能问到 Flink 和 Spark Streaming 之间的区别。

SQL 题

input table1: user_id,order_time(2022-02-25 18:30:00 )

问题1:求每天的下单总人数,t 日下单的人中,下单后 1 天又下单的人数 t+1,下单后 1-3 天中又下单的人数 t+3,下单后 1-7 天又下单的人数 t+7

output: date, user_cnt, t1_cnt, t3_cnt, t7_cnt

解法如下:

with table1 as(  # 去重,一个用户可能一天下了多单select distinct user_id,date(order_time) `date`from tb_order
),
table2 as(selectuser_id,t1.date date1,t2.date date2from table1 t1 join table1 t2 using(user_id)where datediff(t2.date,t1.date) between 1 and 7
)
selectdate1 `date`,count(distinct user_id) user_cnt,count(distinct(case when datediff(date2,date1)=1 then user_id else null end)) 't1_cnt',count(distinct(case when datediff(date2,date1) between 1 and 3 then user_id else null end)) 't3_cnt',count(distinct(case when datediff(date2,date1) between 1 and 7 then user_id else null end)) 't7_cnt'
from table2
group by date1;

结果如下:

date user_cnt t1_cnt t3_cnt t7_cnt
2021-10-01 4 1 3 4
2021-10-02 1 1 1 1
2021-10-03 2 2 2 2
2021-10-04 2 1 2 2
2021-10-05 1 1 1 1
2021-10-06 2 2 2 2
2021-10-07 2 2 2 2
2021-10-08 1 1 1 1

中间表 table1 如下:

user_id date
101 2021-10-01
102 2021-10-01
103 2021-10-01
104 2021-10-01
101 2021-10-02
101 2021-10-03
102 2021-10-03
101 2021-10-04
102 2021-10-04
103 2021-10-04
101 2021-10-05
101 2021-10-06
102 2021-10-06
101 2021-10-07
102 2021-10-07
104 2021-10-07
101 2021-10-08
104 2021-10-08
101 2021-10-09

中间表 table2 如下:

user_id date1 date2
101 2021-10-01 2021-10-02
101 2021-10-01 2021-10-03
101 2021-10-01 2021-10-04
101 2021-10-01 2021-10-05
101 2021-10-01 2021-10-06
101 2021-10-01 2021-10-07
101 2021-10-01 2021-10-08
102 2021-10-01 2021-10-03
102 2021-10-01 2021-10-04
102 2021-10-01 2021-10-06
102 2021-10-01 2021-10-07
103 2021-10-01 2021-10-04
104 2021-10-01 2021-10-07
104 2021-10-01 2021-10-08
101 2021-10-02 2021-10-03
101 2021-10-02 2021-10-04
101 2021-10-02 2021-10-05
101 2021-10-02 2021-10-06
101 2021-10-02 2021-10-07
101 2021-10-02 2021-10-08
101 2021-10-02 2021-10-09
101 2021-10-03 2021-10-04
101 2021-10-03 2021-10-05
101 2021-10-03 2021-10-06
101 2021-10-03 2021-10-07

建表语句:

DROP TABLE IF EXISTS tb_order;
CREATE TABLE tb_order(user_id INT NOT NULL COMMENT '用户ID',order_time datetime COMMENT '下单时间'
) CHARACTER SET utf8 COLLATE utf8_bin;INSERT INTO tb_order(user_id, order_time) VALUES(101, '2021-10-01 10:00:00'),(101, '2021-10-01 12:00:00'),(102, '2021-10-01 10:00:00'),(103, '2021-10-01 10:00:00'),(104, '2021-10-01 10:00:00'),(101, '2021-10-02 10:00:00'),(101, '2021-10-03 10:00:00'),(102, '2021-10-03 10:00:00'),(101, '2021-10-04 10:00:00'),(102, '2021-10-04 10:00:00'),(103, '2021-10-04 10:00:00'),(101, '2021-10-05 10:00:00'),(101, '2021-10-06 10:00:00'),(102, '2021-10-06 10:00:00'),(101, '2021-10-07 10:00:00'),(102, '2021-10-07 10:00:00'),(104, '2021-10-07 10:00:00'),(101, '2021-10-08 10:00:00'),(104, '2021-10-08 10:00:00'),(101, '2021-10-09 10:00:00');

问题2:还是上面的表,得到每天的新用户

selectdate(min(order_time)) `date`,user_id
from tb_order
group by user_id;

问题3:还是上面的表,统计当天下单了,前一天没下单的用户

with t1 as(      # 去重,一个人可能一天下单多次selectdistinct date(order_time) `date`,user_idfrom tb_order
),
t2 as(      # 找出上一次下单日期select`date`,user_id,lag(`date`) over(partition by user_id order by `date`) pre_datefrom t1
)
select      # 上一次下单日期为空或者上一次下单日期与今天相差大于 1 天的就是答案`date`,user_id
from t2
where pre_date is null or datediff(`date`,pre_date)>1
order by `date`;

欢迎关注公众号。

【面经】数据开发一面-美团暑期实习相关推荐

  1. 美团暑期实习前端面试

    美团暑期实习前端面试 这次面试的是美团的到店事业群-平台技术部,在2022.03.01投递之后,直接参加实习招聘的第一次美团统一笔试,因为美团必须是首先笔试了才可以进入下边的流程的,笔试的时间是202 ...

  2. 美团暑期实习二面面经

    一面 1.说说面向对象,面向对象与面向过程的区别 2.三次握手过程,两次行不行. 3.输入一个网址的全部过程? 4.sql的执行过程 5.hashmap put流程,1.8的改进 6.synchron ...

  3. 字节跳动暑期实习——大数据开发工程师面经

    Intro 本人985CS科班 无行业相关经历,有经济学辅修与深度学习的科研经历,预计这个学期会发一篇顶会,投的是字节大数据开发,面试之前没什么准备,一面的时候一道题都没有刷,直接裸面.直到三面面完l ...

  4. 美团2020暑期实习——前端电话面试回顾

    一.投递信息 投递时间:2020年2月24日 岗位:Web前端开发工程师 工作地点:北京 信息来源:师兄发的内推邀请函 笔试时间:2020年3月12日 面试时间:2020年3月18日 面试方式:微信语 ...

  5. 美团暑期日常实习前端面试

    美团暑期日常实习前端面试 这次面的是美团基础研发平台的大数据分析部门,好家伙这个名字一听就很牛逼,其实我早就投递简历了,但是一直没做笔试,所以这个流程就走不下去,上个周六做了做笔试,在此点名表扬美团, ...

  6. 网易游戏移动端开发暑期实习提前批总结

    网易游戏移动端开发暑期实习生提前批总结 0.关于个人 广东某一本大三学生,日常咸鱼,没做啥项目,想找个暑期实习的机会锻炼一下自己,为以后秋招谋谋出路,听了网易游戏在学校的宣讲后,报了移动端开发的提前批 ...

  7. 美团2024届暑期实习第一轮后端笔试详解

    这是美团2024届暑期实习后端岗位的第一轮笔试,总共有五道编程题,四道 情景算法题,一道 二叉树题目,时长两个小时,我用的是go语言,只AC了前两道,第三道死活通不过,第四道模拟情况太复杂,放弃了,第 ...

  8. 2022年大数据开发实习面经总结,已拿顺丰、哔哩哔哩offer

    本人是一个双非硕士在读地研二狗,非科班出身,最近也是参加了大数据开发地面试,已拿到了哔哩哔哩和顺丰的大数据开发岗实习offer,现在把自己的面试经历分拨记录下来,记录了面试各个公司的问题和心经,给正在 ...

  9. 双非电子专业,大二京东实习,大三上岸字节大数据开发实习岗,分享一波面经...

    点击上方 "大数据肌肉猿"关注, 星标一起成长 点击下方链接,进入高质量学习交流群 今日更新| 950个转型案例分享-大数据交流群 今天分享学习群同学的求职经历,他是双非电子专业, ...

  10. 腾讯游戏客户端开发网易互娱暑期实习面经

    腾讯提前批(二面挂) 在打算笔试的下午,收到了一面电话通知,周一去腾讯上海大厦现场面试,于是提前批的笔试就没有参加(这可能有点影响) 腾讯一面 和面试官约了时间,结果到了腾讯大厦楼下没法进去,所以只能 ...

最新文章

  1. R语言merge函数左连接dataframe数据(Left (outer) join in R)、左连接必须将参数all设置(all.x = TRUE)、默认merge函数通过公共列名合并数据集
  2. 矿大计算机专硕和学硕,本硕矿大,考研期间我收获了什么?
  3. 敲点JavaScript代码
  4. python输出到文件
  5. linux性能并发 带机量,性能测试笔记(一):吞吐量与并发数
  6. word中 有注释标签吗_如何在Word中注释图像
  7. .NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部?
  8. django版本区别/与版本匹配
  9. python dict批量选择_这一定是你见过最全面的python重点
  10. Android下播放YUV视频文件
  11. 随机过程中均值、方差、协方差和相关函数的计算
  12. 关于前端PDF显示和盖章(vue)
  13. 自注意力机制(Self-Attention)
  14. 【递归入门】组合的输出
  15. 文件不小心删除了怎么恢复?实用的两个小妙招
  16. linux大于3T硬盘多个分区,Ubuntu挂载3T硬盘或大于2T磁盘的方法
  17. Elasticsearch项目实战,商品搜索功能设计与实现!
  18. 使用vue-seamless-scroll实现滚动,出现空白间隔的问题
  19. 努力和天赋哪个更重要
  20. bat基础(转自堇色苹果)

热门文章

  1. 毕设——基于SpringBoot的电影荐评系统
  2. SSH之known_hosts文件
  3. xp系统如何开启ftp服务器,xp系统怎么开ftp服务器
  4. 金融风控系统设计 - 外汇管理风控系统
  5. 2008服务器系统初始密码,2008服务器地址和密码
  6. ArcEingine——IRelationalOperator的Crosses与Overlaps
  7. 房东要涨800房租,我用Python抓取帝都几万套房源信息,主动涨了1000。
  8. phpmyadmin mysql 5.1_phpMyAdmin(MySQL数据库管理)下载_phpMyAdmin(MySQL数据库管理) 版本:v5.1.0_魅蓝下载...
  9. Android之——多媒体开发视频格式
  10. 解决Error: Call to undefined function eregi() 报错方法