邊界效應引起的問題

2021-06-07 11:26:37 字數 1006 閱讀 8745

之前測試同事那邊發現這樣乙個問題:當客戶端使用某一帳號進行登入時,一直處於登入中的狀態,一直登不進系統;只是使用那個帳號有問題,其他的帳號登入系統好像都沒有問題。我們的會議系統中整合了即時通訊的功能,登入時會到伺服器端去獲取聯絡人列表,獲取聯絡人標記資訊後再到另外乙個伺服器上去取該聯絡人的詳細資訊。獲取詳細資訊時,當聯絡人比較多時,會分批傳送聯絡人標記資訊,一次只傳送20個。其實就是這20個引起的問題,剛好當前帳號有20個聯絡人,由於**邏輯有問題,沒有對20這個邊界情況做處理,導致狀態切換不成功,從而導致了上述問題的產生。

另外,在前段時間加**的過程中遇到了乙個由邊界數字0引起的死迴圈的情況。**中使用了vector列表,在遍歷列表的時候使用到了類似下面的**:

for ( uint dwindex = 0; dwindex <= tmultichatmsglist.size() - 1; dwindex++ )

其實死迴圈的問題並不難排查,其表現為cpu佔用率持續高百分比占用,僅藉此情況來說明問題。在for迴圈的條件判斷中,tmultichatmsglist.size() - 1結果值對應的是乙個有符號整型資料,而dwindex則對應乙個無符號整型資料,兩者在比較大小時,會做型別轉換。在涉及兩種資料型別的操作中,它們之間等級較低的型別會被轉換成等級較高的型別。按照從高到低的順序給各種資料型別分等級,依次為:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和 int。所以int資料會轉換成unsigned int型資料。那上面的**產生死迴圈的原因到底是什麼呢?當時tmultichatmsglist列表是空的,即tmultichatmsglist.size() - 1 = -1,此時和dwindex比較,則會向unsigned int轉換,即轉化成了乙個很大的正數,從而導致了乙個短期內的死迴圈。這時沒有考慮tmultichatmsglist.size()為0引起的。

所以在平時的**編寫中,要留意一下可能存在的邊界問題。

容易引起沙盒效應的SEO細節 站長必看

1.google的sandbox沙盒效應 2.seo,google沙盒與降權 對於沙盒中一些比較基礎的東西,不了解的可以看上面的兩篇文章。之前,我們曾經說過。乙個 上線,90 會碰上google沙盒。為什麼會碰上這個沙盒的原因,在前兩篇文章中,也已經提過。這裡就不再重複提。根據seo行業經驗判斷,並...

浮動引起的問題

父元素的高度坍塌,即變為0 如果父元素裡所有的元素都浮動,浮動之後從父元素裡面 跑 了出去,相當於父元素裡面沒有了元素,高度沒有元素 撐起來 所以就會造成父元素的高度變為0的情況。影響內聯元素的位置 假設父元素裡有浮動元素和內聯元素,假設浮動元素在內聯元素的右邊且元素往左浮動,內聯元素會被 擠 到浮...

list for each引起的問題

在linux裡核心通用列表中list for each經常被使用。但這裡有一點值得注意,最近在自己專案裡就碰到了。list for each的定義如下 define list for each pos,head for pos head next pos head pos pos next list...