pb 判断数据窗口字段是否存在_阿里巴巴数据研发一面面经

在牛客网找了阿里的内推,很快就接到了笔试通知,笔试一个小时两道编程题,我都没做出来,以为肯定挂了,没想到几天后竟然收到一个面试通知。面试的时候和对方聊了很久,收获很大,从中也发现了自己很多的不足指出。

面试官一上来就开始出题,用的阿里在线测评系统,可以直接看到我这边的操作步骤,面试官询问了我擅长什么语言,我说SQL和python,然后出了两道SQL题和一道Python题。

第一道SQL题是:假设有表a,其中有三个字段,分别为subject_id(科目id), user_id(学生id), score(分数) 注: 同一个学生在多个科目下有分数,用sql找出每个科目下分数前10的学生id、分数、该科目平均分

我的答案:用了一个with虚表求出每个科目的平均分,然后用一个窗口函数row_number得到每个科目中学生的排序,然后取前10

with avg_score as (
  select subject_id,
         avg(score) as avg_score
  from a
  group by subject_id

)
select subject_id, user_id,score,
       row_number (partition by subject_id order by score desc) rank,
       b.avg_score
from a 
left join avg_score b on (a.subject_id = b.subject_id)
where rank <=10

第二道SQL题是:三个表 a、b、c,每个表都有一个字段名称为 id 的字段,写一个sql查找出:三个表中每个表独有的id(三个集合的并集减去两两的交集)

我的答案:利用外连接分别得出三张表唯一的id,然后将这些id连接起来

select a.id
form a
left join b on (a.id = b.id)
left join c on (a.id = c.id)
where b.id is null and c.id is null    
union all

select b.id
form b
left join a on (a.id = b.id)
left join c on (b.id = c.id)
where a.id is null and c.id is null
         
union all

select c.id
form c
left join a on (a.id = c.id)
left join b on (b.id = c.id)
where a.id is null and b.id is null

这两道还算在比较短的时间里做对了,然后面试官又在第二道题中延申深问了我一个问题,如果b表加一个字段is_valid,将b.is_valid='Y'放入连接条件on后面和where后面是否存在不同。我刚开始蒙了一下,后面认真思考了一下发现还是有很大不同的。

select a.id
form a
left join b on (a.id = b.id and b.is_valid='Y')
left join c on (a.id = c.id)
where b.is_valid='Y'

第三道python题如下: 输入一个字段串,判断是否符合员工生命周期(需要满足,先入职,再离职,并且晋升/转岗行为只能发生在在职状态)

例如:
1. String str="入职"                                   返回true
2. String str="入职 晋升 转岗"                          返回 true
3. String str="入职 晋升 转岗 离职"                      返回true
4. String str="入职 晋升 离职 入职 离职"                  返回true
5. String str="入职 转岗 入职"                           返回false
6. String str="入职 转岗 离职 晋升 入职"                  返回false
7. String str="入职 离职 离职"                           返回fasle
8. String str="晋升 转岗 离职"                           返回false
……

这道题,我没有在规定时间内做出来,但跟面试官说了一下思路,就是要把输入的字符串先拆开,然后分别去判断每个状态是否合法。

做完题目之后,和面试官主要聊了一下自己的实习经历以及校园经历,面试官还问了两个开放性问题,一个是如何评估上海市有多少个餐馆?还有一个是如何帮助美团等生活类app比较高效率地找到附近离你最近地餐馆?没有固定答案,主要考察一下个人的分析问题能力。然后还问了一些常见数据结构的使用场景和原理。

最后面试官我有没有什么问题,我问了一下对方对招暑期实习生有什么要求,对方答:“基础扎实,比较聪明,学校会实习有比较好的经历”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值