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

IBM BAW(原BPM升级版)使用教程第十四讲

续前篇! 

一、流程设计中的编程

IBM Business Automation Workflow (BAW) 中,编程部分涵盖了多种技术、工具和策略,帮助用户定制和扩展流程。BAW 主要通过脚本、集成、服务和自定义代码来实现流程的灵活性和定制化。下面将详细讲解 BAW 中的编程部分,包括:

1. BAW 编程的关键组成部分

BAW 中的编程部分主要包括以下几个方面:

  1. 脚本编程:包括 JavaScript 和 Jython 脚本,用于实现任务的自动化、数据操作、流程控制等。

  2. 自定义服务:用于创建自定义业务逻辑,通过 Web ServicesREST API 与外部系统集成。

  3. 集成与服务调用:BAW 可以与外部应用程序(如 CRM、ERP 等)进行集成,调用外部服务。

  4. 流程规则与条件:用于控制流程执行的条件、事件和决策逻辑。

2. 脚本编程

在 BAW 中,脚本是实现自定义逻辑的常见方式。BAW 提供了两种主要的脚本语言:

  • JavaScript:一种广泛使用的脚本语言,适合客户端和服务端的操作。

  • Jython:一种基于 Python 语言的脚本语言,适用于服务端的逻辑处理。

常见的脚本应用场景:
  1. 表单脚本

    • 表单脚本通常在表单字段变化时触发,用于动态更新表单或执行某些计算。

    • 例如,当用户填写表单时,脚本可以根据输入的值自动计算其他字段的值。

    // 计算总价
    var unitPrice = getField("unitPrice");
    var quantity = getField("quantity");
    var totalPrice = unitPrice * quantity;
    setField("totalPrice", totalPrice);
    
  2. 任务脚本

    • 在任务步骤中,使用脚本来控制任务的执行逻辑,自动填充任务字段或执行某些操作。

    • 比如,可以用脚本动态分配任务、设置任务状态,或在任务完成时执行特定的操作。

    // 分配任务给特定用户
    var task = getTask("TaskID");
    task.assign("user1@example.com");
    task.complete();
    
  3. 业务逻辑脚本

    • 在流程的不同阶段使用脚本进行复杂的业务逻辑处理,例如:计算、判断、条件分支、数据处理等。

    • 比如,根据某个变量的值判断流程是否继续,或是否触发某个子流程。

    var totalAmount = getField("totalAmount");
    if (totalAmount > 10000) {// 触发高级审批流程triggerSubprocess("HighApproval");
    } else {// 直接完成任务completeTask();
    }
    
如何在 BAW 中编写脚本:
  1. 表单脚本

    • Process Designer 中的 Form 设计器里,你可以为每个表单字段添加脚本。在每个字段的 Events 中,你可以选择相应的触发事件(如 onChange)并编写 JavaScript 或 Jython 代码。

  2. 任务脚本

    • Process Designer 中的 TaskUser Task 配置中,你可以为任务添加 Pre-ExecutionPost-Execution 脚本。这些脚本会在任务开始前或完成后自动执行。

  3. 业务流程脚本

    • Process Designer 中,流程中的各种节点可以使用 Script Task 来编写业务逻辑。在每个节点的设置中,可以编写 JavaScript 或 Jython 脚本来处理复杂的业务逻辑。

3. 自定义服务

自定义服务 使你能够创建自己的业务逻辑,并将其集成到 BAW 流程中。自定义服务通常通过 Web ServicesREST API 实现,允许你与外部系统进行通信或实现特定的功能。

自定义服务的常见场景:
  1. 集成外部系统

    • BAW 可以与外部系统(如 CRM、ERP、HR 系统等)集成,使用自定义服务来访问这些系统的数据。例如,可以通过 RESTful API 调用外部服务来获取客户信息,或通过 SOAP Web 服务获取库存数据。

    // 通过 REST API 调用外部系统
    var url = "https://api.example.com/getCustomerData";
    var response = sendRESTRequest(url, "GET");
    
  2. 业务逻辑处理

    • 你可以创建自定义的 Java 服务类来处理复杂的业务逻辑。比如,实现一个计算利息的服务,根据不同的条件进行计算,然后返回结果给流程。

    public class InterestCalculationService {public double calculateInterest(double amount, double rate, int period) {return amount * rate * period / 100;}
    }
    
  3. 触发外部操作

    • 在流程中触发外部系统的操作,如发送邮件、通知用户、创建或更新外部系统中的记录等。

如何创建自定义服务:
  1. Process Designer 中,创建一个新的 Service,并选择 Web ServiceJava Service

  2. 配置服务的输入和输出参数,以及实现业务逻辑或集成的代码。

  3. 将服务集成到你的 BPD 中,调用自定义服务来处理任务、决策等操作。

4. 集成与服务调用

BAW 提供了灵活的 集成方式,允许你调用外部应用程序、系统或服务。这些集成通常通过 REST APIWeb Services 完成。

常见的集成方式:
  1. 调用外部 REST API

    • BAW 支持通过 REST API 与外部系统进行集成。你可以使用 REST Services 来调用外部 API,获取数据或触发操作。

    var response = sendRESTRequest("https://api.example.com/getData", "GET");
    var jsonData = JSON.parse(response);
    
  2. Web 服务集成

    • 通过 Web Services,你可以访问 SOAP 或 REST 类型的 Web 服务,处理外部系统的数据或调用外部功能。

    // 调用 Web 服务获取用户信息
    UserInfoService service = new UserInfoService();
    UserInfo user = service.getUserInfo(userId);
    
  3. 数据库集成

    • BAW 可以通过 Database Integration 来访问数据库中的数据,执行查询、插入、更新等操作。这通常通过 SQL 或通过自定义的 JDBC 服务实现。

5. 流程规则与条件

BAW 提供了强大的 决策服务业务规则引擎,你可以在流程中使用条件、规则和决策来控制流程的执行。例如:

  • 条件判断:根据某些条件判断流程应该走哪个路径(如 IF/ELSESwitch)。

  • 业务规则:在流程中使用规则引擎来根据预设规则做出决策。

示例:条件判断与规则
var orderAmount = getField("orderAmount");if (orderAmount > 10000) {triggerApproval("highLevel");
} else {triggerApproval("normalLevel");
}

6. 总结

BAW 中的编程部分提供了非常强大的灵活性,允许开发人员通过脚本、自定义服务、集成与规则等方式,实现业务流程的定制化。主要包括:

  • 脚本编程:使用 JavaScript 或 Jython 进行业务逻辑、表单交互、任务控制等操作。

  • 自定义服务:通过 Web 服务、REST API 和 Java 服务创建自定义业务逻辑,集成外部系统。

  • 集成与服务调用:通过 REST API、Web Services 或数据库集成,与外部系统和数据源交互。

  • 决策与规则:使用条件判断和业务规则来控制流程的执行路径和决策。

通过这些编程技术,BAW 能够灵活适应复杂的业务需求,提供高度定制化的流程管理解决方案。

二、编程管理

这一部分涉及到的编程内容更加聚焦于流程设计、开发、部署和管理过程中所需的各种 API、脚本以及集成方法。具体来说,它主要包含了与 BAW 平台交互时所需要的开发技术、工具和策略。

1. BAW 编程管理的主要组成部分

在 BAW 中的编程管理,涉及多个方面的开发工作,如服务创建、脚本编写、任务和事件的管理、集成外部应用等。主要组成部分包括:

  • API 访问和使用:包括流程管理 API、任务 API、服务 API、数据访问 API 等。

  • Web 服务和集成:用于外部系统的集成(通过 REST、SOAP 等)。

  • 脚本编程:使用 JavaScript、Jython 等脚本语言来定义业务逻辑、控制任务流和交互等。

  • 流程实例与任务管理:包括如何通过编程来管理流程实例、执行任务、分配任务等。

  • 定制化与扩展:如何通过自定义服务、规则、事件等来扩展 BAW 的默认功能。

2. 编程部分的核心技术

BAW 的编程管理涉及一系列技术,用于定制和扩展业务流程。常见的技术包括:

1) REST API 和 SOAP Web 服务
  • REST API:BAW 提供了多种 RESTful API 用于与其他系统和应用集成。这些 API 可用于获取流程实例、任务、表单数据、用户信息等。

    • 获取任务列表

      GET /v1/workflow/tasks
      
    • 获取流程实例

      GET /v1/workflow/processes/{processInstanceId}
      
  • SOAP Web 服务:BAW 也支持 SOAP Web 服务,允许外部系统通过传统的 SOAP 协议与 BAW 平台进行通信。

2) 脚本编程(JavaScript / Jython)

在 BAW 中,你可以使用 JavaScriptJython 脚本来:

  • 动态计算表单字段的值。

  • 在任务或流程执行时插入自定义逻辑。

  • 通过脚本控制流程的路径、事件触发、任务分配等。

例如,使用 JavaScript 动态分配任务:

// 获取任务并分配给特定用户
var task = getTask("TaskID");
task.assign("user@example.com");
task.complete();
3) 业务规则与条件

BAW 提供了 决策服务业务规则引擎(如 ODM),让你可以在流程中嵌入复杂的业务规则。通过规则,你可以根据数据动态决策流程走向。例如:

var totalAmount = getField("totalAmount");if (totalAmount > 10000) {triggerSubprocess("HighLevelApproval");
} else {triggerSubprocess("LowLevelApproval");
}
4) 自定义服务
  • Java 服务:通过创建 Java 服务,你可以实现自定义的业务逻辑或与外部系统进行交互。Java 服务允许你更灵活地处理流程中的业务逻辑。

    示例:创建一个简单的 Java 服务来计算利息:

    public class InterestCalculationService {public double calculateInterest(double amount, double rate, int period) {return amount * rate * period / 100;}
    }
    
  • 集成外部服务:BAW 可以通过 REST API 或 SOAP Web 服务与外部系统集成,实现系统间的数据交换和功能调用。例如,调用外部 CRM 系统的 API 获取客户信息,或者通过外部 ERP 系统来更新库存。

5) 事件与任务管理

BAW 允许开发者通过编程方式控制流程实例的任务和事件。例如,你可以创建 事件监听器 来监控特定的事件,或通过 API 来管理任务的分配、完成等。

  • 任务分配
    通过 API 或脚本,开发者可以在流程执行过程中动态分配任务给特定用户。

    var task = getTask("TaskID");
    task.assign("user@example.com");
    
  • 任务操作:任务的 开始完成暂停 等状态管理,可以通过 BAW 提供的任务 API 来控制。

6) 调度和定时任务

BAW 中的调度功能可以让你通过编程的方式,控制定时任务或事件的触发。你可以配置 定时器延时 事件,并且通过脚本来触发这些事件。

例如,设置一个延时任务:

var task = getTask("TaskID");
task.scheduleTimer("timerName", 3600); // 1小时后触发

3. 编程管理的最佳实践

在使用 BAW 进行编程时,有一些最佳实践可以帮助你提高效率并确保程序的可维护性和可扩展性:

1) 清晰的流程设计

在进行编程之前,首先确保流程设计的清晰和合理。流程设计应该具备良好的可读性和可维护性,避免过于复杂或交错的任务路径。

2) 模块化与重用
  • 重用代码:将常用的业务逻辑、服务和脚本封装成模块,避免重复编写相似的代码。

  • 利用 API:BAW 提供了大量的 API,你可以根据需要集成外部系统或自定义服务,而无需重复实现复杂的功能。

3) 错误处理与日志
  • 进行 错误捕捉和日志记录,确保能够及时发现和排除代码中的问题。

  • 使用 调试模式 来逐步排查流程中的潜在问题。

4) 测试与验证

在开发过程中,定期运行测试,确保流程和脚本的正确性。使用 流程模拟单元测试 来验证代码的执行情况。

4. 总结

BAW 的编程部分非常灵活,可以通过 REST APISOAP Web 服务Java 服务脚本编程(JavaScript、Jython)等方式进行深度定制。您可以通过编程来实现:

  • 外部系统的集成。

  • 自定义业务逻辑。

  • 动态决策和流程控制。

  • 任务分配、调度与定时操作。

通过这些编程功能,BAW 提供了强大的支持来实现复杂的业务流程自动化,帮助企业实现数字化转型,提高效率和灵活性。

三、API

IBM Business Automation Workflow (BAW) 中,REST API 是与系统外部或不同服务进行交互的核心技术之一。BAW 提供了多个不同类别的 REST API,其中 REST API 检测操作 REST API流程 API 是最常见的几种类型。以下是这些 API 的详细讲解。

1. REST API 检测(REST API Diagnostics)

REST API 检测 是用于检查和验证 BAW 系统中 REST API 是否能够正常工作的工具或功能。它有助于开发人员在实际开发或集成过程中,快速识别和解决 API 调用问题。

功能
  • API 测试:通过 REST API 检测,你可以测试 API 是否能够成功响应,确保系统与外部应用程序的通信正常。

  • 验证 API 端点:确保通过正确的 URL 请求访问 BAW 系统的 API。

  • 状态监控:查看 BAW 系统中的 REST API 服务的状态,确保其健康和可用。

应用场景
  • 在开发过程中,开发人员可以使用 REST API 检测 来验证 API 调用是否正常响应,帮助快速排除问题。

  • 在集成时,检测 API 是否返回预期的结果,检查请求与响应格式的正确性。

常见操作
  • 使用 Postman 等工具发送 API 请求并查看响应。

  • 访问 BAW 提供的 REST API 端点,如 /v1/workflow/tasks 来查看任务相关数据。

2. 操作 REST API(Operating REST APIs)

操作 REST API 允许你通过 HTTP 请求(如 GET、POST、PUT、DELETE 等)来与 IBM BAW 系统进行交互,执行常见的操作,例如获取流程实例、任务、表单数据,或者修改这些数据。操作 REST API 是 BAW 系统与外部应用或服务交互的主要方式。

功能
  • 获取流程实例:可以查询流程实例的状态、历史、属性等信息。

  • 任务操作:获取任务、更新任务状态、分配任务、完成任务等操作。

  • 用户管理:操作用户和组信息,获取用户的任务列表,查看任务分配情况。

  • 表单操作:处理流程中表单的数据,包括获取表单内容、更新表单字段、提交表单等。

常见操作
  1. 获取任务列表(GET)

    GET /v1/workflow/tasks
    
    • 获取系统中的所有任务,包括任务的当前状态、分配情况、优先级等信息。

  2. 获取特定任务详情(GET)

    GET /v1/workflow/tasks/{taskId}
    
    • 获取特定任务的详细信息,包含任务的输入、输出、当前状态、表单等内容。

  3. 创建流程实例(POST)

    POST /v1/workflow/processes
    
    • 创建新的流程实例,并传递必要的参数和数据。

  4. 更新任务状态(PUT)

    PUT /v1/workflow/tasks/{taskId}/status
    
    • 更新指定任务的状态,如将任务标记为完成、暂停、转交等。

  5. 提交表单(POST)

    POST /v1/workflow/forms/{formId}/submit
    
    • 提交表单数据,用于流程中的任务。

常见的 REST API 请求类型
  • GET:用于获取数据,如获取流程实例、任务、表单等。

  • POST:用于创建新数据,如启动流程、创建任务等。

  • PUT:用于更新数据,如更新任务状态、修改表单字段值等。

  • DELETE:用于删除数据,如删除任务、取消流程实例等。

3. 流程 API(Process APIs)

流程 API 是 BAW 中特定于流程管理的 API,旨在处理与流程实例、流程活动、任务和决策等相关的操作。这些 API 是用来控制和操作流程的核心接口。流程 API 能够让你从外部应用中启动流程、获取流程实例信息、获取任务等,帮助集成和自动化业务流程。

功能
  • 启动流程实例:允许外部系统启动一个新的流程实例,并传递必要的参数。

  • 管理流程实例:查询流程实例的状态、获取任务、更新流程的状态等。

  • 执行任务:通过 API 执行任务操作,如任务的分配、完成、暂停等。

  • 获取流程历史:查询特定流程实例的历史记录,例如流程的状态变化、任务完成情况等。

  • 流程事件触发:根据事件触发特定的操作,例如启动子流程、触发提醒等。

常见操作
  1. 启动流程实例(POST)

    POST /v1/workflow/processes
    
    • 用于启动一个新的流程实例。你可以通过 POST 请求来创建并启动流程实例,并传递必要的输入数据。

    示例:

    {"processId": "myProcess","variables": {"orderAmount": 5000,"customerId": 1234}
    }
    
  2. 查询流程实例(GET)

    GET /v1/workflow/processes/{processInstanceId}
    
    • 获取特定流程实例的详细信息,包括其当前状态、执行历史、任务状态等。

  3. 获取流程任务(GET)

    GET /v1/workflow/tasks/{taskId}
    
    • 获取指定任务的详细信息,任务的输入数据、表单内容、分配用户等。

  4. 更新流程变量(PUT)

    PUT /v1/workflow/processes/{processInstanceId}/variables
    
    • 更新流程实例的变量值。可以在流程的任意阶段更新流程变量,进而影响流程的执行路径或业务逻辑。

  5. 获取流程历史(GET)

    GET /v1/workflow/processes/{processInstanceId}/history
    
    • 获取流程实例的执行历史,包括任务完成时间、状态变更、流程进度等。

流程 API 的应用场景
  • 流程启动:当一个外部系统需要启动一个新的工作流时,可以通过 流程 API 启动一个新的流程实例。

  • 任务操作:当需要从外部应用中处理任务(如分配、完成、暂停等),可以调用相应的 API 来控制任务。

  • 流程监控:通过 流程 API 监控和查询流程的执行状态,确保流程的每个环节都正常运作。

  • 自动化操作:在某些自动化场景中,可以通过 流程 API 自动更新流程变量、触发任务、以及根据需要触发不同的决策。

总结:REST API 检测、操作 REST API 和 流程 API 的区别

特性REST API 检测操作 REST API流程 API
用途检查和验证 BAW 系统中 REST API 是否正常工作与 BAW 系统交互执行常规任务操作管理和控制流程实例,任务和流程历史等
功能测试 API 端点、验证响应、检查系统健康状态获取流程实例、任务操作、表单提交等启动流程实例、更新流程变量、获取流程历史
典型操作测试 REST API 是否正常响应查询任务、流程实例,更新任务、提交表单启动流程、获取任务、更新流程变量、查看流程历史
主要应用场景开发阶段的 API 调试和检测与 BAW 系统进行集成,执行常规操作流程管理、任务操作、决策和自动化任务控制

通过这些 REST API,开发人员能够在 IBM BAW 平台上实现高效的业务流程自动化和外部系统集成。

结语:到这里为止,关于IBM BAW的整体功能、框架已经介绍完毕。再次重申,如果您要具体的流程开发实例,请到第一讲中的地址下载虚拟机,里面有详细的实例教程。 

相关文章:

IBM BAW(原BPM升级版)使用教程第十四讲

续前篇! 一、流程设计中的编程 在 IBM Business Automation Workflow (BAW) 中,编程部分涵盖了多种技术、工具和策略,帮助用户定制和扩展流程。BAW 主要通过脚本、集成、服务和自定义代码来实现流程的灵活性和定制化。下面将详细讲解 BAW …...

【计算机网络 第8版】谢希仁编著 第四章网络层 题型总结3 SDN OpenFlow

SDN OpenFlow题型 这题其实,认真看书P196-197的例子也不难理解。我个人认为所谓防自学设计主要就是你没看懂这张图的时候就是天书,你知道怎么读这张图的时候就很简单。不过我相信这个用心一点应该也都是能懂的。 题目 4.66-4.69 4-66 我最大的一个问题…...

【React中函数组件和类组件区别】

在 React 中,函数组件和类组件是两种构建组件的方式,它们在多个方面存在区别,以下详细介绍: 1. 语法和定义 类组件:使用 ES6 的类(class)语法定义,继承自 React.Component。需要通过 this.props 来访问传递给组件的属性(props),并且通常要实现 render 方法返回 JSX…...

多线程代码案例-1 单例模式

单例模式 单例模式是开发中常见的设计模式。 设计模式,是我们在编写代码时候的一种软性的规定,也就是说,我们遵守了设计模式,代码的下限就有了一定的保证。设计模式有很多种,在不同的语言中,也有不同的设计…...

langChain存储文档片段,并进行相似性检索

https://python.langchain.ac.cn/docs/how_to/document_loader_pdf/#vector-search-over-pdfs 这段代码展示了如何使用LangChain框架中的InMemoryVectorStore和OpenAIEmbeddings来存储文档片段,并基于提供的查询进行相似性搜索。下面是对每一行代码的详细解释&…...

MQTT协议技术详解:深入理解物联网通信基础

MQTT协议技术详解:深入理解物联网通信基础 1. MQTT协议概述 MQTT (Message Queuing Telemetry Transport) 是一种轻量级的发布/订阅消息传输协议,专为资源受限设备和低带宽、高延迟或不可靠网络环境设计。作为物联网通信的核心协议之一,MQTT…...

python中的进程锁与线程锁

在Python中,线程和进程使用锁的机制有所不同,需分别通过threading和multiprocessing模块实现。以下是具体用法及注意事项: 一、线程锁(Thread Lock) 基本用法 线程锁用于多线程环境下保护共享资源,防止数据…...

导出导入Excel文件(详解-基于EasyExcel)

前言: 近期由于工作的需要,根据需求需要导出导入Excel模板。于是自学了一下下,在此记录并分享!! EasyExcel: 首先我要在这里非常感谢阿里的大佬们!封装这么好用的Excel相关的API,真…...

仿正点原子驱动BMP280气压传感器实例

文章目录 前言 一、寄存器头文件定义 二、设备树文件中添加节点 三、驱动文件编写 四、编写驱动测试文件并编译测试 总结 前言 本文驱动开发仿照正点原子的iic驱动实现,同时附上bmp280的数据手册,可访问下面的链接: BMP280_Bosch(博世…...

Java 反射机制(Reflection)

一、理论说明 1. 反射的定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Jav…...

每日Prompt:发光线条解剖图

提示词 一幅数字插画,描绘了一个 [SUBJECT],其结构由一组发光、干净且纯净的蓝色线条勾勒而成。画面设定在深色背景之上,以突出 [SUBJECT] 的形态与特征。某个特定部位,如 [PART],通过红色光晕加以强调,以…...

从新手到高手:全面解析 AI 时代的「魔法咒语」——Prompt

引言:AI 时代的「语言炼金术」 在人工智能技术突飞猛进的今天,我们正在经历一场堪比工业革命的生产力变革。从聊天机器人到图像生成,从数据分析到自动化写作,AI 模型正在重塑人类与信息交互的方式。而在这一切背后,隐…...

【SpringBoot】集成kafka之生产者、消费者、幂等性处理和消息积压

目录 配置文件 application.properties启动类 ApplicationKafka 配置Message 消息实体类MessageRepository 消息处理消息积压监控服务Kafka消息消费者服务Kafka消息生产者服务API控制器提供测试接口关键特性说明生产环境建议 配置文件 application.properties # 应用配置 serv…...

[SAP] 通过事务码Tcode获取程序名

如何通过事务码查找对应的程序名? 方法一:直接运行事务码,跳转至功能详情页面,点击【系统】|【状态】即可获取对应事务码的程序名 从上面可以了解到自定义的事务码"ZMM01"对应的程序名为"ZYT36_ZMM001_01"&a…...

蓝桥杯12届国B 纯质数

题目描述 如果一个正整数只有 1 和它本身两个约数,则称为一个质数(又称素数)。 前几个质数是:2,3,5,7,11,13,17,19,23,29,31,37,⋅⋅⋅ 。 如果一个质数的所有十进制数位都是质数,我们称它为纯质数。例如&#xff1…...

国产大模型「五强争霸」,决战AGI!

来源 | 新智元 DeepSeek的横空出世,已经彻底改变了全球的AI局势。 从此,不仅中美大模型竞争格局改变,国产大模型的产业版图,也被一举打破! 纵观中国基础大模型的市场,可以看到,如今的基础大模…...

C++修炼:继承

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…...

Mysql新增

插入一个记录需要的时间由下列因素组成&#xff0c;其中的数字表示大约比例&#xff1a; 连接&#xff1a;(3)发送查询给服务器&#xff1a;(2)分析查询&#xff1a;(2)插入记录&#xff1a;&#xff08;1x记录大小&#xff09;插入索引&#xff1a;&#xff08;1x索引&#x…...

华秋2025电子设计与制造技术研讨会(华东站)成功举办!

“探索科技前沿&#xff0c;共筑创新未来”——华秋“2025电子设计与制造技术研讨会第一站&#xff1a;华东站”在江苏苏州圆满落幕。 随着电子信息产业的持续增长和数字化经济的加速转型&#xff0c;数字化电子供应链的作用愈发显著。本届研讨聚焦EDA设计、DFM软件分析、多层…...

[学习] RTKLib详解:qzslex.c、rcvraw.c与solution.c

RTKLib详解&#xff1a;qzslex.c、rcvraw.c与solution.c 本文是 RTKLlib详解 系列文章的一篇&#xff0c;目前该系列文章还在持续总结写作中&#xff0c;以发表的如下&#xff0c;有兴趣的可以翻阅。 [学习] RTKlib详解&#xff1a;功能、工具与源码结构解析 [学习]RTKLib详解…...

【Ubuntu】neovim Lazyvim安装与卸载

安装neovim # 下载 AppImage wget https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.appimage# 添加执行权限 chmod ux nvim-linux-x86_64.appimage# 移动到系统路径&#xff0c;重命名为 nvim sudo mv nvim-linux-x86_64.appimage /usr/local/b…...

数据结构(一) 绪论

一. 时间复杂度: (1)定义: 时间复杂度是衡量算法执行时间随输入规模(通常用n表示)增长的变化趋势的指标,时间复杂度用O符号表示 用于描述算法在最坏情况下或平均情况下的时间需求 时间复杂度关注的是操作次数的增长率&#xff0c;而非具体执行时间 常见的时间复杂度由小到大依次…...

数据库事务并发问题

目录 脏读 幻读 不可重复读 三者的区别 脏读、幻读和不可重复读是在数据库并发操作中可能出现的问题&#xff0c;以下是对它们的详细介绍&#xff1a; 脏读 定义&#xff1a;指一个事务读取了另一个未提交事务修改的数据。示例&#xff1a;事务 A 修改了一条数据&#xf…...

Android之横向滑动列表

文章目录 前言一、效果图二、使用步骤1.xml布局2.代码3.HomeHxBean3.adapter4.item布局5.两个drawable 总结 前言 横向滑动列表有多种实现方式&#xff0c;也可以用tablayout&#xff0c;也可以用recyclerview&#xff0c;今天主要介绍recyclerview。 一、效果图 二、使用步骤…...

系统稳定性之上线三板斧

&#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》&#xff08;基础篇&#xff09;、&#xff08;进阶篇&#xff09;、&#xff08;架构篇&#xff09;清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…...

aardio - godking.vlistEx.listbar + win.ui.tabs 实现多标签多页面切换

方法一&#xff1a; import win.ui; import godking.vlistEx.listbar; import fonts.fontAwesome; /*DSG{{*/ mainForm win.form(text"vlistEx - table adapter";right895;bottom503) mainForm.add({ custom{cls"custom";text"自定义控件";lef…...

鸿蒙 核心与非核心装饰器

HarmonyOS NEXT 版本中完整的 ArkTS 装饰器分类整理&#xff08;含核心与非核心装饰器&#xff0c;已剔除废弃特性&#xff09; 一、核心装饰器&#xff08;Essential Decorators&#xff09; 1. 组件基础 装饰器功能Entry应用入口组件&#xff0c;每个模块必须且仅有一个&am…...

TypeScript 知识框架

一、TypeScript 基础 1. 类型系统 基本类型: number, string, boolean, null, undefined, symbol, bigint 引用类型: object, array, function, class 特殊类型: any, unknown, void, never 类型推断与类型注解 类型断言 (as 语法和 <Type> 语法) 2. 接口与类型别名 接口…...

web-ui开源程序是建立在浏览器使用的基础上,旨在使 AI 代理可以访问网站

​一、软件介绍 文末提供程序和源码下载 web-ui开源程序是建立在浏览器使用的基础上&#xff0c;旨在使 AI 代理可以访问网站。WebUI&#xff1a;基于 Gradio 构建&#xff0c;支持大部分 browser-use 功能。此 UI 设计为用户友好型&#xff0c;并支持与浏览器代理轻松交互。扩…...

【ns3】TCP三次握手源码解析

文章目录 TCP三次握手过程三次握手源码 TCP三次握手过程 三次握手源码 下面是ns3里三次握手整体过程的源码&#xff0c;和上面图解一一对应&#xff1a; TCP socket的状态枚举&#xff1a; 整体过程&#xff1a; 客户端首先connect&#xff1a;tcp-socket-base::connect调用Do…...

【YOLO模型】参数全面解读

使用YOLO模型时&#xff0c;需要调节各种参数&#xff0c;网络文章和官方文档有点不方便&#xff0c;整理了下面的内容备用&#xff1a; 获取最全最新的参数列表: Ultralytics官方文档: 这是获取YOLOv11&#xff08;以及YOLOv8等&#xff09;最权威、最详细参数信息的地方。通…...

跨境电商定价革命:亚马逊“逆向提价“策略背后的价值重构逻辑

导言&#xff1a;打破价格魔咒的销量奇迹 2024年Q3亚马逊平台上演商业悖论&#xff1a;在TOP5000卖家中&#xff0c;12%实施5%-15%温和提价的商户&#xff0c;41%实现单量30.4%的季度增长。这一现象颠覆"低价即流量"的电商铁律&#xff0c;揭开新消费时代"价值定…...

Kafka、RabbitMQ、RocketMQ的区别

以下是 RabbitMQ、RocketMQ、Kafka 的核心区别对比&#xff1a; 一、架构设计差异 ‌Kafka‌ 基于分布式日志的发布-订阅模型&#xff0c;通过分区&#xff08;Partition&#xff09;实现水平扩展&#xff0c;依赖 ZooKeeper 管理集群消费者通过消费者组&#xff08;Consumer G…...

win10 局域网内聊天

在 Windows 10 的局域网 中&#xff0c;如果你想实现 多个用户之间的聊天功能&#xff0c;可以选择以下几种方案&#xff0c;取决于你需要的是&#xff1a; • ✅ 命令行纯文字聊天&#xff08;如 Linux talk&#xff09; • ✅ 图形界面聊天室 • ✅ 局域网广播消息 • ✅ 多人…...

【前端三剑客】Ajax技术实现前端开发

目录 一、原生AJAX 1.1AJAX 简介 1.2XML 简介 1.3AJAX 的特点 1.3.1AJAX 的优点 1.3.2AJAX 的缺点 1.4AJAX 的使用 1.4.1核心对象 1.4.2使用步骤 1.4.3解决IE 缓存问题 1.4.4AJAX 请求状态 二、jQuery 中的AJAX 2.1 get 请求 2.2 post 请求 三、跨域 3.1同源策略…...

论文学习_Trex: Learning Execution Semantics from Micro-Traces for Binary Similarity

摘要&#xff1a;检测语义相似的函数在漏洞发现、恶意软件分析及取证等安全领域至关重要&#xff0c;但该任务面临实现差异大、跨架构、多编译优化及混淆等挑战。现有方法多依赖语法特征&#xff0c;难以捕捉函数的执行语义。对此&#xff0c;TREX 提出了一种基于迁移学习的框架…...

数据压缩的概念和优缺点

一、数据压缩的概念 数据压缩是通过特定算法&#xff08;压缩算法&#xff09;对数据进行重新编码&#xff0c;以减少数据存储空间或传输带宽的技术。其核心目标是在不丢失关键信息&#xff08;或允许一定程度信息损失&#xff09;的前提下&#xff0c;降低数据量&#xff0c;…...

spaCy基础入门

spaCy 概览说明 spaCy 是一个现代、快速、工业级 NLP 工具库&#xff0c;专门为实际工程应用设计&#xff0c;提供&#xff1a; • 分词&#xff08;Tokenization&#xff09; • 词性标注&#xff08;POS Tagging&#xff09; • 命名实体识别&#xff08;NER&#xff09; •…...

vue3项目创建-配置-elementPlus导入-路由自动导入

目录 方法一&#xff1a;create-vue 方法二 &#xff1a;Vite Vue Vite.config.ts配置 引入element-plus 安装 如何在项目中使用 Element Plus 完整引入 按需导入 vue3vite中自动配置路由的神器&#xff1a;vite-plugin-pages 1. 安装 2、修改vite.config.js中配置…...

2025年的电脑能装win7吗_2025年组装电脑装win7详细图文教程

2025年的电脑能装win7吗&#xff1f;2025年的电脑可以安装Win7&#xff0c;但存在一些限制和挑战。2025年的电脑基本上是14代和15代处理器&#xff0c;需要特定的条件和步骤才能安装win7&#xff0c;并且只能采用独立显卡&#xff0c;因为没有集成显卡驱动。另外注意目前2025年…...

windowsC++操作ADB

文章目录 一、ADB基础1. 工作原理2. 安装与配置 二、常用ADB指令分类1. 设备连接与管理2. 文件传输3. 应用管理4. 设备交互5. 系统信息6. 日志与调试7. 网络与端口转发 三、高级用法1. 多设备管理2. 无线ADB连接3. 批量执行命令4. ADB脚本示例 四、常见问题与解决方案五、注意事…...

Springboot实现重试机制

背景 研发工作中时常遇到要和其他服务对接&#xff0c;依赖对方能力的情况&#xff0c;最恶心的是对方提供的服务不稳定&#xff0c;时灵时不灵的&#xff0c;进而影响到自己功能的稳定性。万一发生了这种事&#xff0c;做为研发&#xff0c;咱该怎么办&#xff1f;通过容错直接…...

CS内网渗透 ----【内网渗透实战】PsExec vs Telnet:建立IPC通道实现横向移动与域控上线全解析

目录 1. 什么是 PsExec&#xff1f; 2. 什么是 Telnet&#xff1f; 3. PsExec 与 Telnet 的区别及优势 3.1 主要区别 3.2 内网渗透中的优势 4. 实际案例 —— 使用 PsExec 上线域控主机 案例背景 操作步骤 案例效果 5. 总结 利用 PsExec 建立 IPC 通道 —— IPC 的定…...

第二十三天打卡

作业&#xff1a; 整理下全部逻辑的先后顺序&#xff0c;看看能不能制作出适合所有机器学习的通用pipeline 数据预处理 → 特征选择 → 降维 → 模型训练 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split, GridSearchCV from sk…...

aardio - 将文本生成CSS格式显示

import win.ui; /*DSG{{*/ var winform win.form(text"aardio form";right759;bottom469) winform.add( button{cls"button";text"Button";left340;top130;right430;bottom180;z3}; edit{cls"edit";text"我是一串文本";lef…...

【漫话机器学习系列】256.用 k-NN 填补缺失值

用 k-NN 填补缺失值&#xff1a;原理、实现与应用 在实际的数据科学项目中&#xff0c;我们经常会遇到数据缺失&#xff08;Missing Values&#xff09;的问题。缺失值如果处理不当&#xff0c;不仅会影响模型训练&#xff0c;还可能导致最终结果偏差。 今天&#xff0c;我们…...

tomcat与nginx之间实现多级代理

准备工作 准备5台虚拟主机&#xff1b;至少准备3台虚拟主机&#xff1b; 设备1作为代理服务器&#xff1b;设备2与设备4作为处理静态资源请求服务器&#xff08;使用nginx&#xff09;&#xff1b;设备3与设备5作为处理动态资源服务器&#xff08;使用tomcat&#xff09; 设…...

商业航天运动控制系统中的高可靠性芯片解决方案:挑战、策略与应用研究

摘要&#xff1a;随着商业航天领域的迅速发展&#xff0c;运动控制系统对芯片的可靠性提出了前所未有的挑战。本文深入探讨了商业航天运动控制系统中芯片可靠性面临的挑战&#xff0c;包括宇宙辐射效应、极端环境适应性及系统级可靠性保障等。同时&#xff0c;通过案例研究展示…...

[Java实战]Spring Boot 3 整合 Ehcache 3(十九)

[Java实战]Spring Boot 3 整合 Ehcache 3&#xff08;十九&#xff09; 引言 在微服务和高并发场景下&#xff0c;缓存是提升系统性能的关键技术之一。Ehcache 作为 Java 生态中成熟的内存缓存框架&#xff0c;其 3.x 版本在性能、功能和易用性上均有显著提升。本文将详细介绍…...

【Flask全栈开发指南】从零构建企业级Web应用

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1f6a7; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f50d; 一、技术原理剖析&#x1f4ca; 核心概念图解&#x1f4a1; 核心作用讲解&#x1f9e9; 关键技术模块说明⚖️ 技术选…...