原创内容
No.742
求职 | 看了一套应届生的笔试题,老司机破防了
不得不说,现在的年轻人求职真的是越来越卷了~
图片由海艺AI绘制
就业市场越来越卷了,相信不管是什么状态的职场人都能很清晰的感受到这一点。
最近带了一个数分应届生的笔试辅导,略微有点破防,说实话,很多题让我来回答我都是答不上的——八百年不用早就已经忘完了。还有一些题目的答案可能稍微有点争议,这里拿出来寄到个大家一起瞅瞅。
首先是稍微有一点争议的题目:
题意很好理解,就是使用的用户下降了但是用户使用的时长上升了,但是选什么选项倒是有一点小小的争议。大家也可以在评论区稍微讨论一下这个问题到底应该怎么回答。
对于这个问题,从答题的角度来说我回答A。用户少了但是用户使用的时长上升了,说明有可能是因为功能本身的耗时增加了,导致一些用户直接放弃了。比如游戏肝度增加的时候就会有一些玩家选择弃疗不玩了。BCD三个选项,基本只能解释DAU下降,但是不能解释用户平均浏览时长上升的问题。
对于D可能有点表述上的问题,没说清楚是用户业务的服务器不稳定还是数仓统计服务器不稳定。我猜测题目想表达的服务器不稳定导致用户不愿意使用,DAU下降这种场景,而不是统计服务不稳定这种场景。
如果是实操的话,我可能第一步要排查的是统计本身是不是正确,比如埋点上报运行正常不正常,ETL job有没有问题之类的,确认数据是对的才有进一步分析下去的必要。排查问题的正确逻辑应该是先把简单可行耗时较小但一旦有问题就会导致白干的点给解决掉,确认数据无误之后再开始进一步的分析。
第二个有点争议的题目是这样的:
我的话,实操必然选D,但如果答题的话……大胆猜测一下出题老师的意图,应该是希望选B吧。
实操的时候我遇到过无法进行A/B测试场景,大概的情况就是在鹅厂的时候我们要上一个策略(算法准确率提升),但是业务场景的原因不可以通过AB测试的方法来验证策略是否有效,但是又迫切的需要一个指标/数据来证明这个策略的上线是有效的。
总之做过实操的数据分析师应该好理解,业务数据从来不像那些统计学假设一样严谨,我做过的这个项目也是。从逻辑上来说,这个策略必然是有效的,但是,如果我拿出双重差分法就会发现策略对最终的结果没有产生任何优化。
DID的基本假设是,即在没有干预的情况下,处理组和对照组的结果变量趋势应保持一致,但实际上我们的业务场景受到随机的因素非常多,不管有没有干预,自然波动都在10%左右。
从答题的角度来说,相关性分析仅能反映变量关联性,无法排除混杂变量影响因果推断,但是业务现实就是,根本没有因果,只有相关。
然后是一些……好吧,我早就忘记了的统计学的题目,各位数分老司机们走过路过也回答回答,看看自己还记得多少,反正我是一点都不记得了。
很好,指数分布是啥玩意来着,根本不记得了!
笑死,说得好像我不记得指数分布就记得正态一样,不记得,根本不记得,能记得我学过这个就已经很不错了!
还有这个!带公式算一下就行,所以公式是啥来着?八百年没看过这个玩意了!幸亏我毕业早,不然根本找不到工作。
看到这些统计学的题稍稍有点破防了,感觉之后可以出一个统计学复健系列的专栏,至少下次出去面试之前得复健一些这些玩意了,不知道大家爱不爱看。
这种题目,怎么说呢,用来考应届生不算过分,毕竟刚学完没多久,但是拿给老司机来看确实有点为难人了。
说得就好像实操的题目写起来很顺手一样,一个最大连续天数的问题照样得想一会儿。
研究了半天都没想明白为啥提示要用date_sub,不应该是date_diff么?
WITH filtered_orders AS (
SELECT
user_id,
order_date,
SUM(amount) AS daily_amount
FROM orders
WHERE status = 1 AND order_date >= '2024-03-01' AND order_date < '2024-04-01'
GROUP BY user_id, order_date
),
datediff AS (
SELECT
user_id,
order_date,
daily_amount,
LAG(order_date, 1) OVER (PARTITION BY user_id ORDER BY order_date) AS prev_date
FROM filtered_orders
),
continuous_days AS (
SELECT
user_id,
order_date,
daily_amount,
CASE
WHEN DATEDIFF(order_date, prev_date) = 1 THEN 0
ELSE 1
END AS new_group
FROM datediff
),
grouped_days AS (
SELECT
user_id,
order_date,
daily_amount,
SUM(new_group) OVER (PARTITION BY user_id ORDER BY order_date) AS group_id
FROM continuous_days
),
max_continuous AS (
SELECT
user_id,
group_id,
COUNT(*) AS continuous_days
FROM grouped_days
GROUP BY user_id, group_id
),
user_max_continuous AS (
SELECT
user_id,
MAX(continuous_days) AS max_continuous_days
FROM max_continuous
GROUP BY user_id
),
max_daily_amount AS (
SELECT
user_id,
MAX(daily_amount) AS max_single_day_amount
FROM filtered_orders
GROUP BY user_id
)
SELECT
u.user_id,
COALESCE(m.max_continuous_days, 0) AS max_continuous_days,
COALESCE(a.max_single_day_amount, 0) AS max_single_day_amount
FROM (
SELECT DISTINCT user_id FROM orders WHERE status = 1 AND order_date >= '2024-03-01' AND order_date < '2024-04-01'
) u
LEFT JOIN user_max_continuous m ON u.user_id = m.user_id
LEFT JOIN max_daily_amount a ON u.user_id = a.user_id
ORDER BY u.user_id;
嗯,很好,让我去面试我应该也是拿不下的,悲伤~