`
langyu
  • 浏览: 888239 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

疏忽的杯具

阅读更多
   项目出现问题,小概率情况下不能处理数据。分析日志及代码,确定是某块负责load balance的代码有问题。多个server会接收相同数据,在避免数据重复处理及server负载均衡的情况下,在server的逻辑入口做判断,抛弃本server不能处理的数据。

简单代码呀
int hashcode = "ea34dfc3-4a16-455d-846b-ed351c691c99".hashCode();
private boolean needToHandle(int hashcode, int serverCount, int serverNumber) {
      return hashcode % serverCount == (serverNumber - 1);
}

单台server的时候不经过这段代码,且这段代码看起来是正常的。所以呢,单台server测试正常,等QA多台server测试的时候就杯具了。

以前翻看《Jave Puzzlers》的时候,第一个puzzler就是关于取模运算时,奇偶数判断存在正负数的问题。那个问题只是模2,当模其它值的时候,问题依然存在。一个负被模数(UUID)如果不是模数(serverCount)的整数倍,那么取模的结果就是负数。
引用
-8 % 3 = -2;  -8 % 4 = 0;
这个问题我是知道的,出现Bug就是因为没有想到为什么UUID的hash值为负数呢。我们的UUID本是一个string,经过string.hashCode()方法后,这个值可能会溢出,而hashCode方法返回是int,它会截取低32位并返回。经过hash后的UUID结果就可正可负,原因就在这,以前没想过。

哎,对这个问题的总结是:测试一定得完备;细节决定成败。切记!切记!

PS:String hashCode的实现方式,对字符串中的每个char循环相加
int h = 0;
char[] val = value;
for (int i = 0; i < len; i++) {
      h = 31*h + val[off++];
}
return h;




补充下:解决上面hashCode为负的情况,一般的解决方法是Math.abs(hashCodeValue),但这种方法是有小问题的。
Math.abs(Integer.MIN_VALUE) = Integer.MIN_VALUE

因为Integer.MAX_VAUE是2^31 - 1(0x7fffffff),而Integer.MIN_VALUE是-2^31(0x80000000),即没有与Integer.MIN_VALUE相对应的绝对值,对它取绝对值时会返回原值。

更好的解决方法是
hashCodeValue & 0x7fffffff
可以保证为正。
1
1
分享到:
评论
2 楼 langyu 2010-06-28  
mercyblitz 写道
String hashCode 的实现还是会出现重复。

这个知道的,“Aa”与“BB”就是重复的。String的算法问题,不会影响什么吧。如果需要惟一值,就获取字符串的MD5,SHA1等摘要值
1 楼 mercyblitz 2010-06-22  
String hashCode 的实现还是会出现重复。

相关推荐

    Java编码易疏忽的十个问题

    Java编码易疏忽的十个问题

    工作疏忽本职检讨书.doc

    2. 疏忽与错误的影响:疏忽大意可能导致严重的后果,无论是对个人职业生涯还是对公司业务都可能造成不可逆的损失。这提醒我们,即使是最微小的细节也可能影响整体的工作效果。 3. 公司规章制度的重要性:员工应当...

    小学数学数学神探疏忽的罪证

    题目中提到的"小学数学数学神探疏忽的罪证"可能是指通过数学思维来找出破绽,揭示真相的过程。在这个案例中,罪证与数学的关联主要体现在指纹的证据上。 首先,我们要明白,指纹是每个人独特的生物特征,通常用于...

    质检工作疏忽的检讨书.doc

    质检工作疏忽的检讨书.doc

    护士工作疏忽的检讨书.pdf

    【标题】:“护士工作疏忽的检讨书.pdf”反映了护士在工作中可能遇到的问题和自我反思的重要性。在医疗行业中,护士是重要的医疗服务提供者,他们的职责包括但不限于照顾患者、执行医嘱、监测病情等。然而,任何疏忽...

    一时的疏忽 一生的痛.docx

    一时的疏忽 一生的痛.docx

    工作失职、工作疏忽的检讨书范文.doc

    2. 工作疏忽:工作疏忽是指在工作中由于注意力不集中、粗心大意或者未按规程操作,导致的错误或遗漏。它通常是无意识的行为,但同样可能产生严重后果。 3. 检讨书:检讨书是一种正式的书面文件,用于个人或组织承认...

    因工作而疏忽另一半的星座排行榜.doc

    因工作而疏忽另一半的星座排行榜.doc

    小学数学数学神探武彦三郎的疏忽

    标题中的“小学数学数学神探武彦三郎的疏忽”实际上是一个数学谜题的故事,而非纯粹的数学知识点。故事中涉及的是逻辑推理和观察力,而非基础数学概念。描述和部分内容讲述了一个情节,其中武彦三郎试图制造一个看似...

    -2021疏忽检讨书模板___ --条据书信.docx

    根据给定文件的信息,本文将围绕“疏忽检讨书”的相关内容进行展开,重点解析检讨书中提及的工作疏忽原因、个人反省与改正措施等方面的知识点。 ### 工作疏忽的原因 #### 1. 缺乏谨慎态度 在检讨书中提到的第一点...

    微小的疏忽 生命的代价.pdf

    本文通过一起悲剧事故,向我们深刻展示了生活中微小疏忽可能带来的巨大代价。事故发生在冬夜,一位五岁小女孩因为半夜醒来感到饥饿,要求妈妈为她购买烧烤。在妈妈离开后,小女孩可能因为好奇心或寻找妈妈,从六楼...

    部分计算机三级网络技术填空题(易疏忽常考的).doc

    部分计算机三级网络技术填空题(易疏忽常考的).doc

    行业-电子政务-切换感测以防止电机因疏忽而起动.zip

    "切换感测以防止电机因疏忽而起动"的主题涉及到电机控制、自动化系统以及安全性管理等多个IT知识点。下面将详细阐述这些概念及其应用。 1. 电机控制:电机是工业自动化中的核心组件,广泛应用于各种电子政务设施中...

    单片机开发人员的几个常疏忽的问题点

    开发人员在设计单片机系统时,需要对产品的硬件细节给予足够的关注,以避免一些细微疏忽导致项目失败。在文章中,作者基于自身经验总结了几个单片机开发中常见的疏忽问题,并提供了相应的解决办法。 首先,关于IC...

    【精美排版】部分计算机三级网络专业技术填空题易疏忽常考的.doc

    【精美排版】部分计算机三级网络专业技术填空题易疏忽常考的.doc

    税务风险就藏在疏忽大意之处.docx

    企业应确保财务部门对税收政策的准确理解和执行,尤其是在政策更新时,要及时学习和调整账务处理方式,以避免因疏忽而产生的风险。 此外,纳税人的侥幸心理也是导致税务风险的重要原因。税务机关虽然不能期望所有...

    电源技巧:一个小的疏忽就会毁掉EMI性能

    标题中的“电源技巧:一个小的疏忽就会毁掉EMI性能”强调了在电源设计和制造过程中,即使是极小的疏忽也可能对EMI性能产生灾难性的影响。这一点尤其重要,因为电源作为电子设备的核心部分,其EMI性能的好坏直接影响...

    员工手册系列模板-【实务派】《员工手册》的小疏忽-引发的大风险.doc

    员工手册系列模板-【实务派】《员工手册》的小疏忽-引发的大风险.doc

    开发人员的几个常疏忽的问题点

    以下是一些常见的疏忽点,对于从事硬件设计、IC封装、SMT生产和layout设计的专业人士来说,理解并避免这些问题至关重要。 1. **IC封装选择**:随着环保要求的提升,电子产品逐渐转向无铅工艺。RD人员在设计产品时需...

Global site tag (gtag.js) - Google Analytics