分享一下百川智能的笔试,对于校招生来说难度很大,我只做出来第二题,其余两题都没有什么思路。
很久很久以前,有一个 NBA 球探,主要负责在大学联盟中,给球队寻找有潜力的年轻射手。现在他手里有非常多而且格式凌乱的新秀投篮数据,让球探不知如何选择,作为球探的助理,你需要给出一份符合要求的球员名单。要求如下:
player_a | 2 | 2023-09-10 10:03:10 |
player_b | 2 | 2023-09-11 10:04:23 |
player_a | 0 | 2023-09-10 10:04:23 |
player_a | 2 | 2023-09-10 10:03:53 |
player_b | 3 | 2023-09-13 10:04:22 |
player_c | 0 | 2023-09-10 10:04:23 |
其中:player_name: 球员名称、score:每次投篮得分、score_ts:每次投篮时间
找到连续上场5次并且前五次投篮总分增长的球员和在一场比赛中既投中过 2 分球也投中过 3 分球的球员做连接查询
用户访问 App 日志表(user_log),表中包含用户 ID、登陆时间、退出时间。表内容示例如下:uid: 用户 ID、login_ts:登陆时间、logout_ts:退出时间
1 | 2023-09-10 00:03:10 | 2023-09-10 00:13:15 |
2 | 2023-09-10 11:12:56 | 2023-09-10 12:19:22 |
1 | 2023-09-10 23:03:10 | 2023-09-10 23:45:07 |
问题 1:求每一天,最多有多少人同时使用 App问题 2:计算 App,近半年内,每一天的第 7 日留存率tips1: 第 7 日留存率是指用户在第 1 天登录后,第 7 天也登录了 App 的用户比例。例如,如果有 100个用户在第一天登录,其中有 80 个用户在第 7 天仍然登录,那么 7 日留存率就是 80 / 100 = 0.8,也就是 80%。
求每一天,最多有多少人同时使用 App,我们需要按天对日志进行分组。同时使用 App我们可以理解为在同一时刻在线。在线时间为登陆时间到退出时间。SQL中并没有函数可以直接求出结果,我们可以考虑累加求和,登陆+1,退出-1。那么可以使用以下 SQL 查询语句:
select date(login_ts) as login_date, max(online_user_cnt) as online_user_cnt_max from (select uid,login_ts,sum(index1) over ( order by login_ts asc ) as online_user_cnt from (select uid,login_ts,1 as index1 from user_log union all select uid,logout_ts,-1 as index1 from user_log ) t1 ) t2 group by date(login_ts)
流程:
WITH t_user_activity as ( SELECT distinct uid, DATE(login_ts) as ac_time FROM user_log UNION SELECT distinct uid, DATE(logout_ts) as ac_time FROM user_log ) select t1.ac_time,round(count(t2.uid)/count(t1.uid),2) day7_rate from t_user_activity t1 left join t_user_activity t2 on t1.uid=t2.uid and t1.dt=date_sub(t2.dt,INTERVAL 7 day) where t1.ac_time >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH) group by t1.ac_time order by t1.ac_time
在大语言模型评测场景中、为了评价两个模型的效果,通常会让两个模型打比赛。 比赛结果计分方式为:胜出得 3 分,打平得 1,负得 0 分。实际测评时,通常会使用多个数据集并且在打多轮比赛之后,综合对比来评估模型效果。模型比赛的结果保存在表 evaluation 中。示例如下:表 evaluation 第一条记录含义,模型 algo_model1_v1 和模型 algo_model1_v2,使用 data_set_v1数据集,打了一轮比赛,"DIM1"维度上模型 algo_model1_v2 胜出, "DIM2"维度上平局,"DIM3"维度上模型 algo_model1_v1 胜出
data_set_v1 | algo_model1_v1 | algo_model1_v2 | 负 | 平 | 胜 |
data_set_v2 | algo_model1_v1 | algo_model1_v2 | 胜 | 负 | 负 |
data_set_v1 | algo_model1_v1 | algo_model1_v3 | 负 | 胜 | 平 |
data_set_v3 | algo_model1_v2 | algo_model1_v3 | 平 | 负 | 平 |
字段含义data_set: 数据集、model1:模型 1、model2:模型 2、DIM1: "DIM1"维度比赛结果、DIM2: "DIM2"维度比赛结果、DIM3: "DIM3"维度比赛结果
问题:请计算每个数据集下、每个维度下,得分最高的三个模型(只保留这三个模型),且要求排序:数据集排序 v2->v3->v1,维度排序 DIM3->DIM1->DIM2,按得分降序
结果示例
data_set_v1 | DIM1 | algo_model1_v1 | 36 | 1.83 | 21 | 12 | 3 |
data_set_v1 | DIM1 | algo_model1_v2 | 6 | 3 | 6 | 0 | 0 |
data_set_v1 | DIM2 | algo_model1_v1 | 11 | 1.63 | 6 | 5 | 0 |
data_set_v1 | DIM3 | algo_model1_v1 | 6 | 2.5 | 5 | 1 | 0 |
data_set_v2 | DIM1 | algo_model1_v1 | 7 | 1.71 | 4 | 3 | 0 |
data_set_v2 | DIM2 | algo_model1_v1 | 4 | 3.25 | 3 | 0 | 1 |