【发布时间】:2015-06-24 09:10:37
【问题描述】:
我正在尝试解决一个简单的问题,但目前我想不出更好的解决方案。我正在测试一个没有记录的 API。
有一个用于获取对象的 ID,它有一个最小值和最大值,中间缺少随机值。我正在尝试测试我收到的随机对象的响应,但要找到对象,我需要有有效的 ID。
测试随机数并希望我得到一个对象会非常低效。我能做的最好的就是找到一个范围,在该范围之间获取一个随机数,并在进行测试之前检查它是否存在。
数据库中所有 ID 的示例列表可能如下所示:
[1005, 25984, 25986, 29587, 30000, ...]
假设从一个值到另一个值的偏差永远不会超过C,例如从第一个值到下一个值,差异永远不会大于预定义的常数,如果仅给定范围内的一个值,您将如何计算范围的最小值/最大值?
从给定值开始循环直到找到最后一个值是可怕的,但这就是以前的开发人员实现的方式。以下是或多或少涵盖了它们的工作的伪代码。
// this can be any valid object ID from the database
// assuming the ID's in the database are [1005, 25984, 25986, 29587, 30000]
// "i" could be any one of these values
var i = givenPredefinedObjectId;
var deviation = 100;
// objectWithIdExists() is going to lookup an object with the ID "i" in the database
// if there is no object with the ID "i" , it will return false
// otherwise the object will get tested and return true
while(objectWithIdExists(i)){
i++;
}
for(i; i < i+deviation; i++){
if(objectWithIdExists(i)){
goto while loop;
}
}
endPoint = i - deviation;
假设除了您可以检查它们是否存在并且给您一个有效值(没有包含所有可能 ID 的数组,这只是一个示例)之外,您不知道可能的值,您将如何找到 min/最大值?
【问题讨论】:
-
你能在你的问题中添加一些例子吗?例如,可能的
givenPredefinedObjectId和可能的结果是什么? -
好的,例如如果
i被初始化为25986或任何其他存在的ID,你需要找到1005和30000吗?所以您正在寻找最小和最大的 ID? -
是的,先生!但是在您手动调用
objectWithIdExists(1005)之前,您并不知道这些值是否存在。除了给您的唯一 ID,您没有来自数据库的任何 ID。我的目标是找到端点并在最小值和最大值之间生成一个随机数,然后在数据库中检查以供以后测试。为此,我必须在最少的数据库调用中找到最小值和最大值。 -
ID 本质上是随机数,但它们包含在一个范围内。我能做的最好的就是在最小和最大可能值之间生成一个随机数,并检查它是否是数据库中的一个对象。
-
哼。我懂了。如果您尝试检索 ID 大于数据库中存储的最大 ID 的不存在的对象,是否有特殊的错误消息,或者没有办法区分它?例如。如果您尝试查找 40000,它会告诉您它超出范围还是给您与尝试查找 25985 相同的错误?