arraymetric的類圖如下所示,arraymetric是滑動視窗核心實現類,主要用於統計時間視窗的通過數、阻塞數、異常數,以及通過數、阻塞數、異常數的增加等,其包含了乙個leaparray型別的data成員變數;leaparray可以看做乙個時間視窗的陣列,主要用於windowwrap(時間視窗)的維護、當前時間對應的時間視窗的獲取、當前時間視窗的開始時間的計算等;windowwrap是時間視窗的具體實現類,內部維護了時間視窗的windowstart(開始時間)、視窗間隔(windowlengthinm)、指標桶(metricbucket)等;metricbucket相當於指標桶,主要通過longadder陣列記錄當前視窗的通過數、阻塞數、異常數,以及通過數、阻塞數、異常數的增加;
檢視arraymetric.addpass方法,其首先呼叫leaparray.currentwindowd方法,根據當前時間獲取對應的windowwrap(時間視窗),然後呼叫metricbucket.addpass方法增加通過的請求數,metricbucket中根據metricevent列舉的序數,維護著乙個6個長度的longadder陣列,用於記錄當前視窗的通過、阻塞、異常、成功等的數量。
public void addpass(int count)
leaparray.currentwindow
public windowwrapcurrentwindow()
public windowwrapcurrentwindow(long timemillis) else
thread.yield();
} else
//如果老的視窗存在,並且老視窗的開始時間小於計算出的視窗開始時間,說明老視窗需要重置
if(windowstart > old.windowstart()) finally
return window;
}thread.yield();
} else if(windowstart < old.windowstart()) }}
}}}leaparray.calculatewindowstart
protected long calculatewindowstart(long timemillis)
metricbucket.addpublic metricbucket add(metricevent event, long n)
Week5 D 滑動視窗滑動視窗
week5 d 滑動視窗滑動視窗 zjm 有乙個長度為 n 的數列和乙個大小為 k 的視窗,視窗可以在數列上來回移動.現在 zjm 想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少.例如 數列是 1 3 1 3 5 3 6 7 其中 k 等於 3.window position ...
week5 D 滑動視窗滑動視窗
zjm 有乙個長度為 n 的數列和乙個大小為 k 的視窗,視窗可以在數列上來回移動.現在 zjm 想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少.例如 數列是 1 3 1 3 5 3 6 7 其中 k 等於 3.window position minimum value max...
滑動視窗演算法 演算法 滑動視窗 二
演算法 這算是滑動視窗的另外乙個典型題目,在資料量比較少的時候,可以直接採用暴力法解決 不過資料量比較大的時候,我們就需要想辦法解決視窗裡面最大值的思路,這裡我們採用雙端佇列queue來實現,借助 queue來儲存前面計算過的最大值資訊。題目 解法1 暴力解法 按照 視窗大小,從頭到尾依次遍歷,將每...