Activiti7_使用

Activiti7_使用

  • 一、Activiti7
  • 二、绘制工作流
  • 三、通过代码部署流程,再对流程进行实例化,完整运行一遍流程即可
  • 四、在springbooot中使用


一、Activiti7

  1. 为了实现后端的咨询流转功能,学习Activiti7,记录下使用的过程及遇到的问题

二、绘制工作流

  1. 使用spring3的后端项目为基础,开发工具idea 2023.3.2,jdk,jdk17。
    点此链接link去idea官网下载插件Activiti BPMN,在idea的Settings里Plugins使用install plugin from disk把刚才的jar包导进去
  2. 在bpmn文件夹下创建bpmn文件:
    !在这里插入图片描述
  3. 使用插件以画图形式编辑bpmn:
    在这里插入图片描述
    主要使用了三种部件:开始、任务、结束在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
任务的内容填写如下,连线按住右上角的箭头拖拽到目标即可,里面的${user}表明设置为user的变量,一会可以在使用的时候绑定用户:
在这里插入图片描述
其中的分支路线我们直接使用两个互斥条件判断,不使用排他网关:
在这里插入图片描述在这里插入图片描述

排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策。 当流程执行到这个网关,所有分支都会判断条件是否为 true,如果为 true 则执行该分支,注意,排他网关只会选择一个为 true 的分支执行。 (即使有两个分支条件都为 true, 排他网关也会只选择一条分支去执行)。如果从网关出去的线所有条件都不满足则系统抛出异常。说明 :经过排他网关必须要有一条且只有一条分支走。
bpmn文件绘制完成了,保存成同名png文件:在这里插入图片描述

  1. 完整的bpmn代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><process id="consult" name="consult" isExecutable="true"><startEvent id="sid-c41ecd07-74cd-41d5-9d7e-046bf71954c1"/><userTask id="sid-7e47fd72-c056-43f6-8575-c229ff5b58b4" name="用户填写咨询表单" activiti:assignee="${user}"><documentation>用户填写咨询表单</documentation></userTask><userTask id="sid-03f0aec0-32b1-41e2-8826-5b8c73d51854" name="管理员指定业务人员" activiti:assignee="${admin}"><documentation>管理员指定业务人员</documentation></userTask><userTask id="sid-7b539102-6d65-479a-9958-5259a84c28b1" name="业务人员回复" activiti:assignee="${busPerson}"><documentation>业务人员回复</documentation></userTask><userTask id="sid-3af84618-4ba9-4686-a97f-6db4da96e916" name="管理员决定是否公示" activiti:assignee="${admin}"><documentation>管理员决定是否公示</documentation></userTask><endEvent id="sid-bd329163-e466-4ca7-bad1-9b95787e28a6"/><sequenceFlow id="sid-c2da4d94-8eac-4acd-9cb0-16328237a136" sourceRef="sid-c41ecd07-74cd-41d5-9d7e-046bf71954c1" targetRef="sid-7e47fd72-c056-43f6-8575-c229ff5b58b4"/><sequenceFlow id="sid-5be6635f-b5ef-4e0e-98af-1b35c6e085ae" sourceRef="sid-7e47fd72-c056-43f6-8575-c229ff5b58b4" targetRef="sid-03f0aec0-32b1-41e2-8826-5b8c73d51854"/><sequenceFlow id="sid-5dc1e8b5-e2bc-45b7-b559-bffe2d3b5c24" sourceRef="sid-03f0aec0-32b1-41e2-8826-5b8c73d51854" targetRef="sid-7b539102-6d65-479a-9958-5259a84c28b1"/><sequenceFlow id="sid-c3c3594c-d7d1-462f-b057-59b12dbeb190" sourceRef="sid-3af84618-4ba9-4686-a97f-6db4da96e916" targetRef="sid-bd329163-e466-4ca7-bad1-9b95787e28a6"/><sequenceFlow id="sid-8a860827-e9ad-4c62-b931-939d312ddcd8" sourceRef="sid-7b539102-6d65-479a-9958-5259a84c28b1" targetRef="sid-03f0aec0-32b1-41e2-8826-5b8c73d51854"><conditionExpression>${evection.num&gt;1}</conditionExpression></sequenceFlow><sequenceFlow id="sid-f4dc4277-d16a-415e-9cac-fe51d1c6ee65" sourceRef="sid-7b539102-6d65-479a-9958-5259a84c28b1" targetRef="sid-3af84618-4ba9-4686-a97f-6db4da96e916"><conditionExpression>${evection.num&lt;=1}</conditionExpression></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_consult"><bpmndi:BPMNPlane bpmnElement="consult" id="BPMNPlane_consult"><bpmndi:BPMNShape id="shape-b1791cfb-c3c9-42a9-9bd8-b7e0a8906f99" bpmnElement="sid-c41ecd07-74cd-41d5-9d7e-046bf71954c1"><omgdc:Bounds x="-15.0" y="-120.0" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-33324ea7-5905-4b2a-b615-2bfe666a0117" bpmnElement="sid-7e47fd72-c056-43f6-8575-c229ff5b58b4"><omgdc:Bounds x="-50.0" y="-60.0" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-955afe5f-f9b7-40f0-887f-70aeb5afc173" bpmnElement="sid-03f0aec0-32b1-41e2-8826-5b8c73d51854"><omgdc:Bounds x="-50.0" y="40.0" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-7a2e9e19-c268-4a46-af9c-aa6621dd9b86" bpmnElement="sid-7b539102-6d65-479a-9958-5259a84c28b1"><omgdc:Bounds x="-50.0" y="150.0" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-86aead71-8e5b-4de3-8d8c-ca5f0dcc63ea" bpmnElement="sid-3af84618-4ba9-4686-a97f-6db4da96e916"><omgdc:Bounds x="-50.0" y="255.0" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-1d13b250-9f5c-42db-a745-482b2c9acf56" bpmnElement="sid-bd329163-e466-4ca7-bad1-9b95787e28a6"><omgdc:Bounds x="-15.0" y="360.0" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-c60fd374-56ca-4630-9f88-c9d61baa048b" bpmnElement="sid-c2da4d94-8eac-4acd-9cb0-16328237a136"><omgdi:waypoint x="0.0" y="-90.0"/><omgdi:waypoint x="0.0" y="-60.0"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-4a1da47a-a9b5-4db2-a8a9-002220e5c52a" bpmnElement="sid-5be6635f-b5ef-4e0e-98af-1b35c6e085ae"><omgdi:waypoint x="0.0" y="20.0"/><omgdi:waypoint x="0.0" y="40.0"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-3d9c4ead-a6cd-4aa2-82c7-ad1f20171327" bpmnElement="sid-5dc1e8b5-e2bc-45b7-b559-bffe2d3b5c24"><omgdi:waypoint x="0.0" y="120.0"/><omgdi:waypoint x="0.0" y="150.0"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-2116f8bb-51a7-4c43-a48b-7c4954868724" bpmnElement="sid-c3c3594c-d7d1-462f-b057-59b12dbeb190"><omgdi:waypoint x="0.0" y="335.0"/><omgdi:waypoint x="0.0" y="360.0"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-ce0e6fc3-032f-4333-83ec-7807846b046f" bpmnElement="sid-8a860827-e9ad-4c62-b931-939d312ddcd8"><omgdi:waypoint x="-50.0" y="190.0"/><omgdi:waypoint x="-125.0" y="135.0"/><omgdi:waypoint x="-50.0" y="80.0"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-87fa2036-1930-4551-bede-92f275696c68" bpmnElement="sid-f4dc4277-d16a-415e-9cac-fe51d1c6ee65"><omgdi:waypoint x="0.0" y="230.0"/><omgdi:waypoint x="0.0" y="242.5"/><omgdi:waypoint x="0.0" y="255.0"/></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

三、通过代码部署流程,再对流程进行实例化,完整运行一遍流程即可

需要序列化一个evection:在这里插入图片描述

package com.sumo.ipd;import java.io.Serializable;public class Evection implements Serializable {public int getNum() {return num;}public void setNum(int num) {this.num = num;}private int num;
}

在test里面创建ActivitiDemo类,内容:

package com.sumo.ipd;import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class ActivitiDemo {/*** 部署流程定义测试,查询,删除*/@Testpublic void DeployTest() {// 1. 创建ProcessEngine流程引擎对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2、得到RepositoryService实例RepositoryService repositoryService = processEngine.getRepositoryService();// 3、使用RepositoryService进行部署,定义一个流程名字,把bpmn和png部署到数据库中Deployment deployment = repositoryService.createDeployment()    // 创建一个部署流程.name("咨询流程")                                    // 给部署流程命名.addClasspathResource("bpmn/consult.bpmn20.xml")        // 添加类路径下的资源文件.addClasspathResource("bpmn/consult.png").deploy();                                                // 执行流程部署// 4、输出部署信息System.out.println("流程部署id:" + deployment.getId());System.out.println("流程部署名称:" + deployment.getName());}@Testpublic void queryProceccDefinition() {// 流程定义keyString processDefinitionKey = "consult";// 创建ProcessEngine流程引擎对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 获取repositoryServiceRepositoryService repositoryService = processEngine.getRepositoryService();// 查询流程定义ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();//遍历查询结果List<ProcessDefinition> list = processDefinitionQuery.processDefinitionKey(processDefinitionKey).orderByProcessDefinitionVersion().desc().list();for (ProcessDefinition processDefinition : list) {System.out.println("------------------------");System.out.println(" 流 程 部 署 id : " +processDefinition.getDeploymentId());System.out.println("流程定义id: " + processDefinition.getId());System.out.println("流程定义名称: " + processDefinition.getName());System.out.println("流程定义key: " + processDefinition.getKey());System.out.println("流程定义版本: " + processDefinition.getVersion());}}@Testpublic void deleteDeployment() {// 流程部署idString deploymentId = "47501";// 通过流程引擎获取repositoryServiceProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();RepositoryService repositoryService = processEngine.getRepositoryService();
//        删除启动的流程实例RuntimeService runtimeService = processEngine.getRuntimeService();runtimeService.deleteProcessInstance("50001","用户撤销");//删除流程定义, 如果该流程定义已有流程实例启动则删除时出错//repositoryService.deleteDeployment(deploymentId);//设置true 级联删除流程定义,即使该流程有流程实例启动也可以删除,设//置为false非级别删除方式,如果流程repositoryService.deleteDeployment(deploymentId, true);}/*** 启动流程实例*/@Testpublic void startProcessTest() {//businessKey用于绑定外部任务表单的idString businessKey = "1";// 1、创建ProcessEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2、获取RunTimeServiceRuntimeService runtimeService = processEngine.getRuntimeService();// 流程变量的mapMap<String, Object> variables = new HashMap<>();// 设定任务的负责人variables.put("user", "523097198902120431");variables.put("admin", "123456");variables.put("busPerson", "123456789");Evection evection = new Evection();evection.setNum(3);// 把流程变量的pojo放入mapvariables.put("evection",evection);// 3、根据流程定义Id启动流程,并获取流程实例ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("consult", businessKey, variables);// 输出内容System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());System.out.println("流程实例id:" + processInstance.getId());System.out.println("当前活动Id:" + processInstance.getActivityId());System.out.println("businessKey==" + processInstance.getBusinessKey());}/*** 查询当前个人待执行的任务*/public void findTaskListTest(String assignee) {// 1.创建流程引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2.获取TaskServiceTaskService taskService = processEngine.getTaskService();// 3.根据流程key 和 任务负责人 查询任务List<Task> list = taskService.createTaskQuery().processDefinitionKey("consult")        //流程Key.taskAssignee(assignee)                    //只查询当前任务负责人的任务.list();Task task = taskService.createTaskQuery()
//                .processInstanceId("15001")            //流程实例id.processDefinitionKey("consult")     //流程Key.taskAssignee(assignee)                 //只查询当前任务负责人的任务.singleResult();String processInstanceId = task.getProcessInstanceId();// 2、获取RunTimeServiceRuntimeService runtimeService = processEngine.getRuntimeService();ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();String businessKey = processInstance.getBusinessKey();//        list.forEach(task -> {System.out.println("-----------------------------------------");System.out.println("流程实例id:" + task.getProcessInstanceId());System.out.println("任务id:" + task.getId());System.out.println("任务负责人:" + task.getAssignee());System.out.println("任务名称:" + task.getName());System.out.println("businessKey==" + businessKey);
//        });Evection eve = (Evection)taskService.getVariable(task.getId(), "evection");System.out.println(eve.getNum());System.out.println("获取流程变量成功");}/*** 完成个人代办任务及查询下一步*/@Testpublic void completTaskTest() {findTaskListTest("523097198902120431");completTask("523097198902120431");findTaskListTest("123456");completTask2("123456");findTaskListTest("123456789");completTask("123456789");findTaskListTest("123456");completTask("123456");}/*** 普通的完成任务* @param assignee*/public void completTask(String assignee) {// 1.创建流程引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2. 获取TaskService实例TaskService taskService = processEngine.getTaskService();// 3.根据流程key 和 任务的负责人 查询任务Task task = taskService.createTaskQuery().processDefinitionKey("consult")     //流程Key.taskAssignee(assignee)                 //只查询当前任务负责人的任务.singleResult();System.out.println("流程实例id:" + task.getProcessInstanceId());System.out.println("任务id:" + task.getId());System.out.println("任务负责人:" + task.getAssignee());System.out.println("任务名称:" + task.getName()+" 完成!");// 4.完成待办任务,参数:任务idtaskService.complete(task.getId());}/*** 在完成任务时修改变量调整分支走向* @param assignee*/public void completTask2(String assignee) {// 1.创建流程引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2. 获取TaskService实例TaskService taskService = processEngine.getTaskService();// 3.根据流程key 和 任务的负责人 查询任务Task task = taskService.createTaskQuery().processDefinitionKey("consult")     //流程Key.taskAssignee(assignee)                 //只查询当前任务负责人的任务.singleResult();System.out.println("流程实例id:" + task.getProcessInstanceId());System.out.println("任务id:" + task.getId());System.out.println("任务负责人:" + task.getAssignee());System.out.println("任务名称:" + task.getName()+" 完成!");// 流程变量的mapMap<String, Object> variables = new HashMap<>();Evection evection = new Evection();evection.setNum(1);// 把流程变量的pojo放入mapvariables.put("evection",evection);// 4.完成待办任务,参数:任务idtaskService.complete(task.getId(),variables);}/*** 如果一个流程中有多个任务,可以用list*/@Testpublic void completeTask3() {// 获取引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 获取操作任务的服务 TaskServiceTaskService taskService = processEngine.getTaskService();// 完成 经理 '李四' 的任务List<Task> tasks = taskService.createTaskQuery().processDefinitionKey("evection").taskAssignee("李四").list();  // 多个任务,用listfor (Task task : tasks) {if (true) {// 判断是哪任务System.out.println("流程实例id=" + task.getProcessInstanceId());System.out.println("任务Id=" + task.getId());System.out.println("任务负责人=" + task.getAssignee());System.out.println("任务名称=" + task.getName());taskService.complete(task.getId());}}}
}

运行ActivitiDemo完整运行一遍流程:
1DeployTest部署流程
2startProcessTest启动流程实例
3completTaskTest运行一遍流程

四、在springbooot中使用

依赖会出现报错,需要修改pom.xml

  1. 使用log4j会和springboot本身的logback冲突,排除logback
		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><artifactId>spring-boot-starter-logging</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions></dependency>
  1. 已经有mybatis了,把不用的注释掉在这里插入图片描述

  2. 排除slf4j-log4j12的log4j,避免和外面的log4j冲突

		<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version><exclusions><!-- 排除slf4j-log4j12的log4j,避免和外面的log4j冲突 --><exclusion><artifactId>log4j</artifactId><groupId>log4j</groupId></exclusion></exclusions></dependency>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openwrt 官方版 安装配置 AdGuard Home + smartdns 告别广告烦扰 教程 软路由实测 系列五

1 安装 adguard home opkg update opkg install adguardhome #启动 /etc/init.d/adguardhome start /etc/init.d/adguardhome enable #查看 rootOpenWrt:~# ps| grep AdGuardHome5101 root 1233m S /usr/bin/AdGuardHome -c /etc/adguardhome.yaml -w /var/adguardhom…

云界洞见——基于移动云云数据库MySQL应用实践

目录 简介1 新手入门1.1 创建MySQL实例1.2 公网连接MySQL实例 2 操作指南2.1 创建数据库2.2 数据备份设置2.3 日志管理2.4 监控告警2.5 代码审计 3 应用场景4 总结 如今&#xff0c;大型企业如金融企业和银行等&#xff0c;在下一代的微服务架构转型要求下&#xff0c;需要基础…

渗透测试的测试流程与注意事项

软件测试流程 渗透测试是一种重要的软件测试技术&#xff0c;通过对系统进行模拟攻击和漏洞评估&#xff0c;帮助组织发现和修复潜在的安全风险&#xff0c;提高系统的安全性和稳定性。在进行渗透测试时&#xff0c;需要注意合法授权、技术能力、安全意识和报告质量等方面的问…

科学提效|AI融入零售业,未来零售的创新之旅

零售业正经历着由人工智能&#xff08;AI&#xff09;引领的转型浪潮。AI在零售和消费品&#xff08;CPG&#xff09;行业的应用前景广阔&#xff0c;它正以多种创新方式重塑行业的运作模式。且随着技术的不断进步&#xff0c;AI在零售业的应用将变得更加广泛和深入。AI不仅能够…

即刻起飞——基于Amazon Bedrock快速构建生成式AI应用

即刻起飞 —— 基于 Amazon Bedrock 快速构建生成式 AI 应用 1. 前言 在百模大战中&#xff0c;AI行业的发展正在经历前所未有的变革。这场竞争不仅推动了AI技术的快速发展&#xff0c;也揭示了AI行业的新趋势。这些趋势不仅影响着我们如何看待和使用AI&#xff0c;也预示着AI…

免费且非常火的日程管理软件:飞项

一、简介 1、在日常繁忙的工签中&#xff0c;是否事情一大堆却记不住&#xff1f;系统自带的日历用着却是不方便&#xff0c;不顺手&#xff0c;提醒不及时&#xff1f;待办、打卡、记事乱七八糟的混在一起&#xff0c;关键时候找不到&#xff1f;市面上的日程管理软件那么多&a…

springboot+jwt+shiro+vue+elementUI+axios+redis+mysql完成一个前后端分离的博客项目

目录 简易博客项目(springbootjwtshirovueelementUIaxiosredismysql)第一章 整合新建springboot,整合mybatisplus第一步 创建项目(第八步骤就行)数据库:1、 修改pom.xml2、修改配置文件3、创建数据库vueblog然后执行下面命令生成表 第二步 配置分页MybatisPlusConfig生成代码(d…

Spring Boot 系统学习第三天:Spring依赖注入原理分析

1.概述 Spring中关于依赖注入的代码实现非常丰富&#xff0c;涉及大量类和组件之间的协作与交互。从原理上讲&#xff0c;任何一个框架都存在一条核心执行流程&#xff0c;只要抓住这条主流程&#xff0c;就能把握框架的整体代码结构&#xff0c;Spring也不例外。无论采用何种依…

YoloV8改进策略:注意力改进|HCANet全局与局部的注意力模块CAFM|二次创新|即插即用

文章目录 摘要用在自己的论文中,该如何描述原论文中的描述在自己论文中描述代码与详解官方结果改进方法测试结果总结摘要 在CAFM模型的基础上进行二次创新,我成功地开发了一个性能显著提升的改进版模型。这一创新不仅优化了特征提取和融合的方式,还极大地提高了模型的泛化能…

【C语言】自定义类型:联合与枚举的简明概述

&#x1f525;引言 关于自定义类型除了我们常用的结构体&#xff0c;还有联合与枚举也是属于自定义类型。本篇将简单介绍联合与枚举基本概念和使用方法 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&…

如何在.NET中集成SignalR

SignalR 简介 SignalR是一个开放源代码库&#xff0c;可用于简化向应用添加实时Web功能&#xff0c;实时Web功能使服务器端代码能够将内容推送到客户端。 SignalR开源库&#xff1a;https://github.com/SignalR/SignalR SignalR 应用场景 需要高频次从服务器获取信息的应用&am…

QML_Switch控件_3选2的控制算法

QML_Switch控件_3选2的控制算法 import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.5Window {visible: truewidth: 400height: 400title: qsTr("Hello World")property int num: 0Row {spacing: 10Switch {id: switch1onCheckedChanged: {…

找出缺失的观测数据

代码实现&#xff1a; 在缺失的 n 个观测数据中&#xff0c;有 y 个观测数据是 x1&#xff0c;其余观测数据都是x int* missingRolls(int *rolls, int rollsSize, int mean, int n, int *returnSize) {int m rollsSize;int sum mean * (n m);int missingSum sum;for (int i…

Java进阶:详解与实战Java Stream API

Java进阶&#xff1a;详解与实战Java Stream API &#x1f31f; Java进阶&#xff1a;详解与实战Java Stream API &#x1f31f;摘要引言一、Java Stream API介绍&#x1f4da;1. 什么是Java Stream API&#xff1f;2. Java Stream API支持的功能3. 使用Java Stream API的优势…

Python-3.12.0文档解读-内置函数id()详细说明+记忆策略+常用场景+巧妙用法+综合技巧

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 详细说明 概述 参数 返回值 特性 实现细节&#xff08;CPython&#xff09; 安全…

Linux——Linux服务管理

服务管理大作业要求&#xff1a; 基本拓扑如下&#xff1a; 按照要求完成基本的系统管理任务&#xff1a; 完成所有系统的主机名、网络配置&#xff1b; 本次作业共需要3台虚拟机&#xff0c;分别作为客户端、综合应用服务器、存储服务器。三台虚拟机操作系统均为CentOS-Stream…

5.2网安学习第五阶段第二周回顾(个人学习记录使用)

本周重点 ①HIDS的基本应用(suricata) ②Suricata的基本应用 ③Suricata的流量检测 ④Suricata的https流量检测 ⑤利用Elastic整合Suricata日志 ⑥利用Wazuh对Suricata主动响应 本周主要内容 ①HIDS的基本应用(suricata) 1、NIDS 1、定义&#xff1a;网络入侵检测系统…

算法简单笔记

本人大二下学期报了中国大学生计算机设计大赛、珠澳计算机设计大赛、区块链软件设计大赛、蓝桥杯......然后一直准备着设计大赛的比赛&#xff0c;根本没空管蓝桥杯&#xff0c;就省考前准备了一星期&#xff0c;感觉是没有希望了&#xff0c;但是很莫名其妙的就拿了蓝桥杯Java…

通过css实现------简单边框流动特效

效果展示 代码部分 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice…

C++学习/复习5--构造函数与初始化/static成员/友元/内部类/匿名对象/编译器的拷贝构造优化

一、本章概要 二、再谈构造函数 1.构造体赋初值与初始化 2.初始化列表与初始化 2.1定义 2.2注意事项与举例 3.explicit关键字与构造函数 3.1隐式类型转换 也叫做自动类型转换 这种转换通常是从存储范围小的类型到存储范围大的类型&#xff0c;或者是从低精度的数值类型到高…