【SQL笔试题】SN_1 连续登陆系列问题

news2024/9/25 11:13:15

简介

连续登陆天数场景描述是对一个特定情境或活动连续发生的天数进行详细的阐述。这种描述通常用于展示某个事件或活动的持续时间,以及它对参与者或环境产生的影响。

常见的应用场景:

  1. 用户留存分析:通过跟踪用户的连续登录天数,可以分析用户的留存情况,了解用户对产品的粘性和忠诚度。
  2. 产品使用频率:连续登录天数反映了用户对产品的使用频率,有助于了解产品的使用情况和用户的需求。
  3. 用户活跃度:通过连续登录天数,可以评估用户群体的活跃度,识别高活跃度用户和需要激励的用户。
  4. 营销策略效果评估:连续登录天数可以作为衡量营销策略效果的指标,如签到奖励、任务完成奖励等。
  5. 用户行为预测:通过历史连续登录数据,可以建立模型预测用户的未来行为,如流失风险、购买倾向等。
  6. 产品功能优化:分析连续登录天数与用户使用的产品功能之间的关系,可以为产品功能的优化提供依据。
  7. 个性化推荐:根据用户的连续登录天数和相关行为数据,可以进行个性化内容或产品的推荐。
  8. 客户关系管理:连续登录天数可以作为客户关系管理中的一个维度,帮助识别和奖励忠诚客户。

常见可能用到的数据分析和数据挖掘方法:

  1. 趋势分析:通过绘制连续登录天数的趋势图,可以观察用户群体的整体活跃趋势。
  2. 分段分析:将用户按照连续登录天数进行分段,分析不同段内用户的特征和需求。
  3. 相关性分析:探究连续登录天数与其他用户行为指标(如购买次数、浏览时长等)之间的相关性。
  4. 回归分析:建立回归模型,分析连续登录天数对用户行为(如收入、转化率等)的影响。
  5. 用户画像构建:利用连续登录天数作为用户画像的一个维度,结合其他数据构建更全面的用户画像。
  6. 漏斗分析:在特定业务流程中,分析连续登录天数对用户转化率的影响,识别潜在的瓶颈和改进点。
  7. 聚类分析:对用户进行聚类,根据连续登录天数和其他行为数据将用户分为不同的群体,以进行更精细化的运营。
  8. 异常检测:通过检测连续登录天数的异常变化,可以发现潜在的问题或欺诈行为。

示例分析和详解

常见的笔试题考点:

  1. 用户最长连续登陆天数。(注意看是否有间断,间断是否统计)
  2. 连续登陆超过x天/不少于x天的用户。
  3. 任意/最近时间段内用户连续登陆天数/超过x天的用户。

……

题目:用户登录信息表login_tb(log_id:登录动作id,user_id:用户id, log_time:登录时间, log_port:登录端口)。

下面是建表语句和模拟的数据:

drop table if exists `login_tb` ;
create table if not exists `login_tb` (
`user_id` int,
`login_time` datetime,
`login_port` varchar(64));
insert into login_tb values(1101,'2022-02-09 07:24:15','pc');
insert into login_tb values(1102,'2022-02-09 09:12:57','app');
insert into login_tb values(1003,'2022-02-10 09:36:11','m');
insert into login_tb values(1102,'2022-02-10 09:37:01','app');
insert into login_tb values(1104,'2022-02-10 12:01:46','app');
insert into login_tb values(1106,'2022-02-10 10:23:01','app');
insert into login_tb values(1003,'2022-02-11 10:43:01','m');
insert into login_tb values(1102,'2022-02-11 11:56:47','app');
insert into login_tb values(1104,'2022-02-11 14:52:37','app');
insert into login_tb values(1106,'2022-02-11 16:56:27','app');
insert into login_tb values(1003,'2022-02-11 17:43:01','m');
insert into login_tb values(1106,'2022-02-12 10:56:17','app');
insert into login_tb values(1106,'2022-02-15 10:56:17','app');
insert into login_tb values(1106,'2022-02-16 10:56:17','app');
insert into login_tb values(1106,'2022-02-17 10:56:17','app');
insert into login_tb values(1106,'2022-02-18 10:56:17','app');

需求1:请用 SQL 查询用户最长连续登陆天数。

需求2:请用 SQL 查询连续登陆不少于3天的用户。

需求3:请用 SQL 查询2022年2月1日-2022年2月28日用户最长的连续登录天数。

首先,简单查询如下图,我们可以对进行 user_id 和 login_time 排序大致看看情况:

image

可以看到用户 1003 连续登陆 2 天,其中 2022-02-11 登陆多次;用户 1101 登陆 1 天;用户 1102 连续登陆 3 天;用户 1104 连续登陆 2 天;用户 1106 连续登陆 3 天,间断了 2 天,又接着连续登陆了 4 天。

注意事项:

  1. 一个用户/商品一天可以登陆/下单多次,因此需要注意去重复。
  2. 在一段时间内,可能连续登陆多天,间断几天后,又连续登陆。

下面我们介绍通过 SQL 方法主逐步实现上面需求。

方法一:利用排名窗口函数

  1. 可能出现多次登陆,对所需列去重复;
  2. 利用 row_number 对每个 user_id 登录日期进行升序排序,得到 rn 列(如果是连续的,可以发现用户 user_id 对应的排序字段 rn 是连续的);
  3. 利用 date_sub 将 login_date 与 rn 相减,可以得到“伪日期列-dt_uid”,可以发现不管是否间断,若连续登录,dt_uid 对应相同;

image-2

  1. 对 user_id 和 dt_uid 进行分组聚合,再使用 datediff 或者 count ,就可以得出每个 user_id 对应连续的“开始日期、结束日期和连续天数”。

image-3

  1. 结合具体题目需求,添加筛选或稍微处理,基本上可以应对相关系列题目。

需求答案

########### 需求1:请用 SQL 查询用户最长连续登陆天数。
-- 一天可能出现多次登陆,去重
with t0 as
         (select distinct user_id, date(login_time) as login_date
          from login_tb),
-- 利用 row_number 对每个 user_id 登录日期进行升序排序,得到 rn 列(如果是连续的,可以发现用户 user_id 对应的排序字段 rn 是连续的)
-- 利用 date_sub 将 login_date 与 rn 相减,可以得到“伪日期列-dt_uid”,可以发现不管是否间断,若连续登录,dt_uid 对应相同;
     t1 as
         (select user_id
               , login_date
               , row_number() over (partition by user_id order by login_date) as rn
               , date_sub(login_date, interval row_number() over (partition by user_id order by login_date)day) as dt_uid
          from t0),
-- 对 user_id 和 dt_uid 进行分组聚合,再使用 datediff 或者 count ,就可以得出每个 user_id 对应连续的“开始日期、结束日期和连续天数”。
     t2 as
         (select user_id
               , dt_uid
               , min(login_date)                                as consecutive_start_date
               , max(login_date)                                as consecutive_end_date
               , datediff(max(login_date), min(login_date)) + 1 as consecutive_days
               , count(login_date)                              as consecutive_days1
          from t1
          group by user_id, dt_uid)
select user_id
     , max(consecutive_days) as consecutive_days_longest
from t2
group by user_id;

########### 需求2:请用 SQL 查询连续登陆不少于3天的用户。
-- 一天可能出现多次登陆,去重
with t0 as
         (select distinct user_id, date(login_time) as login_date
          from login_tb),
-- 利用 row_number 对每个 user_id 登录日期进行升序排序,得到 rn 列(如果是连续的,可以发现用户 user_id 对应的排序字段 rn 是连续的)
-- 利用 date_sub 将 login_date 与 rn 相减,可以得到“伪日期列-dt_uid”,可以发现不管是否间断,若连续登录,dt_uid 对应相同;
     t1 as
         (select user_id
               , login_date
               , row_number() over (partition by user_id order by login_date) as rn
               , date_sub(login_date, interval row_number() over (partition by user_id order by login_date)day) as dt_uid
          from t0),
-- 对 user_id 和 dt_uid 进行分组聚合,再使用 datediff 或者 count ,就可以得出每个 user_id 对应连续的“开始日期、结束日期和连续天数”。
     t2 as
         (select user_id
               , dt_uid
               , min(login_date)                                as consecutive_start_date
               , max(login_date)                                as consecutive_end_date
               , datediff(max(login_date), min(login_date)) + 1 as consecutive_days
               , count(login_date)                              as consecutive_days1
          from t1
          group by user_id, dt_uid)
select user_id
from t2
group by user_id
having max(consecutive_days) >= 3;

########### 需求3:请用 SQL 查询2022年2月1日-2022年2月15日用户最长的连续登录天数。
-- 一天可能出现多次登陆,去重
with t0 as
         (select distinct user_id, date(login_time) as login_date
          from login_tb
          where date(login_time) between '2022-02-01' and '2022-02-15'
          ),
-- 利用 row_number 对每个 user_id 登录日期进行升序排序,得到 rn 列(如果是连续的,可以发现用户 user_id 对应的排序字段 rn 是连续的)
-- 利用 date_sub 将 login_date 与 rn 相减,可以得到“伪日期列-dt_uid”,可以发现不管是否间断,若连续登录,dt_uid 对应相同;
     t1 as
         (select user_id
               , login_date
               , row_number() over (partition by user_id order by login_date) as rn
               , date_sub(login_date, interval row_number() over (partition by user_id order by login_date)day) as dt_uid
          from t0),
-- 对 user_id 和 dt_uid 进行分组聚合,再使用 datediff 或者 count ,就可以得出每个 user_id 对应连续的“开始日期、结束日期和连续天数”。
     t2 as
         (select user_id
               , dt_uid
               , min(login_date)                                as consecutive_start_date
               , max(login_date)                                as consecutive_end_date
               , datediff(max(login_date), min(login_date)) + 1 as consecutive_days
               , count(login_date)                              as consecutive_days1
          from t1
          group by user_id, dt_uid)
select user_id
     , max(consecutive_days) as consecutive_days_longest
from t2
group by user_id;

可以发现 需求1 只要在前面分析的思路上,稍微添加临时表汇总即可;需求3 只要在 需求1 基础上,临时表 t0 稍微添加日期范围条件即可;

方法二:利用错位窗口函数

  1. 可能出现多次登陆,对所需列去重复;
  2. 利用自连接和 lead 找出断点日期,即连续登录开始或者间断的初始日期(login_date_cr)和下次连续登陆的开始日期(login_date_nr),如果为 null 则给默认永久即 9999-12-31;

image-4

  1. 利用上一步得出的 结果, 将每个对应的用户 user_id 和 login_date 映射在[login_date_cr, login_date_nr) 之间(注意 login_date_nr 是开区间),可以发现不管是否间断,若连续登录,用户的 login_date_cr 和 login_date_nr 对应相同;

image-5

  1. 对 user_id 、 login_date_cr 和 login_date_nr 进行分组聚合,再使用 datediff 或者 count ,就可以得出每个 user_id 对应连续的“开始日期、结束日期和连续天数”。

image-6

  1. 结合具体题目需求,添加筛选或稍微处理,基本上可以应对相关系列题目。

需求答案

########### 需求1:请用 SQL 查询用户最长连续登陆天数。
-- 一天可能出现多次登陆,去重
with t0 as
         (select distinct user_id, date(login_time) as login_date from login_tb),
-- 利用自连接和 lead 找出断点日期,即连续登录开始或者间断的初始日期,和下次连续登陆的开始日期,如果为 null 则给默认永久即 9999-12-31
     t1 as
         (select a.user_id
              , a.login_date                                                                            as login_date_cr
              , lead(a.login_date, 1, '9999-12-31') over (partition by a.user_id order by a.login_date) as login_date_nr
          from t0 as a
          left join t0 as b
          on a.user_id = b.user_id
          and datediff(a.login_date, b.login_date) = 1
          where b.login_date is null),
-- 利用上一步得出的 结果, 将每个对应的用户 user_id 和 login_date 映射在[login_date_cr, login_date_nr) 之间(注意 login_date_nr 是开区间)
-- ,可以发现不管是否间断,若连续登录,用户的 login_date_cr 和 login_date_nr 对应相同;
     t2 as
         (select t0.user_id, t0.login_date, t1.login_date_cr, t1.login_date_nr
          from t0
          left join t1
          on t0.user_id = t1.user_id
          and t0.login_date >= t1.login_date_cr
          and t0.login_date < t1.login_date_nr),
-- 对 user_id 、 login_date_cr 和 login_date_nr 进行分组聚合,再使用 datediff 或者 count ,就可以得出每个 user_id 对应连续的“开始日期、结束日期和连续天数”。
     t3 as
         (select user_id
               , login_date_cr
               , login_date_nr
               , min(login_date)                                as consecutive_start_date
               , max(login_date)                                as consecutive_end_date
               , datediff(max(login_date), min(login_date)) + 1 as consecutive_days
               , count(login_date)                              as consecutive_days1
          from t2
          group by user_id, login_date_cr, login_date_nr)
select user_id
     , max(consecutive_days) as consecutive_days_longest
from t3
group by user_id;

########### 需求2:请用 SQL 查询连续登陆不少于3天的用户。
-- 一天可能出现多次登陆,去重
with t0 as
         (select distinct user_id, date(login_time) as login_date from login_tb),
-- 利用自连接和 lead 找出断点日期,即连续登录开始或者间断的初始日期,和下次连续登陆的开始日期,如果为 null 则给默认永久即 9999-12-31
     t1 as
         (select a.user_id
              , a.login_date                                                                            as login_date_cr
              , lead(a.login_date, 1, '9999-12-31') over (partition by a.user_id order by a.login_date) as login_date_nr
          from t0 as a
          left join t0 as b
          on a.user_id = b.user_id
          and datediff(a.login_date, b.login_date) = 1
          where b.login_date is null),
-- 利用上一步得出的 结果, 将每个对应的用户 user_id 和 login_date 映射在[login_date_cr, login_date_nr) 之间(注意 login_date_nr 是开区间)
-- ,可以发现不管是否间断,若连续登录,用户的 login_date_cr 和 login_date_nr 对应相同;
     t2 as
         (select t0.user_id, t0.login_date, t1.login_date_cr, t1.login_date_nr
          from t0
          left join t1
          on t0.user_id = t1.user_id
          and t0.login_date >= t1.login_date_cr
          and t0.login_date < t1.login_date_nr),
-- 对 user_id 、 login_date_cr 和 login_date_nr 进行分组聚合,再使用 datediff 或者 count ,就可以得出每个 user_id 对应连续的“开始日期、结束日期和连续天数”。
     t3 as
         (select user_id
               , login_date_cr
               , login_date_nr
               , min(login_date)                                as consecutive_start_date
               , max(login_date)                                as consecutive_end_date
               , datediff(max(login_date), min(login_date)) + 1 as consecutive_days
               , count(login_date)                              as consecutive_days1
          from t2
          group by user_id, login_date_cr, login_date_nr)
select user_id
from t3
group by user_id
having max(consecutive_days) >= 3;

########### 需求3:请用 SQL 查询2022年2月1日-2022年2月15日用户最长的连续登录天数。
-- 一天可能出现多次登陆,去重
with t0 as
         (select distinct user_id, date(login_time) as login_date
          from login_tb
          where date(login_time) between '2022-02-01' and '2022-02-15'),
-- 利用自连接和 lead 找出断点日期,即连续登录开始或者间断的初始日期,和下次连续登陆的开始日期,如果为 null 则给默认永久即 9999-12-31
     t1 as
         (select a.user_id
              , a.login_date                                                                            as login_date_cr
              , lead(a.login_date, 1, '9999-12-31') over (partition by a.user_id order by a.login_date) as login_date_nr
          from t0 as a
          left join t0 as b
          on a.user_id = b.user_id
          and datediff(a.login_date, b.login_date) = 1
          where b.login_date is null),
-- 利用上一步得出的结果, 将每个对应的用户 user_id 和 login_date 映射在[login_date_cr, login_date_nr) 之间(注意 login_date_nr 是开区间)
-- ,可以发现不管是否间断,若连续登录,用户的 login_date_cr 和 login_date_nr 对应相同;
     t2 as
         (select t0.user_id, t0.login_date, t1.login_date_cr, t1.login_date_nr
          from t0
          left join t1
          on t0.user_id = t1.user_id
          and t0.login_date >= t1.login_date_cr
          and t0.login_date < t1.login_date_nr),
-- 对 user_id 、 login_date_cr 和 login_date_nr 进行分组聚合,再使用 datediff 或者 count ,就可以得出每个 user_id 对应连续的“开始日期、结束日期和连续天数”。
     t3 as
         (select user_id
               , login_date_cr
               , login_date_nr
               , min(login_date)                                as consecutive_start_date
               , max(login_date)                                as consecutive_end_date
               , datediff(max(login_date), min(login_date)) + 1 as consecutive_days
               , count(login_date)                              as consecutive_days1
          from t2
          group by user_id, login_date_cr, login_date_nr)
select user_id
     , max(consecutive_days) as consecutive_days_longest
from t3
group by user_id;

通过两种方法可知,主要思路都是需要给用户连续登陆日期打上一个独有的分组标签,只要解决了这个,问题就基本上解决了,方法有很多,有兴趣的同学可以自行探索,就个人而已,比较推荐方法一:利用排名窗口函数,普遍适用于许多分析工具。

为了快速得到我们想要的结果,我们可能想到或者看到许多方法来解决需求2“请用 SQL 查询连续登陆不少于3天的用户”。如下图,通过 count 和 lead 开窗函数之间限定不少于3天两种方法。

image-7

再根据结果,嵌套子查询筛选不少于3天的用户,得到的结果似乎正确,我们再看看下面另外的情况。

image-8

如果我们将需求调整为“请用 SQL 查询连续登陆不少于6天的用户”。从数据查看,应该没有任何一个用户满足需求。继续沿用上面的代码逻辑,结果如下:
image-9

可以发现,用户 1106 将会被统计出来,我们知道用户 1106 是连续登陆 3 天,间断了 2 天,又接着连续登陆了 4 天,这显然存在问题,所以需要特别注意雷区“是否有连续、间断、再连续,间断是否需要统计等问题”。

get 上面的分析思路和方法,我们来趁热打铁,做几道真题练练手~

经典真题

真题1:订单表(order),字段包含:订单(order_id)、商品(sku_id)、支付时间(paid_timestamp)、订单状态(order_status,支付成功为order_status=1)。

  • 需求1:请用SQL实现“从今天往前算的最近180天内,支付成功记录的商品清单最长的连续下单天数“。
  • 需求2:请用SQL实现”从今天往前算的最近180天内,连续30天有支付成功记录的商品清单。

难度等级:⭐️⭐️⭐️⭐️⭐️

答案

########## 需求1
-- 一个商品一天可能被下单多次,限定需求范围查询
with t0 as
         (select distinct sku_id, date(paid_timestamp) as paid_date
          from order
          where order_status = 1
              and date(paid_timestamp) >= date_sub(curdate(),interval 180 day)
              and date(paid_timestamp) <= curdate()
          ),
     t1 as
         (select sku_id
               , paid_date
               , row_number() over (partition by sku_id order by paid_date) as rn
               , date_sub(paid_date, interval row_number() over (partition by sku_id order by paid_date)day) as dt_uid
          from t0),
     t2 as
         (select sku_id
               , dt_uid
               , min(paid_date)                                as consecutive_start_date
               , max(paid_date)                                as consecutive_end_date
               , datediff(max(paid_date), min(paid_date)) + 1 as consecutive_days
               , count(paid_date)                              as consecutive_days1
          from t1
          group by sku_id, dt_uid)
select sku_id
     , max(consecutive_days) as consecutive_days_longest
from t2
group by sku_id;

########## 需求2
-- 一个商品一天可能被下单多次,限定需求范围查询
with t0 as
         (select distinct sku_id, date(paid_timestamp) as paid_date
          from order
          where order_status = 1
              and date(paid_timestamp) >= date_sub(curdate(),interval 180 day)
              and date(paid_timestamp) <= curdate()
          ),
     t1 as
         (select sku_id
               , paid_date
               , row_number() over (partition by sku_id order by paid_date) as rn
               , date_sub(paid_date, interval row_number() over (partition by sku_id order by paid_date)day) as dt_uid
          from t0),
     t2 as
         (select sku_id
               , dt_uid
               , min(paid_date)                                as consecutive_start_date
               , max(paid_date)                                as consecutive_end_date
               , datediff(max(paid_date), min(paid_date)) + 1 as consecutive_days
               , count(paid_date)                              as consecutive_days1
          from t1
          group by sku_id, dt_uid)
select sku_id
from t2
group by sku_id
having max(consecutive_days) >= 30;

真题2:用户签到表 user_sign_d 用来记录用户每日是否签到,包含以下字段:日期(sign_date:‘yyyy-mm-dd’)、用户ID(user_id)、当日是否签到(if_sign:1表示签到,0表示未签到)。

  • 需求1:编写SQL查询,计算截止2022年1月31日最长连续签到打卡了多少天,输出结果包含 user_id 和 consecutive_sign_days。
  • 需求2:编写SQL查询,计算2022年1月1日-2022年1月31日连续签到打卡超过 28 天的牛马🐮🐎(用户),连续打卡可间断,但间断不超过 2 天(周末)继续打卡有效,否则无效,比如打卡 5 天,间断 2 天,又连续打卡 5 天,则连续打卡视为连续登陆 12 天;打卡 5 天,间断 3 天,又连续打卡 5 天,则连续打卡视为连续登陆 5 天。

难度等级:⭐️⭐️⭐️⭐️⭐️

答案

########## 需求1
-- 一个用户一天可能打卡多次,限定需求范围查询
with t0 as
         (select distinct user_id, date(sign_date) as sign_date
          from user_sign_d
          where if_sign = 1
              and date(sign_date) <= '2022-01-31'
          ),
     t1 as
         (select user_id
               , sign_date
               , row_number() over (partition by user_id order by sign_date) as rn
               , date_sub(sign_date, interval row_number() over (partition by user_id order by sign_date)day) as dt_uid
          from t0),
     t2 as
         (select user_id
               , dt_uid
               , min(sign_date)                                as consecutive_start_date
               , max(sign_date)                                as consecutive_end_date
               , datediff(max(sign_date), min(sign_date)) + 1 as consecutive_days
               , count(sign_date)                              as consecutive_days1
          from t1
          group by user_id, dt_uid)
select user_id
     , max(consecutive_days) as consecutive_days_longest
from t2
group by user_id;

########## 需求2
-- 一个用户一天可能打卡多次,限定需求范围查询
with t0 as
         (select distinct user_id, date(sign_date) as sign_date
          from user_sign_d
          where if_sign = 1
              and date(sign_date) >= '2022-01-01'
              and date(sign_date) <= '2022-01-31'
          ),
-- 计算用户与上次次登陆日期差
     t1 as
         (select user_id
               , sign_date
               , lag(sign_date) over (partition by user_id order by sign_date) as lag_date
               , datediff(sign_date, lag(sign_date) over (partition by user_id order by sign_date)) as days_gap
          from t0),
-- 构造分组 uid:根据日期差 days_gap,判断是否连续,如果 days_gap <= 2,则认为连续,赋值 0,否则不连续,赋值 1
    t2 as 
        (select user_id
               , sign_date
               , lag_date
               , days_gap
               , sum(if(days_gap <= 2, 0, 1)) over (partition by user_id order by sign_date) as dt_uid
         from t1),
-- 对 user_id 和 dt_uid 进行分组聚合,再使用 datediff ,就可以得出每个 user_id 对应连续的“开始日期、结束日期和连续天数”。
     t3 as
         (select user_id
               , dt_uid
               , min(sign_date)                                as consecutive_start_date
               , max(sign_date)                                as consecutive_end_date
               , datediff(max(sign_date), min(sign_date)) + 1 as consecutive_days
          from t2
          group by user_id, dt_uid)
select user_id
from t3
group by user_id
having max(consecutive_days) >= 28;

主要思路:对用户连续日期构造分组 dt_uid,再进行分组聚合。

如果对 SQL 开窗函数不太熟悉,可以参照 Mysql 开窗函数,一文带你直接通关,结合里面的简单示例进行实操多练习,查看得出结果并理解,希望会对你有帮助。

如果有新的思路和灵感,欢迎留言👏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2121455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新华三H3CNE网络工程师认证—DHCP基本原理

DHCP报文交互一共有四个报文&#xff0c;分别是Discover、Offer、Request和Ack。DHCP Discover是客户端连入网络之后&#xff08;配的自动获取&#xff09;&#xff0c;会对外发送Discover&#xff0c;其实这个报文的作用可以理解为网络当中谁是服务器&#xff0c;用广播去发&a…

Codeforces Round 969 (Div. 2) C. Dora and C++ (裴蜀定理)

什么&#xff1f;竟然是裴蜀定理。。。 由于这里给出了a和b两个数&#xff0c;我们或许可以想到使用同样是需要给出两个定值的裴蜀定理&#xff0c;即&#xff1a; 如果给定 x x x和 y y y&#xff0c;那么一定有 a x b y g c d ( x , y ) axbygcd(x,y) axbygcd(x,y)。 所以…

vue3【实战】菜单导航(高亮当前路由,鼠标悬浮下标、页面滚动顶部悬浮并变色)

效果预览 完整代码 <template><!-- 导航 --><nav class"fixed flex items-center p-2 w-full nav-bg1" :class"{ nav-bg2: y }"><img src"/EC_Logo.jpg" class"w-12 h-12 lt-sm:mx-auto logo" alt"logo&quo…

LSM-Tree简单介绍

前言 这里完成每日的创作要求&#xff0c;用一下自己看论文整理的LSM-Tree理论 2.1 LSM-Tree 基础理论 LSM Tree 组织 总共有n1层&#xff0c;代表L0到Ln 每个级别将键值对存储在不可变的固定大小文件中&#xff08;类似于HDFS的块设定&#xff09;&#xff0c;每个文件有几…

【Python进阶】带你了解Python的学习路线,从入门到进阶,附带项目演练和源码!!!

Python学习资料 基础知识 Python简介 Python是一种高级编程语言&#xff0c;具有简单易学、可读性强、可移植性好等特点。它广泛应用于Web开发、数据科学、人工智能等领域。 Python编程语言 Logo Python环境搭建 在开始学习Python之前&#xff0c;你需要先安装Python解释器…

什么是公园智慧公厕系统?公园智慧厕所主要功能有哪些@卓振思众

公园智慧公厕是一种利用现代信息技术手段&#xff0c;对公园内的公共厕所进行智能化管理和服务的设施&#xff0c;【卓振思众】智慧公厕系统具有以下特点和功能&#xff1a; 一、环境监测空气质量监测&#xff1a;配备传感器实时监测公厕内空气质量&#xff0c;如检测到异味、有…

LottieCompositionFactory.fromUrl 加载lottie的json文件

当你使用 LottieCompositionFactory.fromUrl 加载动画时&#xff0c;Lottie 会将下载的动画文件缓存到应用的本地缓存目录下。 LottieCompositionFactory.fromUrl(context, url).addListener(object : LottieListener<LottieComposition> {override fun onResult(result…

逻辑一键导入导出,解决企业多环境数据迁移的难题

在当今复杂多变的商业环境中&#xff0c;系统间的数据迁移、备份与共享成为了确保业务连续性和一致性的关键环节。随着企业规模的不断扩大和业务的日益复杂化&#xff0c;JVS逻辑引擎作为一款集高效、灵活、可扩展性于一身的决策支持系统&#xff0c;还通过其独特的导入导出功能…

一个3GPP协议上有关cell reselection priority的问题

先看些相关协议上的描述&#xff1a; 首先说优先级问题&#xff0c;在小区重选过程中要用到NR freq或者inter RAT LTE 的优先级信息&#xff0c;优先级信息一般可以通过系统消息/RRCRelease/从其他RAT中带过来。系统消息中的NR freq或者inter RAT freq 可能没有带priority信息(…

《深入理解JAVA虚拟机(第2版)》- 第10章 - 学习笔记

第10章 早期&#xff08;编译期&#xff09;优化 10.1 概述 Java语言的编译期是一个不确定的操作过程。之所以这么说是因为有如下三类编译过程&#xff1a; 前端编译器&#xff08;准确来说应该是编译器的前端&#xff09;将java文件编译成class文件的过程。即时编译器&…

国产 LateX 线上平台 LoongTeX 推荐

文章目录 一. 良好的细节处理二. AI集成三. 价格四. 有待优化开发的地方五. 总结 这篇文章是我们的一位用户首发于知乎的评论&#xff0c;文中表达了他对我们产品的用心体验和客观评价。我们认为这篇文章不仅中肯且富有洞见&#xff0c;因此特别将其重新发布在此&#xff08;配…

兼容pc端和移动端的滑块校验

组件 <template><canvas :class"cvsClass" :width"props.width" :height"props.height" ref"cvs"></canvas> </template><script setup> import { ref, reactive, watch, nextTick } from "vue&q…

力扣: 四数相加II

文章目录 需求代码结尾 需求 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入…

论文解析二: SuperGlue 同时进行特征匹配以及滤除外点的网络

目录 1.SuperGlue摘要2.SuperGlue网络结构2.1 Attentional Graph Neural Network&#xff08; 注意图神经网络&#xff09;2.1.1 KeyPoint Encoder &#xff1a;解决 同时进行特征匹配以及滤除外点的网络2.1.2 Attentional Aggregation 2.2 Optimal Matching Layer (最优匹配层…

ctfshow-PHP反序列化

web254 源码 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-12-02 17:44:47 # Last Modified by: h1xa # Last Modified time: 2020-12-02 19:29:02 # email: h1xactfer.com # link: https://ctfer.com //mytime 2023-12-4 0:22 */ error_reporting(0)…

【大模型结构】不同技术架构的区别

文章目录 大语言模型技术概述Encoder-onlyDecoder-onlyEncoder-Decoder为什么流行LLM都是Decoder only架构&#xff1f;参考资料 如果你投递的是NLP方向&#xff0c;大模型方向&#xff0c;多模态大模型方向&#xff0c;甚至是人工智能方向&#xff0c;当前大语言模型的技术架构…

基于人工智能的智能个人健康管理系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据采集与预处理模型训练与预测实时健康监控应用场景结论 1. 引言 个人健康管理在现代生活中变得尤为重要&#xff0c;随着人工智能技术的进步&#xff0c;智能健康管理系统可以通过监…

[AI书籍分享]<AI时代,学什么,怎么学 - 和渊>

本文由Markdown语法编辑器编辑完成。 1, 背景: 本书是一位清华大学毕业的生物学博士&#xff0c;和渊老师&#xff0c;现就职于人大附中, 是一名一线的高中生物教师. 她之前已经写过几本关于教育类的书籍&#xff0c;而这本书&#xff0c;则是她针对当前, AI时代迅猛发展的背…

CPU调度算法之FIFS(先来先服务)

摘要 CPU的先来先服务&#xff08;FCFS, First-Come, First-Served&#xff09;任务调度算法是一种最基础且直观的调度方法&#xff0c;它根据任务到达的顺序决定其执行的先后顺序。这种算法以其简单性和公平性在操作系统中占据重要地位&#xff0c;但也存在一些不足&#xff…

【数学建模国赛】前期准备

这里是阿川的博客&#xff0c;祝您变得更强 ✨ 个人主页&#xff1a;在线OJ的阿川 &#x1f496;文章专栏&#xff1a;国赛数模准备到进阶 &#x1f30f;代码仓库&#xff1a; 写在开头 现在您看到的是我的结论或想法&#xff0c;省略了思考过程&#xff0c;但在这背后凝结了大…