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. Playbook剧本小结

    1.Playbook剧本小结 1.什么是playbook,playbook翻译过来就是"剧本",那playbook组成如下 play: 定义的是主机的角色task: 定义的是具体执 ...

  2. RAID&LVM有关磁盘的故障

    目录 RAID&LVM有关磁盘的故障 RAID 注意:RAID硬盘失效处理--热备和热拔插 RAID实战 LVM介绍 磁盘故障 RAID&LVM有关磁盘的故障 RAID 好处:1.更多 ...

  3. Mysql存储过程--大于十分钟执行

    --存储过程 DELIMITER | DROP PROCEDURE IF EXISTS update_tatus | CREATE PROCEDURE update_status() BEGIN mi ...

  4. Pycharm界面的子窗口不见了,怎么办?

    pycharm程序界面一般有很多子窗口,如图1所示. 图1  Pycharm子窗口 如果你发现某些子窗口不见了,图2是最过分的情形,无须担心. 图2  Pycharm界面的子窗口不见了 打开项目视图子 ...

  5. FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法

    出现问题场景:       作为刚接触FreeRTOS实时操作系统的菜鸟,我在练习一个程序功能:按键3按下,将LED闪烁的任务挂起:按键4按下,将LED闪烁的任务恢复到就绪.按键使用外部中断.恢复就绪 ...

  6. npm i xxxx -D和npm i xxxx-S的区别

    npm i xxxx -D 就是 npm i xxxx --save-dev 是把依赖写入进devDependencies对象里面 devDependencies 是开发环境下的依赖,这里是开发环境下 ...

  7. AtCoder Beginner Contest 140

    传送门 A - Password 输出\(n*n*n\)即可. Code #include <bits/stdc++.h> using namespace std; typedef lon ...

  8. win7 Adobe flash player 无法在线更新

    1.win7 Adobe flash player 无法在线更新,提示应用程序初始化错误 解决方法: 1.https://www.flash.cn/看一下支持的版本,网上找对应版本离线包下载安装即可 ...

  9. SDN课程阅读作业(2)

    SDN课程阅读作业(2) 1.过去20年中可编程网络的发展可以分为几个阶段?每个阶段的贡献是什么? 答:可编程网络的发展分为三个阶段. (1)主动网络阶段 贡献: 1.对主动网络的研究开创了可编程网络 ...

  10. 模拟ssh远程执行命令

    目录 一.服务端 二.客户端 一.服务端 from socket import * import subprocess server = socket(AF_INET, SOCK_STREAM) se ...