讨论/面试考题/蚂蚁金服在线笔试题,竞拍系统/
蚂蚁金服在线笔试题,竞拍系统

问题描述:

有一个车牌拍卖系统,参与竞拍的人每个人需要拍出一个价格,
但是竞拍人,不能连续出价,必须有人出价以后自己才能出价,否则无效。
并且每次竞拍价格区间在1-200元以内,请写一段代码,
模拟多人竞拍1000次以后,谁获得了基础价格是4000元的车牌.

欢迎写下各位的答案

展开讨论
liaoyuanyekong发起于 2020-04-10
共 4 个讨论

这是一道看似简单,实则可以在很多方面扩展的题,但是我认为这不是一道动态规划题,即不属于那种先后手博弈问题。

我先抛砖引玉,贴下我的简单解答吧,简单说就是模拟多线程下,价格、竞拍次数、连续竞拍几个状态的同步。

直接贴图

Screen Shot 2020-04-11 at 3.29.24 AM.png

Screen Shot 2020-04-11 at 3.32.40 AM.png

然后是简陋的代码

Screen Shot 2020-04-11 at 10.31.22 AM.png

6

一个多线程的模拟场景,不是什么博弈

一个锁🔒
两个CAS price 竞拍count
一个volatile prev竞拍id

我感觉这道题要关注的是高并发下的串行处理,所以如果我写的话会这样处理:
1、判断价格是否可能会被接受,如果价格低于当前价格,直接返回出价失败;
2、判断是否已经到了1000,到了返回拍卖结束;
3、获取锁
4、再次判断价格是否在1~200之间,如果不是,释放锁、返回出价失败;
5、判断是否到了1000,如果已经过了,返回拍卖结束;
6、更新最新价、累加拍卖次数、如果正好是第1000个人,返回竞拍成功,否则返回出价成功。

分为自己和其他人,可以简化为1000张纸牌博弈比较大小的问题,递归方法分先手和后手