一道面试题,连续输入错误5次(转帖)

面试某支付网站:之前还算比较谈得来,都是些项目相关的问题,最后,面试官和蔼地问我这样一个问题:很多银行网站都有这样的功能,一个小时内不能连续输入5次以上错误密码,如果让你去做,如何实现这样的功能。

问题分析:“一个小时内”是这个题比较“阴险”的地方,嘿嘿~我确认了面试官的意思是

1:错误:9:00
2:错误:9:10
3:错误:9:11
4:错误:9:40
5:错误:9:55

这时10点之前输入密码以后都不再去验证~
但是10:10分以后还可以验证一次~

这时就不能单纯地记录次数和过期时间,我的第一反应是每次输入错误都要记录,然后就蒙了~太紧张鸟~ =。=
当时回答的不怎么好,有点丢人~~

下午回到实验室,把思路整理一下

数据库db肯定是要保存每次验证失败的时间了,至少要一个uid和timestamp
Memcached中保存的key应该是用户id,值的话我们想了这样一个结构
“循环队列”(5个节点)

1:错误:9:00
2:错误:9:10
3:错误:9:11
4:错误:9:40
5:错误:9:55

当用户登录时,我们去判断队列是否满了,如果没满,继续登录验证;
如果满了就拿出队列的头,判断是否时间够了一个小时的时间差。如果时间够一个小时了,继续登录验证;否则,直接返回

这就是我设计的结构,使用memcache以后,应该可以支持一定的并发量,欢迎大家拍砖

发表评论

电子邮件地址不会被公开。 必填项已用*标注