非死不可电面面经,准备昂赛

上周五11月9号面的,昨天11月12号快下班的时候收到的昂赛通知。回报论坛,另外求[]准备昂赛。
是很nice的一个ABC小哥,现职DS,在FB两年。
先自我介绍,然后废话不多就开始sql

第一问一个table,useid, sessionid, date, event(open session/end session/scroll down/first click/send message)
每一个user打开一次这个界面就是一个sessionid,同一个sessionid可以有很多event。每一个sessionid都一定会有一条open session的event,但不一定会有end session,因为有时候一个session time out了
第一问特别简单,有点记不清了,大概最近30天内平均一个用户有多少个session之类的
就是用COUNT(DISTINCT sessionid)/COUNT(DISTINCT sessionid) 然后写个where和group by就可以了
(我当时一紧张脑袋突然抽风了把where和group by写反了,小哥提醒了一下我就改过来了,还好小哥很nice没有算我直接fail。。)

第二问是又给了一个table,sessionid/date/sessiontime
sessiontime就是一个session有多久
问过去30天中每天各有多少dau? dau是指有session大于5秒的
我先问了个clarification的问题,是不是希望result有两个column,一个是date一个是人数,小哥说是的
然后提醒我要先define dau,除了题目中说到的session大于5秒,还有什么criteria是我觉得dau应该满足的?
我说应该session不只要5秒,而且要有scroll down或者first click才算,因为只打开一个session然后time out或者就quit的话不应该算,然后send message表示至少有一个click,所以send message的session肯定都有first click,所以最后还是选择scroll down和first click的
小哥说好,make sense,那你开始写吧
也很好写,先写个subquery选出userid, sessionid和date是first click和scroll down的,然后join到第二个table上选sessiontime大于5秒的,最后count distinct userid, group by date就好了

case问的是fb的market place,假如在页面上加一个notification,大概就是“你想来market place卖东西吗”之类的消息,怎么决定加不加这个东西
先让define metrics,哪个是main metric(#posts),后问用什么方法分析(ab testing),然后叙述了一下ab testing是干嘛的,问了怎么决定test要跑多久,然后说我define的metric都是需要点时间的,有没有更短期的metric(CTR),这个notification会对fb整体有什么影响,大概就这些问题,都是很常见的ab testing的问题

最后的feedback是sql答的很好,犯了点粗心小错误但是一提醒就改了,不要紧没有扣分。case的话需要加强taking the lead。这里还有一个小插曲是刚刚开始写sql小哥隔壁就来了一堆特别吵的人,吵到我听小哥说话要竖着耳朵那种,然后小哥怕隔壁的笑声影响我,我说话的时候他就mute自己,他要说话了再unmute,答case的时候我经常停下来看小哥是不是要说话,所以还是稍微被影响了。答完题之后小哥说他要和recruiter反映一下,以后这种call约在安静点的地方。

想问一下楼主,case中如果选择CTR作为metrics的话,是不是就没法做AB test了呢?因为这是一个new feature, control group没有所谓的CTR

请问楼主interviewer的feedback从哪里可以知道呢?

recruiter通知pass的电话里说的,后来换了个recruiter继续,又share了一遍

这个我其实提到了,因为没有办法看control group了,就看以前的数据或者其他的button,看看正常水平是什么样的

谢谢分享!

is it an analytics role?

好热腾的面经!给楼主点赞

是的,product的ds

谢谢楼主分享。第一问的表有些不理解还想请教一下lz: event后面那个括号是指一个event由括号里面的attribute来定义吗?但是所有这些column还是和userid那些在一个表的

补充内容 (2018-11-15 02:40):
不是很明白求的是平均30天每个用户的session数量,还是所有用户平均浏览过的session,如果是前者的话是不是不需要用groupby?我的query可能错了,谢谢指正。

补充内容 (2018-11-15 02:41):
Select count(distinct session_id) / count(distinct user_id)
From table_q1
Where datediff(day, date, current_date) <= 30