数据中台与业务中台是什么关系?_光点科技

先回答题主的问题,数据中台和业务中台是不冲突的。如果同时拥有业务中台和数据中台,则数据中台与业务中台是相辅相成的。 其实无论是业务中台还是数据中台,都是在企业IT系统架构演进过程中形成的,并从企业自身IT系统规划、建设、运营、运维等多年的经验中提炼出来的共性能力。 那么什么是数据中台呢? 通俗的讲数据中台就是提供数据治理、数据模型搭建、数据资产管理等数据服务,打通部门之间数据的阻碍。 数据是从业务系统产生的,而业务系统也需要数据分析的结果,因此就考虑是否可以把业务系统的数据存储和计算能力抽离,由单独的数据处理平台提供存储和计算能力。 这样不仅可以简化业务系统的复杂性,还可以让各个系统采用更合适的技术,专注做本身擅长的事。这个专用的数据处理平台即数据中台。 数据中台与业务中台的区别 业务中台是抽象业务流程的共性形成通用业务服务能力,而数据中台则是抽象数据能力的共性形成通用数据服务能力。 例如:同一个服务,在应用层面展现的内容可能不一致,但是底层的数据体系是一致的。数据中台也将极大提升数据开发的效率,降低开发成本,同时可以让整个数据场景更为智能化。 数据中台和业务中台的关系 数据中台和业务中台并肩构建了数字中台,支撑前台对客户提供从营销推广、转化交易到智能服务业务的闭环服务,促进企业业务的提升和发展。数字中台对内连接企业的后台系统,诸如ERP、人力资源、协同办公、财务管理等。 业务中台抽象、包装和整合后台资源,转化为便于前台使用的可重用、可共享的核心能力,实现了后端业务资源到前台易用能力的转化,为前台应用提供了强大的支援。 数据中台接入业务中台、后台和其他第三方数据,完成海量数据的存储、清洗、计算、汇总等,构成企业的核心数据能力,为前台基于数据的定制化创新和业务中台基于数据反馈的持续演进提供了强大支撑。 从前台应用角度看,业务中台提供的支援和数据中台提供的实时监测是一体的,它们一起支撑业务创新,两者缺一不可。 总结: 数据中台的定位则是在数据领域帮助企业不断沉淀数据能力。两者之间的关系是相互依托、相互赋能、相互促进的。 关于光点科技 光点科技是一家在政企数据治理、数据中台建设、数据可视化展示分析方面有着丰富经验的公司。作为国内专业的数据智能解决方案专家,光点科技自成立以来就一直专注于数据产品的研发和落地,服务的客户涉及智慧城市、园区、政府、集团企业、金融、制造、能源、电信、工程、教育、检验检测等多个行业。

Windows 引导修复

打开命令提示符,执行 bc dedit /enum 命令,如果看到如下图提示,说明引导记录已经损坏。 执行SFC /SCANNOW的命令搜索已经安装的系统。 1. 手工修复 假如上面步骤将 Esp分区加载为 F盘 执行 这个命令 bcdboot C:\Windows /s F: /f uefi /l zh-cn 解释:用DG等工具先将ESP分区装载为S盘,从系统盘C:\Windows目录中复制UEFI格式的启动文件到ESP分区中,修复系统。 各参数的具体含义: c:\windows 系统安装目录,打开我的电脑,查看你的系统是安装在那个盘,就输入相应的盘符和目录。 /s S: 指定esp分区所在磁盘,小编指定ESP分区为t盘。 /f uefi 指定启动方式为uefi,注意之间的空格一定要输入。 /l zh-cn 指定uefi启动界面语言为简体中文

01 从Git到NVM再到Node.js的安装之路

1.Git安装 (1)Mac中安装Git首选Homebrew,所以先安装Homebrew。 官网的地址没办法使用,查找很多资料,找到一个国内源,地址如下: https://gitee.com/cunkai/HomebrewCN (2)安装git:brew install git 2.NVM安装 nvm在github中能搜到,地址如下:https://github.com/nvm-sh/nvm 官方给出的安装方法为: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 这里有坑,raw.githubusercontent.com访问会报443错误,查阅资料(设置git代理等都不行)解决办法如下: 浏览器中直接访问https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh,将该脚本文件的代码复制粘贴,保存为本地文件nvm.sh,这时又有个坑,需要给该文件授权,否则无法运行,代码如下: sudo chmod +x nvm.sh 然后在终端中运行该sh文件。 curl -o- nvm.sh | bash 然后打开.bash_profile进行配置 vim ~/.bash_profile 配置代码我使用的是官网的配置代码,但加了两行代码,用来配置国内源,代码如下: export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm # 淘宝源 export NVM_NODEJS_ORG_MIRROR=http://npmmirror.com/mirrors/node export NVM_IOJS_ORG_MIRROR=http://npmmirror.com/mirrors/iojs 注意阿里源的地址不再是npm.taobao.org了。 执行如下命令,刷新环境变量。 source ~/.bash_profile 使用nvm -v,能查看到nvm版本,说明安装成功。 3.Node.js安装 使用nvm安装node.js,操作简单,主要命令可以去官网查阅。

java单向链表中的头插法与尾插法

单链表属于数据结构中的一种基本结构,是一种线性结构,在此使用Java对其中的头插法以及尾插法进行解释。数据结构 首先定义好链表中的节点类: 其中,data表明节点所存放的数据,next表明指向下一节点学习 对于单链表而言其结构以下图: 视频 能够得知在链表是以地址索引的方式进行存储,next就显得尤其重要,下面介绍两种易懂的插入方式 ①头插法 原理:将每一个新节点都插在头节点的前面,并本身成为头节点 代码为: 原理解释图为: 值得注意的是,当链 值得注意的是,当链表第一次添加节点时,头节点为空,因此第一次操做都是直接被新节点覆盖,这一原理在任何插入方法都同样,包括下面将要提到的尾插法。 当存在1个节点时,加入新节点只需将新节点的next指向当前的头节点,并使新节点覆盖头节点,即可以将两节点链起来get ②尾插法: 找到链表中最后一个节点,将新节点添加在后面原理 代码: 原理图为: 原理图为: 易知在尾插法中,只须要使用一个临时temp节点复制头节点以后,一次向后寻找next直到找到尾节点,由于尾节点以后没有节点,并将尾节点的next指向新节点,就能够将两节点链起来了。

谷歌浏览器插件HackBar安装方法(详细教程)

文章目录 1.下载压缩包2.将压缩包添加至扩展程序3.修改配置文件4.功能说明 1.下载压缩包 链接:https://pan.baidu.com/s/1XOKo_ILZv8PcJihoc8981A?pwd=3ha8 提取码:3ha8 注意:下载即可,不用解压。 2.将压缩包添加至扩展程序 打开谷歌浏览器右上角的三个点点,点击里面的更多工具,找到扩展程序,把下载的压缩包直接拖入里面即可。 3.修改配置文件 首先点击详情。 找到里面的加载来源,点击,进入安装路径。 找到里面的theme文件夹并打开。 找到js文件夹并打开。 找到里面的hackbar-panel.js,打开,修改对应部分如下即可(可能这段被注释了,需要去掉注释符号/**/)。 之后打开谷歌浏览器,按下F12,就可以找到HackBar了。 4.功能说明 下面对这些功能进行一个简单说明。 Load URL:复制地址栏中的地址。 Split URL:剪切地址。 Execute:执行HackBar中的网址。 Encyption:四种加密方式。 Encoding:三种编码方式。 SQL:提供一些方便查询的语句。 xss:提供一些XSS攻击语句。 Post data:以post的方式提交数据。

sql注入之报错注入(精简详细)

报错注入 目录 报错注入常用函数攻击实例 一直对sql注入的报错注入没有系统的整理过,今天整理一遍,方便以后查阅。 下面的语句可以直接在sql-lab中实践。 常用函数 extractvalue() 作用:对XML文档进行查询,相当于在HTML文件中用标签查找元素。 语法: extractvalue(XML_document, XPath_string ) 参数1: XML_document是String格式,为XML文档对象的名称 参数2: XPath_string (Xpath格式的字符串),注入时可操作的地方 报错原理: xml文档中查找字符位置是用/xxx/xxx/xxx/…这种格式,如果写入其他格式就会报错,并且会返回写入的非法格式内容,错误信息如: XPATH syntax error:‘xxxxxxxx’ ●实例 mysql> select extractvalue(1,concat(’ ~ ',user())); ERROR 1105(HYOO0):XPATH syntax error: '~root@localhost" ·注:该函数最大显示长度为32,超过长度可以配合substr、limit等函数来显示 updatexml() 作用:改变文档中符合条件的节点的值。 语法: updatexml(XML_document, XPath_string, new_value ) 参数1:XML_document是String格式,为XML文档对象的名称 参数2:XPath_string (Xpath格式的字符串),注入时可操作的地方 参数3: new_value,String格式,替换查找到的符合条件的数据报错原理:同extractvalue() ●实例 mysql> select updatexml(1,concat('~ ',user()).1); ERROR1105(HY0O0): XPATH syntax error: ‘~root@localhost’ ·注:该函数最大显示长度为32,超过长度可以配合substr、limit等函数来显示 floor(),rand(0),count(),group by 联用作用 floor(x):对参数x向下取整 rand():生成一个0~1之间的随机浮点数 count(*):统计某个表下总共有多少条记录 group by x:按照(by)一定的规则(x)进行分组 报错原理: group by与rand()使用时,如果临时表中没有该主键,则在插入前会再计算一次rand(),然后再由group by将计算出来的主键直接插入到临时表格中,导致主键重复报错,错误信息如: Duplicate entry ‘…’ for key ‘group_key’。

游戏滚动列表的优化(降低drawcall从154降低到14,图片大小,界面逻辑)

前因: 领导对于商城按钮点击切换卡顿非常不满,趁这次商城修改,顺便研究一下优化方案。 观察: 打开cocoscreator show FPS按钮,可以看到一些端倪。 第一眼看到drawcall比较高:154,三角形的顶点也很高,切换桌布和壁纸时渲染时间也会变高。 解决: 第一步,关闭商城界面后的大厅界面。在仅仅只展示商城界面背景时,drawcall还是有50左右,并且三角形的数量还是非常高。 这就非常奇怪了,这个界面明明是全屏,drawcall和triangle怎么还是这么高? 然后又想到,原来是大厅的界面还在渲染着,ui界面是没有深度测试的,所有场景上的节点都会加入到drawcall中。 第1点:那么第一步要优化的就是这里了,对于全屏界面可以把其他场景和摄像机关闭,顺便把商城中同一静态合集中的图片放到临近的位置。 drawcall和三角形数量瞬间下降。 第2点:把相关图片缩放到合适的大小重新保存到一个新文件中,并加入静态图集。 查看到对于壁纸和桌布中的图片是根据大图直接缩小放置的。 渲染过程中缩放会进行插值计算,甚至是多次插值;并且图片的数据大小也会影响读取的速度;还有就是小图可以放到一个静态图集中,可以参与合批。 第3点:修改滚动列表节点逻辑。 最终要重新设计这个滚动列表了,滚动列表中加入的每个节点都是单独一体的,总是打断合批,导致drawcall很高,再仔细理解一下合批策略。 引用自:2D 渲染组件合批说明 · Cocos Creator 2D 渲染组件合批规则说明 合批条件说明 2D 渲染组件合批的规则是节点的 layer、使用的材质、渲染组件的 blendState 和 DepthStencilState 相同、贴图源以及贴图采样都相同才会进行合批。 下面我们就分别说明一下这些条件: 节点的 layer:由于 layer 会涉及到渲染与否,所以不同的 layer 之间不能进行合批材质:材质相同是合批的必然要求,由于我们使用的材质实例化的机制,所以用户在设置了材质的 uniform 之后材质会进行实例化,实例化之后的材质是无法进行合批的,如果自定义材质进行了 uniform 设置之后导致此组件无法合批,之后 uniform 值使用完毕想要该组件参与合批,可将材质资源重新赋值给组件即可重新使组件参与合批(通过 CustomMaterial 接口赋值即可)BlendState 状态:对于部分 2D 渲染组件可以在面板上设置部分的 BlendState 值,这个值不同的话是无法进行合批的DepthStencilState 状态:这个值控制着组件的深度检测和模板缓冲,一般来说用户不需关心这个值的设置,这个值由引擎自动控制(用于 Mask 的效果实现)贴图源和贴图采样:一般来说,这个条件是影响合批的最主要的条件,尤其对于精灵和文本来说,贴图很容易产生差别导致无法合批。引擎提供了部分方法来实现更好的合批,可参考后文。 合批方法说明 结合以上的合批条件说明,我们可以通过一些方法来实现更好的合批方法,需要额外说明的是,2D 渲染组件的渲染数据采集是一个基于节点树的渲染方式,而一些组件是会打断合批的,目前引擎的内置组件 Mask,Graphics,UIMeshRenderer 由于材质不同和数据组织方式的差异会无法与其他组件合批,而 TiledMap,Spine 和 DragonBones 这三个中间件组件遵循自己的内部合批机制,所以上述组件都无法合批,且会打断其他组件合批,需要用户进行分模块管理节点树布局,以达到更好的合批效果。 对于 Sprite 组件,我们提供了 静态合图 和 动态合图 两种合批方案,通过将图片纹理合并,即可在其他条件满足的情况下合批对于 Label 组件,我们提供了 Bitmap 的缓存方法,通过将 Label 的纹理合图,即可实现 Sprite 和 Label 组件的合批,但请注意,使用 Bitmap 缓存方式的 Label 不可频繁变动文字内容一般来说,用户通过控制材质和节点树状态配合合图方法,能够达到较好的合批效果 那能想到的办法就是分批子节点。

MATLAB从文件读取数据

一、从filename文件读取数据 1、readtable函数 语法:t=readtable(filename) 支持的扩展名:.txt、.csv、.xls、.xlsm、.xlsx、.xlsm、.xltm、.xltx 2、示例: // An MATLAB block t = readtable('m.txt') 结果: 二、把表格转化为数组 1、table2array函数 语法:table2array(表格名称) 2、示例: // A在这里插入图片描述 n MATLAB block t = readtable('m.txt'); m = table2array(t) 结果: 三、读取表格文件不同表单数据 1、添加元素:sheet 2、示例1:使用表单名称读取表单信息 // A MATLAB block t = readtable("m.xlsx","Sheet","Sheet1");%读取表单Sheet1 f = readtable("m.xlsx","Sheet","Sheet2");%读取表单Sheet2 结果: 3.示例2:使用数字读取表单信息 // A MATLAB block t = readtable("m.xlsx","Sheet",1);%读取表单Sheet1 f = readtable("m.xlsx","Sheet",2);%读取表单Sheet2 结果: 四、获取表单名称 1、sheetnames函数 语法:sheetnames(filename) 2、示例: // A MATLAB block sheetnames("m.xlsx") 结果: 五、获取表单个数 1、length函数 语法:length(filename) 2、示例: // A MATLAB block sheets=sheetnames("

HBuilderX编译的报错提示:pages.json tabBar[‘list‘][0][‘pagePath‘] “/pages/index/index“ 需在 pages 数组中

HBuilderX编译的报错提示: 15:45:51.583 pages.json tabBar['list'][0]['pagePath'] "/pages/index/index" 需在 pages 数组中 15:45:51.585 pages.json tabBar['list'][1]['pagePath'] "/pages/tabBar/template/template" 需在 pages 数组中 15:45:51.603 pages.json tabBar['list'][2]['pagePath'] "/pages/tabBar/Image/image" 需在 pages 数组中 15:45:51.605 pages.json tabBar['list'][3]['pagePath'] "/pages/tabBar/About/about" 需在 pages 数组中 15:45:51.657 pages.json tabBar['list'][0]['pagePath'] "/pages/index/index" 需在 pages 数组中 15:45:51.665 pages.json tabBar['list'][1]['pagePath'] "/pages/tabBar/template/template" 需在 pages 数组中 15:45:51.667 pages.json tabBar['list'][2]['pagePath'] "/pages/tabBar/Image/image" 需在 pages 数组中 15:45:51.684 pages.json tabBar['list'][3]['pagePath'] "/pages/tabBar/About/about" 需在 pages 数组中 解决问题,如下图:

Java stream().sorted()实现排序(升序、降序、多字段排序)

1 自然排序 sorted():自然排序,流中元素需实现Comparable接口 package com.entity; import lombok.*; @Data @ToString @AllArgsConstructor @NoArgsConstructor public class Student implements Comparable<Student> { private int id; private String name; private int age; @Override public int compareTo(Student ob) { return name.compareTo(ob.getName()); } @Override public boolean equals(final Object obj) { if (obj == null) { return false; } final Student std = (Student) obj; if (this == std) { return true; } else { return (this.name.equals(std.name) && (this.

Doris创建表报错 Failed to find 1 backends for policy

最近使用Doris v1.1.1 创建表报错 Failed to find 1 backends for policy,按字面理解是BE数量不足 于是执行 show proc '/backends' 查看BE信息,明明有1个BE,Alive=true 于是继续查找问题,删除BE和BE的storage目录,重新加入BE,还是报一样的错误 最后发现报错信息中有显示 HDD,但我的BE存储目录设置成了SSD(因为我的电脑windows系统的磁盘是SSD,所以我以为虚拟机的磁盘类型也会是SSD,但查了一下虚拟机的磁盘类型是HDD)。 于是重新铲掉BE,将存储目录改为SSD,启动,重新加入,创建表,成功了。

如何解决’telent’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。正在连接127.0.0.1无法打开到主机的连接。 在端口 23: 连接失败

今天使用Telnet远程连接服务时遇到关于Telnet的两个问题, 一、 首先是“elent’ 不是内部或外部命令,也不是可运行的程序 或批处理文件”,这个问题比较好解决,就是电脑上没有开启这个功能,导致命令不可用,解决办法是首先在win10控制面板中的程序和功能,开启了telnet客户端。 这里如果有“Telnet服务器”选项也勾选 我的是没有的,然后确定等待一会关闭即可。 这是在返回cmd里使用命令就不会提示不可用了,但是接下来遇到了另一个问题。 二、 正在连接192.168.0.200...无法打开到主机的连接。 在端口 23: 连接失败 这里一直报错无法连接 关于这个问题我在网上看了很多帖子,都没有解决,也没有说到和我的问题相符合的。 这里有两种情况,第一种情况是上面说到Windows功能有“Telnet服务器”的,同样勾选,勾选之后在桌面用鼠标右键选择<我的电脑>,点击最下方的<管理>,双击进入计算机管理,在弹出窗口中选择左侧的<服务与应用程序>栏,点开后选择下方的<服务>选项,找到Telnet服务选项,把这个服务启动并设置为自启动。然后就可以去试一下了。如果还是不可以报错的话就试下面的这个方法。 第二种情况:我的Windows功能里没有“Telnet服务器”选项,然后本地服务里也没有“Telnet”,情况比较特殊,所以刚开始一直找不到解决办法,那要怎么办呢?下载一个Telnet服务,这里我下载了一个TelnetSetup.exe并且安装完成就可以了。 下面这个是下载链接: http://www.goodtechsys.com/downloadstelnetnt2000.asp 下载安装完成后重新回到cmd,就是下面这种情况 输入系统用户名和密码回车登陆 注意:telent的远程主机必须设置了系统用户名和密码,才能telnet登录。 这里IP可以用自己的本机地址,用户名和密码也用自己本机的,在左下角用户账户信息设置和查看 登陆成功:

Makefile模板以及多层Makefile编译(附源码)

本文将介绍几个Makefile模板:编译可执行程序、编译静态库、编译动态库。以及简单地介绍在项目工程多目录下多层Makefile如何编译 关于Makefile的介绍,欢迎查阅之前发过的文章,认识Makefile以及基础知识 和 Linux库概念、静态库、动态库 1、前言 现在很多IDE都集成了编译器,如Visual Studio等等,点击相关的编译按钮的一个操作即可完成编译、链接、生成目标文件。 在Linux系统下,开发并编译程序一般用的gcc/g++编译器,如果是开发ARM架构环境下的Linux程序,还需用到arm-linux-gcc/arm-linux-g++交叉编译器。 其实Linux下也可以实现“一键编译”功能,特别是在大工程项目下,此时需要借助Makefile,一个命令就完成编译、链接、生成目标文件就显得很有用处了。Makefile可以手动编写,也可以借助自动化构建工具(如scons、CMake、autotools等)生成。一般地一个通用的Makefile能够适合大部分Linux项目程序。 2、Makefile工程管理 工程管理器,顾名思义,是指管理较多的文件 Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作。 在一个makefile中通常包含如下内容: 需要由make工具创建的目标体(target),通常是目标文件或可执行文件; 要创建的目标体所依赖的文件(dependency_file); 创建每个目标体时需要运行的命令(command),这一行必须以制表符(tab键)开头。 makefile格式 target: dependency_files <TAB>command #该行必须以tab键开头 3、Makefile模板 3.1 使用Makefile编译可执行文件 PROJECT_ROOT_PATH = /home/yimning/MakefileTemplate VERSION = 1.0.0 CC = gcc DEBUG = -DUSE_DEBUG CFLAGS = -Wall SOURCES = $(wildcard *.c) INCLUDES = -I../../include #LIB_NAMES =-lfun_a -lfun_so # 如果使用到相关库,可添加。若没有就注释该行。 LIB_NAMES = -lfoo -lbar # 比如我这里分别使用了静态库libfoo.a.1.0.0和libbar.so.1.0.0(已放到了/lib下) LIB_PATH = -L./lib #使用到库的路径,一般放于/lib或在/usr/lib目录下 OBJ = $(patsubst %.c, %.o, $(SOURCES)) TARGET = app #links $(TARGET):$(OBJ) @mkdir -p output $(CC) $(OBJ) $(LIB_PATH) $(LIB_NAMES) -o output/$(TARGET).

前端传file文件和json报文到java后端处理

(现有架构中的post过滤器只能处理json报文格式) 1、前端的请求报文需要传一个固定格式的json格式报文和一个文件 <Input.Group compact className='iptUpload'> <Input style={{ width: 'calc(100% - 200px)', }} value={this.state.fileName} /> <Upload {...props} style={{ paddingLeft: 15 }} fileList={this.state.fileList}> <Button htmlType="button" type="primary">选择文件</Button> </Upload> </Input.Group> <span> <Button className='uploadBts' type="primary" disabled={disabled} onClick={() => {this.uploadClick()}}>上&emsp;传 </Button> </span> //上传(固定的json格式报文和文件作为请求报文) uploadClick = () => { console.log("上传") const fileName = this.state.fileName; const Operator = this.state.Operator; const info = this.state.fileList[0]; let TransData = { TransData: { BaseInfo: { TradeType: 'http', TradeCode: 'S07', TradeSeq: tools.getTradeSeq(), TradeDate: tools.

MySQL标准差和方差函数使用

一、方差 方差是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。在许多实际问题中,研究方差即偏离程度有着重要意义。 方差计算公式: 最左边是总体方差,X为变量,X左边变量为总体均值,N为总体例数(指总体个数)。 举例 简单数学: 例如: 1、2、3,用这3个算出方差。 1、先算出平均数: (1+2+3)/3 = 2 2、根据方差公式: ( (1-2)^2 + (2-2) ^2 + (2-3)^2 ) / 3 3、结果:2/3 Excel 方差函数 varp(number1,number2……) MySQL 方差函数 VARIANCE(expr) 二、标准差(方差结果开根号) 标准差分为: 总体标准偏差和样本标准偏差 总体标准偏差 计算公式: Excel 方差函数 STDEVP(number1,number2……) MySQL 方差函数 STD(expr) 样本标准偏差 Excel 方差函数 STDEV(number1,number2……) MySQL 方差函数 STDDEV_SAMP(expr) 总体标准偏差和样本标准偏差区别 样本标准偏差是对某个数据中的部分数据线进行分析,而总体标准偏差是对整个数据进行分析。分析的范围广度不同。

coco数据集(yoloV5格式)中生成子类数据集

从coco数据集(yoloV5格式)中生成子类数据集。 import os from tqdm import tqdm names = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'] # 类别 图片数量 标注框数量 per_class_size = {"

win11壁纸被锁定更换不了 win11更换壁纸教程

很多用户喜欢给自己的电脑更换壁纸,但是有用户升级Win11之后发现更换壁纸的时候可能会遇到被锁定没法更换的情况,这该如何解决? 方法一: 1、首先右击桌面的“此电脑”将其打开。 2、之后输入:%ProgramData%\Microsoft\Windows。 3、然后找到下面的文件夹“systemdata”将里面的内容全部清除即可。 方法二: 1、先按下快捷键“win+r”打开运行,输入“regedit”。 2、然后依次展开: HKEY_CURRENT_USER→Software→Microsoft/Windows→CurrentVersion→Explorer 3、之后右击空白处,点击新建,选择“DWORD(32位)值”。 4、最后将其命名为“NoSaveSettings”双击打开,将数值数据改为“1”。

Linux 下孤儿进程与僵尸进程详解

引言:前面的系列文章介绍了进程的基础概念和相关常用的 API,本文将介绍两种比较特殊进程:孤儿进程与僵尸进程,进一步加深对进程的了解,避免进程使用过程中的一些坑点。 文章目录 孤儿进程僵尸进程僵尸进程介绍僵尸进程解决办法 总结 孤儿进程 什么是孤儿进程? 父进程运行结束,但子进程还在运行(未运行结束),这样的子进程就称为孤儿进程(Orphan Process) 每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init ,而 init 进程会循环地 wait() 它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init 进程就会代表党和政府出面处理它的一切善后工作。 因此孤儿进程并不会有什么危害。 总之:孤儿进程就是父进程退出了,但子进程还在执行。 示例: #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main() { pid_t pid = -1; // 创建子进程 pid = fork(); if (pid < 0) // 没有创建成功 { perror("fork"); return 1; } // 父进程 if (pid > 0) { printf("父进程休息3秒后退出。。。\n"); printf("父进程: pid:%d\n", getpid()); sleep(1); printf("父进程等太累了,现退出了。。。\n"); exit(0); } while (1) { printf("

ES2020-23简单易懂又实用的精选特性讲解 ✨✨日常开发必备干货!✨✨

ES6以来,越来越多的新特性被加入到规范当中。有一些特性(如promise、扩展运算符、箭头函数)会在实际的业务开发中起到很大作用,但是也有一些特性(如generator、Symbol、Map)在日常业务开发中并没有很必要的实际作用,徒增开发者的学习成本。针对上述情况,笔者重点挑了ES2020至ES2023中简单实用的一些特性,结合实际业务场景和代码做详细的讲解,帮助开发者利用新特性,实打实的提高日常开发效率。 如果这篇文章能给您带来一点点的帮助的话,麻烦移动下鼠标点个❤️赞❤️吧!您的点赞会给笔者带来更新的持续动力! Array.at() (更方便地提取数组下标value) 先让我们来看下他的用法: const array1 = [5, 12, 8, 130, 44]; console.log(array1.at(2)) //8 console.log(array1.at(3)) //130 各位读者可能注意到了,at其实和日常的.或者[]一样,获取数组下标的value值,那他有啥用呢,为什么不直接用.或者[]呢? 答案就是:at可以从末尾倒数获取下标vaule值。 这在不知道数组长度的情况下是非常实用的特性。直接上对比代码: //`.`或者`[]`方式 const array1 = res.data?.priceList || []; //获取最后一项价格 const lastItemIndex = array1.length - 1; console.log(array1[lastItemIndex]) //at方式 const array1 = res.data?.priceList || []; //获取最后一项价格 console.log(array1.at(-1)) 可以看到,此时at方式可以更快,更方便的取出最后一项,再也不需要计算数组长度了!是不是很实用呢! 空值合并运算符(更优秀的假值判断) 我们从后端接口获取数据时,经常会遇到后端缺字段的情况,导致前端不得不去做空值兼容,防止后端不给字段,例如我们需要获取商品价格时,我们会写: const price = res.data?.price || '暂无标价' 但是其实这种做法是有问题的,显然易见,如果一个免费商品的价格为0的话,我们这里的||就会产生一个bug。而且习惯了||写法的时候,很容易会忽略这个潜在问题。等到bug产生的时候,我们只能改成: const price = (res.data?.price === null || res.data?.price === undefined) ? '暂无标价' : res.data?.price 显然这个代码又长,可读性也差。有没有更好的判断字段为空的方式呢,有,那就是空值合并运算符??。

企业搭建数据中台的意义是什么?_光点科技

近年来,传统企业数字化转型时,出现了一些企业信息化方面的问题,比如:数据孤岛问题,数据中台顺应了企业数字化的转型趋势,为数字化转型降本增效。在当今互联网时代,用户是商业战场的核心,可以快速响应用户需求,是企业的一个核心竞争力。 建设中台的意义 1、降低开发成本、减少沟通成本,提升协作效率 企业节省人力成本。例如:硬件资源和软件服务可以统一采购、使用,减少了资源浪费,能力可以复用,不用重复的进行一次全面的需求收集分析,使用已有的能力可以快速的编排出产品。减少了不必要的沟通成本。 2、快速新增业务,适应市场变化 以前每增加一个业务,就要重新配置团队,从头开发,浪费资源不说,也耗费很多时间,如果有个统一的可复用模块,比如订单管理模块,直接拿过来复用,这样就可以快速的接入新的业务了,市场情况瞬息万变,早点抢占市场也多点成功率。 3、打通各业务线数据,进行精细化运营 以前的数据是没办法打通的,三个业务部,三套系统,彼此相互独立,只能进行纵向维度的数据比对,没办法进行横向维度的数据比对,如果要横向比对,还需要运营人员把各个业务的数据导出来,然后进行分析比对,才能看到数据表现。 如果数据打通,例如去逛商城的时候,平台可以推荐用户想要的商品,如果数据不打通,根本不知道用户的行为数据,也没办法做精准化推荐,这其实也就是数据中台要做的事情,统一的大数据分析,供给各个前端业务进行使用。 并不是所有的企业都适合建设中台,比如企业的业务相对单一,并且企业的运营目标是提升管理的效率,同时想要降低成本,那其实没有必要建设中台。另外,因为中台的服务中心众多且分散,因此建设中台有一定的技术困难也需要一定的维护成本,所以这就要求企业不仅有良好的业务能力,也需要较好的IT技术储备。 关于光点科技 光点科技是一家在政企数据治理、数据中台建设、数据可视化展示分析方面有着丰富经验的公司。作为国内专业的数据智能解决方案专家,光点科技自成立以来就一直专注于数据产品的研发和落地,服务的客户涉及智慧城市、园区、政府、集团企业、金融、制造、能源、电信、工程、教育、检验检测等多个行业。