一个按权重(weight)进行LB的算法
package netty; import com.google.common.collect.ImmutableList;
import lombok.SneakyThrows; import java.util.List;
import java.util.Objects;
import java.util.Random; /**
* Test
*
* @author xfyou
*/
public class Test { @SneakyThrows
public static void main(String[] args) {
List<Integer> weightList = ImmutableList.of(0, 0, 0, 0);
boolean allHaveTheSameWeight = isSameWeight(weightList);
if (!allHaveTheSameWeight) {
selectOneByWeight(weightList);
} else {
selectOneRandom(weightList);
}
} /**
* 如果所有的权重都是一样的,则随机选择一个
*/
private static void selectOneRandom(List<Integer> weightList) {
System.out.println("selecded list index:" + new Random().nextInt(weightList.size()));
} /**
* 如果所有的权重不一样,则优化选择权重高的
*/
private static void selectOneByWeight(List<Integer> weightList) {
int offset = new Random().nextInt(weightList.stream().mapToInt(i -> i).sum());
for (int i = 0, len = weightList.size(); i < len; i++) {
offset -= weightList.get(i);
if (offset < 0) {
System.out.println("selected weight:" + weightList.get(i) + ", selected index:" + i);
break;
}
}
} /**
* 判断所有的权重是否一样
*/
private static boolean isSameWeight(List weightList) {
boolean allHaveTheSameWeight = true;
for (int i = 0, len = weightList.size(); i < len; i++) {
if (i > 0) {
if (!Objects.equals(weightList.get(i), weightList.get(i - 1))) {
allHaveTheSameWeight = false;
break;
}
}
}
return allHaveTheSameWeight;
} }
一个按权重(weight)进行LB的算法的更多相关文章
- 一个简单的QQ隐藏图生成算法 通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传
一个简单的QQ隐藏图生成算法 隐藏图不是什么新鲜的东西,具体表现在大部分社交软件中,预览图看到的是一张图,而点开后看到的又是另一张图.虽然很早就看到过这类图片,但是一直没有仔细研究过它的原理,今天 ...
- 一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度
摘 要 在搜索引擎的检索结果页面中,用户经常会得到内容相似的重复页面,它们中大多是由于网站之间转载造成的.为提高检索效率和用户满意度,提出一种基于特征向量的大规模中文近似网页检测算法DDW(Det ...
- 一个简单的QQ隐藏图生成算法
隐藏图不是什么新鲜的东西,具体表现在大部分社交软件中,预览图看到的是一张图,而点开后看到的又是另一张图.虽然很早就看到过这类图片,但是一直没有仔细研究过它的原理,今天思考了一下,发现挺有趣的,所以自己 ...
- 一个来自红帽的Java垃圾回收算法,试图把停顿时间降到10毫秒以下 原创 2017-01-10 薛命灯
转自 微信聊聊架构 GC... 早在三年前,Red Hat就启动了Shenandoah项目.Shenandoah是一种新的Java虚拟机GC算法,目标是利用现代多核CPU的优势,减少大堆内存在GC方面 ...
- 只用120行Java代码写一个自己的区块链-3挖矿算法
在本系列前两篇文章中,我们向大家展示了如何通过精炼的Java代码实现一个简单的区块链.包括生成块,验证块数据,广播通信等等,这一篇让我们聚焦在如何实现 PoW算法. 大家都无不惊呼比特币.以太坊及其他 ...
- 1.3.9、通过权重 Weight匹配
server: port: 8080 spring: application: name: gateway cloud: gateway: routes: - id: guo-system1 uri: ...
- 有一个问题关于stl函数中的算法问题
是不是stl中的算法函数中参数只要是和函数相关的就是函数对象和谓词?
- 一个JS多个数组取交集算法
如题,多个数组中取交集(共同拥有元素),思路取第一个数组去跟每个数组中的元素对比,同时比较数据类型有救返回没有就返回null. 下面介绍到的算法数据格式是二维数组如: const parentArra ...
- 一张图一个题帮你迅速理解RLU算法
下面是某年的软考题: 某进程页面访问序列为4,2,3,1,2,4,5,3,1,2,3,5,且开始执行时内存中没有页面,分配给该进程的物理块数是3,则采用RLU页面置换算法时的缺页率是多少? 对于这个问 ...
随机推荐
- python学习之:序列类型 之列表,元组,range
列表 列表是可变序列,通常用于存放同类项目的集合(其中精确的相似程度将根据应用而变化). class list([iterable]) 可以用多种方式构建列表: 使用一对方括号来表示空列表: [ ] ...
- J2SE 容器
知识点:Collection接口.Iterator接口.增强的for循环.Set接口.List接口和Comparable接口.Collection类.Map接口.自动打包/解包.泛型 容器:API文档 ...
- 互斥锁的robust属性的介绍和使用
一个具体的场景:在多线程中,当一个线程获得锁之后异常退出后,应该怎么处理? 方案一 使用锁的robust特性 简单地讲,就是当拥有这个锁的线程挂了后,下一个尝试去获得锁的线程会得到EOWNWERDEA ...
- Linux必知必会--vmstat
视野.格局.胸怀.魄力 ---无 参考资料:https://man.linuxde.net/vmstat http://www.ha97.com/4512.html vmstat命令的含义为显示虚拟内 ...
- seaborn---画热力图
1.引用形式: seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None ...
- c#每天生成漂亮桌面背景、英文名言、翻译
阅读目录 一.1. 下载bing.com壁纸查询API 二.2. 解析返回的壁纸JSON信息 三.3. 下载完成的壁纸图片 阅读目录 .NET生成漂亮桌面背景 .NET生成漂亮桌面背景 总结 回到目录 ...
- libimobiledevice的安装与使用
说明:libimobiledevice相当于安卓的adb,可以使用命令对ios应用进行安装卸载等操作. 在MacOS下安装libimobiledevice: $ brew uninstall idev ...
- linux定时任务(转)
转自:https://www.cnblogs.com/intval/p/5763929.html linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非 ...
- typename T::SubType * ptr;
#include <iostream> using namespace std; template<class T> class MyClass{ public: typena ...
- JavaScrip学习之路
本文参考资料:<JavaScript权威指南> 第六章:对象 6.1 创建对象 var book={ "main title":"javaScript&quo ...