Category: BJTU

BJTU 2008-11-30"> 0

BJTU 2008-11-30">SMSVote @ BJTU 2008-11-30

昨天回到了母校交大,参与了一次交大校级的“百科知识竞赛”。由于这次竞赛上使用了本科时候和邱振生、王正韬一起开发的短信投票平台,所以倍感亲切。 交大没什么变化,虽然已经过去一年多了,这座有着百年历史的老校依然在这里默默地哺育着一代又一代的年轻人。唯一不同的是,在我看来,校园内稚嫩的面孔多了很多。自己当时也是那样子吧,每天生活无忧无虑的,不会太考虑自己今后所要承受的磨砺,而是享受校园悠然而快节奏的生活。 回到主题,谈谈自己的短信投票平台吧。去年在北大软院举办的十佳歌手大赛时候也使用了这样的平台,但不同的是,在北软当时只是使用了一块幻灯幕布,展示区域较小,没有体现出应有的效果;而在交大的天佑会堂里面,直接将投票幻灯投向大墙壁,效果很不错。   关于程序,是我们仨(软三工作室)在大三时候开发的。这其中还有一个小插曲: 最开始写的这个程序做了很多复杂的功能,比如一条短信可以分别给几个人投几票,一个手机号可以给几个选手投票,而这些投票的数量是可以接受控制的;另外系统也可以通过同一手机号同时接收短信短信投票与现场评论,最后还可以提供抽奖环节。这样一个系统,在开始的时候,我们做的并不好。每个30秒钟进行一次定时结果统计;同时如果收到短信以后也会自动刷新统计结果。这样,统计这个函数被大量调用。但一个可怕的问题是,我们的统计函数的时间复杂度是O(n3)……最开始票数少的时候还好,有一次组织方定了一个非常宽松的要求,每个人可以投十票。虽然只是一个院级的活动,但是收到了将近10000票。10000的三次方……每隔半秒钟不到(接收一条短信的时间间隔)就要刷新这么一下次,系统当时就崩溃了。 后来我们改进了算法,利用空间换取时间,把已经收到的进入了数据库的统计都存在内存中,每次投票统计只是刷新新进入的投票。这样,问题就迎刃而解,时间复杂度也降到了O(1)。压力测试后,接受20万条短信没问题(再大的就没有测试过了)。 面对自己亲手做成功的产品,心里还是很高兴的,毕竟所学的东西没有白学。设计模式、算法与程序设计、.NET应用程序设计……不得不说,交大的很多本科课程开的非常好。赞一下。 下一次回交大,不知啥时候了。但心情都不会平静,这是我的母校,这里有我很多最好的朋友。