罪魁祸首--静态变量

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

 

教师判分时出现的问题:


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

2,下一批不起作用

3,报黄页

 

问题图示:


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


       罪魁祸首--静态变量

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


2,下一批不起作用


罪魁祸首--静态变量


说明:

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


3,报黄页

 

找不到某个表。例如:T_daxueyingyuoneyubeiji_Writing_Detail

 

原因:

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

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


罪魁祸首--静态变量


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

 

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

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

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

 

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


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

 

判分流程图示:

              罪魁祸首--静态变量

                       罪魁祸首--静态变量

              罪魁祸首--静态变量

                         罪魁祸首--静态变量


预想:

             罪魁祸首--静态变量

结果:

             罪魁祸首--静态变量


总结:


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

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

缺点:

一直占用内存

高并发——逻辑混乱

影响多进程,多线程

   耦合高

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

 

反思:


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

 



罪魁祸首--静态变量

上一篇:深度剖析Byteart Retail案例【应用程序的配置】


下一篇:Binary Tree Inorder Traversal——二叉树的中序遍历