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. 程序运行时间测试 - 使用系统函数 getrusage 获取程序运行时间

    https://github.com/yaowenxu/Workplace/blob/master/timer/getrusagetimer.c 关键结构体: struct rusage { stru ...

  2. 201871010116-祁英红《面向对象程序设计(java)》第十六周学习总结

    博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...

  3. licode(1) Basic Example 客户端解析

    整体 在浏览其中输入https://dst_host_domain:13004后, 请求了index.html,该文件在licode\extras\basic_example\public\index ...

  4. 数据库导出--Oracle-dmp格式

    expdp 数据库名/数据库密码@orcl directory=backdir dumpfile=导出文件名称.dmp 例: expdp bedManager_nt/123456@orcl direc ...

  5. 【ECNU71】一个游戏(水题)

    点此看题面 大致题意: \(n\)种元素,有若干组将\(x\)元素转化为\(y\)元素的操作.问对于所有可能的元素拥有状况,改变转化操作的顺序,是否会影响转化后最终的结果. 水题 虽说是这么水的题,但 ...

  6. Codeforces Round #594 (Div. 1) A. Ivan the Fool and the Probability Theory 动态规划

    A. Ivan the Fool and the Probability Theory Recently Ivan the Fool decided to become smarter and stu ...

  7. subprocess模块(了解)

    目录 一.subprocess模块 一.subprocess模块 subprocess模块允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入.标准输出.标准错误以及返回码等.更 ...

  8. golang--海量用户即使通讯系统

    功能需求: 用户注册 用户登录 显示在线用户列表 群聊 点对点聊天 离线留言

  9. Matplotlib绘图及动画总结

    目录 Matplotlib绘图总结 绘图原理 block模式(python默认) interactive模式(ipython模式默认) 深入子图 子图表示 子图绘图 绘制动画 参考链接 Matplot ...

  10. Map拼接URL地址

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * @Author: hoje * Des ...