怎樣才能自學Java集合框架?自己看源碼能否學成?
收集框架相當簡單。如果你努力學習,肯定是可以的。集合應該屬于JAVAS
Java互聯網架構-如何設計服務接口API限流功能?
1限流的目的限流的目的是保護系統。當訪問量劇增,超過系統所能承受的流量時,就要把多余的流量屏蔽掉,直接返回,沒有業務邏輯。
2壓力測量法用于估算系統流量的上限。對一個接口進行壓力測試,逐漸增加并發量和持續時間,當并發量達到系統瓶頸(錯誤率高,響應時間長)時,記錄并發量。該值是當前系統流量的上限。
3限流方案3.1系統維度分為單機限流和集群限流兩種。
單機限流就是限制每臺機器的電流。假設每臺機器的電流限制為100QPS,集群有10臺機器,則整個集群的容量為1000QPS。可以用GuavaRateLimiter,Java,契約信號量實現單機限流。
集群限流是限制整個集群的電流,比如估計整個集群的容量是1000QPS,還有一種場景是限制次數,比如整個集群只能調用第三方接口多少次。Redis可用于實現完全受限流。
3.2方法維度限流常見的方法有三種:
counter方法維護一個計數器,它有一個時間窗口。在當前時間窗口內,每當有新的請求到來時,計數器就會自行增加,當計數器自行增加到設定的上限時,就不再提供服務。當滑動到下一個時間窗口時,計數器復位。這個方法簡單,但是在時間窗的臨界點,可能會出現超流的問題。
漏桶漏桶強制恒定的輸出速率,而不管輸入數據流的突發性如何。當輸入空閑時,算法不執行任何動作,就像用底部有洞的漏桶接水一樣。水進入漏桶,桶里的水通過下面的孔以固定的速度流出。當水的流入速度過快時,會直接溢出。
令牌桶算法我推薦這個方法。具有固定容量的桶以恒定的速率生成令牌。如果桶中的令牌已滿,多余的令牌將被丟棄。每當有請求進來,先去桶里拿個令牌。當桶中的令牌完成時,您必須等待桶中生成令牌,然后才允許后續請求(或者直接拒絕它)。因為桶中可以累積一定量的令牌(一般是桶容量),令牌桶算法的優點是可以允許一定量的流量峰值。
Guava提供了一個電流限制工具RateLimit。Er基于令牌桶完成限流。還可以通過編寫Lua腳本,通過Redis實現一個全局令牌桶。