您的位置:首页 > 其它

移动资费统计系统———有感(小心得)…

2014-04-13 04:41 260 查看
移动用户资费统计系统视频教程———有感[/b]

[/b]
超长的面试题要求:  (可略,有兴趣可看,可了解下)

【黑马程序员等网站也有张孝祥老师提供相关教学视频教程,虽然张老师普通话一般,挺久点会习惯的,不过教学水平很牛叉,内容多偏向实际与编程思想】

模拟实现简易的移动用户资费统计系统逻辑,具体需求如下:

移动运营商A设置两种类型的用户:普通用户及VIP用户,现该运营商已有5个VIP用户和15个普通用户,共计20个用户。

普通用户资费标准如下(不考虑漫游和长途):

【基准资费】

无月租费用。

通话费:0.6元/ 分钟(仅拨打收费,接听免费)

短信费:0.1元/ 条

数据费:5元/ M

【优惠套餐】

话费套餐:月功能费20元,最多可拨打60分钟电话,超出时间按照0.5元/分钟计费。

短信套餐:月功能费10元,最多可发送200条短信,超出条数按照0.1元/条计费。

数据套餐:月功能费20元,最多可获50M的流量,超出流量按照3元/M
计费。

注:用户可以选择多种套餐,各功能(通话、短信、数据)计费时,如已选择对应套餐,则按套餐标准计费;如未选择对应套餐,则按对应的基准资费计费。

VIP用户资费标准如下(不考虑漫游和长途):

【基准资费】

月租费用:按天收取,2元/ 天

通话费:0.4元/ 分钟(仅拨打收费,接听免费)

短信费:0.1元/ 条

数据费:3元/ M

【优惠套餐】

套餐1 :月基本费用100元(无月租费用),提供如下服务:

①最多可拨打750分钟电话,超出部分按照0.3元/ 分钟计费。

②最多可发送200条短信,超出条数按照0.1元/ 条计费。

③最多可获得100M数据流量,超出流量按照1元/
M计费。

套餐2 :月基本费用200元(无月租费用),提供如下服务:

①最多可拨打2000分钟电话,超出部分按照0.2元/ 分钟计费。

②最多可发送500条短信,超出条数按照0.1元/ 条计费。

③最多可获得300M数据流量,超出流量按照0.5元/
M计费。

注:用户最多只能选择一种套餐,如未选择任何套餐,则按照基准资费计费。

各类型用户只能选择提供给本类型用户的套餐。

新用户入网。

①对于新入网的普通用户,入网当月赠送如下服务:免费拨打60分钟

电话,免费发送200条短信,免费获得50M流量。超出赠送的部分按照普通用户基准资费进行计费。

②对于新入网的VIP用户,入网当月赠送如下服务:免费拨打200分钟电话,免费发送200条短信,免费获得100M数据流量。超出赠送的部分按照VIP用户基准资费进行计费(注意:需按入网天数计算月租费用)。

每月为用户计算一次账单,用户订制的套餐信息和账单信息采用文件方式进行存储(提示:可使用java中的Properties API进行文件操作)。

用户可自由订制或退订所属用户类型的套餐,并从下月起生效。

异步随机生成客户操作如下:

①拨打电话,每次拨打时长为1至10分钟不等(随机决定,以分钟为单位)。

②发送短信,每次发送条数为1至10条不等(随机决定)。

③上网获取数据,每次获取数据流量可为50K,100K,200K,500K,1M(随机决定)。

④订制或退订相应套餐。

⑤新用户入网(随机决定用户类型)。

注:随机生成客户操作时间间隔自定,可设置。

不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。

————————————分割线————————————

算不上总结,只是稍微的感受,因为感觉要完全消化这一道题至少要一两个星期以上,时间有限,自己也是稍微看了下视频的个别部分,因为这道题涉及到某个知识块,网上看过其他面试题,甚至也觉得实际应用会常使用到。
贴一道简化的面试题,但是我所说涉及的知识点也有所表现:

——————

公司现在有个项目,要设计一款游戏,其中等级设置模块功能需求如下:

1、英雄升级,从0级升到1级,概率100%。

从1级升到2级,有1/3的可能成功;1/3的可能停留原级;1/3的可能下降到0级;

从2级升到3级,有1/9的可能成功;4/9的可能停留原级;4/9的可能下降到1级。

每次升级要花费一个元宝,不管成功还是停留还是降级。

求英雄从0级升到3级平均花费的元宝数目。

———————

认真分析下,就会发现实现它们的瓶颈都是在最终的那个模糊概率所求得的结果。例如: 3个英雄都升到满级所需的元宝(这里就涉及升到满级的概率问题)。说完问题,稍微说下思路,因为自己比较笨,所以之前就是卡在这个思路点上。

在移动用户资费统计系统教程中张老师的解决方案是创建多个线程去随机生成事件(例: 每个线程都相当于一个用户,然后每个月总共有1000件变化:
打电话、上网或办理业务或退出某些业务),从而将随机数据分摊到各个线程上。

局限: 在老师视频中也出现了这种方案导致的局限性,表现: 当客户数量不断增多,但每月变化量不变,最后导致用户数据值过小(不符合实际,即每个人平均一个月才打几分钟电话)。

个人想法:
如果在此基础上直接改进的话,就是随客户数量的递增,月变化量也随之不断递增,当然此递增最后是随机操作的。

针对游戏英雄升级问题,个人的解题思路与解决方案(参考老师的用线程模拟方案):

1、创建一个等级升级概率类: 提供从0级到3级不同阶段与元宝花费增减的方法;
2、创建英雄类,调用等级升级类方法,并定义线程局部变量记录元宝花费数目;
3、创建多线程(例如:
3个线程对应三个英雄)去执行升级任务,当全部线程完成任务时根据由线程局部变量保存的元宝数目统计升到满级的平均花费。

【以上只是初步思路,等待后续的实现代码,O(∩_∩)O~】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: