一种生成无序题目队列的方法及设备转让专利

申请号 : CN201910406395.8

文献号 : CN110096523B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 林永发杨子国周健兴

申请人 : 广州方硅信息技术有限公司

摘要 :

本申请提供了一种生成无序题目队列的方法,包括:每隔周期D从题目数据库中获取N道题目,将N道题目分入i个队列中;根据用户标识确定用户题目队列;将用户题目队列中的题目进行输出;其中,用户题目队列为i个队列中的第j个队列,j为用户标识对i的取模运算结果。本申请通过每隔周期D从题目数据库中获取N道题目,避免了多次与题目数据库的交互,提高用户题目队列生成效率,从而提高并发量,同时取模运算计算用户题目队列,确保用户题目队列的随机性,选项的随机性,从而一定程度上对答题业务的公平性。

权利要求 :

1.一种生成无序题目队列的方法,其特征在于,包括:每隔周期D从题目数据库中获取N道题目,将N道题目分入i个队列中;

根据用户标识确定用户题目队列;

将用户题目队列中的题目进行输出;

其中,用户题目队列为i个队列中的第j个队列,j为用户标识对i的取模运算结果,所述用户标识具体为用户UID;

所述将N道题目分入i个队列中具体包括:计算队列数量i,i为取得的题目数量N对每个队列中预设题目数量M的取商运算结果;

将N道题目分入i个队列中,每个队列有M道题目;

将用户题目队列中的题目进行输出之后还包括:检测用户题目队列中的题目是否输出完毕,若是,则对用户标识的数值加一,并返回执行根据用户标识确定用户题目队列步骤。

2.根据权利要求1所述的一种生成无序题目队列的方法,其特征在于,每隔周期D从题目数据库中获取N道题目具体为:每隔周期D从题目数据库中通过rand()方法获取无序的N道题目。

3.根据权利要求1所述的一种生成无序题目队列的方法,其特征在于,根据用户标识确定用户题目队列之后还包括:

通过高纳德置乱算法对用户题目队列中的题目进行无序化。

4.根据权利要求1所述的一种生成无序题目队列的方法,其特征在于,根据用户标识确定用户题目队列之后还包括:

通过高纳德置乱算法对用户题目队列中的题目的选项进行无序化。

5.一种生成无序题目队列的设备,其特征在于,所述设备包括处理器以及存储器:所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;

所述处理器用于根据所述程序代码中的指令执行权利要求1‑4任一项所述的生成无序题目队列的方法。

6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行权利要求1‑4任一项所述的生成无序题目队列的方法。

说明书 :

一种生成无序题目队列的方法及设备

技术领域

[0001] 本申请涉及互联网技术领域,尤其涉及一种生成无序题目队列的方法及设备。

背景技术

[0002] 网上答题游戏一直是互联网用户热衷的游戏之一,答题游戏不仅能激发人们对知识的兴趣,还能锻炼人们的脑力,是健康有益的益智游戏。答题游戏可存在于小程序、聊天
软件、手游、网页等。
[0003] 答题玩法可提高用户的活跃率,增加用户粘性,要求对每个用户每天产生的题目队列具有随机性和不重复性的要求、并且在高并发的情况下不影响生成效率的硬性要求。
[0004] 现在有的快速产生随机的题目队列,会用到关系型数据库的题目id,基本上都是查询max(id)*rand()或者order by rand()来随机获取数据,这种方案在题库量大时,执
行效率非常低,因为rand()放在order by子句中会被执行多次,自然效率及很低。
[0005] 再有改进的方法就是在order by rand()的基础上,加入对产生的随机数进行join操作,有提高查询的效率,但当用户量大,每个用户都对RDBMS进行操作进,多次与
RDBMS进行交互,执行效率也会瓶颈。

发明内容

[0006] 本申请提供了一种生成无序题目队列的方法及设备,用于解决目前技术执行效率低的技术问题。
[0007] 有鉴于此,本申请第一方面提供了一种生成无序题目队列的方法,包括:
[0008] 每隔周期D从题目数据库中获取N道题目,将N道题目分入i个队列中;
[0009] 根据用户标识确定用户题目队列;
[0010] 将用户题目队列中的题目进行输出;
[0011] 其中,用户题目队列为i个队列中的第j个队列,j为用户标识对i的取模运算结果。
[0012] 优选地,所述将N道题目分入i个队列中具体包括:
[0013] 计算队列数量i,i为取得的题目数量N对每个队列中预设题目数量M的取商运算结果;
[0014] 将N道题目分入i个队列中,每个队列有M道题目。
[0015] 优选地,每隔周期D从题目数据库中获取N道题目具体为:
[0016] 每隔周期D从题目数据库中通过rand()方法获取无序的N道题目。
[0017] 优选地,所述用户标识具体为用户UID。
[0018] 优选地,根据用户标识确定用户题目队列之后还包括:
[0019] 通过高纳德置乱算法对用户题目队列中的题目进行无序化。
[0020] 优选地,根据用户标识确定用户题目队列之后还包括:
[0021] 通过高纳德置乱算法对用户题目队列中的题目的选项进行无序化。
[0022] 优选地,将用户题目队列中的题目进行输出之后还包括:
[0023] 检测用户题目队列中的题目是否输出完毕,若是,则对用户标识的数值加一,并返回执行根据用户标识确定用户题目队列步骤。
[0024] 本申请第二方面提供一种生成无序题目队列的设备,所述设备包括处理器以及存储器:
[0025] 所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
[0026] 所述处理器用于根据所述程序代码中的指令,执行如上述第一方面所述的生成无序题目队列的方法的步骤。
[0027] 本申请第三方面提供一种计算机可读存储介质,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行上述第一方面所述的方法。
[0028] 本申请第四方面提供一种包括指令的计算机程序产品,当其在计算机上运行时,使得所述计算机执行上述第一方面所述的方法。
[0029] 本申请第五方面提供一种生成无序题目队列的装置,包括:
[0030] 题目获取模块,用于每隔周期D从题目数据库中获取N道题目;
[0031] 队列分配模块,用于将N道题目分入i个队列中;
[0032] 用户题目队列确定模块,用于根据用户标识确定用户题目队列;
[0033] 输出模块,用于将用户题目队列中的题目进行输出;
[0034] 其中,用户题目队列为i个队列中的第j个队列,j为用户标识对i的取模运算结果。
[0035] 优选地,所述队列分配模块,具体用于:
[0036] 计算队列数量i,i为取得的题目数量N对每个队列中预设题目数量M的取商运算结果;
[0037] 将N道题目分入i个队列中,每个队列有M道题目。
[0038] 优选地,所述题目获取模块具体用于:
[0039] 每隔周期D从题目数据库中通过rand()方法获取无序的N道题目。
[0040] 优选地,所述用户标识具体为用户UID。
[0041] 优选地,还包括:
[0042] 题目无序化模块,用于通过高纳德置乱算法对用户题目队列中的题目进行无序化。
[0043] 优选地,还包括:
[0044] 题目选项无序化模块,用于通过高纳德置乱算法对用户题目队列中的题目的选项进行无序化。
[0045] 优选地,还包括:
[0046] 循环输出模块,用于检测用户题目队列中的题目是否输出完毕,若是,则对用户标识的数值加一,并返回执行用户题目队列确定模块。
[0047] 从以上技术方案可以看出,本申请具有以下优点:
[0048] 本申请提供了一种生成无序题目队列的方法,包括:每隔周期D从题目数据库中获取N道题目,将N道题目分入i个队列中;根据用户标识确定用户题目队列;将用户题目队列
中的题目进行输出;其中,用户题目队列为i个队列中的第j个队列,j为用户标识对i的取模
运算结果。本申请通过每隔周期D从题目数据库中获取N道题目,避免了多次与题目数据库
的交互,提高用户题目队列生成效率,从而提高并发量,同时取模运算计算用户题目队列,
确保用户题目队列的随机性,选项的随机性,从而一定程度上对答题业务的公平性。

附图说明

[0049] 为了更清楚地说明本申请实施例,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本
领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它
的附图。
[0050] 图1为本申请提供的一种生成无序题目队列的方法的一个实施例的示意图;
[0051] 图2为本申请提供的一种生成无序题目队列的方法的另一个实施例的示意图;
[0052] 图3为本申请提供的一种生成无序题目队列的装置的一个实施例的示意图。

具体实施方式

[0053] 本申请提供了一种生成无序题目队列的方法及设备,用于解决目前技术执行效率低的技术问题。
[0054] 为使得本申请的发明目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,下面所描述
的实施例仅仅是本申请一部分实施例,而非全部的实施例。基于本申请中的实施例,本领域
普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护
的范围。
[0055] 首先,在对本申请实施例进行描述的过程中出现的部分名词或者术语适用于如下解释:
[0056] Fisher–Yates:高纳德置乱算法,是生成一个有限集合的随机排列,复杂度为:O(n);
[0057] RDBMS:关系数据库管理系统;
[0058] UID:用户的系统的唯一标识;
[0059] Redis:是一个高效的key‑value存储系统;
[0060] 请参阅图1,本申请提供的一种生成无序题目队列的方法的一个实施例,包括:
[0061] 101、每隔周期D从题目数据库中获取N道题目,将N道题目分入i个队列中;
[0062] 比如,每隔一小时从题目数据库中获取10道题目,将10道题目分入3个队列;或者每隔10分钟从题目数据库中获取100道题目,将100道题目分入10个队列,具体的时间周期、
题目数量和队列数量根据实际情况设定,本申请不做具体限定。
[0063] 102、根据用户标识确定用户题目队列;
[0064] 其中,用户题目队列为i个队列中的第j个队列,j为用户标识对i的取模运算结果。第j个队列与用户标识高度对应,而用户标识有很高的唯一性,则可以确保第j个队列最大
程度随机相异,每个用户得到的题目队列都比较随机,选取的题目队列无序化程度大。
[0065] 103、将用户题目队列中的题目进行输出;
[0066] 进行输出可以是输出到显示屏进行展示,或者输出到软件APP的其他模块进行处理,即生成题目后的正常步骤。
[0067] 本申请提供的一种生成无序题目队列的方法可由服务器执行,也可以由用户设备执行。该用户设备可以为包括手机、平板电脑、个人数字助理(英文全称:Personal Digital 
Assistant,缩写:PDA)、销售终端(英文全称:Point of Sales,缩写:POS)、车载电脑等任意
终端设备。服务器可以是总服务器或专门用于处理题目的专用服务器。
[0068] 本申请通过每隔周期D从题目数据库中获取N道题目,避免了多次与题目数据库的交互,提高用户题目队列生成效率,从而提高并发量,同时取模运算计算用户题目队列,确
保用户题目队列的随机性,选项的随机性,从而一定程度上对答题业务的公平性。
[0069] 以上是对本申请提供的一种生成无序题目队列的方法的一个实施例进行详细的描述,以下将对本申请提供的一种生成无序题目队列的方法的另一个实施例进行详细的描
述。
[0070] 请参阅图2,本申请提供的一种生成无序题目队列的方法的另一个实施例,包括:
[0071] 201、每隔周期D从题目数据库中通过rand()方法获取无序的N道题目;
[0072] 其中,N是预先设定的,可根据实际情况设置,如10道题目、1000道题目等。
[0073] 题目数据库可以是RDBMS数据库,也可以是其他类型的数据库。
[0074] 202、计算队列数量i,i为取得的题目数量N对每个队列中预设题目数量M的取商运算结果;
[0075] i=N/M,比如N为10,M为3,则取商可以得到10/3=3,余1,则i=3。将题目进一步分成多个队列可以进一步进行细分,有利于生成随机队列。
[0076] 203、将N道题目分入i个队列中,每个队列有M道题目;
[0077] 分入方式可以是给每道题目添加标识,标记其为第几个队列,也可以是在队列关系数据库中描述第1个队列有哪几个题目,第2个队列有哪几个题目等方式,此处不再赘述。
[0078] i个队列可以表示为T1,T2…Ti‑1,Ti;
[0079] 若待分入的题目超出队列所能包含题目,则剩下的题目不分配。
[0080] 若将10道题目分入3个队列中,则每个队列有3道题目,还有一道题目未分配。未分配的题目可弃掉不用。
[0081] 每个队列中的题目数量M可以根据实际情况设定。
[0082] 204、根据用户标识确定用户题目队列;
[0083] 用户题目队列为i个队列中的第j个队列,j为用户标识对i的取模运算结果;
[0084] 由于j是取模结果,因此j小于i,不会出现j超出i的情况。
[0085] 用户标识具体可以为用户UID;也可以是用户编号等其他标识。当用户标识用的是用户UID时,由于用户UID的唯一性,根据用户UID确定的用户题目队列与用户高度绑定,能
够让用户取得的题目队列最大程度相异,达到最好的随机效果,生成无序的题目队列。
[0086] 205、通过高纳德置乱算法对用户题目队列中的题目进行无序化;
[0087] 高纳德置乱算法即Fisher–Yates算法。确保不同用户在同一队列产生的题目队列都随机的。
[0088] 206、通过高纳德置乱算法对用户题目队列中的题目的选项进行无序化;
[0089] 确保不同用户同一道题目的选项顺序也是随机的。达到更好的随机效果。
[0090] 本申请中的高纳德置乱算法仅是其中一种示例,也可以采用其他随机算法,将目标进行无序化皆可,本申请不做具体限定。
[0091] 207、将用户题目队列中的题目进行输出;
[0092] 进行输出可以是输出到显示屏进行显示,也可以是输出到其他APP软件模块待其进行处理。当输出到显示屏进行显示时,显示屏中显示出题目以及题目选项等内容。
[0093] 208、检测用户题目队列中的题目是否输出完毕,若是,则对用户标识的数值加一,并返回执行根据用户标识确定用户题目队列步骤(即返回执行步骤204);
[0094] 题目用完后,需要重新从i个队列中确定新的用户题目队列。
[0095] 用户题目队列可以表示为:TD‑j。表示D周期的第j个队列。同时可以有多个周期的题目队列存在的。周期D可以根据具体情况设定。
[0096] 本申请通过每隔周期D从题目数据库中获取N道题目,避免了多次与题目数据库的交互,提高用户题目队列生成效率,从而提高并发量,同时取模运算计算用户题目队列,确
保用户题目队列的随机性,选项的随机性,从而一定程度上对答题业务的公平性。一定程度
上规避答题作弊行为。
[0097] 以上是对本申请提供的一种生成无序题目队列的方法的另一个实施例进行详细的描述,以下将对本申请提供的一种生成无序题目队列的设备的一个实施例进行详细的描
述。
[0098] 本申请提供的一种生成无序题目队列的设备的一个实施例,设备包括处理器以及存储器:
[0099] 存储器用于存储程序代码,并将程序代码传输给处理器;
[0100] 处理器用于根据程序代码中的指令,执行如上述实施例的生成无序题目队列的方法的步骤。
[0101] 本申请提供的一种计算机可读存储介质的一个实施例,计算机可读存储介质用于存储程序代码,程序代码用于执行上述实施例的方法。
[0102] 本申请提供的一种包括指令的计算机程序产品的一个实施例,当其在计算机上运行时,使得计算机执行上述实施例的方法。
[0103] 以上是对本申请提供的一种生成无序题目队列的设备的一个实施例进行详细的描述,以下将对本申请提供的一种生成无序题目队列的装置的一个实施例进行详细的描
述。
[0104] 请参阅图3,本申请提供的一种生成无序题目队列的装置的一个实施例,包括:
[0105] 题目获取模块301,用于每隔周期D从题目数据库中获取N道题目;
[0106] 队列分配模块302,用于将N道题目分入i个队列中;
[0107] 用户题目队列确定模块303,用于根据用户标识确定用户题目队列;
[0108] 输出模块304,用于将用户题目队列中的题目进行输出;
[0109] 其中,用户题目队列为i个队列中的第j个队列,j为用户标识对i的取模运算结果。
[0110] 进一步地,所述队列分配模块,具体用于:
[0111] 计算队列数量i,i为取得的题目数量N对每个队列中预设题目数量M的取商运算结果;
[0112] 将N道题目分入i个队列中,每个队列有M道题目。
[0113] 进一步地,所述题目获取模块具体用于:
[0114] 每隔周期D从题目数据库中通过rand()方法获取无序的N道题目。
[0115] 进一步地,所述用户标识具体为用户UID。
[0116] 进一步地,还包括:
[0117] 题目无序化模块,用于通过高纳德置乱算法对用户题目队列中的题目进行无序化。
[0118] 进一步地,还包括:
[0119] 题目选项无序化模块,用于通过高纳德置乱算法对用户题目队列中的题目的选项进行无序化。
[0120] 进一步地,还包括:
[0121] 循环输出模块,用于检测用户题目队列中的题目是否输出完毕,若是,则对用户标识的数值加一,并返回执行用户题目队列确定模块。
[0122] 本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的
数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示
或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于
覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限
于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产
品或设备固有的其它步骤或单元。
[0123] 应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”
可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字
符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指
这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项
(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可
以是多个。
[0124] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0125] 在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的
划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件
可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或
讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦
合或通信连接,可以是电性,机械或其它的形式。
[0126] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目
的。
[0127] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单
元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0128] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上
或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式
体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机
设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全
部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑Only 
Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程
序代码的介质。
[0129] 以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前
述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些
修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。