今天胡乱看看到了一个很长时间的设计题,表达一下我的想法!有不足多多指教~~

设计任务:
1、最近总有人骚扰我们的投票模块,需要你来设计一个投票限制的东东
要求如下:
1)要求每个QQ号码(假设此QQ号码在UNIT32 内可以表示)10分钟这内只能投5票。
2)我们的用户很踊跃,平均每天要有2000万人左右通过此程序投票。
说明:
1)无需写代码,只需要图跟文字即可。
2)对于关键逻辑,请用图加代码表示出来,这也是对你文字表达能力的一个考验。
3)对你能想到的所有的边界条件列出来,这是对你逻辑思维全面与敏捷性的考验。
4)存储部分,尽你所能吧。如果,你需要一个自己设计的存储层,那么把这个存储层的实现,用文字+图片方式描述清楚,要是设计合理,你会获得华丽的奖分。

解:

1)核心问题:如何统计10分钟之内投了5票? 平均每天 2000万

>10分钟可以分解成 60*10 s

>每秒qps(请求量) 以二八分法 :(20000000*80%)/(86400*20%) ≈1000 (925) 按1000算 , Redis读写性能测试redis官网测试读写能到10万左右 redis 足够用了

2.如何和存

>10分钟以内就 设置成10分钟过期

>10分钟不能超过5次 10分钟以外就不用管了

>预估数据量:600*1000*5=300万 10分钟内数据量 300w左右(10分钟以前的都自动过期了)

>key值带上分钟和秒:比如:1234567891(QQ号) 123456789 + 当时的分秒 (0809)=1234567890809 ,10分钟以内 这个数字不会重复的

3.每次投票前

>计算 :keys 123456789*  返回多少个数据, 计算有多少个值  如果大于5个就返回 10分钟超过5次请等一会再投!

还有没有其他好的方法,有不足的地方请大家指正~~~~

时间: 2025-01-19 20:41:10

今天胡乱看看到了一个很长时间的设计题,表达一下我的想法!有不足多多指教~~的相关文章

为什么drop table的时候要在checking permissions花很长时间?

昨天,我drop一个表的时候在checking permissions花了20s+,这个时间花在哪里了呢?经常查找发现我的配置文件innodb_file_per_table=1的,innodb需要遍历LRU链表,并且丢弃属于这个表的表空间里面的页.如果innodb buffer pool很大的话,需要花费很长时间,并且当执行这个动作的时候table_cache的锁是不能被其他query语句持有的. 参考资料: https://www.percona.com/blog/2011/02/03/per

Springmvc+Hibernate在Eclipse启动Tomcat需要很长时间的解决方法

最近在学习SpringMvc开发,有一个提问困扰了很久,就是在Eclipse启动Tomcat需要很长时间,大概要1分多钟. 启动日志: 九月 08, 2016 8:59:01 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server version: Apache Tomcat/8.0.36 九月 08, 2016 8:59:01 下午 org.apache.catalina.startup.VersionLogger

MTK 开机黑屏很长时间

MT6735平台,可以开机,但是黑屏很长时间才看到开机图片. 查看串口LOG发现手机是正常运行的,也就是说LCM驱动没有异常,黑屏阶段也没有什么错误报出. 在MTK的FAQ上找到如下: [DESCRIPTION] 本FAQ只讨论开机过程中黑屏,不讨论花屏(可以参考刷).只讨论L/M版本(之前的KK/JB版本可以作为参考). 首先要看一下是否IPO开机,即在setting-->辅助功能-->不勾选"fast boot",如果不黑屏,说明是因为ipo这个过程中的问题,那么问题需

如果一个问题纠缠了你很长时间,那么你很有可能走进了一个死胡同。

很多时候,一个很简单的问题,往往会使得你毫无办法,然而在你一遍又一遍的检查了代码后, 发现没有任何问题时,却还是没能达到你预期的效果.这时候说明,你可能陷入了死胡同. 这时,你需要的时,完全摒弃之前的思路,跳出这层,问题会逐渐浮出水面的. 在今天上午,用jquery 的ajax去调用一个aciton,用到内部的架构(对这框架不熟悉), 需要配置action的url,在调用的时候,无论如何也不会去执行aciton,判断的标准就是 在后台会不会打出Log,结果是返回一堆乱七八糟的xml,急于把程序跳

一个自己思索很长时间的功能

一开始做项目的时候,涉及NGUI特别多,项目中需要非常多的Button以及和它对应的事件,通常的实现方式都是下面这种情况: 1 private void BtnClickHandler(GameObject go) 2 { 3 switch (go.name) 4 { 5 case "regist": 6 RegistUser(); 7 break; 8 case "forgetPwd": 9 ForGetPassWord(); 10 break; 11 case

一个困扰我很长时间的问题,趁着现在能描述清楚,赶紧写下来.以后时常回来看看这个帖子

这个问题想了好久,也试图几次描述出来给别人,但是每次似乎都描述的让人听不懂我的问题,今天看知乎,貌似有人和我想到了一起了.赶紧记录下: 问题其实概括起来挺简单:空间是什么?? 2个延伸: 1>如果有一个超级显微镜,能看到世界上最小的东西,比如什么原子,质子,那么原子和原子之间的那个空间是什么?? 2>比如一个二维空间的小人,或者说是一张纸.图中的黑色可以代表石头,蓝色代表河流,黄色代表太阳. 在小人看来,这三样东西占据了他的空间,无法逾越.但是从我们三维的视角看,这三样都只是占用了空间而非空间

UE对一个很长的字符按16位自动换行

① ②设定16个位 ③ ④结果

解决windows 10 桌面右键时菜单显示出来需要很长时间的问题

新装windows 10系统,在管理员用户下面右键菜单显示很快,但是在另外一个用户下面,右键菜单显示要等待2秒甚至更长,因为之前已经更新过显卡驱动,所以排除旧显卡驱动可能造成的影响.因为windows 时右键菜单都是Exploer上的shellExtension,所以问题可能在这里,当然也可能有另外一个问题,就是UAC(但是UAC是系统自带功能,一般不会出问题,我们先一步步排除问题点). youtube 上有个视频叫slow right click on windows 10 fix ,解决的是

iOS开发中,某些耽误我很长时间的问题(持续更新...)

作为一个开发者,经常会有一些莫名其妙的问题,大多都是细节,但是可能困扰我很久很久,在这里记录一下. 加载Xib,造成页面延迟很久才进入,通过查看Time Profile,找到了最终原因:UILabel的字体. label如果使用了attributed,它默认会给你设置为----“苹方”字体,而不是System,这个字体造成了加载的延迟,所以我取消了attributed,换回了System.