vue3+bpmn.js基本使用
一、案例使用依赖
// 必填"bpmn-js": "^7.3.1", "bpmn-js-properties-panel": "^0.37.2","bpmn-moddle":"^7.1.3","camunda-bpmn-moddle": "^7.0.1",// 可选"@element-plus/icons-vue": "2.0.10","element-plus": "2.2.27","vue": "3.2.45",
二、创建容器
1 、创建xmlStr.js文件
export var xmlStr = `
<?xml version="1.0" encoding="UTF-8"?><bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"id="sample-diagram"targetNamespace="http://bpmn.io/schema/bpmn"xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"><bpmn2:process id="Process_1" isExecutable="false"><bpmn2:startEvent id="StartEvent_1" /></bpmn2:process><bpmndi:BPMNDiagram id="BPMNDiagram_1"><bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1"><bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1"><dc:Bounds x="192" y="82" width="36" height="36" /></bpmndi:BPMNShape></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</bpmn2:definitions>`
2 、 创建index.vue文件,建立流程图容器并引入strXml.js 文件
<template><div class="container"><div class="canvas" ref="canvas"></div></div>
</template>
<script>
// 引入相关依赖
import BpmnModeler from "bpmn-js/lib/Modeler";
import { xmlStr } from "./utils/xmlStr.js"; // 直接引用 xml格式 内容为一个圆形节点
export default {data() {return {bpmnModeler: null,container: null,canvas: null,};},created() {},mounted() {this.init();},methods: {init() {// 获取canvas的dom节点const canvas = this.$refs.canvas;// 建模this.bpmnModeler = new BpmnModeler({container: canvas,});//将xmlStr中的内容显示在容器中this.bpmnModeler.importXML(xmlStr, (err) => {if (err) {console.error(err);} else {// 这里是成功之后的回调, 可以在这里做一系列事情console.log("success");}});},},
};
</script>
<style scoped>
.container {width: 100%;height: 1000px;position: relative;
}
.canvas {width: 100%;height: 100%;background: white;
}</style>
3 、效果图
三、引入左侧工具栏
1、在main.js中引入以下样式文件
import "bpmn-js/dist/assets/diagram-js.css"
import "bpmn-js/dist/assets/bpmn-font/css/bpmn.css"
import "bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css"
import "bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css"
// 注意 :引入文件后并不需要修改vue文件中的代码,工具栏就可以显示出来了。
2、效果图
四、引入右侧属性栏
1、在main.js中引入以下样式文件
import 'bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css'
2、在vue文件中添加代码
① 添加html结构和样式
// 添加在container节点下
<div id="js-properties-panel" class="panel"></div>
//样式
.panel {position: absolute;top: 0;right: 0;width: 300px;
}
② 导入所需依赖
import propertiesPanelModule from "bpmn-js-properties-panel";
import propertiesProviderModule from "bpmn-js-properties-panel/lib/provider/camunda";
import camundaModdleDescriptor from "camunda-bpmn-moddle/resources/camunda";
③ 在 bpmnModeler对象中添加内容
this.bpmnModeler = new BpmnModeler({propertiesPanel: {parent: "#js-properties-panel", // 对应div添加的id},additionalModules: [// 右边的属性栏propertiesProviderModule,propertiesPanelModule,],moddleExtensions: {camunda: camundaModdleDescriptor,},});
3 、效果图
五、汉化
1、创建translations.js文件
/***参考 https://github.com/bpmn-io/bpmn-js-i18n*/const translations = {"Name":"名称","Value":"值","ID":"唯一标识(ID)","General":"基础属性","Activate the create/remove space tool": "启动创建/删除空间工具","Activate the global connect tool": "启动全局连接工具","Activate the hand tool": "启动手动工具","Activate the lasso tool": "启动套索工具","Ad-hoc": "Ad-hoc子流程","Add Lane above": "添加到通道之上","Add Lane below": "添加到通道之下","Append ConditionIntermediateCatchEvent": "添加中间条件捕获事件","Append element": "添加元素","Append EndEvent": "添加结束事件","Append Gateway": "添加网关","Append Intermediate/Boundary Event": "添加中间/边界事件","Append MessageIntermediateCatchEvent": "添加消息中间捕获事件","Append ReceiveTask": "添加接收任务","Append SignalIntermediateCatchEvent": "添加信号中间捕获事件","Append Task": "添加任务","Append TimerIntermediateCatchEvent": "添加定时器中间捕获事件","Append compensation activity": "追加补偿活动","Append {type}": "追加 {type}","Boundary Event": "边界事件","Business Rule Task": "规则任务","Call Activity": "引用流程","Cancel Boundary Event": "取消边界事件","Cancel End Event": "取消结束事件","Change type": "更改类型","Collapsed Pool": "折叠池","Collection": "集合","Compensation Boundary Event": "补偿边界事件","Compensation End Event": "结束补偿事件","Compensation Intermediate Throw Event": "中间补偿抛出事件","Compensation Start Event": "补偿启动事件","Complex Gateway": "复杂网关","Conditional Boundary Event": "条件边界事件","Conditional Boundary Event (non-interrupting)": "条件边界事件 (非中断)","Conditional Flow": "条件流","Conditional Intermediate Catch Event": "中间条件捕获事件","Conditional Start Event": "条件启动事件","Conditional Start Event (non-interrupting)": "条件启动事件 (非中断)","Connect using Association": "文本关联","Connect using DataInputAssociation": "数据关联","Connect using Sequence/MessageFlow or Association": "消息关联","Create IntermediateThrowEvent/BoundaryEvent": "创建中间抛出/边界事件","Create DataObjectReference": "创建数据对象引用","Create DataStoreReference": "创建数据存储引用","Create element": "创建元素","Create EndEvent": "创建结束事件","Create Gateway": "创建网关","Create Group": "创建组","Create Intermediate/Boundary Event": "创建中间/边界事件","Create Pool/Participant": "创建池/参与者","Create StartEvent": "创建开始事件","Create Task": "创建任务","Create expanded SubProcess": "创建可折叠子流程","Create {type}": "创建 {type}","Data": "数据","Data Object Reference": "数据对象引用","Data Store Reference": "数据存储引用","Default Flow": "默认流","Divide into three Lanes": "分成三条通道","Divide into two Lanes": "分成两条通道","Empty Pool": "空泳道","Empty Pool (removes content)": "清空泳道(删除内容)","End Event": "结束事件","Error Boundary Event": "错误边界事件","Error End Event": "结束错误事件","Error Start Event": "错误启动事件","Escalation Boundary Event": "升级边界事件","Escalation Boundary Event (non-interrupting)": "升级边界事件 (非中断)","Escalation End Event": "结束升级事件","Escalation Intermediate Throw Event": "中间升级抛出事件","Escalation Start Event": "升级启动事件","Escalation Start Event (non-interrupting)": "升级启动事件 (非中断)","Events": "事件","Event Sub Process": "事件子流程","Event based Gateway": "事件网关","Exclusive Gateway": "独占网关","Expanded Pool": "展开泳道","Gateways": "网关","Inclusive Gateway": "包容网关","Intermediate Throw Event": "中间抛出事件","Link Intermediate Catch Event": "中间链接捕获事件","Link Intermediate Throw Event": "中间链接抛出事件","Loop": "循环","Manual Task": "手动任务","Message Boundary Event": "消息边界事件","Message Boundary Event (non-interrupting)": "消息边界事件 (非中断)","Message End Event": "结束消息事件","Message Intermediate Catch Event": "中间消息捕获事件","Message Intermediate Throw Event": "中间消息抛出事件","Message Start Event": "消息启动事件","Message Start Event (non-interrupting)": "消息启动事件 (非中断)","Parallel Gateway": "并行网关","Parallel Multi Instance": "并行多实例","Participants": "参与者","Participant Multiplicity": "参与者多重性","Receive Task": "接受任务","Remove": "移除","Script Task": "脚本任务","Send Task": "发送任务","Sequence Flow": "顺序流","Sequential Multi Instance": "串行多实例","Service Task": "服务任务","Signal Boundary Event": "信号边界事件","Signal Boundary Event (non-interrupting)": "信号边界事件 (非中断)","Signal End Event": "结束信号事件","Signal Intermediate Catch Event": "中间信号捕获事件","Signal Intermediate Throw Event": "中间信号抛出事件","Signal Start Event": "信号启动事件","Signal Start Event (non-interrupting)": "信号启动事件 (非中断)","Start Event": "开始事件","Sub Process": "子流程","Sub Processes": "子流程","Sub Process (collapsed)": "可折叠子流程","Sub Process (expanded)": "可展开子流程","Task": "任务","Tasks": "任务","Terminate End Event": "终止边界事件","Timer Boundary Event": "定时边界事件","Timer Boundary Event (non-interrupting)": "定时边界事件 (非中断)","Timer Intermediate Catch Event": "中间定时捕获事件","Timer Start Event": "定时启动事件","Timer Start Event (non-interrupting)": "定时启动事件 (非中断)","Transaction": "事务","User Task": "用户任务","already rendered {element}": "{element} 已呈现","diagram not part of bpmn:Definitions": "图表不是 bpmn:Definitions 的一部分","element required": "需要元素","correcting missing bpmnElement on {plane} to {rootElement}": "在 {plane} 上更正缺失的 bpmnElement 为 {rootElement}","element {element} referenced by {referenced}#{property} not yet drawn": "元素 {element} 的引用 {referenced}#{property} 尚未绘制","failed to import {element}": "{element} 导入失败","flow elements must be children of pools/participants": "元素必须是池/参与者的子级","more than {count} child lanes": "超过 {count} 条通道","missing {semantic}#attachedToRef": "在 {element} 中缺少 {semantic}#attachedToRef","multiple DI elements defined for {element}": "为 {element} 定义了多个 DI 元素","no bpmnElement referenced in {element}": "{element} 中没有引用 bpmnElement","no diagram to display": "没有要显示的图表","no shape type specified": "未指定形状类型","no parent for {element} in {parent}": "在 {element} 中没有父元素 {parent}","no process or collaboration to display": "没有可显示的流程或协作","out of bounds release": "越界释放","Version tag":"版本标记","Change element":"改变元素","Documentation":"文档","PROCESS":"流程","Element documentation":"元素文档说明","User assignment":"分配用户","History cleanup":"历史记录清理","Time to live":"历史记录生存时间","Tasklist":"任务列表","Candidate starter":"候选启动器","Candidate starter groups":"候选启动组","Specify more than one group as a comma separated list.":"多个组用','分隔.","Candidate starter users":"候选发起人","Specify more than one user as a comma separated list.":"多个用户用','分隔.","External task":"外部任务","Startable":"可启动(Startable)","Executable":"可直接执行","Job execution":"作业执行","Priority":"优先级","Forms":"表单","Execution listeners":"执行侦听器","Extension properties":"扩展属性","Event type":"事件类型","Listener type":"侦听器类型","Field injection":"字段注入","Start initiator":"开始发起人","Initiator":"发起人","Asynchronous continuations":"异步延续","Before":"之前","After":"之后","Inputs":"输入","Outputs":"输出","Local variable name":"局部变量名称","Assignment type":"分配类型","Format":"格式","Type":"类型","Expression":"表达式(Expression)","Script":"脚本(Script)","Delegate expression":"委托表达式(Delegate expression)","Java class":"Java类(Java class)","start":"开始(start)","end":"结束(end)","Start typing \"${}\" to create an expression.":"开始键入\"${}\"以创建表达式.","Process variable name":"过程变量名称","List values":"列表值","Map entries":"映射条目","Key":"键","Values":"值","Form reference":"引用表单ID","Binding":"结合","Version":"版本","Form fields":"表单字段","Form key":"表单ID","Embedded or External Task Forms":"拓展表单","Camunda Forms":"标准表单","Generated Task Forms":"内置表单","Refers to the process variable name":"指的是(引用)过程变量名称","Label":"标签","Default value":"默认值","Constraints":"限制","Properties":"属性","Config":"配置","Implementation":"实施","Field injections":"字段注入","Task listeners":"任务侦听器","Listener ID":"侦听器ID","Message":"消息","Global message reference":"引用全局消息ID","Result variable":"结果变量","Resource":"资源","External resource":"外部资源","Inline script":"内联脚本","Process variables":"过程变量","Global signal reference":"引用全局信号ID","Signal":"信号","Called element":"被调用元素","In mapping propagation":"在映射传播中","Propagate all variables":"传播所有变量","Out mapping propagation":"向外映射传播","In mappings":"在映射中","Source":"来源","Target":"目标","Local":"局部的(Local)","Out mappings":"输出映射","Link":"链接","Timer":"定时器","Retry time cycle":"重试时间周期","Variable name":"变量名称","Condition Expression":"条件表达式","Condition":"条件","Process documentation":"流程文档","Assignee":"委托人","Candidate groups":"候选组","Candidate users":"候选用户","Due date":"期限","The due date as an EL expression (e.g. ${someDate}) or an ISO date (e.g. 2015-06-26T09:54:00).":"到期日期为EL表达式(例如${someDate})或ISO日期(例如2015-06-26T09:54:00)","Follow up date":"跟进日期","The follow up date as an EL expression (e.g. ${someDate}) or an ISO date (e.g. 2015-06-26T09:54:00).":"作为EL表达式(例如${someDate})或ISO日期(例如2015-06-26T09:54:00)的跟进日期","Connector ID":"连接器ID","Connector inputs":"连接器输入","Connector outputs":"连接器输出","Topic":"主题","Errors":"错误","Global error reference":"引用全局错误ID","Throw expression":"Throw表达式","Decision reference":"引用决策ID","Tenant ID":"租户ID","Multi-instance":"多实例","Loop cardinality":"循环基数","Completion condition":"完成条件","Element variable":"元素变量","Asynchronous before":"异步之前","Asynchronous after":"异步之后",};export const customTranslate = (template, replacements) =>{replacements = replacements || {};// Translatetemplate = translations[template] || template;// Replacereturn template.replace(/{([^}]+)}/g, (_, key)=> {return replacements[key] || '{' + key + '}';});}
2、将js文件引入vue文件中
// 汉化
import { customTranslate } from "./utils/translations.js";
3、在 bpmnModeler对象中additionalModules数组添加内容
this.bpmnModeler = new BpmnModeler({additionalModules: [// 汉化{translate: ["value", customTranslate],},]});
4、效果图
六、导出xml 功能实现
<!-- 添加在container节点下 -->
<div class="btm"><el-button type="primary" @click="exportXML()">导出XML</el-button></div><!-- 样式 -->
.btm{position: absolute;left:100px;top:0;
}<!-- 在methods中添加方法-->
methods:{
exportXML(){this.bpmnModeler.saveXML(({format:true}),(err,xml)=>{this.exportFile(xml,"bpmn.xml")})},exportFile(data,fileName){var url = window.URL.createObjectURL(new Blob([data]))var line = document.createElement("a")line.href = urlline.download = fileNameline.click()}
}
七、导出svg 功能实现
<!-- 添加在container节点下 -->
<div class="btm"><el-button type="primary" @click="exportSVG()">导出SVG</el-button></div><!-- 样式 -->
.btm{position: absolute;left:100px;top:0;
}<!-- 在methods中添加方法-->
methods:{
exportSVG(){this.bpmnModeler.saveSVG(({format:true}),(err,xml)=>{this.exportFile(xml,"bpmn.svg")})},exportFile(data,fileName){var url = window.URL.createObjectURL(new Blob([data]))var line = document.createElement("a")line.href = urlline.download = fileNameline.click()}
}
八、导入xml文件功能实现
<!-- 添加在container节点下 -->
<div class="btm"><el-button type="primary" @click="importXML()">导入XML</el-button></div><!-- 样式 -->
.btm{position: absolute;left:100px;top:0;
}<!-- 在methods中添加方法-->
methods:{importXML(){var file=document.getElementById("file")file.click()},getFiles(files){var file = files.target.files[0]// 创建文件对象var fileReader = new FileReader()fileReader.readAsText(file,"UTF-8")fileReader.onload=(row)=>{// 将xml文件中的内容赋值给容器this.bpmnModeler.importXML(row.target.result,(err)=>{if(err){}else{console.log("success")}})}}
}
相关文章:
vue3+bpmn.js基本使用
一、案例使用依赖 // 必填"bpmn-js": "^7.3.1", "bpmn-js-properties-panel": "^0.37.2","bpmn-moddle":"^7.1.3","camunda-bpmn-moddle": "^7.0.1",// 可选"element-plus/icons-vue&qu…...
《数据结构:单链表》
“希望就像星星,或许光芒微弱,但永不熄灭。” 博主的个人gitee:https://gitee.com/friend-a188881041351 一.概念与结构 链表是一种物理存储上非连续、非顺序的存储结构,数据元素的顺序逻辑是通过链表中的指针链接次序实现的。 单…...
RedHatLinux(2025.3.22)
1、创建/www目录,在/www目录下新建name和https目录,在name和https目录下分别创建一个index.htm1文件,name下面的index.html 文件中包含当前主机的主机名,https目录下的index.htm1文件中包含当前主机的ip地址。 (1&…...
C++异常处理完全指南:从原理到实战
文章目录 异常的基本概念基本异常抛出与捕获多类型异常捕获异常重新抛出异常安全异常规范(noexcept)栈展开与析构标准库异常总结 异常的基本概念 异常是程序运行时发生的非预期事件(如除零、内存不足)。C通过try、catch和throw提…...
Oracle 19C 备份
在 Oracle 19c 中,备份数据库通常使用 RMAN(Recovery Manager) 工具,它是 Oracle 提供的官方备份和恢复工具。以下是通过 RMAN 备份 Oracle 19c 数据库的详细步骤和命令。 一、RMAN 基本概念 RMAN 是 Oracle 的备份和恢复工具&am…...
深入理解MySQL聚集索引与非聚集索引
在数据库管理系统中,索引是提升查询性能的关键。MySQL支持多种类型的索引,其中最基础也是最重要的两种是聚集索引和非聚集索引。本文将深入探讨这两种索引的区别,并通过实例、UML图以及Java代码示例来帮助您更好地理解和应用它们。 一、概念…...
用Python打造智能宠物:强化学习的奇妙之旅
友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...
OGG故障指南:OGG-01163 Bad column length (xxx) specified for column
报错 OGG-01163 Bad column length (xxx) specified for column AAA in table OWNER.TABLE, maximum allowable length is yyy原因 源端修改了字段长度。 虽然源端和目标端的长度已经通过DDL语句修改到一致,在extract进程未重启的情况下,生成的trail文…...
XML标签格式转换为YOLO TXT格式
针对的是多边形(<polygon>)来描述对象的边界,而不是传统的矩形框(<bndbox>) import xml.etree.ElementTree as ET import os from pathlib import Path# 解析VOC格式的XML文件,提取目标框的标…...
Java的string默认值
在Java中,String类型的默认值取决于其定义和实例化的方式。 以下是关于String默认值的详细说明 未实例化的String变量 如果定义一个String变量但未对其进行实例化(即未使用new关键字或直接赋值),其默认值为:ml-search[null]。这…...
侯捷 C++ 课程学习笔记:C++ 中引用与指针的深度剖析
目录 一、引言 二、引用与指针的基本概念 (一)引用 (二)指针 三、引用与指针的区别 (一)定义与初始化 (二)内存空间与 NULL 值 (三)自增操作 …...
llamafactory微调效果与vllm部署效果不一致如何解决
在llamafactory框架训练好模型之后,自测chat时模型效果不错,但是部署到vllm模型上效果却很差 这实际上是因为llamafactory微调时与vllm部署时的对话模板不一致导致的。 对应的llamafactory的代码为 而vllm启动时会采用大模型自己本身设置的对话模板信息…...
欢乐力扣:合并两个有序链表
文章目录 1、题目描述2、思路 1、题目描述 合并两个有序链表。 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 在这里插入图片描述 2、思路 参考官方题解,简单来说就是不断调整链表指针的指向,让…...
访问者模式_行为型_GOF23
访问者模式 访问者模式(Visitor Pattern)是一种行为型设计模式,核心思想是将算法与对象结构分离,使得在不修改现有对象结构的前提下,可以动态添加新的操作。这类似于“医生查房”——医生(访问者ÿ…...
排序算法2-选择排序
目录 1.常见排序算法 2.排序算法的预定函数 2.1交换函数 2.2测试算法运行时间的函数 2.3已经实现过的排序算法 3.选择排序算法的实现 3.1直接选择排序 3.2堆排序 4.下讲预告 1.常见排序算法 前面一讲已经讲解了插入排序,这一讲我将讲解选择排序,…...
openwrt24.10.0版本上安装istoreOS的屏幕监控插件
lcdsimple 插件支持在软路由下面显示统计信息到 HDMI 或者 VGA 上。 手动安装方法: 保证 quickstart 版本大于 0.9.7 安装 lcdsimple 具体方法: opkg update is-opkg install quickstart opkg install lcdsimple 手动下载 QUICKSTART 跟 LCD SIMPL…...
内网服务器无法通过公网地址访问映射到公网的内网服务
内网服务器无法通过公网地址访问映射到公网的内网服务 问题现象问题原因解决方法总结 前几天遇到一个网络问题,在这里做下记录,希望能帮助到有相同问题的朋友。 问题现象 网络拓扑如上所示,服务器1和服务器2在同一内网,网段均为1…...
基于Web的交互式智能成绩管理系统设计
目录 摘要 绪论 一、应用背景 二、行业发展现状 三、程序开发的重要意义 四、结语 1 代码 2 数据初始化模块 3 界面布局模块 4 核心功能模块 5 可视化子系统 6 扩展功能模块 7 架构设计亮点 功能总结 一、核心数据管理 二、智能分析体系 三、可视化系统 四、扩…...
从虚拟现实到可持续设计:唐婉歆的多维创新之旅
随着线上线下融合逐渐成为全球家居与建材行业的发展趋势,全球市场对高品质、个性化家居和建材产品的需求稳步攀升,也对设计师提出更高的要求。在这一背景下,设计师唐婉歆将以产品设计师的身份,正式加入跨国企业AmCan 美加集团,投身于备受行业瞩目的系列设计项目。她将负责Showr…...
PHP MySQL 预处理语句
PHP MySQL 预处理语句 引言 在PHP中与MySQL数据库进行交互时,预处理语句是一种非常安全和高效的方法。预处理语句不仅可以防止SQL注入攻击,还可以提高数据库查询的效率。本文将详细介绍PHP中预处理语句的用法,包括其基本概念、语法、优势以及在实际开发中的应用。 预处理…...
基于飞腾/龙芯+盛科CTC7132全国产交换机解决方案
产品介绍 盛科CTC7132,内置ARM-Cortex A53 主频1.2GHz;支持24个千兆电口,24个万兆光口(850nm多模),1个千兆管理网口,1个管理串口;支持1个百兆健康管理网口:用于设备端口状态、电压、…...
Vue动态添加或删除DOM元素:购物车实例
Vue 指令系列文章: 《Vue插值:双大括号标签、v-text、v-html、v-bind 指令》 《Vue指令:v-cloak、v-once、v-pre 指令》 《Vue条件判断:v-if、v-else、v-else-if、v-show 指令》 《Vue循环遍历:v-for 指令》 《Vue事件处理:v-on 指令》 《Vue表单元素绑定:v-model 指令》…...
深入理解Agentic Workflows
本文来源:https://weaviate.io/blog/what-are-agentic-workflows 这篇文章将带你深入理解AI Agent、Agentic AI、Agentic Workflows、Agentic Architectures等概念,非常值得推荐。 一、什么是 AI Agents? AI Agents 是结合了大模型进行推理和…...
深入理解:阻塞IO、非阻塞IO、水平触发与边缘触发
深入理解:阻塞IO、非阻塞IO、水平触发与边缘触发 在网络编程和并发处理中,理解不同的 I/O 模型和事件通知机制至关重要。本文将深入探讨阻塞IO(Blocking IO)、非阻塞IO(Non-Blocking IO)、水平触发&#x…...
deepseek 技术的前生今世:从开源先锋到AGI探索者
一、引言:中国AI领域的“超越追赶”样本 DeepSeek(深度求索)作为中国人工智能领域的代表性企业,自2023年创立以来,凭借开源生态、低成本技术路径与多模态创新,迅速从行业新秀成长为全球AI竞赛中的关键力量…...
合规+增效 正也科技携智能营销产品出席中睿论坛
正也科技作为医药数字化领域的标杆企业,受邀参展第二届中睿医健产业企业家年会暨第十三届中睿医药新春论坛,本次论坛以“合力启新程”为主题,吸引了800多位医药健康企业的董事长、总经理参与,并通过主论坛、分论坛、路演等形式探讨…...
Python小练习系列 Vol.5:数独求解(经典回溯 + 剪枝)
🧠 Python小练习系列 Vol.5:数独求解(经典回溯 剪枝) 🧩 数独不仅是益智游戏,更是回溯算法的典范!本期我们将用 DFS 剪枝 的方式一步步求解一个标准 9x9 数独。 🧩 一、题目描述 …...
基于kafka的分布式日志收集平台项目(续)
#第一个容易错的地方 上次做到测试集群的创建topic时出现了错误 具体错误是配置信息出错了,然后报错如下: #现在来具体警戒哪些地方要特别注意: ### node.id 和listeners 和advertised.listeners这三行是每一台机器(每个节点&…...
C++运算符重载、类的转换构造函数和类型转换函数的基础练习
练习1:(困难) 建立一个矩阵类,可以完成指定的操作或运算。 说明: (1)、矩阵为2行3列,基类型为整型; (2)、操作或运算:初始化&…...
第一天 Linux驱动程序简介
目录 一、驱动的作用 二、裸机驱动 VS linux驱动 1、裸机驱动 2、linux驱动 三、linux驱动位于哪里? 四、应用编程 VS 内核编程 1、共同点 2、不同点 五、linux驱动分类 1、字符设备 2、块设备 3、网络设备 六、Linux驱动学习难点与误区 1、学习难点 …...
408 计算机网络 知识点记忆(1)
前言 本文基于王道考研课程与湖科大计算机网络课程教学内容,系统梳理核心知识记忆点和框架,既为个人复习沉淀思考,亦希望能与同行者互助共进。(PS:后续将持续迭代优化细节) 核心知识记忆点 计算机网络&a…...
scala简介和基础语法
Scala简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。Scala 源代码被编译成 Java 字节码,所以它可…...
[特殊字符] Hyperlane:Rust 高性能 Web 框架的终极选择 [特殊字符]
🔥 Hyperlane:Rust高性能Web框架的终极选择 🔥 📈 性能封神:32万QPS碾压群雄 在1000并发压测中,Hyperlane以307,568.90 req/s的恐怖QPS稳居Rust生态第一,甚至超越Tokio框架!开启Kee…...
树莓派超全系列文档--(13)如何使用raspi-config工具其二
如何使用raspi-config工具其二 raspi-configPerformance optionsOverclockGPU memoryOverlay file systemFan Localisation optionsLocaleTime zoneKeyboardWLAN country Advanced optionsExpand filesystemNetwork interface namesNetwork proxy settingsBoot orderBootloader…...
瑞芯微 RKrga接口 wrapbuffer_virtualaddr 使用笔记
一、源码 官方在librga中给了很多 demo 以供参考,例如 imresize 操作: /** Copyright (C) 2022 Rockchip Electronics Co., Ltd.* Authors:* YuQiaowei <cerf.yurock-chips.com>** Licensed under the Apache License, Version 2.0 (the &qu…...
管理系统-接口信息
1.用户查询接口 1.1 查询所有用户 请求路径:GET /users 接口描述:查询所有用户的基本信息及关联的角色、应用数据。 请求参数:无 响应数据:{"code": 1,"msg": "success","data": [{&qu…...
java项目之基于ssm的乡镇自来水收费系统(源码+文档)
项目简介 乡镇自来水收费系统实现了以下功能: 乡镇自来水收费系统在Eclipse环境中,使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理员管理水表,审核用户更换…...
基于高德地图实现地图交互功能的探索与总结
在前端开发项目中,集成地图功能并实现丰富的交互效果是一项具有挑战性但又极具实用价值的任务。最近,我在项目里负责实现基于高德地图的相关功能,包括地图初始化、输入提示、点击获取经纬度及地址等操作。在这个过程中,遇到了不少…...
代码随想录算法训练营--打卡day4
一.移除链表元素 1.题目链接 203. 移除链表元素 - 力扣(LeetCode) 2.思路 通过 while 循环来遍历链表,只要 cur 的下一个节点不为空,就继续循环。在循环中,对 cur 的下一个节点的值进行判断: 值不等于…...
【题解】AtCoder At_abc399_d [ABC399D] Switch Seats
题目大意 请点击 这里 查看原题面。 有一个长度为 2 ⋅ N 2\cdot N 2⋅N 的序列 A A A,其中 1 , 2 , … , N 1,2,\dots,N 1,2,…,N 各出现了两次。现在要找满足如下条件的数对 ( a , b ) (a,b) (a,b) 的个数: a a a 的两次出现不相邻。 b b b 的两…...
【力扣刷题|第十七天】0-1 背包 完全背包
目标和 力扣题目网址:目标和 这道题我们先用回溯的思想来做。首先我们设正数和为S,数组和为N,目标值为T,那么S-(N-S)T化简之后可以得S(TN)/2即选择的正数个数为偶数,而且NT也为偶数,那么第一个判断条件我们就有了&…...
实时目标检测新突破:AnytimeYOLO——随时中断的YOLO优化框架解析
目录 一、论文背景与核心价值 二、创新技术解析 2.1 网络结构革新:Transposed架构 2.2 动态路径优化算法 三、实验结果与性能对比 3.1 主要性能指标 3.2 关键发现 四、应用场景与部署实践 4.1 典型应用场景 4.2 部署注意事项 五、未来展望与挑战 一、论文背景与核心…...
Spring中的IOC及AOP概述
前言 Spring 框架的两大核心设计思想是 IOC(控制反转) 和 AOP(面向切面编程)。它们共同解决了代码耦合度高、重复逻辑冗余等问题。 IOC(控制反转) 1.核心概念 控制反转(Inversion of Control…...
为mariadb和mysql添加用户和修改密码的方法
一、查看MariaDB中的用户 步骤1:登录MariaDB sudo mysql -u root -p # 使用root账户登录(输入密码) 步骤2:查询用户列表 -- 切换到mysql系统数据库 USE mysql; -- 查看所有用户及其主机权限 SELECT User, Host FROM user; 输出…...
2025年3月电子学会c++五级真题
结绳 #include <bits/stdc.h> using namespace std;int n,a[10010];int main() {cin>>n;for(int i 0;i<n;i){cin>>a[i];}sort(a0,an);//将a数组从小到大排序double sum 0;for(int i 0;i<n;i){sum (suma[i])/2;}cout<<(int)sum;return 0; } 最…...
JSP 指令
JSP 指令 概述 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,从而实现动态内容的生成。JSP指令是JSP页面中用于设置整个页面属性的特殊标记,它们对整个JSP页面或部分页面进行配置…...
RabbitMQ高级特性--发送方确认
目录 1. confirm确认模式 1.配置RabbitMQ 2.设置确认回调逻辑并发送消息 2.Return退回模式 1.配置RabbitMQ 2.设置返回回调逻辑并发送消息 在使用RabbitMQ的时候, 可以通过消息持久化来解决因为服务器的异常崩溃而导致的消息丢失, 但是还有⼀个问题, 当消息的生产者将消息发送出…...
AUTOSAR_StbM_详解
AUTOSAR同步时基管理器(StbM)详解 基于AUTOSAR规范对StbM模块架构与功能的全面解析 目录 AUTOSAR同步时基管理器(StbM)详解 目录1. 概述 1.1 StbM的功能与用途1.2 StbM的主要用例2. 组件架构 2.1 StbM组件架构图2.2 组件交互说明 2.2.1 客户类型2.2.2 内部组件2.2.3 外部接口3.…...
扩散模型总结
目录 定义与原理 发展历程 正向扩散过程 反向扩散过程 噪声预测网络 离散时间模型 连续时间模型 条件扩散模型 生成质量 训练稳定性 采样灵活性 图像生成 音频合成 文本生成 计算效率 模型复杂度 定义与原理 扩散模型是一种新型的生成模型,其核心原理源于热力…...
RCE--解法
目录 一、利用php伪协议 1.代码分析 2.过程 3.结果 编辑 4.防御手段 二、RCE(php中点的构造) 1.代码分析 2.过程 一、利用php伪协议 <?php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag|system|php|cat|sort…...