问题

一个我负责维护ETC充值圈存服务的程序。

今天收到这样的反馈,一个线上的用户遇到了这么一个奇怪的问题:绑卡操作的时候填的车牌号是云A12345,操作也成功了。于是查看已绑定卡列表信息,结果看到显示的车牌号是云A21345。解除卡绑定之后,重试上面的操作,也是一样的结果。

第一反应,我是懵逼的。这在我看来就好比我在评论区留言写了abc,结果显示的是bca。更神奇的数据库里存储的也是bca。而且这个程序好几个月没改过了。不应该有这样的问题啊。而且要真的出问题,应该全部用户都会出现这样的问题才对啊。

虽然想不懂。不过也工作一年多了,奇奇怪怪的问题遇到的也不算少了,也相信科学!肯定是有原因的。

分析、解决

首先是用户的截图。确实是绑卡操作填写了云A12345,确实也提交成功了。查看已绑卡列表信息时确实也是显示了云A21345。

登上服务器查看日志,日志是不会骗人的。一看,绑卡接口的入参确实写的是云A12345,紧接着执行的查看已绑卡列表信息接口的出参确实显示的是云A21345。看到这里的时候我懵了好一会。(有毒吧这是??)

于是回头看代码,原来有这么个逻辑:绑卡接口会去调ETC发行方的接口,调用成功后,会做入库操作。如果是数据库中不存在这个卡号,则会把卡号、车牌号等其他信息存储到绑卡表中。如果该卡号之前做过绑卡操作,则直接更新绑定状态字段。(PS:一个车牌号码和一张ETC卡是一一对应关系)

于是,根据log日志查询了该用户调用过的所有接口。发现用户19号也做过绑卡操作(今天是22号)。也就是说,今天绑卡操作填的云A12345,跟数据库绑卡表里的存储的云A21345是没有关系的。也就是说,我要去找到这个第一次绑卡的时候填写的车牌号码(一个卡号,只有在第一次执行绑卡操作的时候才会执行insert操作,否则执行的是update绑定状态字段)。

顺着日志,找到了第一次执行绑卡操作是在19号。并且填的车牌号码确实就是错误的云A21345。但是,新增绑卡记录操作是在调用ETC发行方接口之后。这种情况,在调用ETC发行方时应该是返回车牌号码与卡号不匹配才对啊。

于是一问,原来刚好那天他们的服务也出了点问题。所以导致了填写了错误的车牌号码也能操作成功。因此在执行新增绑卡记录的时候就把错误的车牌号码存到数据库中。然后用户今天又来操作,解绑卡不需要用到车牌号,重新绑卡也没用到车牌号。数据库里存着的一直都是错误的车牌号。因此查看卡列表信息的时候显示的绑定的车牌号码就是错误的车牌号码。

于是,问题就解决了。只要把数据库里存储的错误的车牌号码改成正确的就OK的。

最后

说实话,能感觉到自己确实有在进步。哈哈。共勉。

20200221 工作中遇到奇怪的问题相关推荐

  1. 20190326 工作中遇到的一些奇怪的问题

    写了好几篇这样的文章了,工作中时不时会遇到一些奇怪的问题.在没解决之前会觉得不可思议.匪夷所思.甚至怀疑人生,不过在解决之后又会觉得原来不过如此.现在奇怪的问题遇多了,也见怪不怪了,也能冷静下来思考, ...

  2. 《当程序员的那些狗日日子》(五)工作中,工作外

    和经理共事了几个月的时间,我对他也慢慢了解起来.他大概比我大三岁,来自新疆,但却是汉族人,是人民大学毕业的研究生.他说他在这里工作是朋友介绍进来的,他的朋友就是公司现在的总经理.每天中午吃过午饭后,我 ...

  3. 【干货】产品经理处理工作中突发事件的新技能Get!

    东东推荐:产品经理又称"产品汪",日常工作多而且繁琐,经常会出现突发事件需要处理,所以处理突发状况的技能已经是产品经理必备技能之一. 在日常工作中,我认为有且仅有以下3种情况: 制 ...

  4. 工作中的小技巧(一)

    学会怎么样问问题? 1.在问别人问题的时候,只要告诉对方有什么地方不明白,自己奇怪的地方就可以了,不要过多的阐述自己的观点,因为这样会影响对方思考或者是把对方往错误的方向引导,要做的就是耐心倾听对方的 ...

  5. Effective Java 在工作中的应用总结

    简介: <Effective Java>是一本经典的 Java 学习宝典,值得每位 Java 开发者阅读.笔者将书中和平日工作较密切的知识点做了部分总结. 作者 | 宜秋 来源 | 阿里技 ...

  6. 转:7招,教你在工作中高效做笔记

    做笔记是再熟悉不过的事情,上学时不知道做过多少笔记,但是笔记的功效也是各有千秋.上学那会儿,喜欢抄成绩好的同学的笔记,他们的笔记通常都做的比较详细而且清晰. 有调查显示好学生的笔记是他们高效学习的秘密 ...

  7. 学习前端如何建立自己的知识体系?工作中如何快速进阶?

    「自学」是不可能太「系统」的,因为没有人帮你把每一个阶段的学习内容定义清晰.由于缺乏别人提供的反馈,你没办法知道自己某一阶段的学习是否完成了.千锋广州老师一般的建议方式是,你去实体书店看看相关的书籍, ...

  8. R与SPSS、SAS相比较_Python 在数据分析工作中的地位与R语言、SAS、SPSS 比较如何?

    转自:http://m.elecfans.com/article/611407.html 统计分析的软件和程序分析 能够用来做统计分析的软件和程序很多,目前应用比较广泛的包括:SPSS, SAS.R语 ...

  9. 电子工程师自学成才pdf_作为一名自学成才的软件工程师,我在第一个月的工作中所学到的知识

    电子工程师自学成才pdf In this post, I will share my experiences and give advice now that I am six months into ...

最新文章

  1. MySQL 主外键约束与标准SQL不同的地方
  2. MySQL在线DDL工具pt-osc
  3. Introduce Explaining Variable(引入解释性变量)
  4. Percona XtraBackup热备份实践
  5. 平板android优化网络,Android版Firefox更新 针对平板设备优化
  6. H3C三层交换机划分VLAN示例
  7. DB2 SQLCODE: -407, SQLSTATE: 23502
  8. 软件类配置(六)【ubuntu16.04安装opencv3.4.1】
  9. win7 64位系统PS、AI、PSD缩略图预览补丁
  10. 少儿计算机基础知识,儿童计算机基本操作
  11. Canvas画布进阶篇---绘制文本
  12. 软件冒烟测试报告,冒烟测试方法及报告模板
  13. raytrace 算法理论与实践
  14. RDIFramework.NET ━ .NET快速信息化系统开发框架-4.5 用户管理模块
  15. 线阵相机与面阵相机的区别在哪里?
  16. 安卓6.0系统一键激活XPOSED框架的方法
  17. 微信公众号申请注意事项
  18. 使用uniapp时候根据设计图得出标准长宽比
  19. 身份证属地查询,国内身份证号码查询验证(酒店管理系统自动化)
  20. 宝锋UV-5R说明书下载

热门文章

  1. Linux系统占用cpu病毒处理记录
  2. 关于利用传统图像处理方法进行瑕疵检测的总结
  3. 小程序商业化按下快进键,开发者的春天要来了?
  4. 三步实现CentOS ftp服务器架设
  5. 服务器应用程序不可用 您试图在此WEB上访问的web应用程序当前不可用
  6. 相当有才的语录 (100句漫漫看)
  7. JAVA中String的深入研究
  8. JS indexOf() 函数
  9. html实现滑动解锁_javascript实现滑动解锁功能
  10. 数据库连接池学习笔记(一):原理介绍+常用连接池介绍