PHP题目-竞价功能

耐风 发布于 2014/07/31 15:42
阅读 294
收藏 1
【PHP题目】:
1:[基本价格](固定)
2:[加价额度](按次自动加价,当自己排名是第一时,暂停加价!当别人的加价又超过自己时继续加价,当达到加价上限时,停止加价!)
3:[加价上限]
4:[排名](根据每次的价格变动来排名)
A客户:
设置->[加价额度=5] ->[加价上限=60]
B客户:
设置->[加价额度=6] ->[加价上限=80]
C客户:
设置->[加价额度=7] ->[加价上限=70]
【问题】:
我想请问一下这种功能该怎么做?
我主要想问的实现的方式,而不是实现的逻辑!
【我想的实现方式】:
1.当每个客户设置一次 竞价时,发起一个进程,然后隔一段时间监测一次是否 需要进行加价
(感觉这种方式非常不科学,一万个客户,服务器肯定挂)
2.当有任何一个客户主动发起请求时,一次性扫描全部客户,进行逻辑处理加价!但是这样加价,感觉就违背了自动加价的功能!(而且每次加价的时候不就都是同一个时间,略迷茫!以下附图)
加载中
0
inuxor
inuxor

这个题目就有问题,

前提一:只要任何一个用户不是第一,就会触发一次加价,该加价行为是递归的!

前提二:第一不加价,由前提一可知,这一条基本无效,因为几乎是瞬间第一名就会被取代

前提三:有封顶,每个用户的加价额度和封顶值却各有不同,可想而知,最终胜出的必然是设置封顶值最高的那一位,他的最终出价是第二名的封顶值多一点。。。。。很快大家就会发现,在别人的封顶值不可知的前提下,把自己的加价步长设置为1是最合适的。。。。


如果我对题目的理解是对的,这样竞价还有啥意思啊,直接算出来就可以了。


耐风
耐风
道出了 我的心声啊! 我觉得 我们产品 设计 这样 完全就是 有问题! 那如果 这个 自动 加价 换成 每 五分钟 加 一次 这样 效果就 不同了! 但是 我想知道的是 如果 每个 用户 设置 后 每五分钟 执行一次,如何 实现?用cli 来实现?感觉一个用户设置一次自动加价我就得挂一条 进程,!这样 1万个用户不是死机了。。求指教! 【或者是有什么 更好的建议 !在此谢过】
酒逍遥
酒逍遥
正解....当所有人设置好之后...价格会瞬间变成价格上限最高的那人设置的价格
0
alex_001
alex_001
钩子,迭代,A用户参加某次竞价时,判断是否是第一个参加竞价的,若是价格等于基础价格,等B第二人参加竞价时判断B的价格是否此次竞价中最大,若不是b自动加价,b加价后钩子判断a的上限是否到达不是,a加价后,钩子判断b,如此迭代,到最上限时停止
耐风
耐风
谢 @alex_001的回复,其实这道题如 1楼所言, 题目本身有问题,如果是这样子 就没有 加价的意义了,谁加价上限 最高 谁 【马上】就是第一! 我更想知道的是有没有更好的处理方式:比如 每次加价 间隔 5分钟 执行!这样子 如何实现!用什么方式 更科学 !或者有什么更好的建议 再次谢过!
0
酒逍遥
酒逍遥

题目本身逻辑 是有问题的...

按次自动加价,当自己排名是第一时,暂停加价!当别人的加价又超过自己时继续加价,当达到加价上限时,停止加价

楼主自己想想 当有两个人竞价时,就是一个循环, A 出价 B出更高的价  A 自动加价 B自动加价

一直循环到 价格达到A 或者B的上限..

所以直接计算出每个参与竞价的人价格上限即可.

酒逍遥
酒逍遥
回复 @耐风 : 这个也简单啊...当有用户浏览这个页面时一次性把加价的数据算出来插入就行.时间就按5分钟间隔来设置.也就是时间是按算出来的时间插入不是按实际的时间插入
耐风
耐风
回复 @酒逍遥 : 也就是说 比如现在是 5:50分钟第一个用户设置后 就是 5:55分开始执行。然后如果第二个用户 5:58的时候也设置了那就是6:03分开始执行!同时执行类似这种意思
耐风
耐风
回复 @酒逍遥 : 我的意思是每个人设置了 自动加价后,过5分钟就开始执行加价 逻辑,每个人5分钟是并发的
酒逍遥
酒逍遥
回复 @耐风 : 你的意思是每个人加价的时间间隔限制为5分钟?
耐风
耐风
是啊。。完全正解,但是如果 换成 每 5分钟 加一下 意义就不一样了! 那如果每 5分钟 执行一次!PHP如何实现!假如有 1万个用户 用什么来实现!感谢
0
JPer
JPer
每次动作跑队列处理啊;
JPer
JPer
回复 @耐风 : 时时处理啊;不用定时啊;
耐风
耐风
回复 @开源内裤 : 可是如果每五分钟 取一个这样也不科学!那还不如每五分钟全部 跑一次?不知道有没有更好的方法!求大神详解
耐风
耐风
回复 @开源内裤 : 你的意思是,一个队列,存所有的竞拍用户ID, 然后每5分钟 取 一个 出来执行?
JPer
JPer
回复 @耐风 : 用户竞拍就放队列,等待处理,然后给他一个结果;
耐风
耐风
什么意思? 所有 动作 放在 队列 里面 然后一次次 执行?
返回顶部
顶部