项目出现问题,小概率情况下不能处理数据。分析日志及代码,确定是某块负责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
可以保证为正。
分享到:
相关推荐
Java编码易疏忽的十个问题
2. 疏忽与错误的影响:疏忽大意可能导致严重的后果,无论是对个人职业生涯还是对公司业务都可能造成不可逆的损失。这提醒我们,即使是最微小的细节也可能影响整体的工作效果。 3. 公司规章制度的重要性:员工应当...
题目中提到的"小学数学数学神探疏忽的罪证"可能是指通过数学思维来找出破绽,揭示真相的过程。在这个案例中,罪证与数学的关联主要体现在指纹的证据上。 首先,我们要明白,指纹是每个人独特的生物特征,通常用于...
质检工作疏忽的检讨书.doc
【标题】:“护士工作疏忽的检讨书.pdf”反映了护士在工作中可能遇到的问题和自我反思的重要性。在医疗行业中,护士是重要的医疗服务提供者,他们的职责包括但不限于照顾患者、执行医嘱、监测病情等。然而,任何疏忽...
一时的疏忽 一生的痛.docx
2. 工作疏忽:工作疏忽是指在工作中由于注意力不集中、粗心大意或者未按规程操作,导致的错误或遗漏。它通常是无意识的行为,但同样可能产生严重后果。 3. 检讨书:检讨书是一种正式的书面文件,用于个人或组织承认...
因工作而疏忽另一半的星座排行榜.doc
标题中的“小学数学数学神探武彦三郎的疏忽”实际上是一个数学谜题的故事,而非纯粹的数学知识点。故事中涉及的是逻辑推理和观察力,而非基础数学概念。描述和部分内容讲述了一个情节,其中武彦三郎试图制造一个看似...
根据给定文件的信息,本文将围绕“疏忽检讨书”的相关内容进行展开,重点解析检讨书中提及的工作疏忽原因、个人反省与改正措施等方面的知识点。 ### 工作疏忽的原因 #### 1. 缺乏谨慎态度 在检讨书中提到的第一点...
本文通过一起悲剧事故,向我们深刻展示了生活中微小疏忽可能带来的巨大代价。事故发生在冬夜,一位五岁小女孩因为半夜醒来感到饥饿,要求妈妈为她购买烧烤。在妈妈离开后,小女孩可能因为好奇心或寻找妈妈,从六楼...
部分计算机三级网络技术填空题(易疏忽常考的).doc
"切换感测以防止电机因疏忽而起动"的主题涉及到电机控制、自动化系统以及安全性管理等多个IT知识点。下面将详细阐述这些概念及其应用。 1. 电机控制:电机是工业自动化中的核心组件,广泛应用于各种电子政务设施中...
开发人员在设计单片机系统时,需要对产品的硬件细节给予足够的关注,以避免一些细微疏忽导致项目失败。在文章中,作者基于自身经验总结了几个单片机开发中常见的疏忽问题,并提供了相应的解决办法。 首先,关于IC...
【精美排版】部分计算机三级网络专业技术填空题易疏忽常考的.doc
企业应确保财务部门对税收政策的准确理解和执行,尤其是在政策更新时,要及时学习和调整账务处理方式,以避免因疏忽而产生的风险。 此外,纳税人的侥幸心理也是导致税务风险的重要原因。税务机关虽然不能期望所有...
标题中的“电源技巧:一个小的疏忽就会毁掉EMI性能”强调了在电源设计和制造过程中,即使是极小的疏忽也可能对EMI性能产生灾难性的影响。这一点尤其重要,因为电源作为电子设备的核心部分,其EMI性能的好坏直接影响...
员工手册系列模板-【实务派】《员工手册》的小疏忽-引发的大风险.doc
以下是一些常见的疏忽点,对于从事硬件设计、IC封装、SMT生产和layout设计的专业人士来说,理解并避免这些问题至关重要。 1. **IC封装选择**:随着环保要求的提升,电子产品逐渐转向无铅工艺。RD人员在设计产品时需...