Lazada数据开发工程师岗位二面笔试题汇总

1.数据模型和架构:(2选1)
a)请画出你认为在你工作过的公司中,最合理的数据仓库的技术框架?需要详细告知离线和实时的技术框架;
b)请具体描述下互联网数仓和传统数仓的相同和不同?重置的从各个角度分析。
你的回答:
1. 传统数仓是面向事务设计的,互联网数仓是面向主题设计的
2. 传统数仓是服务于业务系统的,互联网数仓是服务于分析系统的
3. 传统数仓一般存储的在线交易数据,互联网数仓一般存储历史数据
4. 传统数仓尽量避免冗余设计,互联网数仓有意引入冗余数据
5. 传统数仓支持增删改查,互联网数仓一般只支持增和查
6. 传统数仓是为了捕获数据而设计,互联网数仓是为了业务分析而设计

2.数据产品
背景:以微信运动(微信运动是中国社交APP中对自己和朋友的运行信息进行对比的功能,促进大家多运动)为例,假设有两个源头表,
表1:用户和用户运动步数;表名为 user_moving_steps (user_id,user_steps)
表2:用户和朋友的关系;user_friends_relation (user_id,friend_id)
需求上希望生成以下需求:
1.用户的当前运动排名;
2.用户的朋友运动排名;
3.用户的详情页里面,我占领多少个人的封面;
希望答案结果是这样的:
如:离线表结构为:tableA(字段1,字段2,字段3...),tableB(字段1,字段2,字段3...)...
需求1:基于TableA的query sql可以得出,需求2,需求3类似;
你的回答:
1.
select
user_id,
user_steps
from user_moving_steps
order by user_steps desc;

2.
select
b.friend_id,
c.user_steps
from user_moving_steps a
inner join user_friends_relation b -- 朋友之间的关系
on a.user_id = b.user_id
left join user_moving_steps c -- 获取朋友的步数
on b.friend_id = c.user_id
order by 2 desc;

3.
slect
count(1) cnt -- 我占领多少个人的封面
from
(
slect
friend_id,
max(user_steps) max_steps -- 对方朋友步数最多的
from user_friends_relation a
left join user_moving_steps b
on a.user_id = b.user_id -- 获取朋友的步数
group by 1
) a
where a.max_steps =
(select user_steps from user_moving_steps where user_id = '我的id');


3.数据技能:
a。(SQL题)用一条SQL语句查询出每门课都大于80分的学生姓名
名字 课程 分数
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
你的回答:
select
name
from table
group by name
having min(socre) > 80;


b。(SQL题)有一个竖表,记录学生成绩,3个分段,学生学号,学科和成绩,假设每个学生有3们学科,希望你能将其打横,变成学号加几个学科的成绩,有某种方法可以实现?
以张三(张三学号为1001)为例:
原表记录:期望变成如下(每个学号1条记录):
原表                 目标表
学号 学科 成绩    学号  语文成绩  数学成绩  英语成绩
1001 语文 100    1001  100      95        90
1001 数学 95
1001 英语 90
你的回答:
select
number,
sum(case when subject = '语文' then score else 0 end) chinese_subject,
sum(case when subject = '数学' then score else 0 end) math_subject,
sum(case when subject = '英语' then score else 0 end) english_subject
from table
group by 1
;


C。(代码字)滚动线性里的每个单词
Given s = "the sky is blue",
return "eht yks si eulb".
函数名:reverseString
参数:原字符串
返回:新字符串
要求:可以不要求能一次性编译通过,语言任选。
你的回答:
# python语言
def reverse_words(s):
s = s.split(' ') # 按照空格进行分割
new_s = [a.reversed() for a in s] # 对里面的元素进行反转
return ' '.join(new_s) # 拼接空格符输出


#笔经##数据开发工程师#
全部评论

相关推荐

5 21 评论
分享
牛客网
牛客企业服务