row_number 和 cte 使用实例:考场监考安排

news2024/11/17 9:56:35

row_number 和 cte 使用实例:考场监考安排

  • 考场监考安排
    • 使用 cte 模拟两个表的原始数据
    • 使用 master..spt_values 进行数据填充
    • 优先安排时长较长的考试
    • 使用 cte 安排第一个需要安排的科目
    • 统计老师已有的监考时长
    • 尝试使用 cte 递归,进行下一场考试安排(尝试了三个方向才成功)
      • 第一个尝试,使用考试科目递归,失败
      • 第二个尝试,使用老师数据及考试批次递归,失败
      • 第三次尝试,用 for xml 继承数据
    • 最后用字符串切割和列转行,排出监考排班表
  • 小结

考场监考安排

问题出自问答区 python 频道的一个问答,原问答地址:https://ask.csdn.net/questions/7901104。

题主对提问的方式不太熟悉,他其实已经提了一系列关于监考安排这个问题的问答了,每次都略有遗漏,所以老顾把完整的需求从新描述一下。

有若干场不同科目的考试,每个科目的考试时长不同;有若干位不同科目的老师去监考,每个考试需要1名监考老师,监考老师不得监考同科目的考试。
请尽量安排老师所用的总监考时长为最平均的接近值。

题主这里给出了29位不同科目的老师,还有77场不同科目的考试。老顾用 python 通过编程的方式已经实现了这个需求,平均每位老师监考总时长在200至250之间。

但是,这个题目老顾觉得用数据库查询的方式也可以做,于是就拿来练练手。

使用 cte 模拟两个表的原始数据

with 考试 as (
	select '语文' 科目,13 场次,120 时长
	union all select '英语',16,100
	union all select '数学',16,100
	union all select '物理',8,60
	union all select '道法',8,60
	union all select '历史',8,50
	union all select '化学',8,50
),老师 as (
	select '语文' 科目,4 num
	union all select '数学',5
	union all select '英语',6
	union all select '物理',3
	union all select '道法',3
	union all select '历史',3
	union all select '生物',3
	union all select '体育',2
)
select * from 考试

在这里插入图片描述
在这里插入图片描述

使用 master…spt_values 进行数据填充

因为题主给的数据就是这样的,所以,咱也不知道具体每个老师叫啥,每个科目啥时候举行,有没有时间冲突,咱就当他没有好了。但是,这样的汇总数据是无法进行计算的,我们需要把所有的汇总数据展开成单项。这里使用了mssql系统库中自带的一个数据表:master…spt_values,使用这个表可以很方便的扩展成单项,进行数据补全。相信看过我以前 sql 文章的小伙伴对这个已经很熟悉了。

with ... -- 前边的 with 不再重复
,teacher as (
	select 科目,number 
	from 老师
	cross apply (
		select number from master..spt_values
		where type='p' and number between 1 and num
	) b
)
select * from teacher

在这里插入图片描述

很容易就得到了单个老师的排列及科目了。

在这里,不得不说,cross/outer apply 很好用,可以直接引用前边查询表中的列,而 mysql 则未提供这种方式,写个关联查询为了引用前边的列,也很费劲。

优先安排时长较长的考试

这个是一个朴素的想法,先把废时间的安排出去,然后,谁的总时长少,谁就多安排一点,这样的话,平均时长就差不多了,所以我们对考试场次按时长做个倒序分配序号,来确定分配优先级,并作为 cte 递归的依据。

with ...
,exam as (
	select *,row_number() over(order by 时长 desc) sn 
	from 考试
)
select * from exam

在这里插入图片描述

使用 cte 安排第一个需要安排的科目

第一个需要安排的科目自然是语文了,根据 sn 得出的结论嘛。

我们需要安排13个非语文科目的老师进行语文考试的监考,为了每次安排不那么一样,还要用 newid() 函数协助一下随机排序,那么大概得指令就是这样了。

with ...
,sc as (
	select b.*,a.科目 as 监考,时长,a.sn 
	from exam a
	cross apply (
		select *,row_number() over(order by newid()) nid
		from teacher
		where 科目<>a.科目
	) b
	where sn = 1 and nid<=场次
)
select * from sc

在这里插入图片描述

第一个科目很容易就安排出去了,现在准备攻坚了,递归之后的科目。

统计老师已有的监考时长

在递归之前,我们先考虑一下,对之后的安排我们需要做两件事:

1、对所有老师的已安排监考的时长进行统计,选择时长最短的老师进行下一场监考安排
2、递归数据需要排重,不能粗暴的直接用 sn = a.sn + 1 这样的方式了,因为我们已经有了13场 sn 等于1的安排了

先按老师的时长统计进行一下计算,我们修改下 select * from sc 的内容,看看这29位老师每个人的第一场考试后的时长。

select a.*,isnull(总时长,0) 总时长 
from teacher a
left join (
	select 科目,number,sum(时长) 总时长 
	from sc
	group by 科目,number
) b on a.科目=b.科目 and a.number=b.number

在这里插入图片描述

尝试使用 cte 递归,进行下一场考试安排(尝试了三个方向才成功)

在这里插入图片描述
由于在 cte 递归中,无法使用 top 或 offset 之类的运算,所以可以看到,我们刚才实现第一场的内容时,都是用的 row_number 做的变动,这里,我们同样使用 row_number 变通一下
在这里插入图片描述
在这里插入图片描述
变动过程中是各种报错啊。。。。嘿嘿

第一个尝试,使用考试科目递归,失败

,sc as (
	select convert(nvarchar(max),b.科目) 科目,number,时长,a.科目 as 监考,a.sn 
	from exam a
	cross apply (
		select *,row_number() over(order by newid()) nid
		from teacher
		where 科目<>a.科目
	) b
	where sn = 1 and nid<=场次
	union all
	select convert(nvarchar(max),'下一场'),0,场次,e.科目,e.sn
	from (
		select *,row_number() over(order by sn desc) rid from sc
	) a
	inner join exam e on a.sn+1=e.sn
	where rid=1
	
)
select * from sc
order by sn

在这里插入图片描述
不出预料的,每个下一场都是13场,和语文一样的场次,老顾是没办法解决这个问题了,只好换个思路。

第二个尝试,使用老师数据及考试批次递归,失败

with ...
,sc as (
	select 科目,number
		,(case when nid<=场次 then 用时+时长 else 用时 end) 用时
		,(case when nid<=场次 then 监考 else null end) 监考,批次,场次
		,nid
	from (
		select t.*,时长,e.科目 监考,1 批次,场次
			,row_number() over(order by 场次 desc,newid()) nid
		from teacher t
		left join exam e on t.科目<>e.科目 and e.sn=1
	) a
	union all
	select 科目,number
		 ,(case when nid<=场次 then 用时+时长 else 用时 end) 用时
		 ,(case when nid<=场次 then 监考 else null end) 监考,批次,场次
		 ,row_number() over(order by @@rowcount)
	from (
		select s.科目,number,用时,e.科目 监考,批次 + 1 批次,e.场次,时长
			,row_number() over(order by (case when s.科目=e.科目 then 1 else 0 end),用时,newid()) nid
		from sc s,exam e
		where s.批次+1 = e.sn
	) a
)
select * from sc
order by 批次,nid

在这里插入图片描述
结果发现。。。。cte 递归,原来是一行数据一行数据的递归下来的,不是整个表一起递归的,难怪不让用 join 之类的指令。由于是一行一行递归的,所以这里的 row_number 得不到1之外的序号了,如果再次引入 teacher 表,则无法继承考试用时了,只好再换个思路。

第三次尝试,用 for xml 继承数据

,sc as (
	select * 
	from exam a
	cross apply (
		select convert(nvarchar(max),stuff((select ';' + 科目 + ':' + convert(varchar,number) + ':' + convert(varchar,(case when nid<=场次 then 时长 else 0 end))
		from (
			select t.*,时长,e.科目 监考,1 批次,场次
				,row_number() over(order by 场次 desc,newid()) nid
			from teacher t
			left join exam e on t.科目<>e.科目 and e.sn=a.sn
		) a
		--where nid <= 场次
		for xml path('')),1,1,'')) z
	) b
	where a.sn=1
	union all
	select b.*,convert(nvarchar(max),'')
	from sc a,exam b
	where a.sn + 1 = b.sn
)
select * from sc

在这里插入图片描述
可以看到,我们可以把所有老师的用时都放到组合数据了,然后用切割字符串方式再回复成表数据进行计算,这样就可以继续尝试了。

这里老顾就直接用正则了,毕竟切割的话还是比较麻烦的,需要好几次列转行,我用正则可以省略一次。。。。如果有小伙伴想在 mssql 里使用正则,可以看老顾以前的文章,或者直接下载老顾准备好的 clr 指令《mssql正则clr及函数,追加Group分组支持》,然后直接运行里边的指令就可以使用老顾下边的正则指令了。

在这里插入图片描述

竟然还有这么多不让用的,pivot 也不能用就有点麻烦了,好在老顾的正则不错,可以单独提取数据,不用 pivot 也可以。

with ...
,sc as (
	select * 
	from exam a
	cross apply (
		select convert(nvarchar(max),stuff((select ';' + 科目 + ':' + convert(varchar,number) + ':' + convert(varchar,时长)
		from (
			select t.*,时长,e.科目 监考,1 批次,场次
				,row_number() over(order by 场次 desc,newid()) nid
			from teacher t
			left join exam e on t.科目<>e.科目 and e.sn=a.sn
		) a
		where nid <= 场次
		for xml path('')),1,1,'')) curr
	) b
	cross apply (
		select convert(nvarchar(max),stuff((select ';' + 科目 + ':' + convert(varchar,number) + ':' + convert(varchar,(case when nid<= 场次 then 时长 else 0 end))
		from (
			select t.*,时长,e.科目 监考,1 批次,场次
				,row_number() over(order by 场次 desc,newid()) nid
			from teacher t
			left join exam e on t.科目<>e.科目 and e.sn=a.sn
		) a
		for xml path('')),1,1,'')) sc
	) c
	where a.sn=1
	union all
	select 科目,场次,时长,sn,c,z 
	from (
		select b.*,a.sc
		from sc a,exam b
		where a.sn + 1 = b.sn
	) a
	cross apply (
		select stuff((
			select ';' + tn + ':' + tsn + ':' + convert(varchar,(case when nid<=场次 then 用时+时长 else 用时 end))
			from (
				select *,row_number() over(order by 用时,newid()) nid  
				from (
					select master.dbo.RegexMatch(match,'[^:]+') tn
						,master.dbo.RegexMatch(match,'(?<=:)\d+(?=:)') tsn
						,convert(int,master.dbo.RegexMatch(match,'(?<=:)\d+(?=$)')) 用时
					from master.dbo.RegexMatches(sc,'([^;:]+):(\d+):(\d+)')
				) a
			) a
			for xml path('')
		),1,1,'') z
	) b
	cross apply (
		select stuff((
			select ';' + tn + ':' + tsn + ':' + convert(varchar,用时)
			from (
				select *,row_number() over(order by 用时,newid()) nid  
				from (
					select master.dbo.RegexMatch(match,'[^:]+') tn
						,master.dbo.RegexMatch(match,'(?<=:)\d+(?=:)') tsn
						,convert(int,master.dbo.RegexMatch(match,'(?<=:)\d+(?=$)')) 用时
					from master.dbo.RegexMatches(sc,'([^;:]+):(\d+):(\d+)')
				) a
			) a
			where nid<=场次
			for xml path('')
		),1,1,'') c
	) c
)
select * from sc

在这里插入图片描述
嗯,最后一行 sc 是所有老师的用时情况,每一行的 curr 是该科目考试所安排的老师,我们先看看总用时情况:

历史:1:230;生物:3:230;数学:4:250;道法:3:250;语文:3:250;数学:2:250;生物:1:250;数学:1:250;体育:1:200;道法:2:200;语文:1:200;物理:3:200;英语:2:200;历史:2:200;语文:4:200;语文:2:200;英语:3:200;物理:1:200;英语:4:230;英语:5:230;英语:1:230;体育:2:230;历史:3:230;数学:5:230;物理:2:230;数学:3:230;英语:6:240;道法:1:240;生物:2:240

一共 29 个老师,每个老师200到250的用时,结果验证正确,真不容易,为了绕过限制,这次的指令写的很复杂,如果有小伙伴想了解详细内容,可以在评论区扣我。

最后用字符串切割和列转行,排出监考排班表

with 考试 as (
	select '语文' 科目,13 场次,120 时长
	union all select '英语',16,100
	union all select '数学',16,100
	union all select '物理',8,60
	union all select '道法',8,60
	union all select '历史',8,50
	union all select '化学',8,50
),老师 as (
	select '语文' 科目,4 num
	union all select '数学',5
	union all select '英语',6
	union all select '物理',3
	union all select '道法',3
	union all select '历史',3
	union all select '生物',3
	union all select '体育',2
),teacher as (
	select 科目,number
	from 老师
	cross apply (
		select number from master..spt_values
		where type='p' and number between 1 and num
	) b
),exam as (
	select *,row_number() over(order by 时长 desc) sn 
	from 考试
),sc as (
	select * 
	from exam a
	cross apply (
		select convert(nvarchar(max),stuff((select ';' + 科目 + ':' + convert(varchar,number) + ':' + convert(varchar,时长)
		from (
			select t.*,时长,e.科目 监考,1 批次,场次
				,row_number() over(order by 场次 desc,t.科目,number) nid
			from teacher t
			left join exam e on t.科目<>e.科目 and e.sn=a.sn
		) a
		where nid <= 场次
		for xml path('')),1,1,'')) curr
	) b
	cross apply (
		select convert(nvarchar(max),stuff((select ';' + 科目 + ':' + convert(varchar,number) + ':' + convert(varchar,(case when nid<= 场次 then 时长 else 0 end))
		from (
			select t.*,时长,e.科目 监考,1 批次,场次
				,row_number() over(order by 场次 desc,t.科目,number) nid
			from teacher t
			left join exam e on t.科目<>e.科目 and e.sn=a.sn
		) a
		for xml path('')),1,1,'')) sc
	) c
	where a.sn=1
	union all
	select 科目,场次,时长,sn,c,z 
	from (
		select b.*,a.sc
		from sc a,exam b
		where a.sn + 1 = b.sn
	) a
	cross apply (
		select stuff((
			select ';' + tn + ':' + tsn + ':' + convert(varchar,(case when nid<=场次 then 用时+时长 else 用时 end))
			from (
				select *,row_number() over(order by (case when tn=科目 then 1 else 0 end),用时,tn,tsn) nid  
				from (
					select master.dbo.RegexMatch(match,'[^:]+') tn
						,master.dbo.RegexMatch(match,'(?<=:)\d+(?=:)') tsn
						,convert(int,master.dbo.RegexMatch(match,'(?<=:)\d+(?=$)')) 用时
					from master.dbo.RegexMatches(sc,'([^;:]+):(\d+):(\d+)')
				) a
			) a
			for xml path('')
		),1,1,'') z
	) b
	cross apply (
		select stuff((
			select ';' + tn + ':' + tsn + ':' + convert(varchar,时长)
			from (
				select *,row_number() over(order by (case when tn=科目 then 1 else 0 end),用时,tn,tsn) nid  
				from (
					select master.dbo.RegexMatch(match,'[^:]+') tn
						,master.dbo.RegexMatch(match,'(?<=:)\d+(?=:)') tsn
						,convert(int,master.dbo.RegexMatch(match,'(?<=:)\d+(?=$)')) 用时
					from master.dbo.RegexMatches(sc,'([^;:]+):(\d+):(\d+)')
				) a
			) a
			where nid<=场次
			for xml path('')
		),1,1,'') c
	) c
)

select tn 科目,tsn,isnull(语文,0) 语文 ,isnull(数学,0) 数学,isnull(英语,0) 英语,isnull(物理,0) 物理
	,isnull(道法,0) 道法,isnull(历史,0) 历史,isnull(化学,0) 化学
	,isnull(语文,0) + isnull(数学,0) + isnull(英语,0) + isnull(物理,0) + isnull(道法,0) + isnull(历史,0) + isnull(化学,0) 总用时
from (
	select 科目,b.* 
	from sc
	cross apply (
		select master.dbo.RegexMatch(match,'[^:]+') tn
			,master.dbo.RegexMatch(match,'(?<=:)\d+(?=:)') tsn
			,convert(int,master.dbo.RegexMatch(match,'(?<=:)\d+(?=$)')) 用时
		from master.dbo.RegexMatches(curr,'([^;:]+):(\d+):(\d+)')
	) b
) a
pivot(max(用时) for 科目 in (语文,英语,数学,物理,道法,历史,化学)) p
order by 1 desc,2
----------------------
科目  tsn        语文         数学         英语         物理        道法         历史         化学         总用时
---- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
语文   1           0           100         100         0           0           50          0           250
语文   2           0           100         100         0           0           0           0           200
语文   3           0           100         100         0           0           0           0           200
语文   4           0           100         100         0           0           0           0           200
英语   1           0           100         0           60          60          0           0           220
英语   2           0           100         0           60          60          0           0           220
英语   3           0           100         0           0           60          0           50          210
英语   4           0           100         0           0           60          0           50          210
英语   5           0           100         0           0           60          0           50          210
英语   6           0           100         0           0           60          0           50          210
物理   1           0           100         100         0           0           50          0           250
物理   2           0           100         100         0           0           50          0           250
物理   3           0           100         100         0           0           50          0           250
体育   1           0           100         100         0           0           50          0           250
体育   2           0           100         100         0           0           50          0           250
数学   1           120         0           0           60          0           0           50          230
数学   2           120         0           0           60          0           0           50          230
数学   3           120         0           0           60          0           50          0           230
数学   4           120         0           0           60          0           50          0           230
数学   5           0           0           100         60          60          0           0           220
生物   1           120         0           100         0           0           0           0           220
生物   2           120         0           0           0           60          0           50          230
生物   3           120         0           0           60          0           0           50          230
历史   1           120         0           100         0           0           0           0           220
历史   2           120         0           100         0           0           0           0           220
历史   3           120         0           100         0           0           0           0           220
道法   1           120         100         0           0           0           0           0           220
道法   2           120         0           100         0           0           0           0           220
道法   3           120         0           100         0           0           0           0           220

(29 行受影响)

由于每个递归里,使用了两个 cross ,所以,暂时把 order by newid 去掉了,否则两个 cross 里的结果会造成不一致,不过,结果总算出来了。

小结

这一次老顾也是拼尽全力去搞了次数据库查询指令实现,嗯也是闲的。好在经过这一次实现,发现了以前很多没有注意到的细节,并且,最终解决掉了一些限制。

最后 sc cte 表里的 cross 其实可以合并成1个切割数据,然后再附加两个 cross 就可以使用 newid() 进行随机排序了,不过老顾折腾这半天才实现出来,暂时真的没心力去继续搞了。

说实话,这个需求,用代码来实现其实很简单,不管是我已经用 python 实现的,还是其他编程语言,都不复杂, 那怕是 mssql 本身,加上流程控制,也很简单的。老顾是执拗劲上来了,非要用查询指令本身进行实现。大家大可不必学老顾这么拧哦。

在这里插入图片描述

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

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

相关文章

网咯通信基础 - 数据交换方式

文章目录 1 概述2 分类2.1 电路交换2.2 报文交换2.3 分组交换 1 概述 2 分类 2.1 电路交换 图示&#xff1a;发送方和接收方用一系列链路直接连通数据传输划分&#xff1a;电路建立、数据传输 和 电路拆除 3 个过程原理&#xff1a;当交换机收到一个呼叫后就会在网络中寻找一…

机器学习之SVM分类器介绍——核函数、SVM分类器的使用

系类文章目录 机器学习算法——KD树算法介绍以及案例介绍 机器学习的一些常见算法介绍【线性回归&#xff0c;岭回归&#xff0c;套索回归&#xff0c;弹性网络】 文章目录 一、SVM支持向量机介绍 1.1、SVM介绍 1.2、几种核函数简介 a、sigmoid核函数 b、非线性SVM与核函…

运行时内存数据区之堆(一)

堆&#xff08;Heap&#xff09; 堆的核心概述 一个JVM实例只存在一个堆内存&#xff0c;堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建&#xff0c;其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。《Java虚拟机规范》规定…

“行泊舱”+出海全面发力,这家ADAS厂商跑出规模化“新速度”

进入2023年&#xff0c;智能汽车市场已经由纯技术驱动迈入了市场驱动的新周期&#xff0c;接下来的市场竞争比拼的重点将是真正的规模化普及。 《高工智能汽车研究院》认为&#xff0c;中国乘用车市场已经来到了L2普及、L2冲刺发力以及L3/L4小规模落地的并行发展周期。对于智能…

AI工具应该成为开发者的帮手

前言 作为一名大前端开发者来说&#xff0c;最看重的就是web3.0的进一步发展以及推广速度。说到web3.0就不得不说元宇宙&#xff0c;就拿今年的支付宝集五福活动&#xff0c;就用到了元宇宙的功能&#xff1a;福气乐园&#xff0c;这也是为什么元宇宙越来越成为触手可及的&…

Ubuntu 自带截图工具快捷键盘

PrtSc – 获取整个屏幕的截图并保存到 Pictures 目录。 Shift PrtSc – 获取屏幕的某个区域截图并保存到 Pictures 目录。 Alt PrtSc –获取当前窗口的截图并保存到 Pictures 目录。 Ctrl PrtSc – 获取整个屏幕的截图并存放到剪贴板。 Shift Ctrl PrtSc – 获取屏幕的某个…

嚣张|微软“光明正大”要数据,Access用户怎么办?WPS笑了

微软“光明正大”要数据 继微软“数据门”事件之后&#xff0c;微软又开始出“幺蛾子”了。 最近&#xff0c;电脑是windows11会提示&#xff1a;你的数据将在所在国家或地区之外进行处理。 最让用户感到霸道的是&#xff0c;竟然没有“跳过”按钮。只能点击继续&#xff0c;…

MyBatis学习总结(五)逆向工程

MyBatis学习总结&#xff08;五&#xff09;逆向工程 一、MyBatis的逆向工程 正向工程&#xff1a;先创建Java实体类&#xff0c;由框架负责根据实体类生成数据库表。 Hibernate是支持正向工 程的。逆向工程&#xff1a;先创建数据库表&#xff0c;由框架负责根据数据库表&am…

操作系统(四)——文件管理

文章目录 第四章 文件管理[4.1.1] 初识文件管理&#xff08;一&#xff09;文件的属性&#xff08;二&#xff09;文件内部的数据应该怎样组织起来&#xff08;三&#xff09;文件之间应该怎样组织起来&#xff08;四&#xff09;操作系统应该向上提供哪些功能&#xff08;五&a…

geoserver发布矢量切片服务

以前切片服务只支持栅格切片&#xff0c;后来技术更新发展&#xff0c;也支持矢量切片了&#xff0c;好处是不失真&#xff0c;而且很快&#xff0c;geoserver本身也不支持这种服务&#xff0c;但是他提供了一个插件&#xff0c;去官网下载下来&#xff0c;放到lib文件夹里&…

2023/4/16周报

目录 摘要 论文阅读 1、标题和现存问题 2、模型构建 3、方法实现 4、实验结果 5、扩展实验 深度学习 1、GNN特点 2、原理 3、GNN数据处理 总结 摘要 本周在论文阅读上&#xff0c;阅读了一篇基于图神经网络的技术识别链接预测方研究论文。通过融合了时间特征的专利…

镭速Raysync v6.6.8.0版本发布

最近镭速发布了v6.6.8.0版本&#xff0c;已经发布上线了。主要更新内容有服务器下发任务支持指定客户端&#xff0c;客户端增加日志清理和日志压缩&#xff0c;自动删除源文件保持源目录结构&#xff0c;支持将文件投递给其他成员等功能&#xff0c;详细的更新内容如下&#xf…

ELK日志收集告警

elastic stack elastic search 日志持久化filebeats 日志收集kibana 日志展示elaticalert 日志告警 elastalert官网Elastic Observability APM 指标监控 java-agent 基于logback根据level进行日志的切分聚合宿主机上安装filebeats 配置inputs插件配置采集路径配置多行匹配规则…

第五天 CUDA Runtime API

图中可以看到&#xff0c;Runtime API 是基于 Driver API 之上开发的一套 APIDriver API 基本都是 cu 开头的&#xff0c;而Runtime API 基本都是以 cuda 开头的 Runtime API 概述 CUDA Runtime是封装了CUDA Driver的高级别更友好的APIcudaruntime需要引入cudart这个so文件上下…

系统分析师案例题【系统设计篇(Web开发)】

目录 1、Web综合知识考察 2、单台机器到数据库与Web服务器分离 3、应用服务器集群 3.1 负载均衡 3.2 Session 共享机制 3.3 有状态和无状态 4、持久化技术 5、数据库读写分离化 6、缓存技术 7、Redis 7.1 Redis集群切片与分片 7.2 Redis分布式存储 7.3 Redis数据类…

Windows使用ngrok实现本地程序外网域名访问-详细教程

需求分析 同事要求在外网以域名的方式&#xff0c;访问我本地的程序&#xff0c;故需要将localhost:8080映射到外网&#xff0c;让同事可以通过&#xff1a;域名/接口 的形式访问到本地程序的功能接口 安装 进入官网&#xff1a;https://ngrok.com/ 点击顶部Download&#x…

十三、市场活动:全部导出

功能需求&#xff1a;批量导出市场活动 用户在市场活动主页面,点击"批量导出"按钮,把所有市场活动生成一个excel文件,弹出文件下载的对话框; 用户选择要保存的目录,完成导出市场活动的功能. *导出成功之后,页面不刷新 功能分析&#xff1a;导出市场活动 1.给批量…

打卡Android学习—Compose 布局 和 修饰符

我们将通过解释 布局 和 修饰符 的基础知识 来开始我们的旅程。我们将介绍他们是如何协同工作的&#xff0c;Compose 提供了什么开箱即用的API&#xff0c;以及如何漂亮地设计您的UI 布局——因为 Compose 中的几乎所有内容都是布局 布局是Compose UI的核心组件&#xff0c;使…

( “树” 之 BST) 669. 修剪二叉搜索树 ——【Leetcode每日一题】

二叉查找树&#xff08;BST&#xff09;&#xff1a;根节点大于等于左子树所有节点&#xff0c;小于等于右子树所有节点。 二叉查找树中序遍历有序。 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&…

机器学习——核函数

问&#xff1a;已知三维空间中的两个样本点分别为&#xff08;2&#xff0c;4&#xff0c;5)和(1&#xff0c;2&#xff0c;3)&#xff0c;定义核函数表达式为:试计算这两个样本点映射到十维空间后的 答&#xff1a;首先计算两个样本点的平方内积2*14*25*325 然后代入核函数表…