Spring Boot整合Camunda打造高效工作流程
🎉🎉欢迎来到我的CSDN主页!🎉🎉
🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚
👉点击这里,就可以查看我的主页啦!👇👇
尘缘的个人主页
🎁如果感觉还不错的话请给我点赞吧!🎁🎁
💖期待你的加入,一起学习,一起进步!💖💖
目录
- 1 Spring Boot和Camunda的基本介绍
- 1.1 Spring Boot的特点和优势
- 1.2 Camunda的特点和优势
- 1.3 工作流的基本概念和重要性
- 2 环境搭建
- 2.1 Spring Boot的环境搭建
- 2.2 Camunda的环境搭建
- 2.3 Spring Boot和Camunda的整合步骤
- 3 实现工作流
- 3.1 设计工作流模型
- 3.2 定义工作流任务
- 3.3 实现工作流引擎
- 3.4 工作流的启动和控制
- 4 实例演示
- 4.1 创建一个简单的工作流示例
- 4.2 通过Spring Boot启动工作流
- 4.3 监控和管理工作流运行状态
- 4.3.1 使用Camunda Modeler
- 4.3.2 使用Spring Actuator
- 4.3.3 使用Camunda Cockpit
- 5 高级特性
- 5.1 工作流的并行和分支处理
- 5.2 工作流的异常处理和补偿机制
- 5.3 工作流的性能优化和扩展
在现代的软件开发中,工作流管理是一个重要的组成部分。它能够帮助更好地管理和控制业务流程,提高业务效率和质量。Spring Boot是一个流行的Java开发框架,而Camunda是一个强大的工作流引擎。将Spring Boot与Camunda整合,可以实现高效、灵活且易于管理的工作流系统。
在本文中,将介绍如何使用Spring Boot和Camunda来创建和管理工作流程。将从基本的环境搭建开始,然后逐步深入到工作流的设计和实现,最后通过实例演示如何启动和控制工作流。
1 Spring Boot和Camunda的基本介绍
1.1 Spring Boot的特点和优势
Spring Boot是一种基于Spring框架的开源Java开发框架,旨在简化新Spring应用的初始搭建以及开发过程。它通过提供一系列快速开发的工具和功能,使得开发者能够更加高效地构建和部署应用。
Spring Boot的主要特点和优势包括:
- 简化配置:采用约定优于配置的理念,提供大量默认配置,大大减少了开发者的配置工作量。
- 自动化管理:自动引入所需的依赖库,避免了手动管理依赖的繁琐。
- 内嵌服务器:可以内嵌Tomcat、Jetty等服务器,无需单独部署应用,简化了应用的部署和管理。
- 丰富的生态:与Spring生态系统完美集成,可以利用Spring提供的丰富功能和扩展性。
- 快速构建:提供了许多快速构建项目的工具和模板,可以快速搭建和启动新的应用。
这些特点和优势使得Spring Boot成为现代Java开发的首选框架之一,特别适合于快速开发、微服务架构和云原生应用等场景。
1.2 Camunda的特点和优势
Camunda是一个开源的工作流引擎,专为企业级工作流管理和自动化而设计。以下是Camunda的一些特点和优势:
- 强大的工作流定义:Camunda提供了符合BPMN(Business Process Model and Notation)标准的工作流定义语言,能够清晰描述复杂的业务流程。
- 易于集成:可以轻松与现有系统整合,支持各种数据源、应用和平台的接口。
- 可扩展性:提供丰富的API,允许开发者定制和扩展功能,满足特定业务需求。
- 高性能执行:优化的引擎性能确保流程可高效运行,即使是在高负载环境下。
- 可视化管理与监控:内置的管理工具可以实现流程的实时监控,同时提供直观的界面来管理流程实例。
Camunda的这些特性使其成为实现业务流程自动化的强大工具,特别适合需要高度灵活性和控制力的应用场景。
1.3 工作流的基本概念和重要性
工作流是一系列按照特定顺序组织的任务,用于完成特定的业务目标。工作流通常涉及多个参与者,包括人、系统或组织。工作流的主要目标是提高效率、减少错误并提供更好的控制和可见性。
工作流的重要性主要体现在以下几个方面:
- 提高效率:通过自动化和优化工作流程,可以减少不必要的步骤和等待时间,提高工作效率。
- 减少错误:工作流可以明确每个任务的执行者和执行条件,减少人为错误和遗漏。
- 提供控制和可见性:工作流可以清晰地展示业务的执行情况,提供实时的监控和管理。
- 灵活性和适应性:工作流可以根据业务的变化进行调整和优化,适应不同的业务需求和环境。
通过对Spring Boot和Camunda的了解,以及对工作流的基本认识,可以更好地理解如何利用这两个技术来创建和管理工作流程。接下来,将进入环境搭建的阶段,为后续的工作流设计和实现做好准备。
2 环境搭建
在进行Spring Boot与Camunda的整合之前,需要首先搭建好各自的开发环境。以下是分别针对Spring Boot和Camunda的环境搭建步骤,以及它们整合的具体操作。
2.1 Spring Boot的环境搭建
-
确保Java环境:安装Java Development Kit (JDK),因为Spring Boot应用需要Java运行环境。
-
选择IDE:选择喜爱的集成开发环境(IDE),如IntelliJ IDEA、Eclipse等。
-
创建项目:在IDE中创建一个新的Spring Boot项目。许多IDE都提供了创建Spring Boot项目的模板。
-
配置依赖:在项目的构建文件(如pom.xml或build.gradle)中添加必要的依赖项。Spring Boot Starter Web是一个常用的依赖,它包括了构建web应用所需的所有基本组件。
-
开发应用:编写的Spring Boot应用程序代码。Spring Boot自动配置特性将简化大部分的配置工作。
-
运行应用:通过IDE或者命令行工具运行Spring Boot应用。通常,一个简单的
mvn spring-boot:run
或gradle bootRun
命令就可以启动应用。 -
测试:利用Spring Boot内嵌的Tomcat服务器,可以方便地测试的应用。
2.2 Camunda的环境搭建
- 下载Camunda BPM:访问Camunda的官方下载页面(https://camunda.com/download/),选择一个适合的版本进行下载。解压下载的zip或tar包以安装Camunda BPM平台。
- 安装Java开发工具包(JDK):确保的计算机上安装了OpenJDK 8或更高版本。如果计划在Windows操作系统上安装,推荐使用64位版本,并保证有足够的内存,例如16GB。
- 配置Camunda环境:编辑Camunda的配置文件,如
camunda.cfg
,设置数据库连接和其他相关配置。 - 部署流程定义:使用Camunda Modeler设计工具来创建和编辑BPMN图表,并将这些流程定义部署到Camunda引擎中。
- 启动Camunda引擎:完成配置后,启动Camunda服务,这将启动流程引擎并使其开始监听流程定义和实例请求。
- 使用Camunda API:通过REST API或者Java API与Camunda引擎交互,管理和控制流程实例。
在整合Spring Boot和Camunda时,需要在项目的配置文件中添加Camunda的依赖项,这可以通过Maven或Gradle来完成。在Spring Boot项目中集成Camunda工作流引擎的过程需要特别注意依赖管理和配置的设置。
搭建Camunda环境的关键在于下载和安装Camunda BPM平台、确保Java环境的正确性以及配置和部署流程定义。完成这些步骤后,就可以开始在Spring Boot项目中集成和使用Camunda工作流引擎了。
2.3 Spring Boot和Camunda的整合步骤
整合Spring Boot和Camunda的步骤通常如下:
-
添加Camunda依赖:在Spring Boot项目的构建文件中加入Camunda的Starter依赖。
-
配置数据源:在Spring Boot的配置文件中(如application.properties或application.yml),配置数据源信息以连接到Camunda使用的数据库。
-
创建流程引擎配置:可能需要创建一个配置类,用于产生和配置Camunda的流程引擎Bean。
-
流程定义部署:可以在Spring Boot应用启动时自动部署流程定义到Camunda引擎中。
-
流程服务的集成:通过注入Camunda的引擎服务,可以在Spring管理的bean中使用流程服务。
-
业务逻辑实现:在Spring应用中实现具体的业务逻辑,并通过Camunda的API来管理流程。
-
测试和调试:运行Spring Boot应用,并通过各种测试工具进行功能和流程的测试。
完成以上步骤后,就拥有了一个整合了Spring Boot和Camunda的工作环境,接下来可以进行更复杂的流程设计和实现了。
3 实现工作流
3.1 设计工作流模型
在实现工作流之前,需要设计一个合适的工作流模型。工作流模型描述了工作流程中的活动、任务和它们之间的关系。
定义了一个简单的工作流模型,包括开始、条件判断、执行任务1、执行任务2和结束等节点。根据条件判断的结果,工作流将执行不同的任务,并在完成后结束。
3.2 定义工作流任务
在设计好工作流模型后,需要为每个任务定义具体的操作。这些操作可以是函数、方法或服务调用等。以下是一个简单的Python代码,演示如何定义工作流任务:
def execute_task1():# 执行任务1的代码逻辑passdef execute_task2():# 执行任务2的代码逻辑passdef condition_check():# 条件判断的逻辑,返回True或Falsereturn Truedef workflow():if condition_check():execute_task1()else:execute_task2()workflow()
在这个示例中,定义了三个函数:execute_task1
、execute_task2
和condition_check
。execute_task1
和execute_task2
分别表示执行任务1和任务2的具体操作。condition_check
用于进行条件判断,返回True或False。最后,定义了一个workflow
函数来组织整个工作流程,根据条件判断的结果执行相应的任务。
3.3 实现工作流引擎
实现一个工作流引擎通常涉及以下几个关键步骤:
- 定义流程模板:首先需要定义流程模板,这是描述工作流程结构和内容的基础。流程模板可以包含多种类型的节点,如开始节点、结束节点、任务节点等,以及它们之间的连接关系。
- 流程引擎的数据库设计:为了确保工作流引擎的通用性,流程数据和业务数据应该相分离。流程引擎相关的表负责记录流程的跳转和走向,而业务表单数据和附件则存储在业务表中。两者之间通过流程实例ID (processInstanceId) 和业务数据主键相互关联。
- 选择或开发工作流引擎:可以选择现有的工作流引擎框架,如Activiti,它支持使用BPMN2.0建模语言定义业务流程,并按照预定义的流程执行。这样可以减少因流程变更而导致的系统升级改造工作量。
- 实现流程控制逻辑:包括简单顺序流程、条件流程、分支/合并流程等。在条件流程中,决策节点的输出边可能包含表达式,流程将向表达式值为true的方向行进。在分支/合并流程中,分支与合并要成对出现,由合并节点判断是否具备合并条件。
- 提供用户界面:为用户提供一个界面来管理和监控工作流程的执行状态,以及进行流程的启动、审批等操作。
- 测试和优化:在实现完成后,需要进行全面的测试以确保工作流引擎的稳定性和可靠性。根据测试结果进行必要的优化。
3.4 工作流的启动和控制
一旦工作流引擎实现完成,可以通过以下方式启动和控制工作流程:
- 启动工作流程:用户可以通过用户界面或API调用来启动一个工作流程。这通常涉及到创建一个流程实例,并将其加入到流程引擎中。
- 执行任务:工作流引擎会根据流程定义自动推进流程,用户需要在适当的时机执行他们的任务,例如填写表单、审批请求等。
- 流程监控和管理:管理员可以通过管理界面监控工作流程的状态,并在必要时进行干预,如暂停、取消或重新分配任务。
- 日志和审计:记录工作流程的历史记录,以便进行审计和问题追踪。
通过这些步骤,可以实现一个完整的工作流引擎,并通过有效的控制机制来管理和执行复杂的业务流程。
4 实例演示
4.1 创建一个简单的工作流示例
让创建一个简单的工作流,包括两个任务:TaskA
和TaskB
。这个工作流将按照以下顺序执行这两个任务:
- 开始节点
TaskA
TaskB
- 结束节点
可以使用BPMN2.0建模语言来定义这个工作流。以下是一个简单的BPMN2.0文件:
<?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"targetNamespace="http://example.com/workflow"><process id="simpleWorkflow" name="Simple Workflow"><startEvent id="start" /><sequenceFlow id="flow1" sourceRef="start" targetRef="taskA" /><userTask id="taskA" name="Task A" /><sequenceFlow id="flow2" sourceRef="taskA" targetRef="taskB" /><userTask id="taskB" name="Task B" /><sequenceFlow id="flow3" sourceRef="taskB" targetRef="end" /><endEvent id="end" /></process></definitions>
4.2 通过Spring Boot启动工作流
要在Spring Boot应用程序中启动这个工作流,需要进行以下步骤:
- 添加必要的依赖项:在项目的
pom.xml
文件中添加Camunda和Spring Boot相关的依赖项。例如:
<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Camunda Spring Boot Starter --><dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boot-starter</artifactId><version>7.15.0</version></dependency>
</dependencies>
- 配置工作流引擎:在Spring Boot的配置文件(如
application.properties
)中配置工作流引擎的相关参数,例如数据库连接信息、流程文件路径等。例如:
# 配置数据库连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/camunda?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password# 配置流程文件路径
camunda.bpm.deployment-resource=classpath:/processes/*.bpmn20.xml
-
启动Spring Boot应用程序:运行Spring Boot应用程序的主类,它将自动加载并启动工作流引擎。
-
部署和启动工作流实例:使用Camunda提供的API或用户界面,部署和启动工作流实例。例如,可以使用REST API发送POST请求到
/engine-rest/deployment/create
接口来部署流程文件,然后使用POST请求到/engine-rest/process-definition/key/{processDefinitionKey}/start
接口来启动工作流实例。
通过这些步骤,可以在Spring Boot应用程序中成功启动和控制工作流。请确保根据实际需求进行适当的配置和调整。
4.3 监控和管理工作流运行状态
在Spring Boot和Camunda整合的环境中,监控和管理工作流运行状态可以通过多种方式实现。以下是一些关键步骤和方法来管理和监控工作流:
4.3.1 使用Camunda Modeler
-
使用Camunda Modeler进行流程设计:Camunda Modeler是一个基于Web的流程设计工具,可以用于创建、编辑和管理BPMN图表。通过这个工具,可以可视化地定义和修改工作流。
-
部署流程定义:将设计好的BPMN图表部署到Camunda引擎中,生成流程定义(Process Definition)。
-
启动流程实例:通过API或Modeler界面启动具体的流程实例。
-
访问查询和报告:Camunda提供了REST API,可以用来查询流程实例的状态、任务、变量等信息。例如,可以使用
GET /engine-rest/process-instance
来获取所有流程实例的信息。 -
任务管理:通过API或用户界面处理任务,比如领取任务、完成任务等。
-
事件订阅:Camunda支持事件订阅机制,允许在工作流中的特定事件发生时执行自定义逻辑。
-
审计和历史数据:Camunda记录了所有的操作和状态变化,可以通过API访问这些历史数据来进行审计和分析。
4.3.2 使用Spring Actuator
-
集成Spring Actuator:在Spring Boot项目中添加Spring Actuator依赖,以获得生产级的监控和管理功能。
-
配置端点:通过配置文件开启和管理各种Actuator端点,如健康检查、环境信息、应用信息等。
-
使用
/actuator/camunda
端点:Camunda为Spring Actuator提供了专门的端点来监控和管理Camunda流程引擎。可以通过/actuator/camunda
来访问这些信息。 -
查看流程状态:使用
/actuator/camunda/process-instances
来获取所有流程实例的状态。 -
任务管理:使用
/actuator/camunda/tasks
来管理和查询任务。 -
性能指标:Spring Actuator提供了详细的性能指标收集,可以使用
/actuator/metrics
来访问这些指标。
4.3.3 使用Camunda Cockpit
-
部署Camunda Cockpit:Camunda Cockpit是一个独立的Web应用程序,用于实时监控和管理Camunda引擎。
-
连接Cockpit到Camunda引擎:通过配置Cockpit连接到的Camunda引擎。
-
实时监控:使用Cockpit的仪表板和报表功能来实时监控流程实例、任务、性能等。
-
管理任务:Cockpit提供了一个用户友好的界面来管理任务,包括领取、办理和完成任务。
-
审计和历史数据:Cockpit也提供了对历史数据的访问,用于审计和分析。
通过上述方法,可以在Spring Boot和Camunda整合的环境中有效地监控和管理工作流的运行状态。这些工具和接口提供了强大的功能,可以帮助确保工作流的正确执行,并在出现问题时快速定位和解决。
5 高级特性
5.1 工作流的并行和分支处理
Camunda工作流引擎提供了强大的并行和分支处理能力,使得复杂的业务流程可以得到有效的执行和管理。以下是一些关键点:
- 并行网关:在BPMN 2.0中,并行网关(Parallel Gateway)用于创建并行执行的流程路径。当流程到达并行网关时,它会同时触发多个后续步骤或任务,这些步骤可以独立于彼此并行执行。
- 分支和合并:分支(Split)和合并(Join)用于控制流程的执行路径。分支节点可以将流程分成多个独立的路径,而合并节点则确保所有路径都已完成,流程才能继续向前推进。
- 多实例处理:Camunda支持多实例(Multi Instance)处理,这允许同时处理多个相似的任务或活动。这对于批量处理或需要并发处理多个相似对象的场景非常有用。
- 条件表达式:通过使用条件表达式,可以在流程中实现基于特定条件的动态路由决策。这使得流程可以根据运行时的数据或状态来选择不同的执行路径。
5.2 工作流的异常处理和补偿机制
在工作流管理中,异常处理和补偿机制是确保业务连续性和数据一致性的关键。以下是Camunda在这方面提供的功能:
- 异常捕获:Camunda允许在BPMN模型中定义异常捕获机制,以便在出现错误或异常时能够适当地响应。可以通过定义错误边界事件(Error Boundary Events)来捕获特定活动的异常,并将流程引导到特定的错误处理流程。
- 补偿事务:为了处理可能的业务事务失败,Camunda支持补偿事务的概念。补偿事务是在原始事务失败时执行的一组操作,用于撤销或回滚先前的操作,以保持数据的一致性。
- 事务管理:Camunda流程引擎内置了对事务的支持,确保了流程中的多个步骤可以作为一个整体进行提交或回滚。这对于维护数据完整性和处理复杂业务流程至关重要。
- 事件处理:Camunda还提供了对事件的支持,允许在特定事件发生时触发补偿操作或其他响应措施。这为异常处理提供了更多的灵活性和动态性。
通过这些高级特性,Camunda能够支持复杂的业务流程需求,并提供强大的工具和框架来实现流程的自动化、监控和管理。
5.3 工作流的性能优化和扩展
性能优化和系统扩展是确保工作流引擎能够高效、稳定地运行,同时满足不断增长的业务需求的关键。以下是一些针对Camunda工作流引擎的性能优化和扩展策略:
性能优化
-
资源调整:首先,确保为Camunda引擎分配了足够的硬件资源,包括CPU、内存和存储空间,以处理流程定义、实例和相关数据。
-
数据库优化:数据库是工作流管理系统的核心组成部分。优化数据库配置,如索引设计、查询优化和适当的缓存策略,可以显著提高性能。
-
批处理和异步处理:对于大量数据处理或长时间运行的任务,使用批处理和异步处理技术可以减少对工作流引擎的直接压力。
-
负载均衡:在高并发场景下,使用负载均衡器将请求分散到多个Camunda引擎实例,可以提高整体的处理能力和可靠性。
-
流程优化:简化和优化BPMN流程模型,减少不必要的复杂性,避免过多的嵌套和循环,可以提高流程的执行效率。
-
缓存:适当使用缓存来存储频繁访问的数据,如用户信息、常用配置等,可以减少对数据库的访问次数。
-
监控和分析:使用监控工具(如Camunda Cockpit、Spring Actuator)来收集性能指标,定期分析这些数据以识别瓶颈和优化点。
扩展
-
集群部署:通过部署Camunda集群来提高系统的可用性和伸缩性。集群部署可以在不同的服务器上分布负载,并在一台服务器出现故障时提供备份。
-
插件和扩展:Camunda提供了丰富的插件机制,允许根据需要添加自定义功能或集成第三方服务。
-
事件和API扩展:利用Camunda的事件订阅机制和开放的API接口,可以扩展工作流的功能,如添加自定义事件处理、集成其他系统等。
-
多引擎协同:在大型组织中,可能需要多个工作流引擎协同工作。通过适当的设计和配置,可以实现不同引擎之间的协作和数据交换。
-
弹性扩展:在云环境中,可以使用弹性扩展技术(如自动伸缩组)来根据实际负载动态调整资源。
通过上述性能优化和扩展策略,可以确保Camunda工作流引擎能够满足不同规模和复杂度的业务需求,同时保持高效、稳定的运行。
💖如果觉得有用的话还请点个赞吧 💖
相关文章:

Spring Boot整合Camunda打造高效工作流程
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚 👉点击这里,就可以查看我的主页啦!👇&#x…...

2.8、下拉刷新与上拉加载
页面的下拉刷新与上拉加载功能在移动应用中十分常见,例如,新闻页面的内容刷新和加载。这两种操作的原理都是通过响应用户的触摸事件,在顶部或者底部显示一个刷新或加载视图,完成后再将此视图隐藏。 实现思路 以下拉刷新为例,其实现主要分成三步: 监听手指按下事件,记录…...

java Web餐馆订单管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc
一、源码特点 JSP 餐馆订单管理系统是一套完善的web设计系统,对理解JSP java 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使…...

小程序从入门到入坑:事件系统
前言 哈喽大家好,我是 SuperYing,本文是小程序从入门到入坑系列的第 3 篇,将比较详尽的讲解 小程序事件系统 的相关知识点,欢迎小伙伴阅读。 读完本文您将收获: 了解小程序事件及基础使用。了解小程序事件分类及多种的…...
Windows蓝牙驱动开发之模拟HID设备(二)(把Windows电脑模拟成蓝牙鼠标和蓝牙键盘等设备)
by fanxiushu 2024-03-24 转载或引用请注明原作者 接上文,当我们建立了蓝牙链接请求之后,就该传输数据了, 其实传输数据比起上章阐述的创建SDP和建立连接要简单许多。 使用类型 BRB_L2CA_ACL_TRANSFER 的BRB请求,就可以实现接收和发送操作, 至于具体是接收还是发送,根据设…...

快速区分清楚图形渲染中的AABB,KD树和BVH这些概念
快速区分清楚图形渲染中的AABB,KD树和BVH这些概念 主要想形象去区分好这些术语,目的是扫盲,先开好坑,内容持续填充。 0.先摆出这些词的全称 AABB: 原名:axis aligned bounding box;中文直译名…...
Rust 的 HashMap 特定键值元素值的累加方法
在Rust中,如果你想要对HashMap中特定键对应的值进行累加操作,你需要首先检查该键是否已存在。如果存在,则取出其值,进行累加,然后将结果存回HashMap。如果不存在,则可能需要插入一个新的键值对,…...

Java后端项目性能优化实战-群发通知
背景 公司群发通知模块性能存在问题,我进行全面的系统调优,系统处理能力大幅提升。 原发送流程 优化后的发送流程 优化的点 说明:以下问题基本都是压测过程遇到的,有些问题普通的功能测试暴露不了。优化目标:保证高…...
5、Jenkins持续集成-Maven和Tomcat的安装与配置
文章目录 一、Maven的安装与配置1、安装maven并配置环境2、全局工具配置关联jdk和maven3、添加Jenkins全局变量4、修改settings.xml文件5、测试是否配置成功二、Tomcat的安装与配置1、安装tomcat8+2、配置Tomcat用户角色权限3、测试是否配置成功一、Maven的安装与配置 在Jenki…...

Qt教程 — 3.7 深入了解Qt 控件: Layouts部件
目录 2 如何使用Layouts部件 2.1 QBoxLayout组件-垂直或水平布局 2.2 QGridLayout组件-网格布局 2.3 QFormLayout组件-表单布局 在Qt中,布局管理器(Layouts)是用来管理窗口中控件位置和大小的重要工具。布局管理器可以确保窗口中的控件在…...
自动驾驶的几种名词
1. 自适应巡航控制(ACC) 自适应巡航控制(Adaptive Cruise Control,ACC)是一种汽车驾驶辅助系统,它可以根据前方车辆的速度和距离自动调整车辆的速度,以保持与前车的安全距离。ACC系统由控制层和…...
华为全套企业管理资料合集(21专题)
华为全套企业管理资料合集-知识星球下载 1.绩效考核 华为内训绝密资料:绩效管理与绩效考核.ppt 华为绩效管理与绩效考核制度.docx 华为公司实用性各种绩效图表汇总.doc 华为公司考勤管理制度.doc 华为IPD模式中跨部门团队成员的考核激励制度.doc 2.企业管理 华为公司人力资源…...

LeetCode Python - 74. 搜索二维矩阵
目录 题目描述解法方法一:二分查找方法二:从左下角或右上角搜索 运行结果方法一方法二 题目描述 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给…...

如何安全地添加液氮到液氮罐中
液氮是一种极低温的液体,它在许多领域广泛应用,但在处理液氮时需谨慎小心。添加液氮到液氮罐中是一个常见的操作,需要遵循一些安全准则以确保操作人员的安全和设备的完整性。 选择合适的液氮容器 选用专业设计用于存储液氮的容器至关重要。…...

LGBM算法 原理
简介 GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。GBDT不仅在工业界应用广泛,通常被…...
【WPF应用5】WPF中的TextBlock控件:属性与事件详解及示例
在WPF(Windows Presentation Foundation)开发中,TextBlock控件是一个常用的元素,用于显示静态或动态文本内容。它提供了丰富的属性和事件,使得开发者能够灵活地控制文本的显示样式和响应用户的交互行为。本文将详细介绍…...

【C语言基础】:内存操作函数
文章目录 一、memcpy函数的使用和模拟实现1.1 memcpy函数的使用1.2 memcpy函数的模拟实现 二、memmove函数的使用和模拟实现2.1 memmove函数的使用2.2 memmove函数的模拟实现 三、memset函数的使用3.1 menset函数的使用 四、memcmp函数的使用4.1 memcmp函数的使用 学海无涯苦作…...

3.24作业
基于UDP的网络聊天室 项目需求: 如果有用户登录,其他用户可以收到这个人的登录信息如果有人发送信息,其他用户可以收到这个人的群聊信息如果有人下线,其他用户可以收到这个人的下线信息服务器可以发送系统信息 服务器端代码 #in…...

Excel双击单元格后弹窗输入日期
Step1. 在VBE界面新建一个窗体(Userform1),在窗体的工具箱的空白处右键,选中添加附件,勾选Calendar control 8.0,即可完成日历的添加。 PS:遗憾的是, Office 64 位没有官方的日期选择器控件。唯一的解决方案是使用Excel 的第三方日历。 参考链接:How to insert calen…...

原生 HTML/CSS/JS 实现右键菜单和二级菜单
文章来源:www.huhailong.vip 站点 文章源地址:https://www.huhailong.vip/article/1764653112011841538 Demo效果演示地址 先看效果图 {{{width“auto” height“auto”}}} 需要注意的就是边界检测处理,到极端点击底部和右侧时如果不做处理会…...
[蓝桥杯]整理玩具
整理玩具 题目描述 小明有一套玩具,一共包含 NMNM 个部件。这些部件摆放在一个包含 NMNM 个小格子的玩具盒中,每个小格子中恰好摆放一个部件。 每一个部件上标记有一个 0 ~ 9 的整数,有可能有多个部件标记相同的整数。 小明对玩具的摆放有…...
03 Deep learning神经网络的编程基础 代价函数(Cost function)--吴恩达
深度学习中的损失函数(Cost Function)用于量化模型预测与真实数据的差距,是优化神经网络的核心指标。以下是常见类型及数学表达: 核心原理 逻辑回归通过sigmoid函数将线性预测结果转换为概率: y ^ ( i ) \hat{y}^{(i)}...

天机学堂-分页查询
需求 分页查询我的课表 返回: 总条数、总页数、当前页的课表信息的集合 返回的VO(已经封装成统一的LearningLessonsVO) 定义Controller RestController RequestMapping("/lessons") RequiredArgsConstructor public class Lear…...

引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办
6月5日,网络安全行业年度盛会——"Accelerate 2025北亚巡展北京站"圆满落幕!来自智库、产业界、Fortinet管理层及技术团队的权威专家,与来自各行业的企业客户代表齐聚一堂,围绕"AI智御全球引领安全新时代"主题…...

7.2.1_顺序查找
知识总览: 顺序查找: 算法思想: 从头到脚挨个找或者从脚到头挨个找适用于线性表(顺序存储和链式存储都适用),又叫线性查找 实现: 1个数组elem指向数组的起始位置,索引从0开始遍历数组直到找到目标值返回…...
Github 2025-06-04 C开源项目日报 Top7
根据Github Trendings的统计,今日(2025-06-04统计)共有7个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目7C++项目1Assembly项目1jq:轻量灵活的命令行JSON处理器 创建周期:4207 天开发语言:C协议类型:OtherStar数量:27698 个Fork数量:1538 …...

使用vsftpd搭建FTP服务器(TLS/SSL显式加密)
安装vsftpd服务 使用vsftpd RPM安装包安装即可,如果可以访问YUM镜像源,通过dnf或者yum工具更加方便。 yum -y install vsftpd 启动vsftpd、查看服务状态 systemctl enable vsftpd systemctl start vsftpd systemctl status vsftpd 备份配置文件并进…...

智绅科技 —— 智慧养老 + 数字健康,构筑银发时代安全防护网
在老龄化率突破 21.3% 的当下,智绅科技以 "科技适老" 为核心理念,构建 "监测 - 预警 - 干预 - 照护" 的智慧养老闭环。 其自主研发的七彩喜智慧康养平台,通过物联网、AI 和边缘计算技术,实现对老年人健康与安…...
大数据学习(131)-Hive数据分析函数总结
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

第十三节:第四部分:集合框架:HashMap、LinkedHashMap、TreeMap
Map集合体系 HashMap集合的底层原理 HashMap集合底层是基于哈希表实现的 LinkedHashMap集合的底层原理 TreeMap集合的底层原理 代码: Student类 package com.itheima.day26_Map_impl;import java.util.Objects;public class Student implements Comparable<Stu…...