記一次判斷值是否存在遇到的神奇問題

2022-10-10 08:03:12 字數 933 閱讀 7954

最近朋友說遇到乙個無解的bug,他有個業務需求是vip使用者才能參與活動的業務場景。他判斷vip的偽**形如下

private boolean isvip(userdto userdto)

}return false;

}

他傳了乙個userid為10000(注:10000為示例資料)的vip使用者,結果發現這個判斷一直是false。於是就找到我幫他看下,這**看著沒啥問題,我就讓他先確認一下資料庫是否存在這個vip使用者,朋友非常肯定的說存在的。

因為朋友確定資料庫存在這條記錄,後面我就讓他判斷vip的邏輯上加下日誌,改後的偽**如下

private boolean isvip(userdto userdto)

}log.warn("userid-->{} is not in viplist-->{}",userdto.getuserid(),vipuserids);

return false;

}

然後日誌神奇的出現

當看到這條日誌,我就有點懵逼了。後面朋友跟我說他懷疑是jdk版本有問題,但我的第六感告訴這不至於。

多年寫bug經驗告訴我,啥都會騙人,只有原始碼不會騙人。因為判斷是否vip的**就一句equal,直接點進去了事。這equal的原始碼如下

public boolean equals(object obj) 

return false;

}

看到這個**後,我想有些老司機應該有點感覺。後面我就跟朋友說你有沒有可能型別寫錯了,你的userid型別是integer嗎?於是他翻一下**,果然他userid的型別寫成string

後面朋友把userid的型別也改成integer,問題圓滿解決。

有時候有些bug難以解決,並不是因為遇到技術難題,而是因為一些我們平時沒注意的小細節引起

記一次paramiko遠端連線遇到的坑

背景 工作中遇到了乙個問題,需要用到windows向windows連線 檔案傳發 以及,linux向windows連線 檔案傳發 的需求。問題1 在網上搜尋方法的時候,發現別人可以直接用paramiko連線windows,並用psutil 獲取cpu 記憶體等資料,和我們連線linux基本一樣的,那...

記一次的使用

將jsp拆分frame框架,因為採用了第一種方式,一直在考慮用jquery非同步請求獲取資料,總是但不到效果,終於在js寫吐的時候選擇了第二種方式。參考網上的使用,大多是下面這個樣子,如果涉及靜態頁面之間定位,是沒有問題的 href 為目標頁面 通過target定位到frame views main...

判斷是否第一次進入app

利用sharedpreferences來判斷,也可以sharedpreferences中是否存有資料來判斷是否為第一次 讀取sharedpreferences中需要的資料 sharedpreferences preferences getsharedpreferences count mode wo...