优维低代码:Provider 构件

优维低代码:第三方接口接入 优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。conf.default.yaml 为默认配置,如果需要现场修改,请在 conf.yaml(如果没有,则新建)做个性化修改,实际配置将会合并两者。api_gateway 提供了统一的转发请求服务(如果是集群部署,则在对外服务的逻辑机器上,一般有 2 台或 3 台)将如下内容添加到 conf.yaml 里面。 阅读详情

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。


连载第十五期

《高级指引:Provider 构件》

▽

Provider 构件是一种特殊类型的构件,它不提供任何界面展示的能力,仅提供数据处理的能力。配合 useResolves 可以快速实现页面依赖数据的绑定,配合 Events 事件可以实现动态的数据处理。

在 Brick Next 中,将数据与 UI 分离非常重要,一方面可以提升业务构件的可复用性,同时也可以提升产品的可配置能力、可编排能力。

# 创建 Provider 构件

主要有两种快速创建 Provider 构件的方法。

# 使用脚手架工具创建

创建 Provider 构件最简单的方式是使用脚手架工具 yarn yo ,选择 a new package of providers,然后选择一个 API SDK。工具将自动生成一个该 SDK 相关的 Provider 构件库。

初始生成的构件库不包含任何构件,需要在生成的项目文件 providers.json 的 providers 列表中添加对应的接口方法名,例如 "CmdbObjectApi.list"。

# 使用createProviderClass创建

脚手架工具仅提供 API SDK 的 Provider 构件封装,如果想要对 SDK 返回的数据做加工,或者使用其它的个性化数据来源,这时可以使用 createProviderClass 快速创建一个 Provider 构件。例如:

import { createProviderClass } from "@next-core/brick-utils";import { CmdbObjectApi } from "@sdk/cmdb-sdk";
function filteredList(params) {  return CmdbObjectApi.list(params).filter((model) => !model.private);}
customElements.define(  "micro-app-store.provider-app-detail",  createProviderClass(filteredList));

createProviderClass 支持传入任意 Function,它的实现细节请参考本文后面的章节。

# 使用方法

Provider 构件一般用于 useResolves 和 Events 事件。

# 定时更新

现在更推荐使用Provider轮询来实现定时更新的能力。

旧方式的定时更新的示例👇

在 Provider 构件的属性里声明 interval ,可以实现每隔一段时间就重新拉取数据并通知到构件,例如:

brick: "providers-of-pipeline.project-api-list"bg: trueproperties:  interval:    delay: 3000    ignoreErrors: true

delay 指定每次更新的间隔时间,单位毫秒。默认情况下如果数据更新发生错误,系统将弹出错误警告。设置 ignoreErrors: true 可以不弹出警告。无论何种设置,发生错误时始终会停止接下来的更新。​​​​​​​

interface IntervalSettings {  delay: number;  ignoreErrors?: boolean;}

当需要停止定时更新时,调用 Provider 构件的 $stopInterval() 即可,例如:​​​​​​​

brick: "my-button"events:  click:    target: "my-provider"    method: "$stopInterval"

⊙ NOTE

从 brick_next 2.18.14 开始支持 $stopInterval。

# 主动更新

现在更推荐使用 Events 事件和 Context 上下文来实现主动更新数据的能力。

旧方式的主动更新的示例👇

Provider 构件在运行时会对外暴露方法 $refresh(),可以在 TS 中调用或在 Storyboard 中绑定到指定事件,例如:​​​​​​​

events:  click:    target: 'providers-of-pipeline\.project-api-list'    method: "$refresh"

$refresh() 执行时如果发生错误,系统将弹出错误警告,但不会抛出错误。可以传递选项参数,设置 throwErrors: true 时可以将错误以 Rejected Promise 形式抛出。设置 ignoreErrors: true 时则完全忽略错误,既不弹出错误警告,也不抛出错误。​​​​​​​

interface RuntimeProviderBrick {  // 使用 `$` 作前缀表明这是运行时追加的属性/方法。  $refresh: (options?: {    ignoreErrors?: boolean;    throwErrors?: boolean;  }) => Promise<void>;

# 内置属性、方法和事件

现在更推荐使用 Provider 异步回调和 Context 上下文来实现数据分步更新及异步处理的能力,无需使用 Provider 构件的内置属性、方法和事件。

关于内置属性、方法和事件的文档

# 内置属性​​​​​​​​​​​​​​

# 内置方法

Provider 构件内置有几个方法(method),列举如下:

#内置事件

Provider 构件在执行execute 后(包括 setArgsAndExecute 和 updateArgsAndExecute),将根据执行成功与否分别发送 response.success 和 response.error 事件。

# Provider 异步回调​​​​​​​

bricks:  - brick: "your-brick"    events:      something.happen:        useProvider: "your-provider"        args:          - "${EVENT.detail.id}"        callback:          success:            target: "another-brick"            properties:              instanceData: "${EVENT.detail}"          error:            action: "console.error"          finally:            target: "your-button"            properties:              disabled: false

在以上配置中,如果构件 your-brick 发生了事件 something.happen:

  1. 系统将使用 Provider 构件 your-provider,调用它的resolve,传递参数 ${EVENT.detail.id};

  2. 当该异步函数完成后:

  • 如果成功,找到构件 another-brick,设置它的属性 instanceData 为上述函数返回的结果;

  • 如果失败,使用 console.error 打印上述函数返回的失败原因。

  • 无论成功失败,最后都将 your-button 构件的 disabled 属性设置为 false

如果给事件处理器配置了 callback,那么系统在事件触发后,除了执行指定 method 外,还将根据该函数执行结果进行回调调用:method 将被视作异步函数调用,当该函数成功时(resolved),将触发 callback.success 回调,反之(rejected)将触发 callback.error,而无论成功或失败,最后都将触发 callback.finally。这些回调的配置本身又是一个事件配置,因此它可以执行内置动作、或设置其他构件的属性、甚至继续调用其他构件的方法。这些回调传递的 event.detail 在成功时为函数执行的 resolved result,失败时为函数执行的 rejected reason。

基于异步回调驱动的模式相比基于事件驱动的好处在于在同样实现了异步操作的前提下,回调使得操作与响应可以一一对应。事件无法将操作与响应一一对应,对于事件接收方,在收到事件时,很难判断它是自己触发的还是其它对象触发的。

因此事件通常用于旁路处理的场景,例如打印日志、广播通知等。而回调则用于需要将操作和响应对应起来的场景,例如实例的增、删、改、查。

# Provider 轮询

使用 useProvider 作事件处理时,可以激活轮询模式,系统将间隔指定时间轮询对应的接口。​​​​​​​

useProvider: "my-provider"args:  - "some args"  # 通常应为轮询接口指定一个系统额外的参数,以避免在每次轮询时显示加载条  - interceptorParams:      ignoreLoadingBar: truepoll:  enabled: true  # 通常应指定一个校验函数 `expectPollEnd`,该函数接收一个参数:轮询执行结果,  # 并返回轮询是否应该结束。  expectPollEnd: '<% (result) => result.status === "done" %>'callback:  progress:    # 每次轮询得到结果时会触发 `callback.progress`  success:    # 轮询完成时会触发 `callback.success`,    # 即 `expectPollEnd(result)` 返回 true 时  error:    # 轮询失败时会触发 `callback.error`  finally:    # 轮询完成或失败时触发 `callback.finally`

除了使用 progress 来获得接口的实时结果外,也可以让轮询接口对外表现得像普通接口一样。例如假设有一个查询工具执行结果的接口需要轮询以得到最终执行结果,可以这样配置:​​​​​​​

useProvider: "my-provider.get-tool-result"args:  - "some args"  - interceptorParams:      ignoreLoadingBar: truepoll:  enabled: true  expectPollEnd: |    <%      (result) =>        result.status === "success" || result.status === "failed"    %>  delegateLoadingBar: truecallback:  success:    target: "tool-result"    properties:      - output: "<% EVENT.detail.output %>"  error:    action: handleHttpError

# 基于事件驱动的示例

⊙ NOTE

现在更推荐使用 Context 上下文来实现如下的分步表单数据更新

基于事件驱动的示例👇​​​​​​​

bricks:  - brick: "your-provider"    bg: true    properties:      args:        - null        - name: "unknown"    events:      response.success:        # ...      response.error:        # ...  - brick: "your-brick-a"    events:      something.happen:        target: "your-provider"        method: "setArgs"        args:          - "0": "${EVENT.detail.id}"  - brick: "your-brick-b"    events:      something.else.happen:        target: "your-provider"        method: "setArgs"        args:          - "1.name": "${EVENT.detail.name}"  - brick: "your-brick-c"    events:      submit:        target: "your-provider"        method: "execute"

  • 当构件 your-brick-a 发生 something.happen 事件时,系统将找到 your-provider 构件,并更新它关联参数的第一项,更改为该事件 detail 中的 id 对应的值;

  • 而当构件your-brick-b发生 something.else.happen 事件时,系统将找到 your-provider 构件,并更新它关联参数的第二项的 name 字段,更改为该事件 detail 中的 name 对应的值

  • 接着,当构件 your-brick-c 发生 submit 事件时,系统将调用 your-provider 的 execute 方法,使用前面更新好的关联参数来执行它的关联函数;

  • 最后,关联函数执行后,将根据执行成功与否分触发 response.success 和 response.error 事件。

注意 setArgs 接收的参数为一个键值对:patch,系统将遍历这些键值对,分别执行 _.set(provider.args, key, value),因此我们可以实现在不同的事件下更新同一个 Provider 的关联参数的不同部分(例如分步表单里分别更新最终发送的数据)。

相关源码:​​​​​​​

import { set } from "lodash";
interface ProviderElement<P extends any[], R> extends HTMLElement {  args: P;
  updateArgs: (event: CustomEvent<Record<string, any>>) => void;
  updateArgsAndExecute: (event: CustomEvent<Record<string, any>>) => R;
  setArgs: (patch: Record<string, any>) => void;
  setArgsAndExecute: (patch: Record<string, any>) => R;
  execute(): R;
  saveAs(filename: string, ...args: P);
  executeWithArgs(...args: P): R;
  resolve(...args: P): R;}

下一期干货内容:

《高级指引:Custom Templates 自定义模板》

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

相关推荐

ROS环境下UR机械臂与Realsense相机手眼标定实战指南

本文提供了在ROS环境下,对UR机械臂与Realsense相机进行手眼标定的完整实战指南。详细介绍了从环境搭建、软件包安装、硬件配置到分步数据采集与计算的完整流程,并分享了常见的避坑技巧与精度优化方法,旨在帮助开发者高效、准确地完成标定,为后续的机器人视觉应用奠定坚实基础。

sunny的博客 648

优维低代码:构件事件传递

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。在上一篇《优维低代码:构件参数传递》的技术分享中,我们讲到构件的数据可来自于后台的接口。下面将分享构件间传递事件常见的业务场景,以及分布调用的方式。 构件间可传递事件,常见的业务场景比如:这里对events部分做详解。如上示例,大伙会发现events是一个字典,字典的 key 为事件的名字,value 为

EasyOps_DevOps的博客 209

MATLAB实战:纯电动汽车动力性仿真从入门到精通(附完整代码)

本文提供了一份基于MATLAB的纯电动汽车动力性仿真从入门到精通的实战指南。通过理论建模与代码实战相结合,详细讲解了如何构建行驶阻力模型、驱动力平衡方程,并利用MATLAB脚本完整实现了最高车速、加速时间和最大爬坡度三大核心性能指标的仿真计算。文章附有完整代码,帮助工程师快速掌握纯电动汽车动力性仿真的核心技能,为设计与优化提供高效的数字工具。

weixin_29074409的博客 369

优维低代码实践:对接数据

接口字段定义需要说明下,我们的字段定义是包含了 uri 中的参数的,如上图所列的路由 v2/object/:objectId/instance/_search中,`objectId` 这个参数也定义在请求体中的,对于我们 uri 中的参数都需要单独占位,剩余的接口 data 参数一起占位,上面接口请求的参数如下写法。同样的如果使用的是 provider 类型的接口,我们也提供了 provider 类型的接口文档,可以通过 provider 文档 查看具体的信息。

EasyOps_DevOps的博客 1843

PLC1200使用CB1241RS485通讯模块做从站进行Modbus Rtu通信

添加新设备(PLC)->设备和网络管理->点击PLC->看到硬件目录选择通信板->点到点->CB1241(RS485)->看到6ES7241-1CH30-1XB0选择添加,如图。指向Modbus保持寄存器数据块的指针 我这里指向了自定义的DB块数据中一个INT数组。在通信->通信处理模块->MODBUS(选择不带RTU的通信指令块)注意:接线时,TRA接485调试模块的B- TRB接调试模块的A+组态后的硬件标识符 270 对应自己组态后自动生成的。1:事务完成,且无任何错误。波特率对应自己使用的。

swmyaopeng的博客 2万+

半导体设备隔振必看:如何用天棚阻尼PID控制实现VC-C级振动抑制(含SIMULINK模型)

本文深入探讨了在半导体精密制造中,如何运用天棚阻尼PID控制算法实现VC-C级振动抑制。通过构建高保真单自由度仿真模型,详细解析了从算法原理、SIMULINK实现到参数整定的全链路方案,并针对谐波扰动提供了陷波滤波器设计方法,为工程师提供了从仿真到实践的完整主动隔振技术指南。

pz89012345的博客 539

优维低代码:构件基本说明

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 在上一篇中,我们分享了在编排详解中是如何进行菜单配置的,本期我们将继续来解读编排详解中的构件基本说明。 #构件配置 "bricks": [ { "brick": "basic-bricks.micro-view", "slots": { "titleBar"...

EasyOps_DevOps的博客 213

uniapp - 实现PDA扫码枪RFID批量扫描读取示例代码,uni-app APP识别RFID(射频识别)结合硬件设备进行扫描,uniApp调用RFID读写通用方案适配各种设备+完整实例源码教程!

uni-app PDA 读取RFID,基于uniapp开发PDA扫码枪APP:实现RFID批量扫描读取功能,UniApp中的RFID实现,手持机 RFID插件(uni-app集成手持设备rfid插件),uniapp自动识别RFID,uni-app调RFID模块,uni-app RFID识别插件,uniapp读取rfid,uniapp手持设备扫描rfid,uniapp超高频rfid识别,rfid标签识别,uniapp调用RFID读写,uniapp rfid扫码枪,uniapp中如何使用rfid插件,打包上线后

🏆 前端领域优质创作者 1万+

优维低代码:定制 Providers

随着系统的不断膨胀,在接口对接过程中,总是会出现各种字段不一致的情况,特别是在重构的时候,就更加是“动态类型一时爽,代码重构火葬场”。但,不可否认的,在某些特殊场景还是需要写些处理逻辑,另外,如果有第三方 API 数据接入的时候,也需要写定制 provider。在开发一个接口的时候,都要先定义契约(点击查看 接口契约介绍 ),然后再基于该契约直接生成前端的 SDK(provider)和后端的框架代码及后端的 SDK(go,python)及 API 文档。这样,前后台都强制遵循契约精神,保证各方统一。

EasyOps_DevOps的博客 357

Python爬虫:实时交通流量数据爬取与路况分析

随着城市化进程的不断推进,交通流量的管理与预测已成为智能交通系统的重要研究方向。交通流量数据不仅为城市交通管理提供了科学依据,还为驾驶员提供了实时路况信息,帮助其做出更加合理的出行决策。通过爬虫技术,我们可以实时获取城市的交通流量数据,从而分析路况,优化交通管理。在这篇博客中,我们将介绍如何使用Python编写一个爬虫来爬取实时交通流量数据,分析道路的交通状况。我们将使用最新的技术工具来构建爬虫,包括。

2201_76125261的博客 1268

如何学习总线技术

如何学习总线技术 以形象生动的比喻来描绘了总线技术的基本思想,指出了总线的基本分类和总线传输的基本原理,以及在学习过程中应当掌握的最基本的知识,对初学者有起到抛砖引入的作用。 0引言   如果一座只能容一个人来往的独木桥,两端的人都想要过桥,为了不拥挤、阻塞,那我们就得采取有效的办法。比如规定某段时间哪端的人过桥,另一端的人就等着该他过桥的时间段的到来,同时也还可以规定人多时要按先来后到或年

ce123的技术博客 8529

优维低代码:Use Provider Hook

最后一个参数[]意味着它将运行 onMount,如果您将变量传递给它[someVariable],它会在更改值 onMount 时再次运行。优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。useProvider Hook 可调用FlowApi生成的后台 API 接口,需要在 React Functional Components 中使用。

EasyOps_DevOps的博客 205

YOLOv11 Neck革新:当SDI遇上BiFPN,带你打造精度飙升的特征融合网络

对于科研:这是一个新颖的特征融合思路,能做出差异化的实验,发论文、做项目都很有价值;对于工程:它能解决小目标漏检、大目标定位不准的痛点,让你的检测系统在工业质检、智能安防等场景下更可靠;对于技术成长:掌握了SDI和BiFPN的设计逻辑,你再去看其他特征融合方法(比如FPN、PAN),会有“一通百通”的感觉,以后优化任何检测模型都能举一反三。如果你之前在目标检测的精度上遇到了瓶颈,不妨试试SDI+BiFPN——它就像给YOLOv11装上了“透视眼”,让模型能看清每一个细节。

FJN110的博客 303

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 296

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

信创环境下PageOffice文档控件适配与实践

信创适配做到文档控件这一层,拼的已经不是"有没有国产版本",而是同一个功能在两类终端上是否真的等价。等价的标准很具体:同一次点击能得到同样的结果,同一份公文能得到同样的版式,同一个项目不需要维护两套代码。这背后是三件并不轻松的工作:服务端用一套接口同时支撑两类终端,客户端把两种系统与四种芯片的安装包分发清楚,文档内核层由产品侧跟着 WPS 的版本走。浏览器这一层的压力,则被收进了产品自己的窗口里——升级节奏由产品掌握,不再交给运气。

zi_wu_xian的专栏 326

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

第三篇 第 6 课

前置:第三篇第 1 课(stdx 引入),第二篇第 1 课(std.regex)。环境:仓颉 SDK 1.2.0。本文所有代码与输出均逐行实测。

weixin_41618057的博客 514

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 351

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 533

Java 集合容器高频面试题全解:HashMap 树化阈值、1.7 死循环与 ConcurrentHashMap 演进(2026 招聘 JD 真题复盘)

HashMap 树化阈值 8 的泊松分布依据、退化阈值 6 的防抖设计、JDK 1.7 头插成环死循环的排查与修复、1.8 尾插后为何仍线程不安全、ConcurrentHashMap 放弃分段锁的原因与 ForwardingNode 协作扩容、computeIfAbsent 死锁陷阱、大集合找重复的场景题选型,附三层追问链自测。题目来源为 38 期公开招聘 JD 样本与字节、拼多多、建行、美团、快手公开面经。

蒙眼过河 418

spdlog 同步日志库使用详解

spdlog是一个轻量级 C++ 日志库,支持同步日志、异步日志、多线程日志、日志文件轮转和自定义日志格式。对于嵌入式 Linux 应用开发,我建议先使用。它可以帮我们完成:日志级别过滤。时间戳和线程 ID 输出。日志格式化。终端和文件输出。多线程安全写入。日志文件按大小或时间轮转。我们不需要自己实现互斥锁、文件写入、日志格式化和轮转等底层功能。

zengjiajun2006的博客 1118

JavaSE通关手册:数据类型与变量

代码无需额外处理,编译时编译器自动完成转换。

xys_678的博客 208

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 367

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 173

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 339

c++ explicit关键字详解

explicit。

拒绝AI文,努力在AI时代写出感动人心的好文章 151

ubuntu安装hadoop系统

本文详细介绍了基于VMware克隆虚拟机搭建三节点Hadoop分布式集群的全过程:使用同一Ubuntu镜像克隆出master、worker1、worker2三台虚拟机,依次配置主机名、固定IP(如192.168.82.10/11/12)、SSH服务及免密登录,确保节点间网络互通。随后安装Java,下载配置Hadoop并分发至各节点,最终初始化启动集群,验证其存储与计算功能,实现高效的大数据环境部署。

qq_43592674的博客 350
上一篇: UGeek大咖说 | 精彩回顾:京东商城可观测性体系的落地与实践
下一篇: DevOps 的未来:值得关注的趋势
优维科技EasyOps
博客等级 码龄5年 1483粉丝 395原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值