工作流引擎之Flowable
一、概述
Flowable是一个使用Java编写的轻量级业务流程引擎,专为处理复杂业务流程而设计。作为业务流程管理(BPM)领域的重要工具,Flowable不仅支持BPMN 2.0标准的流程定义,还提供了丰富的API接口和可视化工具,使得业务流程的设计、执行和管理变得更加高效和灵活。Flowable以其轻量级、易集成和高性能的特点,广泛应用于各类企业级应用中,成为推动业务流程自动化的关键力量。
Flowable源自Activiti,由原始Activiti核心开发团队创建和维护。Flowable继承了Activiti的许多特性,并在此基础上进行了进一步的开发和改进。与Activiti相比,Flowable在以下几个方面具有显著优势:社区活跃度更高,拥有丰富的资源和活跃的社区支持;功能更加完善,提供了更多的业务流程管理特性,如任务分配、事件处理、历史数据记录等;API接口和可视化工具更加友好和易用,降低了开发者的学习成本;支持自定义扩展和插件机制,满足企业的特殊需求。
Flowable的核心价值在于其能够为企业提供一个统一的、可扩展的业务流程管理平台,帮助企业实现业务流程的标准化、自动化和智能化。通过Flowable,企业可以轻松地定义和管理业务流程,提高业务运营效率,降低运营成本,同时增强业务的灵活性和响应速度。
二、核心组件
其核心组件主要包括以下几个方面:
1. 工作流引擎
* 核心引擎(Core Engine):
这是Flowable的核心组件,负责解析、执行和管理工作流程。它包含了流程定义的解析器、执行引擎、事务管理器和持久化层。核心引擎处理工作流程的执行状态、任务分配和流程控制逻辑。
* 引擎抽象层(Engine Abstraction):
提供了对核心引擎的抽象和封装,以便于与其他组件进行交互。
2. 服务组件
* RepositoryService:
负责流程定义的存储和管理。它允许部署新的流程定义、查询已部署的流程定义、获取流程定义的资源等。
* RuntimeService:
负责流程实例的运行时管理,包括启动、暂停、恢复和终止流程实例。它还提供了丰富的查询API来检索流程实例和相关数据。
* TaskService:
负责任务的管理和查询。它可以创建任务、分配任务、查询任务、认领任务、完成任务等。
* HistoryService:
负责历史流程数据的查询和分析。它可以查询流程实例、任务、变量、活动和步骤等的历史记录。
* IdentityService:
负责用户和组的管理。它可以创建、更新、删除和查询用户和组的信息。
* ManagementService:
提供了一些管理和监控流程引擎的API,如查询数据库表、修改流程参数、获取引擎信息等。
* FormService:
用于渲染任务表单,并将表单提交到后台处理。它允许定义和渲染任务表单,以便用户在执行任务时填写必要的信息。
3. 事件处理
- 事件(Event):是Flowable中的重要组件,用于触发和处理工作流程中的动作和决策。事件可以是内部的,由工作流引擎触发,也可以是外部的,通过监听外部系统的事件进行触发。Flowable提供了事件监听器和触发器,以便对事件进行响应和处理。
4. 流程监听器
- 流程监听器在Flowable中用于监听各种事件,以便在事件发生时执行一些自定义逻辑。它们可以通过API或流程定义文件(BPMN XML)进行配置,并与各种事件关联。常见的流程监听器类型包括ExecutionListener(用于监听流程实例和执行实例的生命周期事件)、TaskListener(用于监听任务的生命周期事件)、VariableListener(用于监听流程变量的创建、更新和删除等事件)、EventListener(用于监听信号、消息和定时器等事件)等。
5. 配置与部署
- 配置流程引擎:在配置文件中,可以配置数据库连接信息、流程定义文件的位置等信息。Flowable支持多种数据库,如MySQL、PostgreSQL等。
- 部署流程定义:将BPMN 2.0格式的流程定义文件部署到Flowable中,可以使用Flowable的API或命令行工具进行部署。部署完成后,Flowable将解析流程定义并生成相应的执行模型。
三、版本演进
Flowable是一个基于Java的开源工作流引擎,用于开发工作流和业务流程。自2016年10月由Activiti的核心开发者Tijs Rademakers从Activiti 5.22版本分支基础上创建以来,Flowable经历了多个版本的迭代,不断完善其功能和性能。以下是Flowable主要版本的演进介绍:
1、早期版本
- Flowable 5.22.0:
- 发布时间:2016年10月13日
- 主要特点:作为Flowable项目的首个版本,基于Activiti 5.22分支创建。
- Flowable 6.0.0:
-
发布时间:2017年2月15日
-
主要特点:
- 基于Activiti 6构建,并修复了多个bug。
- 引入了决策模型与符号(DMN)支持。
- 提供了业务流程模型与符号(BPMN)引擎、案例管理模型与符号(CMMN)引擎等核心模块。
2、成熟版本
- Flowable 6.4.1:
-
主要特点:
- 以该版本为分水岭,Flowable开始大力发展其商业版产品。
- 开源版本的部分功能(如表单生成器、历史数据同步至其他数据源等)不再在开源版中发布。
- Flowable 6.7.0:
-
发布时间:2021年12月28日
-
主要特点:
- 增加了对MongoDB持久化的支持。
- 引入了新的运行时和历史实体链接表,用于存储父实体和所有子实体之间的关系。
- 添加了多租户改进,支持在租户内查找流程、案例、表单和决策表定义。
- Flowable 6.8.0:
-
发布时间:2022 年 12 月 23 日
-
主要特点:
- 增加了与Spring Boot 2.4.x集成的能力。
- 更新了CMMN引擎以支持CMMN 1.1规范。
- 引入了批量完成任务的API。
- 提供了获取流程定义最后一次部署信息的API。
- 增加了对BPMN模型XML中用户任务表单字段信息的API支持。
3、重大更新版本
- Flowable 7.0.0:
-
发布时间:2023年9月21日
-
主要特点:
- 作为Flowable引擎的第一个稳定版本,专注于Spring Boot 3、Spring 6和Java 17的升级。
- 引入了全新的架构,移除了UI应用程序、内容和表单引擎等模块,更加专注于BPMN、CMMN、DMN和事件注册引擎的核心功能。
- 支持CMMN案例的批量迁移和案例重新激活的重复执行。
- 提供了HTTP任务对HEAD和OPTIONS方法的支持。
- 引入了Flowable BOM(Bill of Materials),方便管理Flowable项目的依赖。
4、近期版本
- Flowable 7.x后续版本:
-
发布时间:2024年及以后(持续更新中)
-
主要特点:
- 在7.0.0版本的基础上,继续修复bug,优化性能,并可能引入新的功能和改进。
- 保持对最新技术和框架的支持,如Spring Boot、Java等。
5、版本兼容性
- Flowable 6.x系列:
- 各版本之间通常具有较好的兼容性,升级时无需担心兼容性问题。
- Flowable 7.0.0:
- 与Flowable 6.x版本不兼容,升级时需要进行详细的测试和评估。
四、Flowable的应用场景
Flowable的应用场景非常广泛,可以应用于各种业务领域中,包括但不限于:
1. 业务审批
- 如请假申请、费用报销、合同审批等。在这些场景中,Flowable可以定义复杂的审批流程,包括多个审批节点、条件分支、并行审批等。例如,一个请假流程可能包括员工提交请假申请、部门主管审批、人事部门备案等步骤。Flowable可以自动创建请假流程实例,并根据流程定义中的规则和逻辑将任务分配给相应的审批人员。审批人员可以在Flowable提供的可视化界面中查看待审批的任务,并进行审批操作。
2. 生产制造
- 如订单处理、生产调度、质量控制等。在这些场景中,Flowable可以协调各个生产环节,确保生产过程的顺利进行。例如,一个订单处理流程可能包括接收订单、分配生产任务、生产执行、质量检查、发货等步骤。Flowable可以监控和管理整个生产流程,确保各个环节之间的顺畅衔接。
3. 客户服务
- 如客户投诉处理、服务请求跟踪等。在这些场景中,Flowable可以记录客户的投诉或服务请求,并将其分配给相应的客服人员进行处理。客服人员可以在Flowable提供的界面中查看待处理的服务请求,并进行跟踪和处理。
4. 项目管理
- 如项目计划、任务分配、进度跟踪等。在这些场景中,Flowable可以帮助项目经理制定项目计划,分配任务,并跟踪项目进度。项目经理可以在Flowable提供的界面中查看项目的整体情况,了解各个任务的执行状态和进度。
5. 供应链管理
- 如采购管理、库存管理、物流配送等。在这些场景中,Flowable可以协调供应链各个环节之间的协作,确保供应链的高效运行。例如,一个采购流程可能包括提交采购申请、审批采购申请、下达采购订单、接收货物、入库等步骤。Flowable可以自动管理整个采购流程,确保各个环节之间的顺畅衔接。
五、代码示例
以下是一个简单的Java代码示例,说明如何使用Flowable API来部署一个BPMN 2.0流程定义,并启动一个流程实例。
import org.flowable.engine.ProcessEngine;
import org.flowable.engine.ProcessEngines;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.repository.Deployment;public class FlowableDemo {public static void main(String[] args) {// 默认情况下,Flowable 会查找 classpath 下的 flowable.cfg.xml 配置文件来创建 ProcessEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 获取 RepositoryService 用于部署流程定义RepositoryService repositoryService = processEngine.getRepositoryService();// 部署流程定义,通常从文件、输入流或字符串中读取 BPMN 2.0 XML// 这里假设您有一个名为 "my-process.bpmn20.xml" 的 BPMN 文件在 classpath 下Deployment deployment = repositoryService.createDeployment().addClasspathResource("my-process.bpmn20.xml").deploy();System.out.println("Deployment ID: " + deployment.getId());// 获取 RuntimeService 用于启动流程实例RuntimeService runtimeService = processEngine.getRuntimeService();// 启动流程实例,这里假设流程定义的 key 是 "myProcess"// 您可以根据需要传递流程变量runtimeService.startProcessInstanceByKey("myProcess");System.out.println("Process instance started");// 注意:这里只是启动了流程实例,并没有处理流程中的用户任务或等待状态。// 在实际应用中,您需要根据流程定义中的逻辑来处理这些任务或状态。}
}
六、总结
Flowable是一个功能强大且易于集成的轻量级业务流程引擎,它支持BPMN 2.0标准,提供了丰富的API接口和可视化工具,使得业务流程的设计、执行和管理变得更加高效和灵活。Flowable的核心组件包括工作流引擎、服务组件、事件处理、流程监听器等,它们共同协作以支持复杂业务流程的执行和管理。
Flowable的应用场景非常广泛,可以应用于各种业务领域中,如业务审批、生产制造、客户服务、项目管理、供应链管理等。通过Flowable,企业可以轻松地定义和管理业务流程,提高业务运营效率,降低运营成本,同时增强业务的灵活性和响应速度。
在实际应用中,开发者可以通过Flowable提供的REST API或可视化界面与Flowable进行交互,创建、查询和管理业务流程。Flowable还提供了丰富的社区支持和资源,如官方网站、GitHub仓库、社区论坛等,帮助开发者更好地理解和使用Flowable。
随着企业数字化转型的加速推进,业务流程自动化和智能化管理将成为未来的重要趋势。Flowable凭借其轻量级、易集成和高性能的特点,将在这一领域发挥越来越重要的作用。未来,Flowable将继续保持其技术领先性,不断推出新功能和更新,以满足企业日益增长的业务流程管理需求。同时,Flowable也将积极与云计算、大数据、人工智能等新技术进行融合创新,为企业提供更加全面、高效的业务流程管理解决方案。
相关文章:
工作流引擎之Flowable
一、概述 Flowable是一个使用Java编写的轻量级业务流程引擎,专为处理复杂业务流程而设计。作为业务流程管理(BPM)领域的重要工具,Flowable不仅支持BPMN 2.0标准的流程定义,还提供了丰富的API接口和可视化工具…...
学习threejs,THREE.CircleGeometry 二维平面圆形几何体
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.CircleGeometry 圆形…...
网络编程UDP—socket实现(C++)
网络编程UDP—socket实现 前言UDP客户端和服务端UDP使用场景UDP socket C代码示例服务端接收数据示例(bindrecvfrom 阻塞式接收信息):bind 绑定-监听 函数为什么一般都是监听所有网络接口呢?为什么需要用inet_addr进行转换&#x…...
个人用途虚拟机VM 17安装Ubuntu 16.04.5 图解
1.安装环境软件准备工作 1)下载 免费版VMware Pro 17 https://softwareupdate.vmware.com/cds/vmw-desktop/ws/17.6.1/24319023/windows/core/VMware-workstation-17.6.1-24319023.exe.tar 2)Ubuntu 16.04.5 LTS 64位 64-bit PC (AMD64) desktop imag…...
音视频入门基础:MPEG2-TS专题(23)——通过FFprobe显示TS流每个packet的信息
音视频入门基础:MPEG2-TS专题系列文章: 音视频入门基础:MPEG2-TS专题(1)——MPEG2-TS官方文档下载 音视频入门基础:MPEG2-TS专题(2)——使用FFmpeg命令生成ts文件 音视频入门基础…...
安卓project级别build.gradle和主module的build.gradle
以穿山甲为例讲解 如下图 gradle和gradle插件对应关系 Android Gradle 插件 8.7 版本说明 | Android Studio | Android Developers gradle对应在项目里的配置为 gradle插件对应的位置为...
【Qt】多元素控件:QListWidget、QTableWidget、QTreeWidget
目录 QListWidget 核心属性: 核心方法: 核心信号: 例子: QListWidgetItem QTableWidget 核心方法: 核心信号 QTableWidgetItem 例子: QTreeWidget 核心方法: 核心信号:…...
服务器nfs文件共享
1. 配置 NFS 服务器(NFS Server) 在 Ubuntu/Debian 上: sudo apt update sudo apt install nfs-kernel-server在 CentOS/RHEL 上: sudo yum install nfs-utils1.2 创建共享目录 选择一个要共享的目录,并确保该目录的权限正确设置。例如,假设我们要共享 /srv/nfs 目录…...
【hackmyvm】soul靶机wp
tags: HMVrbash绕过图片隐写PHP配置解析 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集3. 图片解密3.1. 爆破用户名3.2. 绕过rbash3.3. 提权检测 4. 获取webshell4.1. 修改php配置 5. www-data提权gabriel6. gabriel提取到Peter7. Peter提权root 靶机链接 https://ha…...
安装winserver2008R2虚拟机步骤
一、服务器系统介绍 1.1什么是服务器? 服务器英文名称为“Server”,指的是网络环境下为客户机(Client)提供某种服务的专用计算机,服务器安装有网络操作系统(如Windows 2000 Server、Linux、Unix等)和各种服务器应用系统软件(如Web服务、电子…...
跟着 8.6k Star 的开源数据库,搞 RAG!
过去 9 年里,HelloGitHub 月刊累计收录了 3000 多个开源项目。然而,随着项目数量的增加,不少用户反馈:“搜索功能不好用,找不到想要的项目!” 这让我意识到,仅仅收录项目是不够的,还…...
RCE漏洞
一、课程知识点 1、远程代码执行漏洞原理与利用 2、常见的代码执行函数 3、常见的命令执行函数 4、常见的绕过姿势 5、命令执行漏洞防范 二、技术目标 1、掌握命令执行漏洞的原理 2、掌握 PHP 命令执行和代码执行的相关函数 3、掌握常见的绕过姿势 4、掌握代码执行漏洞防御措施…...
数据通信系统的主要性能指标
1.码元速率 n 误码率 2.数据传输速率 n 误比特率 3.时延 n 往返时间 RTT 1. 码元速率 n 码元 ( Code element) n 码元是 数字信号的计量单位 ( Signal element ), 又称为符号( Symbol )。 n 码元 是指在使用时域表示…...
C语言中的贪心算法
贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前最优解的算法,希望通过局部最优解的选择,最终得到全局最优解。它常用于解决最优化问题,如最小生成树、最短路径等。本文将从理论到实践,逐步引导…...
使用envoyfilter添加请求头
该envoyfilter实现了这样一个功能,如果请求头中含有Sw8,则添加请求头HasSw8: true。 1. 内嵌lua脚本 apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata:name: add-header-filternamespace: demo-bookinfo # 可根据实际情况调整命…...
【机器学习】回归
文章目录 1. 如何训练回归问题2. 泛化能力3. 误差来源4. 正则化5. 交叉验证 1. 如何训练回归问题 第一步:定义模型 线性模型: y ^ b ∑ j w j x j \hat{y} b \sum_{j} w_j x_j y^b∑jwjxj 其中,( w ) 是权重,( b )…...
Elasticsearch名词解释
文章目录 1.什么是Elasticsearch?2.什么是elastic stack(ELK)?3.什么是Lucene?4.什么是文档(document)?5.什么是词条(term)?6.什么是正向索引?7.什么是倒排索引?8.ES中的索引(index)9.映射(Mapping)10.DSL11.elastcisearch与my…...
把Huggingface下载的arrow数据集转化为json格式
Arrow2json 使用默认的Huggingface路径 以allenai/tulu-3-sft-mixture数据集为例。 使用load_dataset即可: from datasets import load_dataset# 加载数据集 dataset load_dataset("allenai/tulu-3-sft-mixture")# 指定保存路径 output_dir "~/…...
手机联系人 查询 添加操作
Android——添加联系人_android 添加联系人-CSDN博客 上面连接添加联系人已测试 是可以 Android : 获取、添加、手机联系人-ContentResolver简单应用_contentresolver 添加联系人-CSDN博客...
kkFileView集成springboot:使用自定义预览接口(非minio预览接口),发现无法预览资源
目录 1、背景2、原因分析3、解决办法 1、背景 按照项目验收要求,需要对minio中存储的数据进行加密 之前提供给kkFileView的预览地址都是获取的minio预览地址 由于minio中的资源进行了加密处理,所以我们自定义预览接口(进行解密操作ÿ…...
C++ 设计模式:观察者模式(Observer Pattern)
链接:C 设计模式 链接:C 设计模式 - 模板方法 链接:C 设计模式 - 策略模式 观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主…...
Mono 和 IL2Cpp的区别
Mono特征: 标准项目中有Assembly-CSharp.dll , 但在更复杂的项目或特定配置中,可能会有其他.dll或结构变更 在游戏的数据目录下看到一系列的.dll文件,这些文件的语言一般为中间语言 CE附加 , 查看是否有Mono.dll相关模块 目录有MonoBleedingEdge文件夹 IL2Cpp 标准项目应该…...
Windows平台ROBOT安装
Windows环境下ROBOT的安装,按照下文进行部署ROBOT的前提是你的python已安装并且环境变量已设置好. 一、安装setuptools 1、下载后安装 https://pypi.python.org/pypi/setuptools/ 下载你需要的包 setuptools-75.6.0.tar.gz 解压下载的包在命令行中进入该包,敲击如下命令后…...
DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2)
DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2) 背景 Tips 翻遍国内外的文档,关于 Argo 作为 CI/CD 当前所有开源的文档,博客,argo官方文档。得出的结论是: argo官方给出的例子都相对…...
深入浅出 MyBatis | CRUD 操作、配置解析
3、CRUD 3.1 namespace namespace 中的包名要和 Dao/Mapper 接口的包名一致! 比如将 UserDao 改名为 UserMapper 运行发现抱错,这是因为 UserMapper.xml 中没有同步更改 namespace 成功运行 给出 UserMapper 中的所有接口,接下来一一对…...
Hutool 发送 HTTP 请求的几种常见写法
最简单的 GET 请求: String result HttpUtil.get("https://www.baidu.com");带参数的 GET 请求: // 方法1: 直接拼接URL参数 String result HttpUtil.get("https://www.baidu.com?name张三&age18");// 方法2: 使用 HashMap…...
计算机网络|数据流向剖析与分层模型详解
文章目录 一、网络中的数据流向二、计算机网络通信模型1.OSI 模型2.TCP/IP 模型3.TCP/IP五层模型3.1 分层架构描述3.2各层地址结构3.3UDP数据包报头结构 三、总结 一、网络中的数据流向 在计算机网络中,数据的流向是指数据从发送端到接收端的传输路径。数据流向涉及…...
在Java技术栈中,常用的分布式一致性算法和框架
在Java技术栈中,常用的分布式一致性算法和框架包括: Raft算法: 常用框架: etcd:虽然主要用Go语言编写,但可以通过Java客户端进行访问和操作。Apache Kafka:在其控制器选举中使用类似Raft的机…...
2024.12.29(进程线程实现并发服务器)
作业 多进程多线程并发服务器实现一遍提交。 服务器 #include <myhead.h> #define PORT 12345 #define IP "192.168.124.123"void *fun(void *fd) {int newfd *(int *)fd;char buff[1024];while(1){int res recv(newfd,buff,sizeof(buff),0);if(res 0){p…...
Docker完整技术汇总
Docker 背景引入 在实际开发过程中有三个环境,分别是:开发环境、测试环境以及生产环境,假设开发环境中开发人员用的是jdk8,而在测试环境中测试人员用的时jdk7,这就导致程序员开发完系统后将其打成jar包发给测试人员后…...
区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】
区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 区块链安全常见的攻击合约和…...
Vue.js 高难度组件开发:从插件化到性能极限优化
Vue.js 高难度组件开发:从插件化到性能极限优化 引言一、插件化组件开发1. 什么是插件化组件2. 案例:构建一个插件化的图表组件 二、动态扩展与自定义组件行为1. 动态添加组件功能 三、复杂交互与细粒度状态管理1. 使用 Vuex 的模块化和动态模块注册 四、…...
一个通用的居于 OAuth2的API集成方案
在现代 web 应用程序中,OAuth 协议是授权和认证的主流选择。为了与多个授权提供商进行无缝对接,我们需要一个易于扩展和维护的 OAuth 解决方案。本文将介绍如何构建一个灵活的、支持多提供商的 OAuth 系统,包括动态 API 调用、路径参数替换、…...
折腾日记:如何让吃灰笔记本发挥余热——搭建一个相册服务
背景 之前写过,我在家里用了一台旧的工作站笔记本做了服务器,连上一个绿联的5位硬盘盒实现简单的网盘功能,然而,还是觉的不太理想,比如使用filebrowser虽然可以备份文件和图片,当使用手机使用网页…...
C# dynamic 类型详解
简介 C# 中的 dynamic 是一种特殊类型,它允许在运行时确定对象的类型和成员,而不是在编译时。 dynamic 的定义 dynamic 是一种类型,它告诉编译器对其进行“动态类型解析”。 dynamic 类型的变量会跳过编译时类型检查,所有的操作…...
postgresql ERROR: cannot drop the currently open database
postgresql ERROR: cannot drop the currently open database 解释: 这个错误表明你正在尝试删除或者切换当前正在使用的数据库。在PostgreSQL中,一个数据库对应着一个进程,当一个数据库处于打开状态时,你不能直接删除或者切换它…...
Excel基础知识
一:数组 一行或者一列数据称为一维数组,多行多列称为二维数组,数组支持算术运算(如加减乘除等)。 行:{1,2,3,4} 数组中的每个值用逗号分隔列:{1;2;3;4} 数组中的每个值用分号分隔行列…...
【pwnlab_init靶场渗透】
文章目录 一、基础信息 二、信息收集 三、漏洞利用 四、反弹shell 五、提权 一、基础信息 Kali IP :192.168.20.146 靶机IP:192.168.20.157 二、信息收集 nmap -sS -sV -p- -A 192.168.20.157 开放了80、111、3306、50749等端口 访问一下80端口…...
【泰克生物】酶突变文库筛选技术:通过酵母展示实现酶的精准进化
酶工程是生物技术中的一个重要领域,涵盖了酶的改造、优化和应用。通过对酶分子进行定向进化,可以获得具有更高催化效率、更广泛底物特异性或更强稳定性的酶。酶突变文库筛选技术,尤其是酵母展示平台,提供了一种高效且可操作的方法…...
C++Primer 类简介
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
人工智能知识分享第三天-机器学习中交叉验证和网格搜索
交叉验证和网格搜索 交叉验证解释: 概述: 它是一种更加完善的, 可信度更高的模型预估方式, 思路是: 把数据集分成n份, 每次都取1份当做测试集, 其它的当做训练集, 然后计算模型的: 评分. 然后再用下1份当做测试集, 其它当做训练集, 计算模型评分, 分成几份, 就进行几次计算, 最…...
00序言:我为什么会选择AI?
序言:我为什么会选择AI? 2023年,对我来说是一个转折点。那一年,我在人工智能领域已经积累了几年的经验,深刻感受到了这场技术变革的巨大冲击。曾经,我也像许多人一样,怀疑自己是否能跟上这个快…...
【AIGC-ChatGPT副业提示词指令 - 动图】魔法咖啡馆:一个融合创意与治愈的互动体验设计
引言 在当今快节奏的生活中,咖啡早已不仅仅是提神醒脑的饮品,更成为了一种情感寄托和生活态度的表达。本文将介绍一个独特的"魔法咖啡馆"互动体验设计,通过将咖啡与情感、魔法元素相结合,创造出一个充满想象力和治愈感…...
VSCode outline显示异常的解决方法——清除VSCode的配置和用户文件
1. 删除所有配置文件 sudo apt remove --purge code2. 删除所有用户文件 rm -rf ~/.config/Code rm -rf ~/.vscode rm -rf ~/.local/share/code rm -rf ~/.cache/Code3. 重装Code sudo dpkg -i code_1.96.2-1734607745_amd64.deb如此,可修复异常导致的outline无…...
Maple软件的安装和使用
文章目录 1.前言说明2.我为什么要学习Maple3.软件的安装4.如何使用4.1基本的赋值语句4.2函数的定义4.3三个类型的书写介质 5.指数运算5.1使用面板5.2自己输入 6.对数的使用 1.前言说明 众所周知,我虽然是一名这个计算机专业的学生,但是我对于数学&#…...
elasticsearch-java客户端jar包中各模块的应用梳理
最近使用elasticsearch-java客户端实现对elasticsearch服务的Api请求,现对elasticsearch-java客户端jar包中各模块的应用做个梳理。主要是对co.elastic.clients.elasticsearch路径下的各子包的简单说明。使用的版本为:co.elastic.clients:elasticsearch-…...
android13 系统文字大小和显示大小的修改
没啥可解释,如题所示,修改系统默认文字大小和显示大小 一修改系统文字大小: 系统文字太小,需要修改文字大小修改如下 commit 82675b7d8ac278e80d94e6b2b1417b266065d2ec Author: admin <bianjbflyscale.cn> Date: Sat …...
【华为OD-E卷 - 任务总执行时长 100分(python、java、c++、js、c)】
【华为OD-E卷 - 任务总执行时长 100分(python、java、c、js、c)】 题目 任务编排服务负责对任务进行组合调度。 参与编排的任务有两种类型,其中一种执行时长为taskA,另一种执行时长为taskB。 任务一旦开始执行不能被打断&#x…...
vue中子组件给父组件传值
在 Vue.js 中,子组件向父组件传递数据或事件通常是通过 $emit 方法来实现的。这个方法允许子组件触发一个自定义事件,父组件可以通过监听这些事件来接收信息。以下是实现这一过程的基本步骤: 1. 子组件触发事件 在子组件中,使用…...
【js】记录预览pdf文件
接口调用拿到pdf的文件流,用blob处理这个文件流拿到url,使用window.open跳转新的窗口进行预览 api({dataType: blob, }).then(res >{if(res.code 0){this.previewPDF(res,application/pdf;charsetutf-8,pdf文件名)} })previewPDF (res, type, fname…...