微服务与Nacos概述

微服务概述

软件架构的演变:单体架构、垂直应用架构、流式计算架构 SOA、微服务架构和服务网格。

微服务是一种软件开发架构,它将一个大型应用程序拆分为一系列小型、独立的服务。每个服务都可以独立开发、部署和扩展,并通过轻量级的通信机制进行交互。

微服务架构的目标是提高系统的可伸缩性、灵活性和可维护性,同时降低开发和部署的复杂性。每个微服务都专注于一个特定的业务功能,并可以使用不同的编程语言和技术栈进行开发。这种分布式架构可以帮助团队更快地开发和部署新功能,同时减少对整个系统的影响。

Spring Cloud 是一个用于构建分布式系统的开发工具集合,它基于 Spring 框架,提供了一系列的解决方案和工具,用于简化分布式系统的开发和部署。Spring Cloud 提供了诸如服务注册与发现、负载均衡、断路器、配置管理等功能,使得开发人员可以更轻松地构建和管理分布式系统。

    提供的组件有:分布式及版本化配置管理;服务注册与发现;服务路由、服务调用、负载均衡;断路器;全局锁;选举和集群状态管理;分布式消息。

Spring Cloud 实际上是一个整合各大公司开源技术的微服务开发规范,通过 SpringBoot 框架进行封装后屏蔽复杂的配置,给开发者提供开箱即用的开发体验,而 SpringCloud Neflix、SpringCloud alibaba才是 SpringCloud 规范的实现。

Spring Cloud Alibaba 是在 Spring Cloud 基础上集成了阿里巴巴的开源项目,提供了更多的分布式系统解决方案。它包含了诸如服务注册与发现、负载均衡、断路器、配置管理等功能,同时还提供了阿里巴巴的分布式事务解决方案、消息队列等特性。Spring Cloud Alibaba 可以与 Spring Cloud 无缝集成,为开发人员提供更多的选择和灵活性,帮助构建高可靠、高性能的分布式系统。

Spring Cloud Alibaba 的组件包括:

  • Nacos:服务注册和发现中心,提供了服务的注册、发现、配置和管理等功能。

  • Sentinel:流量控制和熔断降级组件,用于保护服务的稳定性和可靠性。

  • RocketMQ:分布式消息队列,用于实现异步通信和解耦系统之间的依赖关系。

  • Alibaba Cloud OSS:对象存储服务,用于存储和管理大量的非结构化数据。

  • Alibaba Cloud ACM:配置管理中心,用于集中管理应用程序的配置信息。

  • Alibaba Cloud SMS:短信服务,用于实现短信发送和接收功能。

  • Alibaba Cloud Dubbo:RPC 框架,用于实现服务之间的远程调用。

在这里插入图片描述

DevOps 是一种软件开发和运维的方法论,旨在通过自动化和协作来加速软件交付和提高系统的稳定性。DevOps 将开发团队和运维团队紧密合作,通过自动化工具和流程来实现持续集成、持续交付和持续部署。它强调文化的变革,包括团队合作、知识共享和持续改进。

DevOps 的目标是通过减少手动工作、减少错误和提高交付速度来提高软件交付的质量和效率。

微服务和 DevOps 之间的关系是相辅相成的。微服务架构提供了可独立部署的服务单元,而 DevOps提供了自动化和协作的能力,使得团队能够高效地开发、部署和维护这些微服务。它们共同促进了软件交付的质量、效率和可靠性。

领域驱动设计 DDD 是一种软件开发方法论,旨在通过将业务领域的专业知识融入到软件设计中来解决复杂业务问题。DDD 强调将软件系统划分为不同的领域,并将业务逻辑和领域模型作为核心驱动因素。它鼓励开发团队与领域专家紧密合作,共同理解业务需求,并将这些需求转化为领域模型和领域驱动设计的实现。DDD 提供了一些概念和模式,例如聚合根、实体、值对象、领域事件等,以帮助开发人员更好地理解和设计复杂的业务逻辑。

DDD 的目标是提高软件系统的可维护性、可扩展性和灵活性,以满足不断变化的业务需求。

RestTemplate

RestTemplate 是一个用于进行 HTTP 请求的 Java 类库,通常用于与 RESTful API 进行交互。它提供了一组简单而强大的方法,使得发送 HTTP 请求、处理响应和解析数据变得容易。使用 RestTemplate可以执行各种 HTTP 操作,如 GET、POST、PUT、DELETE 等。

1、创建 RestTemplate 实例:

RestTemplate restTemplate = new RestTemplate();

2、发送 GET 请求并获取响应:

ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);

String obj=restTemplate.getForObject(url,String.class);

3、发送 POST 请求并获取响应:

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_JSON); 设置相应内容类型

HttpEntity<String> requestEntity = new HttpEntity<>(requestBody, headers);

ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);

4、发送 PUT 请求并获取响应:

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_JSON);

HttpEntity<String> requestEntity = new HttpEntity<>(requestBody, headers);

restTemplate.put(url, requestEntity);

5、发送 DELETE 请求并获取响应:

restTemplate.delete(url);

通过 RestTemplate 可以方便地设置请求头、请求参数、请求体等,并处理响应结果。也可以使用RestTemplate 的其他方法来处理不同类型的请求和响应。但是需要注意的是,RestTemplate 在 Spring5.x 版本中已被宣布为过时,并计划在将来的版本中移除。建议在新的项目中使用 Spring WebClient或其他替代方案

git 并行版本控制

Git 是世界上最先进的分布式版本控制系统,克隆一个项目的速度非常快

每个开发都可以从 master 上克隆一个本地版本库,就算没有网络,也可以提交代码到本地仓库、查看 log、创建项目分支等。每个版本库都可以创建无限个分支,分支是个完整的目录,且这个目录拥有完整的实际文件

远程中央库 gitee.com

Nacos 服务治理

Nacos 即 Naming and Configuration Service 是一个用于动态服务发现、配置管理和服务元数据的开源平台。提供了统一的服务注册和发现、配置管理和元数据管理的功能,可以帮助开发人员更轻松地构建云原生应用和微服务架构。

Nacos 的主要功能包括:

  • 服务注册和发现:Nacos 允许服务实例向注册中心注册自己的信息,并且其他服务可以通过查询注册中心来发现可用的服务实例。

  • 配置管理:Nacos 提供了一个中心化的配置管理平台,可以动态地管理应用程序的配置信息。开发人员可以在运行时更新配置,而不需要重启应用程序。

  • 服务元数据管理:Nacos 可以帮助开发人员管理服务的元数据,包括版本号、权重、健康状态等。这些元数据可以用于服务路由、负载均衡等场景。

  • 动态 DNS 服务:Nacos 支持将服务名称解析为具体的网络地址,从而实现动态 DNS 服务的功能

Nacos 工作原理

  • 服务注册:服务提供者在启动时向 Nacos 注册中心注册自己的服务信息,包括服务名称、IP 地址和端口号等。注册完成后,Nacos 将服务信息保存在自己的注册表中。

  • 服务发现:服务消费者在需要调用某个服务时,向 Nacos 注册中心发送服务名称的请求。Nacos根据服务名称从注册表中查找对应的服务提供者信息,并将其返回给服务消费者。

  • 服务健康检查:Nacos 会定期向服务提供者发送心跳检查请求,以确保服务的可用性。如果某个服务提供者长时间未响应心跳检查,Nacos 会将其标记为不可用,并从注册表中移除。

  • 动态配置管理:Nacos 提供了配置中心的功能,可以将应用程序的配置信息存储在 Nacos 中,并实现动态的配置更新。应用程序可以通过订阅配置的方式,实时获取最新的配置信息。

  • 负载均衡:Nacos 可以根据注册表中的服务提供者信息,实现负载均衡的功能。当服务消费者需要调用某个服务时,Nacos 会根据负载均衡策略选择一个可用的服务提供者。

在这里插入图片描述

Nacos 和 Eureka

Nacos 和 Eureka 都是服务发现和注册中心,用于管理和协调分布式系统中的服务实例。

主要区别:

  • 开发和维护:Nacos 是阿里巴巴集团开发和维护的开源项目,而 Eureka 是 Netflix 开发和维护的开源项目。

  • 功能和生态系统:Nacos 提供了服务注册、发现、配置管理和动态 DNS 等功能,同时还提供了更丰富的生态系统,如分布式配置、服务熔断、流量管理等。Eureka 主要关注服务注册和发现的功能。

  • 一致性协议:Nacos 使用基于 Raft 协议的一致性算法来保证数据的一致性和高可用性。而 Eureka使用了 CAP 原理中的 AP 可用性和分区容错性模型,牺牲了一致性。

  • 社区支持和发展:Nacos 在中国社区有着广泛的支持和活跃的发展,有大量的用户和贡献者。而Eureka 在国际社区有更广泛的应用和支持。

  • 生态整合:Nacos 可以与 Spring Cloud、Dubbo 等广泛使用的开发框架进行无缝整合。Eureka 也与 Spring Cloud 紧密结合,并且在 Netflix 的微服务套件中有更多的组件和工具可用。

总体而言,Nacos 提供了更多的功能和生态系统,而 Eureka 则更专注于服务注册和发现的功能。选择使用哪个取决于项目的需求和团队的偏好。

数据库设计

SPU 标准产品单位是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。如 iPhone X 可以确定一个产品即为一个 SPU,SPU 是由品牌+型号+关键属性构成的SKU 库存量单位。如 iPhone X 64G 银色 则是一个 SKU

针对电商而言:

1、SKU 是指一款商品,每款都有出现一个 SKU,便于电商品牌识别商品。

2、一款商品多色,则是有多个 SKU,例一件衣服,有红色、白色、蓝色,则 SKU 编码也不相同,如相同则会出现混淆,发错货。

分类表设计如下

CREATE TABLE `category` (`id` int(20) NOT NULL AUTO_INCREMENT COMMENT '分类 ID', `name` varchar(50) DEFAULT NULL COMMENT '分类名称', `sort` int(11) DEFAULT NULL COMMENT '排序', `parent_id` int(20) DEFAULT NULL COMMENT '上级 ID', PRIMARY KEY (`id`),KEY `parent_id` (`parent_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11182 DEFAULT 
CHARSET=utf8 COMMENT='商品类目';

分类选择完成后,需要加载品牌,品牌加载并非一次性加载完成,而是根据选择的分类进行加载。

分类品牌关系表

DROP TABLE IF EXISTS `category_brand`;
CREATE TABLE `category_brand` (`category_id` int(11) NOT NULL COMMENT '分类 ID',`brand_id` int(11) NOT NULL COMMENT '品牌 ID',    PRIMARY KEY (`brand_id`,`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

品牌表

CREATE TABLE `brand` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '品牌 id', `name` varchar(100) NOT NULL COMMENT '品牌名称', `image` varchar(1000) DEFAULT '' COMMENT '品牌图片地址', `initial` varchar(1) DEFAULT '' COMMENT '品牌的首字母', `sort` int(11) DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULTCHARSET=utf8 COMMENT='品牌表';

当选择分类后,会加载分类对应的属性。

分类属性表

DROP TABLE IF EXISTS `category_attr`;
CREATE TABLE `category_attr` (`category_id` int(11) NOT NULL,`attr_id` int(11) NOT NULL COMMENT '属性分类表',PRIMARY KEY (`category_id`,`attr_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

属性表

CREATE TABLE `sku_attribute` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) DEFAULT NULL COMMENT '属性名称', `options` varchar(2000) DEFAULT NULL COMMENT '属性选项', `sort` int(11) DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
CREATE TABLE `spu` ( `id` varchar(60) NOT NULL COMMENT '主键', `name` varchar(100) DEFAULT NULL COMMENT 'SPU 名', `intro` varchar(200) DEFAULT NULL COMMENT '简介', `brand_id` int(11) DEFAULT NULL COMMENT '品牌 ID', `category_one_id` int(20) DEFAULT NULL COMMENT '一级分类', `category_two_id` int(10) DEFAULT NULL COMMENT '二级分类', `category_three_id` int(10) DEFAULT NULL COMMENT '三级分类', `images`varchar(1000) DEFAULT NULL COMMENT '图片列表', `after_sales_service` varchar(50) DEFAULT NULL COMMENT '售后服务', `content` longtext COMMENT '介绍', `attribute_list` varchar(3000) DEFAULT NULL COMMENT '规格列表', `is_marketable` int(1) DEFAULT '0' COMMENT '是否上架,0 已下架,1 已上架', `is_delete` int(1) DEFAULT '0' COMMENT '是否删除,0:未删除,1:已删除', `status` int(1) DEFAULT '0' COMMENT '审核状态,0:未审核,1:已审核,2:审核不通过', PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `sku` ( `id` varchar(60) NOT NULL COMMENT '商品 id', `name` varchar(200) NOT NULL COMMENT 'SKU 名称', `price` int(20) NOT NULL DEFAULT '1' COMMENT '价格(分)', `num` int(10) DEFAULT '100' COMMENT '库存数量', `image` varchar(200) DEFAULT NULL COMMENT '商品图片', `images` varchar(2000) DEFAULT NULL COMMENT '商品图片列表',`create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `spu_id` varchar(60) DEFAULT NULL COMMENT 'SPUID', `category_id` int(10) DEFAULT NULL COMMENT '类目 ID', `category_name` varchar(200) DEFAULT NULL COMMENT '类目名称', `brand_id` int(11) DEFAULT NULL COMMENT '品牌 id', `brand_name` varchar(100) DEFAULT NULL COMMENT '品牌名称', `sku_attribute` varchar(200) DEFAULT NULL COMMENT '规格', `status` int(1) DEFAULT '1' COMMENT '商品状态 1-正常,2-下架,3-删除', PRIMARY KEY (`id`), KEY `cid` (`category_id`), KEY `status` (`status`), KEY `updated` (`update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';

订单详表:

CREATE TABLE `order_master` ( `order_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '订单 ID', `order_sn` bigint(20) unsigned NOT NULL COMMENT '订单编号 yyyymmddnnnnnnnn', `customer_id` int unsigned NOT NULL COMMENT '下单人 ID', `shipping_user` varchar(10) NOT NULL COMMENT '收货人姓名', `province` smallint NOT NULL COMMENT '收货人所在省', `city` smallint NOT NULL COMMENT '收货人所在市', `district` smallint NOT NULL COMMENT '收货人所在区', `address` varchar(100) NOT NULL COMMENT '收货人详细地址', `payment_method` tinyint NOT NULL COMMENT '支付方式:1 现金,2 余额,3 网银,4 支付宝,5 微信', `order_money` decimal(8,2) NOT NULL COMMENT '订单金额', `district_money` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '优惠金额', `shipping_money` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '运费金额', `payment_money` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '支付金额', `shipping_comp_name` varchar(10) DEFAULT NULL COMMENT '快递公司名称', `shipping_sn` varchar(50) DEFAULT NULL COMMENT '快递单号', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下单时间',`shipping_time` datetime DEFAULT NULL COMMENT '发货时间', `pay_time` datetime DEFAULT NULL COMMENT '支付时间',`receive_time` datetime DEFAULT NULL COMMENT '收货时间', `order_status` tinyint NOT NULL DEFAULT '0' COMMENT '订单状态', `order_point` int unsigned NOT NULL DEFAULT '0' COMMENT '订单积分', `invoice_title` varchar(100) DEFAULT NULL COMMENT '发票抬头', `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`order_id`),UNIQUE KEY `ux_ordersn` (`order_sn`)
) ENGINE=InnoDB COMMENT='订单主表';
CREATE TABLE `order_detail` ( `order_detail_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键 ID,订单详情表 ID', `order_id` int unsigned NOT NULL COMMENT '订单表 ID', `product_id` int unsigned NOT NULL COMMENT '订单商品 ID', `product_name` varchar(50) NOT NULL COMMENT '商品名称', `product_cnt` int NOT NULL DEFAULT '1' COMMENT '购买商品数量', `product_price` decimal(8,2) NOT NULL COMMENT '购买商品单价', `average_cost` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '平均成本价格', `weight` float DEFAULT NULL COMMENT '商品重量', `fee_money` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '优惠分摊金额', `w_id` int unsigned NOT NULL COMMENT '仓库 ID', `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`order_detail_id`)
) ENGINE=InnoDB COMMENT='订单详情表';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/27481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重生学c++系列第三课类和对象(上)

好的我们重生c系列的前两期已经介绍完了c祖师爷针对C语言补充的几个新功能&#xff0c;现在我们进入c的真正课题学习——类与对象: C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 比如说我们洗菜做饭&am…

sentinel---滑动窗口的实现原理

sentinel有多种规则&#xff0c;包括&#xff1a;降级、限流、热点等等规则&#xff0c;这些规则均会涉及到时间因素&#xff0c;既在单位时间内的请求量满足各种条件之后的各种动作。 这里我们一起来探针一下sentinel中滑动窗口的实现 如上是一个滑动窗口的示意图。 这里先不…

嵌入式:C高级 Day4

一、整理思维导图 二、写一个函数&#xff0c;获取用户的uid和gid并使用变量接收 三、整理冒泡排序、简单选择排序和快速排序的代码 冒泡排序 #include <myhead.h>void output(int arr[], int len); void bubble_sort(int arr[], int len);int main(int argc, const ch…

OPENCV C++(八)HOG的实现

hog适合做行人的识别和车辆识别 对一定区域的形状描述方法 可以表示较大的形状 把图像分成一个一个小的区域的直方图 用cell做单位做直方图 计算各个像素的梯度强度和方向 用3*3的像素组成一个cell 3*3的cell组成一个block来归一化 提高亮度不变性 常用SVM分类器一起使用…

Windows环境下Node.js二进制版安装教程

文章目录 前言一 下载Node.js二 设置环境变量三 配置全局安装和缓存路径四 设置仓库 前言 新版的Node.js已自带npm&#xff0c;就在Node.js下载完成解压后的文件内&#xff0c;的node_modules包中。 npm的作用&#xff1a;是对Node.js依赖的包进行管理&#xff0c;类似maven。…

如何构造一个安全的单例?

为什么要问这个问题&#xff1f; 我们知道&#xff0c;单例是一种很常用的设计模式&#xff0c;主要作用就是节省系统资源&#xff0c;让对象在服务器中只有一份。但是实际开发中可能有很多人压根没有写过单例这种模式&#xff0c;只是看过或者为了面试去写写demo熟悉一下。那…

C语言代码的x86-64汇编指令分析过程记录

先通过Xcode创建一个terminal APP&#xff0c;语言选择C。代码如下&#xff1a; #include <stdio.h>int main(int argc, const char * argv[]) {int a[7]{1,2,3,4,5,6,7};int *ptr (int*)(&a1);printf("%d\n",*(ptr));return 0; } 在return 0处打上断点&…

Linux usb设备固定端口号

Linux usb设备固定端口号 一:/sys/bus/usb/devices/二:设备信息三:固定usb设备名方法 一:/sys/bus/usb/devices/ 信息显示如下 1-0:1.0 1&#xff1a;表示 1 号总线&#xff0c;或者说 1 号 Root Hub0&#xff1a;表示端口号1&#xff1a;表示配置号0&#xff1a;表示接口号命…

错过NFT投资,你可能会后悔吗?

在过去的几年里&#xff0c;非同质化代币&#xff08;NFT&#xff09;以其独特性和创新性&#xff0c;迅速成为数字资产领域的热门话题。NFT代表了数字资产的所有权和独特性&#xff0c;为艺术、音乐、游戏和虚拟世界等领域提供了全新的可能性。然而&#xff0c;对于那些错过了…

冠达管理投资前瞻:三星加码机器人领域 大信创建设提速

上星期五&#xff0c;沪指高开高走&#xff0c;盘中一度涨超1%打破3300点&#xff0c;但随后涨幅收窄&#xff1b;深成指、创业板指亦强势震动。截至收盘&#xff0c;沪指涨0.23%报3288.08点&#xff0c;深成指涨0.67%报11238.06点&#xff0c;创业板指涨0.95%报2263.37点&…

gin框架学习

文章目录 配置go环境实现一个简单的web响应服务验证功能gin增加页面以及传递数据 配置go环境 去go官网下载对应的版本 go下载地址 tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz 我们可以编辑 ~/.bash_profile 或者 /etc/profile&#xff0c;并将以下命令添加该文件的末…

【排序算法】python之冒泡,选择,插入,快速,归并

参考资料&#xff1a; 《Python实现5大排序算法》《六大排序算法&#xff1a;插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序》 --代码似乎是C语言 ———————— 本文介绍5种常见的排序算法和基于Python实现&#xff1a; 冒泡排序&#xff08;Bubble Sort&am…

pocky-request网络请求插件

插件下载地址&#xff1a;https://ext.dcloud.net.cn/plugin?id468 插件&#xff1a;https://www.yuque.com/pocky/aaeyux/irx7u0#Oosbz 使用教程&#xff1a; 下载插件main.js中配置&#xff1a; // 导入 import axiosRequest from ./js_sdk/pocky-request/pocky-request…

鉴源实验室丨SOME/IP协议安全攻击

作者 | 张昊晖 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 引 言 随着汽车行业对于数据通信的需求不断增加&#xff0c;SOME/IP作为支持汽车以太网进程和设备间通信的一种通信协议应…

【Git】Git切换地址

如何切换git代码地址&#xff1f; 1、查看当前远程 url git remote -v执行命令后&#xff0c;可以看见当前有2个URL。 远程 URL 在一般情况下有两个&#xff0c;分别是 fetch 和 push。 fetch URL 是用于从远程仓库获取最新版本的数据。当您运行 git fetch 命令时&#xf…

Oracle-ORA-00600:[ktspffbmb:objdchk_kcbnew_3]

问题背景: 应用执行存储过程报错ORA-00600: 内部错误代码, 参数: [ktspffbmb:objdchk_kcbnew_3], [0], [3303775], [4], [], [], [], [], [], [], [], []&#xff0c;导致过程无法正常执行 ORA-00600: 内部错误代码, 参数: [ktspffbmb:objdchk_kcbnew_3], [0], [3303775], [4]…

结构体和 Json 相互转换(序列化反序列化)

关于 JSON 数据 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也 易于机器解析和生成。RESTfull Api 接口中返回的数据都是 json 数据。 Json 的基本格式如下&#xff1a; { "a": "Hello", "b": "…

机器视觉赛道持续火热,深眸科技坚持工业AI视觉切入更多应用领域

随着深度学习等算法的突破、算力的不断提升以及海量数据的持续积累&#xff0c;人工智能逐渐从学术界向工业界落地。而机器视觉作为人工智能领域中一个正在快速发展的分支&#xff0c;广泛应用于工业制造的识别、检测、测量、定位等场景&#xff0c;相较于人眼&#xff0c;在精…

学习才是测试猿的永动力!超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦

前 言 前几篇文章介绍了 pytest 点的基本使用&#xff0c;学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求。从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数&#xff0c;插件开发等等。仔细去看过 pytest 文档的小伙伴&#xff0c;应该都有发现…

Visual Studio 2022的MFC框架——应用程序向导

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Visual Studio 2022开发工具下的MFC框架知识。 MFC(Microsoft Foundation Class&#xff0c;微软基础类库&#xff09;是微软为了简化程序员的开发工作所开发的一套C类的集合&#xf…