DIY主题讨论3:XY问题

你遇到过最山寨的问题是什么

曾经一个稳定运行的老项目突然崩了,线上由于历史原因项目框架配置不完善,执行日志都被吞掉了,问题现象是涉及一张业务表的查询接口查不到数据。第一反应是先把日志搞出来,最后是抛了一个SQLException:Incorrect DECIMAL value: ‘0’ for column ‘’ at row -1,看字面意思是数据值的意思不对,网上对这个问题的解决办法是更改sql-mode,改变sql语句执行时的检查模式,忽略一些数据检验的异常,因为根本没有人动过服务器和代码,平白无故更改数据库配置,有点将信将疑,但是还是去做了,结果并没有解决问题。回头自己分析,异常信息只体现了数据不能转化,但并没有告诉字段,但DECIMAL类型在sql中有两处使用,sql语句中使用了cast类型转换函数,目标转化类型是DECIMAL,于是排查cast执行前字段的值,最终定位于由于在批量导入时未对该字段做格式检查,用户未按格式要求填写,最终提交了一堆null,导致cast时不能顺利转化。

如何快速定位问题

  1. 异常信息定位问题:根据项目执行时抛出的异常堆栈信息,先提取错误类型,然后提取错误信息和发生错误的位置,最后排查解决问题。对于问题的解决方法,需要经验的积累和整理。
  2. 链路层定位问题:很多bug是逻辑方面的问题,如在前端页面看到数据不对,接下来排查是否前端逻辑错误或显示错误,往下排查接口传入参数与响应结果是否有误,再往下排查缓存或数据库层面是否有错误,最后执行时的sql语句是否符合预期,sql执行结果是否符合预期。自顶向下定位出问题地方,在一个调用链路较长时,应当先排查出问题的环节,再进一步调试查找问题。
  3. 调试定位问题:通过调试工具,一步步执行代码,找到出问题的地方。
  4. 经验排查:根据问题情况结合自己或他人经验列出最可能发生问题的地方,经验可能来自相同问题也可能来自同类问题的迁移,最终多翻尝试解决问题。
  5. 参考资料定位问题:将已知问题信息通过百度、google、官方文档QAQ等了解可能出问题的地方,他人遇到同类的问题排查解决方案,进而辅助排查解决问题。
  6. 在经验不充足时,个人认为当注重培养资料查找能力,另外就是问题表述能力,只有能够很好的把问题表述给他人,给搜索引擎,才能更快的找到答案。
  7. 在排查问题时如何证明一个地方有问题?目前用到的主要是对比法,根据输入输出结果对比或者设置参照物,参照对比。

如何彻底解决问题

  1. 面对问题的心态:逢山开路、遇水搭桥;另辟蹊径、换一条路;描述问题、专人解决;得过且过、听之任之
  2. 静下心深入分析问题,寻找思考最优解决方案,评估解决方案,同时还需要考虑到解决方案可能带来的副作用,是否会对稳定的模块产生影响,解决问题的彻底性,解决方案需要付出的成本代价等
  3. 基本功扎实
  4. 遇到问题后总结问题,尽量上升一个高度解决一类问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值