一道面试题:如何防止异步请求的重复提交_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 一道面试题:如何防止异步请求的重复提交

一道面试题:如何防止异步请求的重复提交

 2014/11/14 9:45:58  Tong Zeng  程序员俱乐部  我要评论(0)
  • 摘要:今天面试时考官问了一道题,以下是大致的回忆:问题大意:如果点击一个按钮发送异步请求,如何防止短时间内用户重复提交,从而造成数据覆盖等问题:我回答的解决方法有:1.提交后disable掉按钮,再次点击文本框时enable按钮面试官追问,那么如果用户还是快速地点击文本框,还是能快速地提交,2.我想到了设置一个缓冲时间,例如200ms,200ms内的重复请求忽略,只执行最后一次的请求。我说这会影响到所有的用户的每次请求都有延迟,然后继续想:3.所以想到提交后disable
  • 标签:面试 面试题 异步

今天面试时考官问了一道题,以下是大致的回忆:

 

问题大意: 如果点击一个按钮发送异步请求,如何防止短时间内用户重复提交,从而造成数据覆盖等问题:

我回答的解决方法有:

1. 提交后disable掉按钮,再次点击文本框时enable按钮

 

面试官追问,那么如果用户还是快速地点击文本框,还是能快速地提交,

 

2. 我想到了设置一个缓冲时间,例如200ms,200ms内的重复请求忽略,只执行最后一次的请求。

我说这会影响到所有的用户的每次请求都有延迟,然后继续想:

 

3. 所以想到提交后disable,然后settimeinterval,每隔一定时间,例如一秒钟,如果是disable的话那么enable

面试官指出,那么这个计时器就一直需要在运行咯,是啊,这样也是在消耗, (正在写博客的时候我在想能否设置一个计数器,如果连续好几次都是disable状态的话,可以移除定时器)

 

于是继续想:

4. 我想对每个异步请求判断下IP,如果是短时间内快速的重复提交,设定一个阈值,超过则判断为spam,把ip地址ban掉或者忽略请求,但这个缺陷是对每一个请求都进行了额外操作。

然后面试官说这要后端配合,如果是前端呢?

5. 我想到了设置hash值,发异步请求时带上一个hash值,如果服务器端在处理上一个请求还没有完成时又来了新请求,那么可以丢弃,继续等待返回,这样不会覆盖数据。

然后发现,有走到需要后端配合了,面试官继续问,如果不要后端配合,如果仅仅是前端怎么做,

6. 我只好想到发送异步请求时候带上时间戳/hash值,返回数据的时候也带上时间戳/hash值,然后看是不是最近发送的那个请求,是则渲染,否则丢弃。

 

但是面试官在问有没有更好的方法,

我当时如实告诉面试官想不出来了,很抱歉,

 

刚才我看了下 xhr 对象的 API,发现有 abort() 方法,能立即取消请求,这个当然方便,每次保留上一次提交的xhr对象引用,下次点击时先abort() 上一个xhr请求,再重新发送请求,但是当时不知道这个方法,其实自己有想到是不是 xhr对象直接有取消请求的方法,但转而一想面试不可能这么简单吧,然后我不确定这个方法是否存在。所以没回答这个方法。

 

当然不知道面试官希望我能回答出来的更好方法是什么,所以请有看到的朋友能不吝赐教,谢谢。

 

发表评论
用户名: 匿名