当前位置: 首页 > news >正文

ice规则引擎==启动流程和源码分析

启动

git clone代码

创建数据库ice,执行ice server里的sql,修改ice server的配置文件中的数据库信息

 启动ice server 和ice test

访问ice server     localhost:8121

新增一个app,默认给了个id为1,这个1可以看到在ice test的配置文件中指定了。

进入app ,新增一条校验链(实际是一串规则),指定它使用的 场景为recharge

点击查看详情

点击1-NODE,添加子节点

选择relation,AND

然后再点击AND添加子节点

 编写内容

{"score":100,"key":"cost"}

然后再次点击AND再添加一个子节点,confName写AmountResult

编写内容

{"value":888,"key":"uuid"}

点击发布

到ice test的ScoreFlow  和AmountResult 打个断点

发两个请求,scene为之前在页面上创建的recharge,cost=10000和cost=10,一个大于100,一个小于100,可以发现大于100的多了个返回的字段说明触发了这条规则

{"scene": "recharge","roam": {"cost": 10000,"uuid":123}
}

 

 

============================

所以可以发现,AND后面跟着的两个子节点,第一个是用来判断的规则,第二个是结果,如果第一个满足了,就会触发第二个。 怎么看满不满足,条件的阈值是在页面上JSON设置的,阈值怎么用是在ScoreFlow代码里设置的。 所以如果要自己添加功能,需要先在ice test中新建flow和result,然后再去页面上使用新的flow和result新建节点。

================================================

在修改根目录下的pom.xml文件,将远程仓库,证书,签名等都给注释掉,然后mvn install,这样就能将所有模块打包到本地仓库中。然后用IDEA分别打开ice-test和ice-server,启动,测试访问,成功。

源码分析

可以发现是基于netty的,分为server端和client端,那么client端启动的时候肯定会做些事情,所以看client端端代码。

clien端

icetest引入了ice-client-spring-boot-starter依赖,starter里引入了ice-client-spring-boot-autoconfigure,发现熟悉的spring.factories,同时ice-client-spring-boot-autoconfigure引入了ice-client依赖,ice-client又引入了ice-core依赖。ice-core中引入了netty和ice-common。

 

 

spring.factories引入了IceClientAutoConfiguration,这里面就只有个去扫描com.ice.client包底下的所有bean

 

@Configuration
@ComponentScan("com.ice.client")
public class IceClientAutoConfiguration {}

因为ice-server也引用了ice-core,所以clien端的初始化相关的功能是在ice-client中。

IceClientProperties读取了ice-test的配置文件中的配置项,

IceNioClientInit:

com.ice.client.config.IceNioClientInit#afterPropertiesSet

com.ice.core.client.IceNioClient#start创建与server的连接,并将连接注册到server端。

bootstrap.connect(host, port).sync();

server端接受到来自client端的连接请求并处理,

com.ice.server.nio.IceNioServerHandler#channelRead0

连接创建后会自动调用到client端的channelActive将该client端可以使用的叶子节点类路径发送到server端,server端页面上建规则的时候会使用

com.ice.core.client.IceNioClientHandler#channelActive 将该client端可以使用的叶子节点类路径发送到server端,请求到达server端

com.ice.server.nio.IceNioClientManager#register(int, io.netty.channel.Channel, java.lang.String, java.util.List<com.ice.common.model.LeafNodeInfo>)  server端将这个client拥有的场景和对应的规则发往client端

client收到来自server端的响应

com.ice.core.client.IceNioClientHandler#channelRead0 收到这个client拥有的场景和对应的规则

com.ice.core.client.IceNioClient#initDataReady

com.ice.core.client.IceUpdate#update

com.ice.core.cache.IceConfCache#insertOrUpdate 将这个client拥有的场景和对应的规则放入一个map   confMap中当做缓存

com.ice.core.cache.IceHandlerCache#insertOrUpdate根据刚才的confMap,生成这个client拥有的场景的handler,并将handler放入一个sceneHandlersMap当做缓存

com.ice.core.cache.IceHandlerCache#onlineOrUpdateHandler

==================================

其他的就一样了,当更新规则等,server端也会调channelRead0告知client端刷新缓存

com.ice.core.client.IceNioClientHandler#channelRead0

相关文章:

常见的经典目标检测

常见的经典目标检测算法主要包括&#xff1a; R-CNN 系列57&#xff1a;R-CNN&#xff08;Region-based Convolutional Neural Networks&#xff09;是一种经典的目标检测算法&#xff0c;它通过卷积神经网络&#xff08;CNN&#xff09;提取候选区域特征&#xff0c;然后使用支…...

使用Files.walk删除文件

使用`Files.walk`删除指定文件名的文件。摘要:使用Files.walk删除指定文件名的文件。使用Files.walk工具,递归判断指定目录中的常规文件路径名是否符合约定名称,如果满足条件就删除。 public class DelFile {// 文件名在此集合就删除private static Set<String> given…...

go设计模式之抽象工厂模式

抽象工厂模式 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。 工厂方法模式通过引入工厂等级结构&#xff0c;解决了简单工厂模式中工厂类职责太重的问题&#xff0c;但由于工厂方法模式中的每个工厂只生产一类产品&#xff0c;可能会导致…...

PHP引入合并多个JS和CSS文件实例

这篇文章主要实现了PHP合并并输出多个JS和CSS文件的实现方法,这里使用了一个比较简单的方法,重在揭示实现原理,需要的朋友可以参考下。 为什么要这样子做呢?其实很简单,就是用php来判断终端类型的不同,从而实现一种非主流的响应式布局。如果恰好你也有这样的想法那你就来对地…...

实现 vuereact 混合开发项目步骤-微前端

微前端是一种将多个小型前端应用组合成一个大型应用的架构方式。它允许团队独立开发、测试、部署和维护应用的各个部分。Vue.js 和 React 是两个流行的前端框架&#xff0c;它们可以在同一微前端架构下协同工作。 一、常规流程 1. 项目规划 确定项目的范围和目标。 设计应用的…...

常用设计模式-单例模式

单例模式 (保证只有一个实例,并只提供一个访问实例的访问点) 单例模式的创建方式:饿汉模式-静态变量package com.pattern;//饿汉模式-静态变量 public class Singleton {// 类初始化时,会立即加载该对象,线程天生安全,调用效率高private static final Singleton singleton…...

ice规则引擎==启动流程和源码分析

启动 git clone代码 创建数据库ice&#xff0c;执行ice server里的sql&#xff0c;修改ice server的配置文件中的数据库信息 启动ice server 和ice test 访问ice server localhost:8121 新增一个app,默认给了个id为1&#xff0c;这个1可以看到在ice test的配置文件中指定…...

进度管理(上)

规划进度管理 定义&#xff1a;规划进度管理是为实施项目进度管理制定计划的过程。 输入&#xff1a; 1、项目管理计划 2、项目章程&#xff08;包含里程碑&#xff0c;这个和规划进度有直接干系&#xff09; 3、组织过程资产 4、事业环境因素。 输出&#xff1a;进度管…...

2021 XV6 8:locks

实验有两个任务&#xff0c;都是为了减少锁的竞争从而提高运行效率。Memory allocator一开始我们是有个双向链表用来存储空闲的内存块&#xff0c;如果很多个进程要竞争这一个链表&#xff0c;就会把效率降低很多。所以我们把链表拆成每个CPU一个&#xff0c;在申请内存的时候就…...

JUC面试(十一)——LockSupport

可重入锁 可重入锁又名递归锁 是指在同一个线程在外层方法获取锁的时候&#xff0c;再进入该线程的内层方法会自动获取锁(前提&#xff0c;锁对象得是同一个对象)&#xff0c;不会因为之前已经获取过的锁还没释放而阻塞。 Java中ReentrantLock和synchronized都是可重入锁&am…...

Datawhale 202301 设计模式 | 人工智能 现代方法 习题

Exercise 1 绪论 Q&#xff1a;用您自己的话来定义&#xff1a;&#xff08;a&#xff09;智能&#xff0c;&#xff08;b&#xff09;人工智能&#xff0c;&#xff08;c&#xff09;智能体&#xff0c;&#xff08;d&#xff09;理性&#xff0c;&#xff08;e&#xff09;逻…...

k8s安装dashboard面板

k8s dashboard github地址&#xff1a;https://github.com/kubernetes/dashboard注意&#xff1a;dashboard版本要和k8s版本匹配&#xff0c;具体参考release里的Compatibility&#xff1a;https://github.com/kubernetes/dashboard/releases安装命令wget https://raw.githubus…...

最详细、最仔细、最清晰的几道python习题及答案(建议收藏哦)

名字&#xff1a;阿玥的小东东 学习&#xff1a;python。c 主页&#xff1a;没了 今天阿玥带大家来看看更详细的python的练习题 目录 1. 在python中, list, tuple, dict, set有什么区别, 主要应用在什么样的场景? 2. 静态函数, 类函数, 成员函数、属性函数的区别? 2.1静态…...

逆水寒魔兽老兵服副本攻略及代码分析(英雄武林风云录,后续更新舞阳城、扬州、清明等副本攻略)

文章目录一、武林风云录1&#xff09;老一&#xff1a;陈斩槐&#xff08;只有四个机制&#xff0c;dps压力不大&#xff0c;留爆发打影子就行&#xff09;&#xff08;1&#xff09;点名红色扇形区域&#xff08;2&#xff09;点名红色长条&#xff0c;注意最后还有一段大劈&a…...

SpringMVC总结

Spring MVC属于SpringFrameWork的后续产品&#xff0c;已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。SpringMVC是一种web层的mvc框架&#xff0c;用于替代servlet&#xff08;处理响应请求&#xff0c;获取表单参数&#xff0c;表单验…...

二进制部署kubernetes高可用集群

二进制部署kubernetes高可用集群 一、单节点部署 1、集群节点规划&#xff08;均是24位掩码&#xff09; 负载均衡节点Master节点Node节点Harbor私有仓库节点nginx110.4.7.23master110.4.7.11node110.4.7.2110.4.7.200nginx210.4.7.24master210.4.7.12node210.4.7.22 2、基本…...

机器学习(七):Azure机器学习模型搭建实验

文章目录 Azure机器学习模型搭建实验 前言 Azure平台简介 Azure机器学习实验 Azure机器学习模型搭建实验 前言 了解Azure机器学习平台&#xff0c;知道机器学习流程。 Azure平台简介 Azure Machine Learning&#xff08;简称“AML”&#xff09;是微软在其公有云Azure上推…...

第二类换元法倒代换专项训练

前置知识&#xff1a;第二类换元法 题1&#xff1a; 计算∫1x10xdx\int\dfrac{1}{x^{10}x}dx∫x10x1​dx 解&#xff1a; \qquad令x1tx\dfrac 1txt1​&#xff0c;t1xt\dfrac 1xtx1​&#xff0c;dx−1t2dtdx-\dfrac{1}{t^2}dtdx−t21​dt \qquad原式∫11t101t⋅(−1t2)dt−∫…...

VMware虚拟机无法向宿主机拖放文件

宿主机环境&#xff1a; Windows 10 x64专业工作站版 VMware workstation pro 17 TotalCommander 9.21a 虚拟机环境&#xff1a; Windows 10 x64专业工作站版 TotalCommander 9.21a 现象&#xff1a; 从虚拟机的TC向宿主机TC拖放文件时&#xff0c;光标显示为禁止drop的图…...

Java基础语法——运算符与表达式

目录 Eclipse下载 安装 使用 运算符 键盘录入 Eclipse下载 安装 使用 Eclipse的概述(磨刀不误砍柴工)——是一个IDE(集成开发环境)Eclipse的特点描述&#xff08;1&#xff09;免费 &#xff08;2&#xff09;纯Java语言编写 &#xff08;3&#xff09;免安装 &#xff08…...

连通性1(Tarjan 理论版)

目录 一、无向图割点、桥、双连通分量 Tarjan 算法求割点和桥&#xff08;割边&#xff09; “割点”代码 边双和点双连通分量 边双连通分量 和 点双连通分量 的缩点 二、有向图强连通分量 1.有向图的弱连通与强连通 2.强连通分量 Kosaraju算法 Tarjan 算法&#xff08…...

数据库02_函数依赖,数据库范式,SQL语句关键字,数据库新技术---软考高级系统架构师009

1.首先我们来看这个,给定一个X,能确定一个Y那么就说,X确定Y,或者Y依赖x,那么 比如y = x * x 就是x确定y,或者y依赖于x 2.然后再来看图,那么左边的部分函数依赖,就是,通过A和B能决定C,那么如果A只用给就能决定C,那么就是部分函数依赖. 3.然后再来看,可以看到,A可以决定B,那么…...

王者荣耀入门技能树-解答

前言 前段时间写了一篇关于王者荣耀入门技能树的习题&#xff0c;今天来给大家解答一下。 职业 以下哪个不属于王者荣耀中的职业&#xff1a; 射手法师辅助亚瑟 这道题选&#xff1a;亚瑟 王者荣耀中有6大职业分类&#xff0c;分别是&#xff1a;坦克、战士、刺客、法师、…...

java基础学习 day37 (集合)

集合与数组的区别 长度&#xff1a;数组长度固定&#xff0c;一旦创建完成&#xff0c;就不能改变。集合长度可变&#xff0c;根据添加和删除元素&#xff0c;自动扩容或自动收缩&#xff0c;&#xff08;添加几个元素就扩容多少&#xff0c;删除几个元素就收缩多少&#xff0…...

C语言:数组

往期文章 C语言&#xff1a;初识C语言C语言&#xff1a;分支语句和循环语句C语言&#xff1a;函数 目录往期文章前言1. 一维数组的创建和初始化1.1 数组的创建1.2 数组的初始化2. 一维数组的使用3. 一维数组在内存中的存储4. 二维数组的创建和初始化4.1 二维数组的创建4.2 二维…...

斐波那契数列的--------5种算法(又称“兔子数列”)

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个数列&#xff1a;…...

【计算机网络(考研版)】第一站:计算机网络概述(二)

目录 四、OSI参考模型和TCP/IP模型 1.ISO/0SI参考模型 2.TCP/IP模型 3.OSI/RM参考模型和TCP/IP参考模型的区别和联系 4.五层教学模型 5.数据流动示意图 四、OSI参考模型和TCP/IP模型 前面我们已经讨论了体系结构的基木概念&#xff0c;在具体的实施中有两个重要的网络体系…...

Python内置包Tkinter的重要控件(下)

本文将接着介绍剩下的五个重要的控件&#xff0c;包括Canvas&#xff0c;Messagebox&#xff0c;Listbox&#xff0c;Checkbutton&#xff0c;Radiobutton。 目录 前言 控件 1. Canvas 2. Messagebox 3. Listbox 4. Radiobutton 5. Checkbutton 总结 前言 包括但不…...

(Java高级教程)第四章必备前端基础知识-第二节2:CSS属性

文章目录一&#xff1a;CSS属性一览表二&#xff1a;常用属性详解&#xff08;1&#xff09;字体属性&#xff08;2&#xff09;文本属性&#xff08;3&#xff09;背景属性一&#xff1a;CSS属性一览表 W3C&#xff1a;元素属性 A&#xff1a; align-content规定弹性容器内…...

听障人士亲述:我们在VRChat用手语交流,成员规模5000人

如果你在B站上搜索VRChat&#xff0c;排在前面的热门视频几乎都是与老外聊天的内容。除了练习语言、交文化流外&#xff0c;你还能在VRChat上遇到不少哇哇乱叫的小孩。作为一款VR社交应用&#xff0c;除了有趣的小游戏外&#xff0c;说话聊天也是VRChat关键的玩法之一。而有这么…...

设计一个70W在线人数的弹幕系统

背景&#xff1a; 直播业务中增加弹幕系统&#xff0c;支持单房间百万用户同时在线。 问题分析&#xff1a; 带宽压力&#xff1a; 假如说每3秒促达用户一次&#xff0c;那么每次内容至少需要有15条才能做到视觉无卡顿。15条弹幕http包头的大小将超过3k&#xff0c;那么每秒…...

一起自学SLAM算法:第9章-视觉SLAM系统

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 上一章介绍了以激光雷达做为数据输入的激光SLAM系统&#xff0c;激光雷达的优点在于数据稳定性好、测距精度高、扫描范围广&#xff0c;但缺点是价格昂贵、数据信息量低、安装部署位置不能有遮挡、雨天烟雾等环境…...

LeetCode 437. 路径总和 III

LeetCode 437. 路径总和 III 给定一个二叉树的根节点 root &#xff0c;和一个整数 targetSum &#xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xff0c;也不需要在叶子节点结束&#xff0c;但是路径方向必须是向下的&#xff…...

LinuxC—高级IO

高级IO 1 非阻塞IO/有限状态机编程 1.1 基本概念 定义 有限状态机(Finite State Machine) 缩写为 FSM&#xff0c;状态机有 3 个组成部分&#xff1a;状态、事件、动作。 状态&#xff1a;所有可能存在的状态。包括当前状态和条件满足后要迁移的状态。事件&#xff1a;也称为…...

WebSocket 入门:简易聊天室

大家好&#xff0c;我是前端西瓜哥&#xff0c;今天我们用 WebSocket 来实现一个简单的聊天室。 WebSocket 是一个应用层协议&#xff0c;有点类似 HTTP。但和 HTTP 不一样的是&#xff0c;它支持真正的全双工&#xff0c;即不仅客户端可以主动发消息给服务端&#xff0c;服务…...

Windows10添加WebDav地址时报错“输入的文件夹无效,请选择另一个”

一、问题描述在使用Windows10添加WebDav网络地址时&#xff0c;报错“输入的文件夹无效&#xff0c;请选择另一个”&#xff0c;如下图所示&#xff1a;二、问题分析这是由于Windows10的WebDav默认只支持https协议&#xff0c;没有支持http协议导致的。三、解决办法3.1、修改注…...

Cadence PCB仿真使用Allegro PCB SI生成串扰总结报告Crosstalk Summary Report及报告导读图文教程

🏡《Cadence 开发合集目录》   🏡《Cadence PCB 仿真宝典目录》 目录 1,概述2,生成报告3,报告导读4,总结1,概述 Crosstalk Summary Report是各种串扰问题的一个简要总结报告。本文简单介绍使用Allegro PCB SI生成Crosstalk Summary Report报告的方法,及其要点导读。…...

【5-卷积神经网络】北京大学TensorFlow2.0

课程地址&#xff1a;【北京大学】Tensorflow2.0_哔哩哔哩_bilibiliPython3.7和TensorFlow2.1六讲&#xff1a;神经网络计算&#xff1a;神经网络的计算过程&#xff0c;搭建第一个神经网络模型神经网络优化&#xff1a;神经网络的优化方法&#xff0c;掌握学习率、激活函数、损…...

C++初阶:vector类

文章目录1 vector介绍2 实现vector2.1 类的定义2.2 默认成员函数2.2.1 构造函数2.2.2 析构函数2.2.3 拷贝构造2.2.4 赋值重载2.3访问接口2.4 容量接口2.5 修改接口2.5.1 尾插尾删2.5.2 任意位置插入2.5.3 任意位置删除2.6 其他接口1 vector介绍 1 vector是表示可变大小数组的序…...

机器学习中软投票和硬投票的不同含义和理解

设置一个场景&#xff0c;比如对于今天音乐会韩红会出现的概率三个人三个观点 A&#xff1a;韩红出现的概率为47% B&#xff1a;韩红出现的概率为57% C&#xff1a;韩红出现的概率为97% 软投票&#xff1a;软投票会认为韩红出现的概率为1/3*(47%57%97%)67% 硬投票&#xff1a;…...

Linux系统之网络客户端工具

Linux系统之网络客户端工具一、Links工具1.Links工具介绍2.安装Links软件3.Links工具的使用4.打印网页源码输出5.打印url版本到标准格式输出二、wget工具1.wget工具介绍2.安装wget软件3.wget工具的使用三、curl工具1.curl工具的介绍2.curl的常用参数3.curl的基本使用四、scp工具…...

c++函数(2)

这里写自定义目录标题默认参数函数重载递归函数变量周期默认参数 可为形参指定默认值&#xff0c;如果在函数调用时&#xff0c;没有指定与形参对应的实参时&#xff0c;就自动使用默认值。 默认参数可简化复杂函数的调用。 默认参数在函数名第一次出现在程序中指定&#xff0…...

HackTheBox Stocker API滥用,CVE-2020-24815获取用户shell,目录遍历提权

靶机地址&#xff1a; https://app.hackthebox.com/machines/Stocker枚举 使用nmap枚举靶机 nmap -sC -sV 10.10.11.196机子开放了22&#xff0c;80端口&#xff0c;我们本地解析一下这个域名 echo "10.10.11.196 stocker.htb" >> /etc/hosts 去浏览器访问…...

Java线程池应用实例

线程池的学习基本概念好处应用场景ThreadPoolExecutor实例理解&#xff1a;执行流程自定义线程池4大核心参数测试demo结论&#xff1a;ExecutorService常用方法思考获取ExecutorService代码示例ScheduleExecutorService常用获取方式如下ScheduledExecutorService常用方法如下:代…...

数字签名技术

介绍数字签名 数字签名是一种用于确认数据的完整性、确认发送者身份的技术。 签名主要包含两个过程&#xff1a;做摘要、进行非对称加密。 做摘要&#xff1a;签名者使用消息摘要算法对消息做摘要&#xff1b;进行非对称加密&#xff0c;得到签名值&#xff1a;签名者使用私…...

WPF-3D图形

WPF-3D图形 WPF的3D功能可以在不编写任何c#代码的情况下进行绘制&#xff0c;只需要使用xaml即可完成3D图形的渲染。本文主要讲述了WPF-3D中的关键概念&#xff0c; 以及常用到的命中测试、2d控件如何在3D对象中进行渲染&#xff0c;除此之外&#xff0c;还演示了如何导入外部…...

返回值的理解

前言 我们写的函数是怎么返回的&#xff0c;该如何返回一个临时变量&#xff0c;临时变量不是出栈就销毁了吗&#xff0c;为什么可以传递给调用方&#xff1f;返回对象的大小对使用的方式有影响吗&#xff1f;本文将带你探究这些问题&#xff0c;阅读本文需要对函数栈帧有一定…...

前端布局神器display:flex

Flexbox&#xff0c;一种CSS3的布局模式&#xff0c;也叫做弹性盒子模型&#xff0c;用来为盒装模型提供最大的灵活性。首先举一个栗子&#xff0c;之前我们是这样实现一个div盒子水平垂直居中的。在知道对象高宽的情况下&#xff0c;对居中元素绝对百分比定位&#xff0c;然后…...

【Typescript学习】使用 React 和 TypeScript 构建web应用(三)所有组件

教程来自freecodeCamp&#xff1a;【英字】使用 React 和 TypeScript 构建应用程序 跟做&#xff0c;仅记录用 其他资料&#xff1a;https://www.freecodecamp.org/chinese/news/learn-typescript-beginners-guide/ 第三天 以下是视频(0:40-0:60) 的内容 目录第三天1 创建Todo…...

7.3 矩阵范数

定义 向量有范数&#xff0c;矩阵也有范数&#xff0c;定义和向量范数类似&#xff0c;不过多了一条要求。它的定义如下&#xff1a; 正定性positivity,∥A∥≥0\parallel A\parallel\ge 0∥A∥≥0&#xff0c;只有A0A0A0时才取等号&#xff1b;非负齐次性homogeneity或scalin…...

Jetpack架构组件库:Hilt

Hilt Hilt 是基于 Dagger2 的依赖注入框架&#xff0c;Google团队将其专门为Android开发打造了一种纯注解的使用方式&#xff0c;相比 Dagger2 而言使用起来更加简单。 依赖注入框架的主要作用就是控制反转&#xff08;IOC, Inversion of Control&#xff09;, 那么什么是控制…...

InstanceNorm LayerNorm

InstanceNorm && LayerNorm author: SUFEHeisenberg date: 2023/01/26 先说结论: 将Transformer类比于RNN&#xff1a;一个token就是一层layer&#xff0c;对一整句不如token有意义原生Bert代码或huggingface中用的都是InstanceNorm instead of LayerNorm&#xff…...

数据结构---堆

堆 定义 基本操作 建堆 堆排序 优先队列 一、堆的定义&#xff1a; 堆必须是一个完全二叉树 还得满足堆序性 什么是完全二叉树呢&#xff1f; 完全二叉树只允许最后一行不为满 且最后一行必须从左到右排序 最后一行元素之间不可有间隔&#xff0c;中间不可有空缺 如下几棵树…...

3小时精通opencv(五) 利用TrackBar进行颜色检测

3小时精通opencv(五) 利用TrackBar进行颜色检测 参考视频资源:3h精通Opencv-Python 本章内容介绍如何利用TrackBar调节色域, 手动提取到我们需要的颜色 文章目录3小时精通opencv(五) 利用TrackBar进行颜色检测创建Trackbar色彩检测创建Trackbar 在opencv中使用createTrackbar函…...

学习记录673@项目管理之进度管理案例

本文主要是进度管理之关键链路法的案例。 案例 Perfect 项目的建设方要求必须按合同规定的期限交付系统&#xff0c;承建方项目经理李某决定严格执行项目进度管理&#xff0c;以保证项目按期完成。他决定使用关键路径法来编制项目进度网络图。在对工作分解结构进行认真分析后&…...

【设计模式】结构型模式·组合模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一.概述 又称为部分整体模式&#xff0c;用于把一组相似的对象当作一个单一的对象。组合模式依…...

安卓悬浮窗权限检查

目录 悬浮窗权限代码检测悬浮窗功能 悬浮窗权限 请求了这个权限后&#xff0c;app的权限管理中会有「显示悬浮窗」的权限选项。后面会引导用户去开启这个权限。 <uses-permission android:name"android.permission.SYSTEM_ALERT_WINDOW" />代码检测悬浮窗功能…...

如何在 Docker 和 DigitalOcean Kubernetes 上部署 Kafka

Apache Kafka 是一个开源的分布式事件和流处理平台&#xff0c;使用 Java 编写&#xff0c;旨在处理要求严苛的实时数据流。它被设计为具有容错能力&#xff0c;并支持每个集群拥有数百个节点。高效运行更多数量的节点需要容器化和编排流程以实现最优资源使用&#xff0c;例如使…...

3.Docker常用镜像命令和容器命令详解

文章目录 1、Docker镜像命令1.1 获取镜像1.2 查看镜像1.2.1、images命令列出镜像1.2.2、tag命令添加镜像标签1.2.3、inspect命令查看详细信息1.2.4、history命令查看镜像历史 1.3 搜索镜像1.4 删除和清理镜像1.4.1、使用标签删除镜像1.4.2、清理镜像 1.5 创建镜像1.5.1、基于已…...

01、创建型-单例模式--只有一个实例

文章目录 前言一、基本介绍1.1 什么是单例模式1.2 为什么要用单例模式1.3 应用场景1.4 单例优缺点 二、单例模式的实现方式2.1 饿汉式单例2.1.1 静态变量方式2.1.2 静态代码块 2.2 懒汉式单例2.2.1 懒汉式单例2.2.2 懒汉式优化①-线程安全2.2.2 懒汉式优化②-双重检查锁2.2.3 懒…...

第 2 篇 : Netty客户端之间互发消息和服务端广播

1. 服务端改造 1.1 修改 Message类 package com.hahashou.netty.server.config;import com.alibaba.fastjson.JSON; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.util.CharsetUtil; import lombok.Data;/*** description:* author: 哼…...

部署zookeeper+kafka

目录 一、二进制安装 1.安装jdk &#xff08;1&#xff09;yum 安装 &#xff08;2&#xff09;二进制安装 2.部署 zookeeper 3.部署kafka 01.安装 02.常用命令 03.示例 创建topic 创建 Kafka 生产者 创建Kafka消费者 运行示例 二、 docker 安装 1.搭建zookeepe…...