如题,今天在面试中遇到的问题
如题,今天在面试中遇到的问题
|
wy315700May 6, 2015
1
以服务器时间为准吧。
|
|
b821025551bMay 6, 2015
2
客户端显示只做参考,真正校验的是服务器时间
|
|
3
@wy315700 不是,秒杀是要以客户在浏览器端点击的时间顺序决定谁抢到吧,怎么获取那个精确时间,要知道客户是可以修改本地时间的
|
|
myywinMay 6, 2015
4
@paranoidboy 以服务器接收到客户端请求的时间为准
|
|
feiyuanqiuMay 6, 2015
5
@paranoidboy 想多了吧...
秒杀请求到达服务器的时候,检查商品是否已经到了秒杀开始时间,没到就返回错误 到了时间就检查商品的秒杀状态,如果商品没有被秒杀那这个客户就抢到了,然后更新商品的秒杀状态 之后的请求来的时候检查商品状态已经被秒杀了,自然也就秒不到了 |
|
learnshareMay 6, 2015
6
即使本地时间修改过,服务端也会验证是否到时
|
|
wy315700May 6, 2015
7
|
|
mconeMay 6, 2015
8
> 秒杀是要以客户在浏览器端点击的时间顺序决定谁抢到吧
洗洗睡吧,这样的话如果我抓包模仿一下数据交互协议,我就可以随心所欲了? |
|
PerryMay 6, 2015 via iPhone
9
楼主没做过后端么?
|
|
bigdudeMay 6, 2015
10
模版输出的时候带上timedelta,就是服务器端秒杀时间-当前时间的差,然后用setInterval倒计时。如果本地用了变速齿轮,好像也不行啊。
关键还是得服务器端验证请求。 |
|
superliangMay 6, 2015
11
话说后端很难获得客户的时间吧,都是按照服务器时间为准的。前端显示时间也是以服务器时间为准然后进行倒计时的,难道忘了:永远不要相信客户端提交的数据
|
|
a591826944May 6, 2015
12
LZ 想多了
|
|
slixurdMay 6, 2015
13
就算是服务器返回时间差也不行吧
如果一个请求在高并发下返回花了2秒,你原本返回的时间差就和正确时间不同了 所以还是不停发请求进队列,以服务器时间为准比较靠谱。 |
|
9hillsMay 6, 2015
14
服务端设一个FIFO队列,发的请求如果在秒杀开始时间之前,就拒绝,否则扔到FIFO队列中
秒杀开始后,从FIFO队列中顺序取出请求处理即可。 |
|
15
不过其实你做成随机选的。。反正用户也发现不了,反而更公平
|
|
hanwujibabyMay 6, 2015
17
好奇怪的问题。我想知道原题是什么样的??不知道LZ能否告知?我不太清楚后端为什么要知道前端的时间,因为完全没有必要啊。一般来说的话这样的秒杀都是在后端用队列做的。FIFO,逐一处理。
|
|
18
来自网友akunamotata 的回答:
客户端时间是绝对不能用的,一般通过ajax获取服务器时间作为秒杀时间吧,或者建立长连接判断时间。 还有一种思路是使用客户端时间,但是每次进入页面的时候去服务器校对时间,每隔一定时间校对一次。 |
|
19
@hanwujibaby 老实说我也不知道怎么描述原题,是今天在阿里巴巴实习二面遇到的,提问者是玉伯,也许是我理解有误
|
|
pandada8May 6, 2015
20
后端直接看请求到达的时间,不管前端(((
|
|
loveuqianMay 6, 2015
22
做到完全精确同步基本上是没可能吧
就算局域网内也是有一点点点点点点点点点的时差的 为了防止作弊,只能在服务端再做一次时间验证 |
|
lalalanetMay 20, 2015
23
同步毛线啊..... 第一次请求的时候给个剩余毫秒,客户端自己setTimeout去吧
|