likes
comments
collection
share

【小白日常开发中遇到的问题:一】代码看起来没问题,为什么没有生效呢?

作者站长头像
站长
· 阅读数 22

打算写一个系列:内容就是开发过程中碰到的各种奇奇怪怪的问题,一是记录下,二是希望对大家有所启发,我是Java开发,前端的也可以看看,这样就可以对Java后端指手画脚了(吼吼吼~)。

背景

hello,我是bramble荆棘,今天和大家分享一些代码未生效或者代码运行不符预期的问题,就是代码写了,但是似乎并未实际生效。类似情况可能很多人碰到过,实际解决起来也并不复杂,我写这个也是把我碰到过的列出来供大家一览。

接下来我按照以下结构来分享:

  • 本地开发环境问题
    • 代码忘记保存
    • 配置不正确
    • 文件未编译成功
    • 本地连接的测试库
  • 代码部署问题
    • 未部署最新代码
    • 部署失败未察觉
  • 逻辑梳理错误
    • 逻辑分支考虑不周
  • 分布式系统导致
    • 节点未完成部署成功
  • 数据库问题
    • SQL脚本遗漏执行
  • 缓存问题
    • 缓存未更新

一、本地开发环境问题

1、代码忘记保存

原因: 一般在本地调试的时候容易发生,虽然是较为低级的问题,但是确实有时候会发生。

如何排查或避免: 可以通过设置IDE的自动保存来尽可能避免此类问题。

2、配置不正确

原因: 比如应该在使用注解@Controller的时候,导入的时候没注意,导入的是其他的包,这样就会导致依赖无法注入,那对应的接口可能就一直404。

如何排查或避免: 针对404的,可以访问其他的接口,如果其他的正常,只有新写的会报404,那一般是新写的有配置方面的错误。在使用自动导入时尽量注意,防止导入错误的同名包(不信大家没碰到过)。

3、文件未编译成功

原因: 可能由于IDE的原因,编写的编码未实时编译,也就是Java对应的class文件还是旧的(这个大家也应该都碰到过),这个就会导致代码不生效。

如何排查或避免: 直接到class目录下查看对应文件的最新修改时间,或者设置IDE的自动构建功能。

4、本地连接的测试库

原因: 为了排查测试环境的问题,本地开发连接的测试数据库,但是排查完忘了改回来了,导致无论怎么执行,本地数据库对应的表都没有实时的数据。

如何排查或避免: 更换数据库以后及时换回来,另外关键的逻辑记录好日志,这样通过日志可以明确是否执行了代码,那排查的范围就缩小了,如果明确插入数据成功,但是数据库没有值,基本也就锁定是库连接错误了。

二、代码部署问题

一般是本地正常,测试环境可能出问题,所以我们按照以下场景排查。

1、未部署最新代码:

原因: 我自己碰到的场景是commit之后,执行push命令就没管了,但是没push成功。

如何排查或避免: 如果是DevOps的方式,可能拉取的代码并不是最新的代码,这里要检查自己更改的是否已push。

2、部署失败未察觉

原因: 由于网络问题或者部署平台问题,包并没有部署成功。

如何排查或避免: 如果确定代码是最新的,可以查看部署的包是否真正生效了(我是通过项目的管理平台查看构建的包的版本和部署的版本是否一致)。

三、逻辑梳理错误

1、逻辑分支考虑不周

原因: 我自己碰到的情况有自己大脑宕机了,比如应该是符合条件的进入if,我却想成了应该是进入else,这样陷入死胡同就很头疼。或者嵌套了多层的if-else,只关心自己的那层if,也许外层的if根本就没进来。

如何排查或避免: 这个问题出现真的是脑子不在线,为了避免可以常常在进入逻辑分支的时候增加日志,能够更好的帮助自己理清思路,排查问题。我更建议此时可以起来走走,放松一下,有可能是太累了。

四、分布式系统导致

1、节点未完全部署成功

原因: 我当时碰到这个问题是因为在测试环境部署了2个节点,但是我自己当时是刚进入项目组,不太清楚部署的部分,然后写完代码部署完发现,怎么功能一会儿可以,一会儿不可以,然后实在没办法,和负责人说了下,他首先就怀疑是部署的问题。一查,果然如此。

如何排查或避免: 有时成功有时失败的现象还是具有一定特殊性的,所以此现象的排查一般就是去看到底部署成功了几个节点。

五、数据库问题

1、SQL脚本遗漏执行

原因: 有一次写一个功能,因为影响范围较大,所以以防万一,通过数据库的配置表新增了一个参数,然后参数返回true才执行该逻辑,但是我本地执行后,忘记测试环境没执行。

如何排查或避免: 类似的问题可以通过日志的方式更好的排查,直接打出对应的参数值就很容易看出来。

六、缓存问题

1、缓存未更新

原因: 也是通过数据库配置表新增参数,但是这个配置日常是有缓存的,需要页面编辑一下参数才能整体刷新缓存。所以当代码查不到这个参数,执行的逻辑就和预期不符了。

如何排查或避免: 通过日志能够比较好的避免,同时这种问题可能碰到一次后就比较有经验了,所以对此了解到即可。

结论

  • 通过以上现象,其实我们可以看到,合理的打一些日志能够很好的排查问题,特别是进入某个逻辑分支的时候。
  • 针对确实奇怪的现象,当排查了自己所能知道的情况,及时和同事沟通,因为项目内部有些配置是自己不知道的(比如参数配置放在数据库,同时也放在缓存中,比如测试环境多个节点等),像这种不知道,可能排查半天,别人一句话就解决了。
  • 写代码要认真,仔细,尽量避免“多线程”开发,此处指的是,比如手头正在开发一个任务,然后放下手头的去处理另外一个问题等等,这样就容易出现代码忘记保存,或者忘记push等问题。

致谢

最后,感谢你的耐心阅读,如果我的分享对你有所启发或帮助,就给个赞呗,很开心能帮到别人。

转载自:https://juejin.cn/post/7389211334641582089
评论
请登录