BalanceUtil 权重负载均衡工具类

需求: 现在有三个AB测试分组,比例各为 5 3 2,需要按照权重过滤得到要走的测试分组

实现

工具类 BalanceUtil

public class BalanceUtil {
          
   
    int sum = 0;
    int[] w;
    int[] pre;

    public BalanceUtil(int[] w) {
          
   
        this.w = w;
        pre = new int[w.length + 1];
        for (int i = 1; i <= w.length; i++) {
          
   
            sum += w[i - 1];
            pre[i] = pre[i - 1] + w[i - 1];
        }
        for (int i = 0; i < pre.length; i++) {
          
   
            pre[i]++;
        }
        // 1 3 4 6
        // 0 1 4 8 14
        // 1 2 5 9 15
        //pre[i]+1表示 beigin = i+1, end) = pre[i+1];

    }

    public int pickIndex() {
          
   
        //[1,sum]
        int v = (int) (Math.random() * sum) + 1;
        return search(v);
    }

    public int pickIndex(int v) {
          
   
        return search(v);
    }

    private int search(int v) {
          
   
        int l = 0;
        int r = pre.length - 1;
        while (l < r) {
          
   
            int mid = (l + r + 1) / 2;
            if (pre[mid] == v) {
          
   
                return mid;
            } else if (pre[mid] > v) {
          
   
                r = mid - 1;
            } else {
          
   
                l = mid;
            }
        }
        return l;
    }

    public static void main(String[] args) {
          
          
        int[] arr = new int[]{
          
   5,3, 2};
        BalanceUtil balanceUtil = new BalanceUtil(arr);
        //获取索引
        int index = balanceUtil.pickIndex();
    }
}
经验分享 程序员 微信小程序 职场和发展