优维低代码:Best Practice

一次实时数据链路丢数排查:从 MQTT 队列积压到 SQL 统计开销 本文通过一次实时数据链路压测,排查了从MQTT到ClickHouse的端到端数据丢失问题。核心方法是为每条消息添加序号,建立独立观察点(MQTT订阅端、Kafka消费者),结合转发服务阶段统计与线程栈分析,定位到下游处理速度不足源于Druid SQL合并统计的高开销。优化措施包括关闭SQL合并、扩容代理队列、增强生产侧失败处理,并验证15分钟内实现全链路对账一致,显著缓解积压与丢包。关键收获:数据可对账、明确各阶段“成功”定义、关注客户端队列状态。 阅读详情

导语

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


连载第十二期

《编排详解:Best Practice》

▽

# Storyboard 最佳结构

  • 第一级路由type:route
  • Provider 的声明尽量放到路由第一级
  • 一级菜单统一在一级menu写,这样一级菜单也直接复用了

过去:

  • provider 重复定义,也不清楚到底我用了哪些接口

我们能看到很多 provider 是在bricks[]定义的,比如:

{
  "bricks": [
    {
      "brick": "providers-of-cmdb.instance-api-post-search",
      "bg": true
    },
    {
      "brick": "providers-of-cmdb.cmdb-object-api-get-object-all",
      "bg": true
    }
    {
      ...
    }
  ]
}
  • Menu 重复定义

我们能看到很多同学将menu抽出一个函数,然后在 ts 里面直接调用,但实际上这样生成的storyboard.json也是每个path都定义了一次的。

有人会说,有什么关系呢,反正我就一个函数嘛。因为生成的 storyboard.json 越大,意味着页面首次加载越慢,大伙看下 162 目前的 bootstrap 接口的数据量及耗时就知道了

建议:

{
  "app": { "name": "敏捷管理", "id": "agile", "homepage": "/agile" },
  "routes": [
    {
      "path": "${APP.homepage}",
      "menu": {
        ...
      },
      "providers": [
        "providers-of-cmdb.instance-api-post-search",
        "providers-of-cmdb.instance-api-get-detail",
        "providers-of-cmdb.cmdb-object-api-get-object-all",
        "providers-of-cmdb.instance-api-delete-instance",
        "providers-of-cmdb.instance-api-update-instance-v2",
        "providers-of-cmdb.instance-api-create-instance",
        "providers-of-cmdb.instance-api-aggregate-count-v2",
        "providers-of-cmdb.instance-api-import-instance",
        "providers-of-cmdb.instance-api-group-instance",
        "providers-of-topboard.topboard-api-create-issue",
        "providers-of-topboard.topboard-api-create-comment",
        "providers-of-topboard.topboard-api-update-comment",
        "providers-of-topboard.topboard-api-update-issue",
        "providers-of-topboard.topboard-api-update-issue-step",
        "developers.provider-providers-sub-menu",
        "developers.provider-service-data",
        "developers.providers-of-brick-story",
        "developers.providers-of-brick-docs",
        "providers-of-notify.oplog-api-list-operation-log"
      ],
      "type": "routes",
      "routes": [
        ...
      ]
    }
  ]
}

# 多用事件回调(Callback)

上面说到,provider 都定义在一级路由,那这里有同学可能会说,调用了provider后我希望弹出提示框呢,怎么搞?

事实上,很多时候也是因为此,所以要多次定义 provider

框架提供了新的 callback 能力,可以直接在 callback 写对应的处理,更加简单直接,代码量直接少 1/4。

{
  brick: "presentational-bricks.modal-confirm",
  properties: {
    id: "sprint-complete-confirm",
    title: "确定关闭迭代?",
    content: "未完成任务将转移到需求池"
  },
  events: {
    "confirm.ok": [
      {
        target: "providers-of-cmdb\\.instance-api-update-instance-v2",
        method: "resolve",
        args: [
          "_SPRINT",
          "${sprintId}",
          {
            status: "completed"
          }
        ],
        callback: {
          success: [
            {
              action: "message.success",
              args: ["迭代关闭成功,进入下一个迭代"]
            },
            {
              action: "history.push",
              args: ["${APP.homepage}/product/${productId}/sprint"]
            }
          ],
          error: {
            action: "handleHttpError"
          }
        }
      },


    ]
  }
}

另外,大伙是否注意到message.success,我们已经将
presentational-bricks.brick-utils的能力封装到框架了,意味着不用再写下面的定义了

{
  brick: "presentational-bricks.brick-utils",
  bg: true
}

# callback 的时候别只写 success,而不写 error

如果是单元测试的话,这就是路径没覆盖。

# 什么时候 provider 应该用 id 来调用

如果有用到provider的暂存数据能力,比如调用了updateArgs,updateArgsAndExecute,setArgs,setArgsAndExecute,这种情况下就应该去声明id,用id来调用。

如果直接providers-of-xx.xxx调用的话,很容易就被其他编排者污染了你的参数。

# 尽量依照调用顺序去传递数据,不要去改别人内部的东西

场景一:表格里面有个按钮去调用 provider

{
  "brick": "presentational-bricks.brick-table",
  "properties": {
    "columns": [
      {
        "title": "Tools",
        "width": "180px",
        "useBrick": [
          {
            "brick": "basic-bricks.general-custom-buttons",
            "transform": {
              "dataSource": "@{rowData}"
            },
            "properties": {
              "isMoreButton": true,
              "alignment": "start",
              "customButtons": [
                {
                  "isDropdown": false,
                  "tooltip": "Active Issue",
                  "icon": "like",
                  "eventName": "issue.like",
                  "buttonType": "link"
                }
              ]
            },
            "events": {
              "issue.like": [
                {
                  "target": "#updateProvider",
                  "method": "executeWithArgs",
                  "args": [
                    "_ISSUE",
                    "${EVENT.detail.instanceId}",
                    { "status": "active" }
                  ]
                }
              ]
            }
          }
        ]
      }
    ]
  }
}

大伙注意到,数据的传递方向是 table -> button -> provider。尽量不要在某个地方去给provider去updateArgs

现在我们交互原子构件(比如button、custom-buttons、brick-link)都具备数据(dataSource或detail字段)的暂存能力了

场景二:点击按钮弹出 modal,modal 里面有个 form 表单

这个场景比较复杂,现在还没有一个最佳实践,用新的 custom template 封装吧。准备后面专门做个modal-form来解决

# 在没有地方暂存数据的时候,记得 html element 是可以任意存储数据的

事实上,你可以在 event 或者 lifeCycle 的时候,给某个构件写入任意属性去暂存数据,这样在这个构件的事件发出来的时候,你可以通过${EVENT.target.xxx}获得数据

{
  brick: "agile.comment-brick",
  properties: {
    id: "issue-comment",
    placeholder: "说点什么"
  },
  events: {
    "add.comment": {
      target:
        "providers-of-topboard\\.topboard-api-create-comment",
      method: "resolve",
      args: [
        {
          body: "${EVENT.detail.body}",
          author: [
            { instanceId: "${SYS.userInstanceId}" }
          ],
          issue: [
            {
              instanceId: "${EVENT.target.issueInstanceId}"
            }
          ]
        }
      ],
      callback: {


      }
    }
  }
}

# 动态构件列表渲染

general-card-list卡片列表我们封的比较死,只能使用到里面的card-item,而且他是一个老版的template,很难用事件来触发他更新数据,怎么办?我们现在有个神奇list-container+userBrick机制,可以随便搞动态。

{
  brick:
    "basic-bricks.list-container",
  properties: {
    containerStyle: {
      display: "grid",
      gap: "20px",
      gridTemplateColumns:
        "repeat(auto-fill, minmax(130px, 1fr))"
    },
    useBrick: {
      brick:
        "presentational-bricks.entry-card-item",
      transform: {
        cardTitle: "@{objectName}",
        id: "@{objectId}",
        iconColor: "@{iconColor}",
        icon: "@{icon}",
        urlTemplate:
          "${APP.homepage}/@{objectId}"
      }
    }
  }
}

# modal,drawer 等弹窗容器(默认不可见)类型的构件:

  • 设置portal: true
  • 不要设置bg: true

# 搜索框都放在 search-bar 里面,这个构件已经按设计做好了间距

searchable-table足够强大,但有些时候也不够灵活,故专门开发了search-bar容器,用于常见的search-bar+brick-table。不要再自己写 css 啦

#在表格里面添加链接,不要用general-button type=link,而是用brick-link

因为:

  • button 会有 margin-left
  • button 的文字不能拖动选择复制

# 复杂的数据加工,记得我们除了有 pipe 之外,还可以直接写 js 表达式

注意transform里面的<% %>

{
  "columns": [
    {
      "title": "任务数",
      "dataIndex": "issues.length",
      "key": "issues",
      "useBrick": {
        "brick": "presentational-bricks.brick-value-mapping",
        "transform": {
          "value": "<% _.filter(DATA.rowData.issues, item => item.resolution || item.resolution===\"\").length + \" / \" + DATA.rowData.issues.length %>"
        },
        "properties": {
          "mapping": {
            "*": {
              "color": "blue"
            }
          }
        }
      }
    },
    {
      "title": "完成进度",
      "dataIndex": "progress",
      "key": "progress",
      "useBrick": {
        "brick": "presentational-bricks.basic-progress",
        "transform": {
          "value": "<% Math.round(_.filter(DATA.rowData.issues, item => item.resolution || item.resolution===\"\").length/DATA.rowData.issues.length*100) %>"
        },
        "properties": {
          "configProps": {
            "size": "small"
          },
          "value": 75,
          "colorMap": [
            {
              "progress": 60,
              "color": "red"
            },
            {
              "progress": 80,
              "color": "orange"
            },
            {
              "progress": 100,
              "color": "green"
            }
          ],
          "type": "line"
        }
      }
    }
  ]
}

最终效果是:

# 根据不同的条件触发不同的动作

  1. 可以通过框架提供的if能力,但那个意味着需要写两个,他控制粒度只能到brick级别
  2. 用script-brick提供的条件事件。如下,根据 url 参数是否具备fullscreen参数来做不同的渲染

以上就是今天关于优维低代码的分享,截止这一期基于构建框架的代码开发的所有内容都分享完了,希望对你有所收获!

低代码踩坑记 早上看到公告,低代码改名啦,叫腾讯云微搭,恩也是对标阿里的宜搭么,名字都差不多,起个好听的名字总是利于传播么。昨天实现了一个轮播图的功能,本地构建怎么都出不来数据,各种调试都无解。后来想起来上次遇到这种怪问题试一试云端构建,云端构建后发现功能是可以正常出来了。于是@了官方,查了一下是他们cli版本的问题,于是升级了一下本地的cli npm i -g @cloudbase/cli@beta 升级到1.5.3之后问题就解决啦,不过互联网确实蛮有吸引力,他那边发一个版本,你这边npm一升级就可以了,不像传统的开 阅读详情

相关推荐

mall 电商项目完整部署---实战

mall 后端 SpringBoot,mall‑admin‑web 后台管理 Vue 前端,mall‑app‑sc 移动端 uni‑app 前端;修改数据库、redis、minio、logstash 地址,容器之间 link 别名:mysql 容器别名。🔔排坑:登录报跨域 / 接口报错,检查 prod.env.js 地址,确认 8080 后端服务正常运行。能打开页面,接口列表展示出来,后端部署完成。,所以打包的时候会自动构建镜像,很慢而且你暂时不需要。,容器数据持久化,删除容器数据不会丢失。

qq_63196465的博客 340

优维低代码:解析构件开发 Step by Step

低代码是优维科技长期深耕的技术板块,在漫长的创业周期中,我们通过不断实践积累和迭代优化,沉淀出EasyMABuilder前端低代码平台,迄今已成功赋能大量优质用户,为多个行业带来前所未有的轻盈体验。 EasyMABuilder成功的背后,是优维人数年的技术探索和EasyOps产品哲学的落地,蕴含了主创团队对低代码生态的深度思考和实践创新。 我们特别推出低代码专题撰稿计划,以专栏系列文章的形式解构低代码在DevOps领域的技术表现。 上一篇文章,我们讲述了在 EasyMABuilder 中如何通...

EasyOps_DevOps的博客 402

雷电模拟器9.0最新过检测实战:从修改Build.prop到Xposed模块配置全流程

本文提供了一套针对雷电模拟器9.0的深度伪装实战方案,旨在绕过应用检测。内容涵盖从理解检测机制、获取Root权限、修改Build.prop等静态伪装,到利用Xposed/LSPosed框架进行运行时Hook的动态伪装全流程,帮助用户构建无痕的“真机”环境以稳定运行应用。

z4a5b6的博客 866

优维低代码实践:用户流设计

在Visual Builder中,我们提供了一个用户流程面板,用户可以基于该面板上面绘制路由页面流程图,方便用户做页面流程设计;产品可以使用用户流程面板,将页面大致原型进行设计,后续微应用研发人员就可以基于这个原型,进行微应用的研发工作,那么我们要怎么去使用它呢?优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。

EasyOps_DevOps的博客 212

XianYuAutoDeliveryX:基于闲鱼API与大模型的智能自动发货系统实践

本文详细介绍了如何利用XianYuAutoDeliveryX系统,结合闲鱼API与大语言模型,构建一个智能自动发货解决方案。该系统能实现买家付款后秒级自动发货,并通过对接ChatGPT等大模型智能回复买家咨询,有效解放卖家时间,提升虚拟商品店铺的运营效率和客户体验。

bush的博客 1021

从理论到实践:TRL去嵌入校准在国产矢量网络分析仪上的应用全解析

本文全面解析了TRL去嵌入校准技术在国产矢量网络分析仪上的应用实践,从核心算法到工程实现。详细介绍了TRL校准的数学原理、国产VNA的程控接口开发、校准件质量评估及测量不确定度控制策略,帮助工程师掌握高频器件测量的关键技术。

tech5的博客 1015

十七年运维老兵万字长文讲透优维低代码~

以上,就是对优维整个低代码体系的一个梳理,其实从2020年向外业界去推低代码至今,我们已经积累很多的客户,包括从行业的不同的客户属性以及场景上面,我们都有落地的一些经验,以及在落地的过程中,我们遇到的一些难点,带来的价值等等,我们都有一些经验积累,下回再跟大家详细的分享一下。从2015年创业开始,优维前后服务了很多传统企业的项目客户,我们在服务的过程中其实也发现了一些自己的问题,特别是2019年底,有一个KA的客户提出了一个个性化的需求,对我们带来的触动是蛮大的。第一个,低代码其实也不是一个所谓的新技术。.

EasyOps_DevOps的博客 641

手把手教你用Arduino IDE玩转ESP32-S3-wroom(附串口调试技巧)

本文详细介绍了如何在Arduino IDE环境下配置和使用ESP32-S3-WROOM模块,包括开发环境搭建、硬件连接、程序烧录及高级调试技巧。通过实战步骤和常见问题解决方案,帮助开发者快速上手这一高性能Wi-Fi/蓝牙双模模组,提升物联网开发效率。

weixin_30487201的博客 294

终于有人把“低代码”说清楚了!

作者:流水不争先编辑:Emma来源|技术领导力(ID:jishulingdaoli)今年2月23日,外国低代码平台提供商Creatio宣布获得6800万美元融资;2月22日,国内Sa...

技术领导力 1万+

IIC软件协议及硬件知识汇总

IIC软件协议及硬件相关知识,真的是非常齐全了!

记得诚 1万+

OpenClaw 在 Docker 容器中的部署实战——零配置启动

本文介绍了OpenClaw在Docker容器中的快速部署方法,对比了本地部署与容器化部署的优势。通过官方镜像和Docker Compose两种方式,5分钟即可完成部署,并详细讲解了配置管理方案(挂载配置文件和环境变量)。文章还提供了飞书集成配置方法,以及生产环境下的日志管理、资源限制、健康检查等优化建议。最后包含常见问题排查指南,帮助开发者快速实现OpenClaw的容器化部署。

刘一说的IT专栏 907

High&NewTech:低代码(0代码/无代码,无需代码)开发的简介以及如何选择最合适的低代码开发工具

High&NewTech:低代码(0代码/无代码,无需代码)开发的简介以及如何选择最合适的低代码开发工具 低代码Low-Code和低代码开发平台LCDP的简介 一般来讲,我们常说的低代码其实就是指低代码工具或者低代码开发平台。低代码开发平台(Low-Code Development Platform,LCDP)是无需编码(0代码或无代码)或通过少量代码就可以快速生成应用程序的开发平台。通过可视化进行应用程序开发的方法,使具有不同经验水平的开发人员可以通过图形化的用户界...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 2万+

YOLOv8【第七章:损失函数篇·第1节】一文搞定,IoU系列损失函数!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1200

优维低代码:Use Resolves

在早期版本中,我们只提供了通过provider指定CSSSelector并需提前在bricks或providers中主动声明对应的Provider构件的方式来使用useResolves,例如以下的构件配置,平台在渲染该构件前,将首先找到provider匹配的对应的。优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。...

EasyOps_DevOps的博客 237

YOLOv8魔改系列:将CIoU替换成Wise-IoU,飞速涨点

将YOLOv8中CIoU替换成Wise-IoU,实现飞速涨点

qq_66386046的博客 2679

visio安装包

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

Button的类似超链接样式-LinkButton Style

  实现方式一(只有单个按钮推荐)&lt;!--LinkButton Style [Start]--&gt;  &lt;Style x:Key="LinkButton" TargetType="{x:Type Button}"&gt;         &lt;Setter Property="Template"&gt;          &lt;Setter.Value&gt;   

qq_38138159的博客 1856

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

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

Element UI极简教程(2):Icon、Button、Link组件的使用

Java大联盟 致力于最高效的Java学习关注B 站搜索:楠哥教你学Java获取更多优质视频教程Icon 图标Element UI 的 Icon 组件提供了一套常用的图标集合,直接使...

ningnan9801的博客 7407

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

解释一下现在的低代码与零代码,别再搞混了

近两年在开发行业涌现出许多“新鲜词”,其中低代码和零代码是吵的最凶的,但仔细研究下去发现两者有着本质的差别,低代码和零代码除了名字是相同的之外,连客户群都不同。 低代码 低代码的本质是一款二次开发框架,是辅助程序员开发软件系统的工具,相比于过去简陋的软件框架,低代码无疑将软件框架优化到极致,给人一种不需要代码也能做开发的错觉。 低代码主要客户群是开发人员,最适合的是软件公司或有开发部门的企业使用,其优势在于开发周期更短,开发成本更低,业务调整更快。 那低代码如何收费呢?前面讲了,低代码是给...

JNPF 专注低代码开发 1586

优维低代码:编排详解菜单配置

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 接下来我们将继续为大家详细讲解编排详解中的菜单配置。 为 Micro App 配置菜单主要有两种方式: 在路由定义中使用menu配置菜单([Storyboard.routes.menu]); 在 Next Builder 上配置菜单(并在路由菜单定义中使用menuId/subMe...

EasyOps_DevOps的博客 427

企业如何同时管理用电安全、电能质量和节能降碳?从异常溯源看施耐德电气EEO的协同管理价值

通过整合电力运行信息,并结合EEO资产健康模块、EEO电能质量模块与EEO能碳管理模块,企业可以围绕设备、回路和负荷建立更连续的分析流程,使不同专业人员能够基于相互关联的数据开展判断。企业需要进一步核对异常出现的时间、涉及的配电回路、生产负荷变化以及设备运行状态,才能判断问题来自正常的生产调整、设备运行异常,还是需要采取措施的电能质量问题。从关键回路的异常排查入手,逐步完善设备数据、专业分析和治理验证流程,企业可以让用电安全、电能质量与节能降碳从分散的管理任务,转变为相互关联的日常运营工作。

科技,技术,行业类博主 166

Flink 学习日志 03:自定义一个SourceFunction,完成对Redis中数据的读取

本文介绍了在Flink中自定义SourceFunction读取Redis数据的完整流程:通过Jedis客户端连接WSL2中的Redis服务,编写RedisSource实现循环读取所有Key-value并逐条输出,结合Thread.sleep()实现每秒一条的流式效果。关键步骤包括环境准备、添加Jedis依赖、配置IDEA运行时加载provided依赖,并注意生产环境中应避免使用阻塞的keys *,改用scan命令。最终实现动态读取、实时打印,验证了Flink与Redis的数据集成能力。

木木的学习笔记 431

京东 Apache Doris 湖仓查询优化实践:从多引擎统一到百万级查询

京东基于 Apache Doris 构建统一湖仓查询引擎,支撑日均百万级查询与 PB 级数据扫描。深入解析 Presto、StarRocks 迁移、分区裁剪、Split 调度、向量化执行及 AI Agent 混合负载优化实践。

SelectDB 415

Day3 - Flink 窗口与时间语义:从滚动窗口到迟到数据处理

水位线是一个特殊的时间戳,代表"小于这个时间戳的数据都已经到齐了比如水位线推进到 10:00:05,就告诉 Flink:10:00:05 之前的数据应该都到了,如果还有晚于这个时间到达但时间戳小于 10:00:05 的数据,就是"迟到数据"。窗口大小固定,窗口之间不重叠,数据只属于一个窗口。时间线: 0 10 20 30 40 50 60窗口1: [--------)窗口2: [--------)窗口3: [--------)窗口4: [--------)

YEEMOLY的博客 263

智能问诊的流程

本文介绍基于FastAPI构建的医疗多Agent系统MediAgent,通过症状分析、诊断推理与治疗建议等模块协同,实现从问诊到报告生成的完整工作流。系统采用前后端分离架构,结合MySQL、RabbitMQ与Docker实现工程化部署,支持异步化验结果接入。虽当前状态暂存于内存,但已具备可扩展性,未来可通过Redis持久化、消息队列联动及医疗安全机制完善,应用于慢病管理、辅助决策等场景,推动AI在医疗流程中的落地应用。

Joey 的工作空间~ 782

行业研究报告采购避坑指南:从需求拆解到机构选型的实操逻辑

先说结论:买行业研究报告这件事,坑不在“哪家便宜”,而在“你拿到的数据能不能回答你的问题”。作为一个经常帮企业做采购决策的顾问,我见过太多花了几万块买回一堆PDF却用不上的案例。这篇文章把采购流程拆成五步,每一步告诉你该看什么、该避什么,尽量帮你少交学费。

2601_96585642的博客 227

大数据与审计专业哪些证书企业比较认可?

大数据与审计专业选证书,首先要明确就业方向:是进入会计师事务所做财务审计,还是进入企业从事内部审计、风险控制,或向数据审计、信息系统审计发展。不同岗位看重的专业能力不同,证书的价值也应放在具体招聘要求中判断。面向2027年的求职与备考规划,值得重点考虑的有六类:初级会计专业技术资格、注册会计师、审计专业技术资格、CDA数据分析师、国际注册内部审计师和国际注册信息系统审计师。选择时,宜采用“财审基础+数据能力+岗位专长”的组合,而不是单纯追求持证数量。

YangYang9YangYan的博客 300
上一篇: 报告!优维科技EasyOps®️全栈运维平台又一大波新功能上线
下一篇: UGeek大咖说 | 直播回顾:可观测之超融合存储系统的应用与设计
优维科技EasyOps
博客等级 码龄5年 1483粉丝 395原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值