1、异步处理时防止重复点击的逻辑校验

场景 打款请求时,进入异步处理的队列,生成一个任务号,存在如数据库,且状态为未完成。此时,如果并发操作,如重复点击或者重复调用接口,则发出的两条请求可能被分配到不同服务器处理,此时数据库产生两条数据,同一任务id对应不同进程id,属于异常场景。程序逻辑判断数据>2,不处理,则异步任务终止。

其中,重复点击导致产生两条数据的原因仅为猜测,实际排查过程中发现,前端已经做了防重复点击,可能是后端的前置逻辑导致对同一批数据做两次请求

总结    不仅在同步业务处理时需要注意并发问题,异步任务时也需要根据实现逻辑关注中间状态

解决  1、数据库加联合唯一索引,第二条数据写不进去,直接将数据库报错抛出

2、忽略两天数据的场景,当做正常业务处理,两条都进行更新

3、 排查产生两条数据的原因,源头上杜绝

最终方案选择了2   当时我选择的是1和3,1作为立即解决的方案,在不动业务逻辑的场景下,解决问题,风险较小。3作为后续的溯源很有必要。但是最后没争过开发

2、临时小需求对系统功能的影响,需要思考后再做回归

eg.列表新增字段的需求,需要新增一个时间标签。当做一个简单的回归时正常。但是这个列表中有三个写入的业务类型,其中一个写入类型与其他写入的函数不同。此时,由于未对第三个业务类型进行回归,导致漏测。这也是为什么测试需要参与设计评审的原因。

分析:正常的业务场景和实现方式来说,基于复用原则,和通用的代码实现方式,这种写入应该都是在同一个函数完成。但是防不胜防啊。需求急测试不能急,任何小的修改都可能对你之前的测试结果形成覆盖

3、客户端测试时,需要注意系统与原生兼容和交互,如获取权限,打开文件等

4、前后端交互问题,前端页面展示错误、请求参数错误、交互错误这种类型的bug咱就不提了。主要说一种,请求的同步和异步,也就是时间对请求结果的影响,和前端在处理请求结果时,是否会基于时间的考虑来展示返回结果。

先来个简单的例子,在某修改功能中,要求前端请求后进行查询,以便在列表展示上获取刚才的修改提交。此时,先发出修改请求,再发出查询请求,如果修改请求仍在处理,还没有成功,便返回查询结果,然后返回修改结果,修改成功。此时就造成了展示内容与实际结果不一致。所以查询接口应该等待修改接口返回结果后再发出

前后端交互中也存在同步异步问题。同步就是上面的例子。下面是前后端交互的两种异步场景。

a、轮询(polling) 间隔一定时间不断向后端发送请求,如导出功能,第一次请求导出时,后端给到一个任务id,然后前端拿着这个id每隔1秒请求一次。确定就是消耗大,有延迟。延迟问题可以通过长轮询方式解决,具体自行扩展

b、websocket是跟http一样性质的传输协议。详细区别自己找找,这里就谈一个,http是单向的,websocket是双向的协议。所以很明了,websocket 协议中,服务器端会主动向浏览器端发送结果,进而可以降低延迟。缺点就是资源消耗大。所以在生命周期结束时,应该关闭连接

一些有价值bug产生的思考的更多相关文章

  1. 为什么我没有拔出钥匙 ——开锁引发的程序bug解决方案的思考

    http://blog.csdn.net/wojiushiwo987/article/details/8851204为什么我没有拔出钥匙                             ——开 ...

  2. jsb里出现的 Invalid Native Object的一次bug修复的思考

    Cocos2d: jsb: ERROR: File /Users/dcx_JD/Documents/cocos2d-x-2.2.2/scripting/javascript/bindings/gene ...

  3. 关于bug的一些思考

    上午看了两道算法,自己编译器上面敲了一遍,然后又去网站上敲了一遍: 编译器上面无论哦如何都调不出来,网站上面也是: 吃个午饭,睡个觉,醒来重新手撸了一遍,然后就过了 : 面对这种事情,真的是自己应该多 ...

  4. MyBatis 学习记录7 一个Bug引发的思考

    主题 这次学习MyBatis的主题我想记录一个使用起来可能会遇到,但是没有经验的话很不好解决的BUG,在特定情况下很容易发生. 异常 java.lang.IllegalArgumentExceptio ...

  5. 关于提BUG的一点思考以及工作中总结的规范

    在测试的工作中,提BUG是日常工作. 以前自己为了省事,省时,仅仅是截图,在图片上注明一下问题,就放到BUG库中了. 现在发现这样会造成开发的时间的浪费,增加了沟通成本. 对于BUG,当发现了异常时, ...

  6. 一个小BUG引发的思考。(论开发与测试之间的那点事)

    标题不是“一个馒头引发的血案”. 言归正传:今天上午测试的时候,发现了一个BUG,如图: 一个用肉眼就能发现的BUG.原因当然是因为开发同事没有自测试,流入到了测试人员这里了. 无非是开发同事不严谨造 ...

  7. 面试官,我会写二分查找法!对,没有 bug 的那种!

    前言科普 第一篇二分搜索论文是 1946 年发表,然而第一个没有 bug 的二分查找法却是在 1962 年才出现,中间用了 16 年的时间. 2019 年的你,在面试的过程中能手写出没有 bug 的二 ...

  8. 软件测试价值观-SMBT新理念

    软件测试价值观-SMBT新理念 作者:张元礼 http://blog.csdn.net/vincetest 近年来有不少软件测试同行不少有些困惑-软件测试人员的价值在哪里?我们怎么才能做好软件测试?怎 ...

  9. Mvc分页组件MvcSimplePager代码重构

    1 Mvc分页组件MvcSimplePager代码重构 1.1 Intro 1.2 MvcSimplePager 代码优化 1.3 MvcSimplePager 使用 1.4 End Mvc分页组件M ...

随机推荐

  1. django之ORM字段及参数

    目录 ORM字段及参数 orm常用字段 字段合集 自定义char字段 字段参数 外键字段的参数 ORM字段及参数 orm常用字段 字段名 说明 AutoField 如果自己没有定义主键id,djang ...

  2. HTML Rendering Error

    刚下载的markdown弹窗提示html渲染错误 去官网   http://markdownpad.com/faq.html#livepreview-directx  页面搜索 This view h ...

  3. postman---postman常用的快捷键

    作为一名IT程序猿,不懂一些工具的快捷方式,应该会被鄙视的吧.收集了一些Postman的快捷方式,大家一起动手操作~ 简单操作 操作 mac系统 windows系统 打开新标签 ⌘T Ctrl + T ...

  4. MATLAB实例:为匹配真实标签,对训练得到的标签进行调整

    MATLAB实例:为匹配真实标签,对训练得到的标签进行调整 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. MATLAB程序 munkres.m ...

  5. poj 1064 Cable master 二分 题解《挑战程序设计竞赛》

    地址 http://poj.org/problem?id=1064 题解 二分即可 其实 对于输入与精度计算不是很在行 老是被卡精度 后来学习了一个函数 floor 向负无穷取整 才能ac 代码如下 ...

  6. Java笔记(持续更新)

    码云地址    https://gitee.com/MarkPolaris/Java_Mark

  7. celery定时器

    Celery 1.什么是Clelery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery架构 Celery的架构由三部分组 ...

  8. Global AI Bootcamp 2019 宁波站活动总结

    2019年12月14日,由微软MVP技术社区发起的Global AI Bootcamp 2019盛会在全球60多个国家130个城市点燃.在大中华区,本次活动由全国众多Azure专家及微软MVP技术社区 ...

  9. python--numpy生成正态分布数据及randint randn normal的使用

    正太分布:也叫(高斯分布Gaussian distribution),是一种随机概率分布 机器学习中numpy.random如何生成这样的正态分布数据,本篇博客记录这样的用法 import numpy ...

  10. 多网卡做team

    简明的说,就是把多个物理网卡绑定成一个逻辑上的网卡,以增加带宽,或者实现主备功能,增加硬件冗余,以实现更高的系统稳定性,目前主要有bond和team两种做法,而bond主要是针对双网卡的情况来说,而t ...