关于我挖了一个大坑给师父跳的这件事

我一发消息给技术大佬,技术大佬便发个嘲笑的表情包,接着回道,“渣渣,你又挖坑了!”我不回答,把截图发过去说,“这个数据不对,权限设置有问题。”便列出问题详情。大佬又生气的回道,“你一定又在挖坑了!”我睁大眼睛说,“你怎么这样凭空污人清白……”“什么清白?我刚刚亲眼见你截图里的报错,是个大坑。”我便涨红了脸,额上的青筋条条绽出,争辩道,“报错不能算挖坑……debug!……码畜的事,能算坑么?”接连便是难懂的话,什么“粘贴复制”,什么“办”之类,引得大佬哄笑起来:聊天界面上充满了快活的空气。

                                                                                                                                                ——序

最近写了个普通查询的功能,加个判断逻辑,修改查询条件的值,为了自己写代码方便,直接把方法里的参数修改了。如下图:直接改了userInfo的user_id的属性。

然后我跑项目的时候,发现一个问题,项目其它模块功能受到了影响。比如下图同一个页面对于数据的查询,就会变成突然有时候查出来正确的数据,有时候查出来是错误的数据。

错误情况下:

 正确情况下:

 这个时候就要查问题了,查问题的时候,去查了浏览器的缓存,清了开发工具的缓存、清了redis的缓存(项目甚至没有用到redis),总之就是没有考虑自己写的代码有问题。内心OS:不可能是我代码有问题了,我写的代码怎么可能有错?(大误!)

后来就去跑被影响的功能,debug一下,发现下图中getUserInfo.getUser_id()的值在对应人员编码和""之间来回横跳。

 机智如我立马判断出来这个getUserInfo()方法肯定是有问题的!(大误2!)

然后去debug跟着走完方法全程,没有发现任何问题。

这个时候,就只有找大佬来看了。这个坑只有大佬来填了。

然后大佬在UserInfo的getUser_id()处打了断点,跑了一下,发现在开头处我写的判断语句给userInfo设置为""的时候,等于是改变了UserInfo里的userID属性了。

 然后大佬开始说些我听不懂的话了,什么ehcahe二级缓存,什么深复制浅复制,巴拉巴拉巴拉拉之类的。

重点是,系统中,UserInfo默认是存在ehcahe二级缓存的。我在上图代码传过来的UserInfo 实际上是被存入缓存中的UserInfo,所以在我实际上是修改了缓存中的UserInfo。

为什么我这里传进来的UserInfo和缓存中的UserInfo是一个UserInfo呢?

因为在JAVA程序中没有显示定义复制构造函数,在进行对象的复制时,将调用系统默认的复制构造函数,这就使得两个对象指向了同一资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值