内容简介:Gadtry 1.4.0-rc1 发布,全新Graph图数据容器能力,异步Fork JVM 多进程支持。Gadtry是一个java工具库集合。包含:ioc, exec(fork进程), graph(图计算)等等常用工具集,并且完全零依赖。更新内容如下: Aop: Fix...
Gadtry 1.4.0-rc1 发布,全新Graph图数据容器能力,异步Fork JVM 多进程支持。Gadtry是一个 java 工具库集合。包含:ioc, exec(fork进程), graph(图计算)等等常用 工具 集,并且完全零依赖。更新内容如下:
Aop:
Fix JavassistProxy thread safety issues
Fork Multiprocessing
JvmLanucher supports asynchronous
ForkJvm supports environment variable settings
Graph:
Graph supports search features
Optimize graph data structures and models
Node and edge support separate data
Graph provides powerful search capabilities and supports independent data filtering
Other:
add newStringHelper() support toString()
更新核心内容演示:
支持异步多进程:
JVMLauncher<String> launcher = JVMLaunchers.<String>newJvm() .setEnvironment("TestEnv", envValue) .addUserjars(Collections.emptyList()) .setXms("16m") .setXmx("16m") .setConsole((msg) -> System.out.println(msg)) .build(); //带来以下全新移步API VmFuture<String> vmFuture = launcher.startAsync(() -> { System.out.println("hello world! I am Fork Jvm"); return "hello world!"; }); int ForkJvmPid = vmFuture.getPid(); //获取pid vmFuture.isRunning(); //判断fork进程是否在允运行中 vmFuture.cancel(); //强制结束fork进程 String value = vmFuture.get(3, TimeUnit.SECONDS); //阻塞获取fork进程返回值 Assert.assertEquals("hello world!", value);
Graph图数据结构容器完全重构:
现在完全支持图寻迹搜索功能(图数据库特性)
节点(node)和边(edge)全部都支持独立数据(图数据库特性)
全新的图print打印功能
Graph<?, ?> graph = Graph.builder() .addNode("Throwable") .addNode("Exception") .addNode("IOException") .addNode("FileNotFoundException") .addNode("RuntimeException") .addNode("UnsupportedOperationException") .addNode("IllegalArgumentException") .addNode("Error") .addNode("OutOfMemoryError") .addNode("NoClassDefFoundError") .addEdge("Throwable", "Exception") .addEdge("Throwable", "Error") .addEdge("Exception", "IOException") .addEdge("Exception", "FileNotFoundException") .addEdge("Exception", "RuntimeException") .addEdge("RuntimeException", "UnsupportedOperationException") .addEdge("RuntimeException", "IllegalArgumentException") .addEdge("Error", "OutOfMemoryError") .addEdge("Error", "NoClassDefFoundError") .create(); graph.printShow().forEach(System.out::println);将打印如下 效果:
/
└────Throwable
├────Error
│ ├────NoClassDefFoundError
│ └────OutOfMemoryError
└────Exception
├────RuntimeException
│ ├────IllegalArgumentException
│ └────UnsupportedOperationException
├────FileNotFoundException
└────IOException
搜索能力:
以某著名外企笔试题为例:
找出A地到B地的最短路径(注意可能有多条)
那么使用Gadtry Graph如何来解决呢?
List<Route<NodeData, EdgeData>> minRoutes = new ArrayList<>(); //存放最短路径的容器 graph.searchRuleRoute("A", route -> { //已起点A开始搜索 if ("B".equals(route.getEndNodeId())) { if (minRoutes.isEmpty()) { minRoutes.add(route); return false; } long minDistance = getRouteDistance(minRoutes.get(0)); //取出第一个轨迹计算距离即可 long distance = getRouteDistance(route); //计算出当前轨迹距离 if (distance == minDistance) { minRoutes.add(route); //注意可能有多条 } else if (distance < minDistance) { minRoutes.clear(); minRoutes.add(route); } return false; } else { //这里给出理论: 起点和终点不同时如果一个点在轨迹中出现两次那么它一定不是最短路径. return route.containsDeadRecursion(); //如果出现两次则无须继续递归查找 } }); checkState(!minRoutes.isEmpty(), "NO SUCH ROUTE A TO B"); return minRoutes;
上面略复杂,下面我们再看个简单的:
找出A到B不超过3个节点以内所有轨迹
List<Route<NodeData, EdgeData>> routes = graph.searchRuleRoute("A", "B", route -> route.size() <= 3);
完整的图计算相关demo可参考:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 6大能力升级,自研容器网络和负载均衡能力大大增强 博云容器云产品最新升级
- Gadtry 1.4.0-rc1 发布,全新Graph图数据容器能力
- 容器已成运维必备能力,你知道它是如何出现的吗?
- 发展网络安全能力(一):国家网络安全能力成熟度模型
- 云知声 AI 全栈能力再获突破,人脸识别能力高分通过 LFW 和 MegaFace 评测
- 技术人员能力养成手记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机科学概论(第11版)
J. Glenn Brookshear / 刘艺、肖成海、马小会、毛倩倩 / 人民邮电出版社 / 2011-10-1 / 69.00元
本书多年来一直深受世界各国高校师生的欢迎,是美国哈佛大学、麻省理工学院、普林斯顿大学、加州大学伯克利分校等许多著名大学的首选教材,对我国的高校教学也产生了广泛影响。 本 书以历史眼光,从发展的角度、当前的水平以及现阶段的研究方向等几个方面,全景式描绘了计算机科学各个子学科的主要领域。在内容编排上,本书很好地兼顾了 学科广度和主题深度,把握了最新的技术趋势。本书用算法、数据抽象等核心思想贯穿各......一起来看看 《计算机科学概论(第11版)》 这本书的介绍吧!