在项目中,同一段代码在同事的电脑上,和我的电脑上运行的结果不同,部署到tomcat中,网页显示结果为如下:
在同事电脑上运行显示结果为:
在我的电脑上运行显示结果为:
F12查看网页的响应,发现返回的相关数据的顺序不一样。具体如下:
在同事电脑上响应数据为:
"conBehavior":{"uid":276694,"消费等级":"灰领型","支付偏好":"货到付款","买家等级":"新手","近2个月消费":425.00,"近1个月消费":166.00}
在我的电脑上响应数据为:
"conBehavior":{"uid":276694,"近1个月消费":166.00,"消费等级":"灰领型","支付偏好":"货到付款","买家等级":"新手","近2个月消费":425.00}
首先,在eclipse中运行程序,断点调试相关代码。在下图所示程序中加断点和输出:
对应的调用程序,sql语句省略了后半部分:
对于此处理,最终是使用JFinal中的DB+record形式,我输出了record的记录,发现我电脑上的输出已经和同事不一样了。查看record值,发现其内部也使用了hash,因此应该是我们程序运行中hash的算法不同导致的。
查看JDK版本,同事的为1.8,我的是1.7,查找了一下,说是在JDK1.8中,对HashMap的存储结构由链表改成了平衡树。下面是一个参考的源码剖析:http://www.2cto.com/kf/201505/401433.html
经过一番JDK的卸载和重新安装,调试,显示结果正确了。
综上,有两点收获:
1、前端的JS代码处理不具有健壮性,可以考虑获取对应键,进行判断得到值。
2、得熟悉JDK版本的差异,以及部分重要的JDK源码。