首页 > 其他 > 详细

罪魁祸首--静态变量

时间:2014-02-07 16:43:40      阅读:361      评论:0      收藏:0      [点我收藏+]

   在做考试系统的时候,考试完成后需要教师判分,给我们的任务是允许多个教师同时判分,且判的题是不重复的,针对这个需求我设计了一个判分页面,每个教师按照题型,答题顺序判答题记录表的前20个题,但是,因为我设计的页面使用了静态变量,导致了一系列问题!

 

教师判分时出现的问题:


1,查的题型与显示不对应

2,下一批不起作用

3,报黄页

 

问题图示:


1,查的题型与显示不对应


       bubuko.com,布布扣

说明:要判作文题,可是显示的却为翻译题,如上图:


2,下一批不起作用


bubuko.com,布布扣


说明:

要判的题型为整句翻译,可是tableName却为作文题题库表名,其他参数如试题id和题型都正确,导致找不到试题。也就是在作文题库中在试题id为翻译题的试题


3,报黄页

 

找不到某个表。例如:T_daxueyingyuoneyubeiji_Writing_Detail

 

原因:

       如上的表在数据库中根本就不存在,也就是拼的表名不正确,why

我们根据题型类型反射到具体的D层,然后根据题库名查询试题id的答题记录,正巧此题型无从表。也就是反射到复合式听力的D层,然后拼接表名时,复合式听力有从表固存在Detail,而我们传过来的TableName却为T_daxueyingyuoneyubeiji_Writing导致给作文添加了Detail--报错!


bubuko.com,布布扣


调试症状:静态变量中存放着题库表名,题库表名不正确,试题id和题型正确

 

问题1,根据正确的题型,在错误的题库表中找到了此试题id的答题记录---显示错位

问题2,根据正确的题型,在错误的题库表中找不到试题id---下一批不起作用

问题3,根据正确的题型,反射到此题型的D层,然后拼答题记录表,而正巧此题型不存在从表,也就是拼的表名数据库中根本不存在!

 

现在我们来看一下为什么会出现错位的情况:


前提:将题库表名存放在静态变量中

 

判分流程图示:

              bubuko.com,布布扣

                       bubuko.com,布布扣

              bubuko.com,布布扣

                         bubuko.com,布布扣


预想:

             bubuko.com,布布扣

结果:

             bubuko.com,布布扣


总结:


定义:静态变量始终存在着,也就是说它的生存期为整个源程序(程序中只保存一份)。

优点:访问频繁资源-速度快

缺点:

一直占用内存

高并发——逻辑混乱

影响多进程,多线程

   耦合高

   如上,大家已经看到了静态变量带来的问题,所以大家在使用时一定要慎用!

 

反思:


不做什么很重要:做事情之前,一定要明白什么不能用,即使要用,也要先了解清楚。
调试的重要性:当时的侧重点在于多个教师同时判同一类题是不是有问题,会不会出现并发的错误。当测试正常了,就以为没有问题了,万事大吉了,却忽略了多个教师判不同题型,不同试卷的问题了。因为判同类试卷同类题型,静态变量一直保持正确,不会触发错误!
遇到问题的态度:计算机不会欺骗我们,是什么就是什么,无论是静态变量还是锁或其他的,出现错误一定有它的触发点,只有弄明白到底是什么问题,以后遇到才不会惧怕,才知道什么时候可以用,什么时候不可以用,俗话说,知己知彼,百战不殆!

 



罪魁祸首--静态变量

原文:http://blog.csdn.net/hejingyuan6/article/details/18812719

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!