高手:
滑動窗口是一種比較常用的數據統計算法。
簡單來說,就是在一個大的數組上,定義一個固定長度的滑動窗口,然后這個窗口在數組上進行滑動。
在窗口滑動的過程中,左邊會出一個元素,右邊會進一個元素, 最后,我們根據當前窗口內記錄的數據進行計算。
從而達到數據統計的目的。
滑動窗口一般可以用來解決數組的統計問題,比如。
- 解決數組/字符串的子元素問題。
- 把嵌套的for循環問題,轉換為單循環問題,降低時間復雜度。
在Hystrix中,用到了滑動窗口來實現熔斷觸發的數據統計。
另外在Sentinel限流框架中,也使用了滑動窗口來實現限流的數據統計。
不過在這兩個組件中使用的滑動窗口都做了一些調整,他們是通過時間線來驅動窗口往前滑動的。
簡單來說,以Hystrix為例,它定義一個10個長度的數組,每個數組表示一個1秒的時間區間跨度,然后在每個區間中記錄當前時間端內發生的所有請求的成功、失敗的次數。
Hystrix只需要統計當前10秒內對應的10個窗口總的成功、失敗次數。
最后根據配置的閾值決定是否要觸發熔斷功能。
總結
如果大家刷的算法比較多,對滑動窗口算法應該是不陌生的。
比如查找某一個字符串里面的包含某些字母的最小子字符串,就可以用到滑動窗口算法。
除此之外,在Sentinel里面也用到了滑動窗口來做數據統計。
算法的考察在大廠會比較多一些,大家平時可以抽空去刷一刷算法題。
大家記得點贊收藏+關注!