昨天晚上,收到QA报告,说页面里面一大堆数据无法显示。
别急,别急,先保护现场,用另外一台服务器在调试模式下继续测试,想办法复现这个问题。
到了晚上,问题终于又出现了。打开远程调试,检查一下运行线程,发现有一大堆用于抓取外部数据的Servlet线程不动了。
原来,一条记录指向了一个公司内部ip地址,员工下班关机之后,无法获取该记录,导致装载延迟。
而我们的开发人员在这里为了避免同一资源的多次解析,用了一个全局的同步锁,一下子其他数据也无法装载。
问题代码:
Object data = getFromCache...;
if (data != null) {
return data;
}
synchronized (LOCK) {
Object data =getFromCache...;
if (data != null) {
return data;
}
data = buildData..
saveToCache...
return data
}
上面的代码看似还行,可是,确保了我们不会重复解析同一数据,但是,加锁加的不合适,一旦任何一个资源延迟,都将导致全部线程暂停。
给一下修改后的形式:
private Map lockMap = new HashMap();
.....
protected String getCachedResource(String url) throws Exception {
String key = url;
Object data = getFromCache(key);
if (data == null) {
//获取资源对应的锁
Object lock = requireLock(url);
synchronized (lock) {
data = parser.parse(url);
saveToCache(key, data);
}
//删除锁
lockMap.remove(key);
}
return (String) data;
}
private Object requireLock(Object key) {
synchronized (lockMap) {
Object lock = lockMap.get(key);
if (lock == null) {
lock = new Object();
lockMap.put(key, lock);
}
return lock;
}
}
仍外抱怨一下繁琐的代码风格
一个内部类,构造函数最多带n个参数,能后呢,某些人为了可能的使用方便,居然给配上了2的n次方个构造函数。晕啊,我真不想看你这么多的文档:(
分享到:
相关推荐
- 示例:第一次修改是因为代码逻辑错误导致,第二次是因为数据库连接配置不当,第三次是因为前端界面未同步更新等问题。 **3. BUG解决优先级** - 开发人员根据BUG的优先级来调整自己的工作计划。 - **重要且紧急*...
3. **双向同步**:不仅测试结果可以从TestLink推送到BugFree,也可以从BugFree更新的缺陷状态反向同步到TestLink,确保信息的一致性。 4. **统一的工作流程**:集成后的系统提供了一致的用户体验,用户可以在同一...
### ARCGIS PRO官网发布的bug修改记录 #### 概述 ArcGIS Pro是Esri公司开发的一款高级地理信息系统软件,广泛应用于地图制作、空间数据分析、地理处理等多个领域。随着技术的发展与用户需求的增长,ArcGIS Pro不断...
第一次运行本程序之后,请先进入参数设置界面设置相关传输参数。 4.由于本程序建立在FTP传输协议的基础上运作,没有FTP服务器的用户可以通过使用FTP服务器 架构软件轻松架构FTP服务器,从而达到使用本程序自动定时...
Java Bug模式详解是一种深入理解和解决Java编程中常见错误和陷阱的方法。这些模式通常源于语言特性、API使用不当或对编程规范的误解。本篇将详细探讨一些常见的Java Bug模式,并提供预防和修复策略。 1. **空指针...
2. **版本控制集成**:与Git等版本控制系统集成,使得每一次bug修复都能与代码更改同步,便于回溯和协作。 3. **API接口**:提供API接口,让开发者能够轻松地将Bugit集成到自己的项目中,实现自动化报告和处理bug。 ...
时间同步有助于纠正由于硬件老化、操作系统bug或者网络延迟导致的时钟漂移,确保所有系统在同一时间轴上运行。 NTP是一种用于同步网络中多个计算机时钟的协议,它通过交换时间戳信息来实现。NTP的工作机制是:...
"《程序人生》记一次敖丙的线上P2事故1" knowledge points: 1. 程序 BUG 的处理:文章中提到 P2 级别的 BUG,是指系统中出现的严重错误,需要立即修复,以避免更大的损失。 2. 线上事故处理:文章中提到线上事故...
通过对这些文件的分析,我们可以推断这是一次涉及多个MIUI系统组件和应用的故障排查过程。开发团队会通过这些日志来定位导致错误的具体代码行、系统状态、异常堆栈等信息,以便修复软件bug并优化用户体验。每个日志...
不同于Windows系统自带的剪贴板功能只能记住最近一次复制的内容,Ditto能够记录剪贴板的历史。这意味着用户可以随时回顾之前复制过的所有文本、图像或其他数据,并根据需要进行检索和粘贴。用户不再需要担心复制过后...
本文所涉及的是一次实际的从库恢复案例,为读者提供了对常见故障处理的实战经验。 案例中提到的从库恢复问题涉及到以下几个关键点: 1. 复制延迟与错误日志分析:当从库的复制出现故障时,首先应该查看从库的状态...
关键字排名检查主要是检查自己网站和竞争网站在同一关键字的排名情况对比,以及自己网站关键字和上一次检查排名升降对比,可批量检查。关键字由添加按钮添加、关键字生成批量选择添加,也可以通过网站后台发布文档...
- 周二下午5点前,第一次评审的评审组需要确认被评审组是否按照建议进行了修改,确保了反馈的及时处理。 - 周四中午12点前,被评测组需要提供软件评审报告和软件问题报告,以便F组(李坤浩、张竹君、张文斌)和G组...
1. 确保业务逻辑中的幂等性:每个请求执行一次且仅执行一次,即使重复请求也不会产生额外影响。 2. 使用消息队列进行异步处理,但需要控制并发度,如设置单线程顺序消费。 3. 在数据库层面利用唯一索引或者乐观锁来...
一、修改记录 修复的Bug 3744 搜索需求后报错 3740 回收站中删除的构建任务对象类型和对象名称未正确显示 3737 CNVD-C-2020-287511 CNVD-C-2020-286783 CNVD-C-2020-286963 禅道CMS存在命令执行漏洞(漏洞名称相同...
一、修改记录 修复的Bug 3744 搜索需求后报错 3740 回收站中删除的构建任务对象类型和对象名称未正确显示 3737 CNVD-C-2020-287511 CNVD-C-2020-286783 CNVD-C-2020-286963 禅道CMS存在命令执行漏洞(漏洞名称相同...
一个好的测试管理工具应该能把以上几个阶段都管理起来。 测试人员每时每刻都在度量别人的工作成果,而测试人员的工作成果又由谁来度量呢?度量的标准和依据是什么呢?软件测试的度量是测试管理必须仔细思考的问题。...
TDD和BDD强调先写测试,再写实现,有助于减少回归错误,但不必强迫一次性覆盖所有测试用例。 4. **使用可靠的Bug跟踪工具**:记录和管理Bug可以确保问题得到及时处理,避免重复工作。一个好的Bug跟踪工具应能详细...
FIX 修正删除留言评论时没有删除审核记录的BUG FIX 修复在显示子版块时,子版块域名没有被替换的BUG FIX DIY图文模块上传的图片不会被获取图片替代的问题 ADD 增加相册分类选择 FIX 门户附件无法删除 FIX 无法...
FIX 修正删除留言评论时没有删除审核记录的BUG FIX 修复在显示子版块时,子版块域名没有被替换的BUG FIX DIY图文模块上传的图片不会被获取图片替代的问题 ADD 增加相册分类选择 FIX 门户附件无法删除 FIX 无法...