Spring Cloud:概述,服务注册和服务发现,多机部署和负载均衡
什么是微服务
就是将一个大型的应用程序拆分成多而小的独立的服务模块,每个服务模块围绕某个业务功能建立,具有独立的数据库,服务栈,并通过轻量级的通信协议进行交互。
单体架构
就是将所有的业务和功能都打包在一个jar包中,这就是单体架构。
单体架构的优点:构建简单,部署简单,一个项目包括了多个功能,省去了不同项目交互调用的麻烦,
单体架构的缺点:由于网站用户越来越多,需求也越来越多,功能需求也越来越多,导致后端的压力越来越大,负载越来越高,一个很小的问题,就会引起很大的连锁反应,冗余性太高。
集群和分布式
集群:是将一个系统部署到多个服务器上,每个服务器都能提供系统的所有服务,多个服务器通过负载均衡调度完成工作,每个服务器称为集群的节点。
分布式:将一个系统拆分成多个子系统,多个子系统部署到多个服务器上,多个服务器上的子系统协同完成工作。
集群是多个计算机在做相同的事,分布式是多个计算机在不同的事情。
微服务架构
就是每个服务只负责一种特定的业务功能,每个服务独立构建,测试部署,互不干扰,可用不同的技术栈。
Spring-Cloud
Spring-Cloud就是微服务的一种解决方案
单项依赖
微服务之间需要做到单项依赖,严禁循环依赖,双向依赖。
DependencyManagement和Dependencies
dependencies
将所依赖的jar直接加入到项目中,子项目也会继承该依赖。
DependencyManagement
只是申明依赖,并没有jar包的引入,如果子项目需要用到相关的依赖,需要自己引入
<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><java.version>17</java.version><mybatis.version>2.2.0</mybatis.version> <!-- 使用已知的兼容版本 --><mysql.version>8.0.33</mysql.version><spring-cloud.version>2022.0.3</spring-cloud.version></properties>
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version> <!-- 采用最新兼容版本 --></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>${mybatis.version}</version><scope>test</scope></dependency></dependencies></dependencyManagement>
在创建子项目的时候,注意pom文件申明项目的依赖和构建插件
简单创建好父子工程
来进行远程调用
根据订单查询订单信息时,根据订单里面的产品Id,获取产品的详细信息
可以采用RestTemplate
RestTemplate
是 Spring 提供的用于 同步 HTTP 请求的客户端工具类,它可以方便地发送 HTTP 请求并接收响应,支持 GET、POST、PUT、DELETE 等多种请求方法
定义RestTemplate
@Configurationpublic class BeanConfig {@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}
@Slf4j
@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public OrderInfo selectOrderById(Integer orderId){OrderInfo orderInfo = orderMapper.selectOrderById(orderId);String url = "http://127.0.0.1:9090/product/"+orderInfo.getProductId();ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;}
}
测试一下
但是rul是写死的,如果要是修改IP,就得修改代码
注册中心
CPA理论
一致性:CPA理论中的一致性,指的是强一致性,所有节点在同一时间既有相同的数据。
可用性:保证每个请求都有响应。
分区容错性:当出现网络分区后,系统仍然能对外提供服务。
这三个基本需求,不能一次性全部满足,最多只能满足两个,CA或者CP架构。
Eureka
Eureka是Netflix开发的基于REST的服务发现框架,主要⽤于服务注册,管理,负载均衡和服务故障 转移,是常见的注册中心。
EurekaServer的搭建
EurekaServer是一个独立的微服务
注意:要引入eureka-server依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
构建插件
build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>org.example.eurekaserver.EurekaServerApplication</mainClass></configuration></plugin></plugins></build>
注意在启动类上添加@EnableEurekaServer注解,用来开启eureka注册中心
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class,args);}
}
配置文件
server:port: 10010
spring:application:name: eureka-server
eureka:instance:hostname: localhostclient:fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为falseregister-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.service-url:# 设置Eureka Server的地址,查询服务和注册服务都需要依赖这个地址defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
logging:pattern:console: '%d{MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
启动服务
在远程调⽤时,从eureka-server拉取product-service的服务信息,url则不会被写死
@Slf4j
@Service
public class OrderService { @Autowiredprivate DiscoveryClient discoveryClient;public OrderInfo selectOrderById(Integer orderId){OrderInfo orderInfo = orderMapper.selectOrderById(orderId);//从Eureka中获取服务列表List<ServiceInstance> instances = discoveryClient.getInstances("product-service");String uri = instances.get(0).getUri().toString();String url = uri+"/product/"+orderInfo.getProductId();log.info("远程调用url:{}", url);ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;}
负载均衡
这行代码是获得了第一个服务实例,但是如果有多个服务实例呢?
EurekaServiceInstance instance = (EurekaServiceInstance) instances.get(0);
在创建几个实例后我们发现访问的都是同一台机器,其它的并没有进行访问。
修改代码,使其轮流访问
int index = atomicInteger.getAndIncrement() % instances.size();
public OrderDetail selectOrderById(Integer orderId){OrderDetail orderDetail = orderMapper.selectOrderById(orderId);
// String url="http://localhost:9090/product/"+orderDetail.getProductId();
// if (instances == null || instances.isEmpty()) {
// log.warn("No available instances for product-service");
// throw new IllegalStateException("No available instances for product-service");
// }List<ServiceInstance> instances= discoveryClient.getInstances("product-service");int index=count.getAndIncrement() % instances.size();URI uri = instances.get(index).getUri();String url=uri+"/product/"+orderDetail.getProductId();log.info("url:{}",url);ProductDetail productDetail = restTemplate.getForObject(url, ProductDetail.class);orderDetail.setProductDetail(productDetail);return orderDetail;}
请求被均衡的分配在了不同的实例上,这就是负载均衡
负载均衡:当服务流量增⼤时,通常会采⽤增加机器的⽅式进⾏扩容,负载均衡就是⽤来在多个机器或者其他资源 中,按照⼀定的规则合理分配负载
SpringCloudLoadBalancer
SpringCloudLoadBalancer这个组件是用来实现客户端的负载均衡
添加 @LoadBalanced 注解
@LoadBalancerClient(name = "product-service",configuration = CustomLoadBalancerConfiguration.class)
@Configuration
public class BeanConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}
修改IP端⼝号为服务名称
public OrderDetail selectOrderById(Integer orderId){OrderDetail orderDetail = orderMapper.selectOrderById(orderId);String url="http://product-service/product/"+orderDetail.getProductId();log.info("url:{}",url);ProductDetail productDetail = restTemplate.getForObject(url, ProductDetail.class);orderDetail.setProductDetail(productDetail);return orderDetail;}
负载均衡策略
负载均衡策略是一种思想,有轮询和随机选择两种,就是字面意思。
⾃定义负载均衡策略
//负载均衡策略
public class CustomLoadBalancerConfiguration {@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),name);}
}
使⽤@LoadBalancerClient或@LoadBalancerClients注解,可以对不同的服务提供⽅配置不同的客⼾端负载均衡算法策略
name:对哪个服务生效
configuration:在这写负载均衡策略,用哪个负载均衡策略实现
希望能对大家有所帮助!!!!
相关文章:
Spring Cloud:概述,服务注册和服务发现,多机部署和负载均衡
什么是微服务 就是将一个大型的应用程序拆分成多而小的独立的服务模块,每个服务模块围绕某个业务功能建立,具有独立的数据库,服务栈,并通过轻量级的通信协议进行交互。 单体架构 就是将所有的业务和功能都打包在一个jar包中&…...
Linux的基础开发工具
目录 前言: 1、包管理器yum 1.1 软件包的依赖 1.2 镜像源 1.3 查找/安装/卸载软件 2、编辑器vim 2.1 命令模式(默认) 2.1.1 撤销与反撤销 2.1.2 光标定位 2.1.3 复制&&剪切(删除)&&粘贴 2.1.4 替换 2.1.5 插入模式 2.1.6 V-Block模式 …...
解锁跨平台开发的新时代——Compose Multiplatform
解锁跨平台开发的新时代——Compose Multiplatform 在当今移动和桌面应用程序开发领域,跨平台解决方案是开发者们梦寐以求的工具。而由JetBrains打造的Compose Multiplatform正是这样一款现代UI框架,它基于Kotlin技术,为开发者构建高性能且美观的用户界面提供了极大的便利和…...
键盘固件刷写详解:Bootloader
键盘固件刷写详解:从入门到精通 引言 作为一名机械键盘爱好者,相信大家都曾经面临过刷写固件的问题。无论是想要自定义按键功能,还是升级键盘的固件,掌握刷写技巧都是非常必要的。本文将全面介绍不同类型的引导加载程序…...
网络原理初识
本来想从网络的发展史开始写,之后再写网络的定义啥的,但快写完了才发现,这不课本教材吗,没劲,遂弃之,重撰,删芜就简.写点我认为,对程序员来说真正有用的东西 目录 IP地址 概念 格式 特殊地址 端口号 概念 格式 协议 概念 知名协议的默认端口 五元组 协议分层 OS…...
PVP鼠标推荐(deepseek)
下面有不懂的自行百度查找👍 ❤️ 以下是几款在 双击性能(DBC) 和 拖拽点击(DC) 方面表现优秀的游戏鼠标推荐,结合了硬件性能、微动寿命以及玩家口碑: 1. 罗技 G102/G203 Lightsync 特点&#…...
Navee滑板车强势登陆中国,以智能科技重塑城市出行新风尚
当科技与潮流邂逅,城市出行迎来了一场前所未有的变革。全球智能出行领域的先锋品牌Navee,携其多款旗舰滑板车产品——ST3、GT3、V系列等,正式进军中国市场。凭借“颜值、性能、安全、智能”四大核心优势,Navee正以破竹之势重新定义…...
【Linux网络】网络命令
Ping Ping命令是一种用于测试网络连接状况的工具,在Windows、Linux、macOS等操作系统中都可以使用。以下是其详细介绍: 它主要通过向目标主机发送Internet控制报文协议(ICMP)的回声请求(Echo Request)数据…...
【JS逆向基础】面向对象
1,OOP编程思想 面向对象编程是在面向过程编程的基础上发展来的,它比面向过程编程具有更强的灵活性和扩展性。面向对象编程是程序员发展的分水岭,很多初学者会因无法理解面向对象而放弃学习编程。 面向对象编程(Obiect:oriented Programming…...
# 如何使用OpenCV进行发票的透视变换和二值化处理
如何使用OpenCV进行发票的透视变换和二值化处理 引言 在自动化处理发票和其他文档时,图像预处理是一个关键步骤,它可以帮助提高OCR(光学字符识别)的准确性。透视变换用于校正图像中的透视失真,而二值化处理则可以简化…...
NetSuite 如何得到所有Item最近一次采购订单的货品单价?
我们知道,如果取Item主数据的数据,得到的是很多相关transaction的Item 货品平均价值;如果只想得到最近一次采购订单上的采购单价,主数据上应该无法直接得到,那该如何处理?我们可以利用Saved Search来拉取相…...
[5-2] 对射式红外传感器计次旋转编码器计次 江协科技学习笔记(38个知识点)
1、 2、 3、这些缩写通常出现在嵌入式系统或微控制器的上下文中,它们各自有不同的功能: • RCC:Reset and Clock Control(复位和时钟控制)。它负责管理微控制器的时钟系统,包括时钟源的选择、时钟频率的设置…...
阿里云 golang 一面
消息队列 分布式文件系统 Linux的虚拟网络设备 TCP SSL/TLS 场景:对于打车场景,如何设计一个系统来处理并发打车请求? 设计一个处理并发打车请求的系统需要考虑多个方面,包括系统架构、数据存储、负载均衡和实时性。以下是一个基…...
【C++ Qt】多元素控件(ListWidget、TableWidget、TreeWidget)
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 本章将通过代码示例详细介绍了Qt中QListWidget、QTableWidget和QTreeWidget三种多元素控件的使用方法与核心功能,涵盖列表的增删操作、表格…...
排序算法-冒泡排序
冒泡排序一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为元素会经由交换慢…...
C++ 工具链与开发实践:构建安全、高效与创新的开发生态
引言 在 C 的技术演进中,工具链的革新与开发实践的迭代始终是推动语言生命力的核心动力。从内存安全的攻防体系到嵌入式设备的能效优化,从跨平台开发的降本增效到开发者社区的生态构建,C 正通过工具链与方法论的双重升级,应对复杂…...
uni-pages-hot-modules插件:uni-app的pages.json的模块化及模块热重载
uni-pages-hot-modules uni-app的pages.json的模块化及模块热重载 uni-app的pages.json的模块化及模块热重载 解决uni-app的pages.json无法模块化的问题,并且解决模块热重载和缓存的问题 安装 npm i uni-pages-hot-modules -Suni-app vite版本(vue3)示例项目 uni-app webpa…...
【WEB3】区块链、隐私计算、AI和Web3.0——数据民主化(1)
区块链、隐私计算、AI,是未来Web3.0至关重要的三项技术。 1.数据民主化问题 数据在整个生命周期(生产、传输、处理、存储)内的隐私安全,则是Web3.0在初始阶段首要解决的问题。 数据民主化旨在打破数据垄断,让个体能…...
从0到1:用Lask/Django框架搭建个人博客系统(4/10)
摘要:本文深入解析了使用Lask和Django构建个人博客系统的全过程。从技术选型的考量,突出Lask的轻量灵活与Django的强大功能,到开发环境搭建、项目初始化,再到核心功能实现如文章管理、用户认证与权限控制,详细阐述了开…...
探索 C++23 的 views::cartesian_product
文章目录 一、背景与动机二、基本概念与语法三、使用示例四、特点与优势五、性能与优化六、与 P2374R4 的关系七、编译器支持八、总结 C23 为我们带来了一系列令人兴奋的新特性,其中 views::cartesian_product 是一个非常实用且强大的功能,它允许我们轻…...
微软拼音自定义词库方法
1.准备文件input.txt 令狐冲 郭靖2.使用python转成微软拼音需要的格式 from xpinyin import Pinyin # pip install xpinyin -i https://pypi.tuna.tsinghua.edu.cn/simplep Pinyin()with open(input.txt, r, encodingutf-8) as infile:with open(output.txt, w, encodingutf…...
SQLite3常用语句汇总
SQLite 命令行工具(sqlite3 shell) 中的内置命令 命令作用说明.open filename.db打开或创建一个 SQLite 数据库文件.tables列出当前数据库中的所有表.schema [table]查看某个表或所有表的建表语句(DDL).headers ON/OFF开启或关闭…...
数据库设计三范式
第一范式 (1NF) 每个表中的每一列都是原子值 每个表中的每一行都是唯一的 下面这个表格就是不符合第一范式的例子:因为学时数能够拆分为讲课和实验。所以他并不是每一列都是原子值。 不仅要考虑列是否是原子值,还需要考虑每列的值是否可拆分。 第二范…...
GoWeb开发
学习目标: 本篇要达到的目的,能为后续复习提供极大便利。 (当我写下本篇博客时,已复习3遍) 一、网络通信概述 (为本篇基础核心内容) 1、什么是网络通信? 网络通信是指不同设备&…...
(7)Nokov 室内光学跟踪系统
文章目录 前言 7.1 所需硬件 7.2 Nokov 系统设置 7.3 配置旋翼机 7.4 启动 Nokov 模块 7.5 MAVProxy 准备 7.6 测试飞行 7.7 参数说明 前言 本文将介绍如何通过 Nokov 运动捕捉系统向旋翼机传输姿势信息。联系方式:NOKOV | Optical Motion Capture System。…...
Linux Shell编程和循环语句
一.for循环语句 1.for语句的结构2.for循环语句实例①根据姓名列表来批量创建多个用户②根据IP地址列表检查主机状态 二.使用while循环语句1.while语句结构2.while循环语句应用①批量添加规律编号用户②猜价格游戏 三 until循环语句1.until语句结构① 计算1-50的和 1.for语句的结…...
Java后端程序员学习前端之JavaScript
1.什么是JavaScript 1.1.概述 JavaScript是一门世界上最流行的脚本语言javaScript 一个合格的后端人员,必须要精通JavaScript 1.2.历史 JavaScript的起源故事-CSDN博客 2.快速入门 2.1.引入JavaScript 1.内部标签 <script>//.......</script> --…...
redis多路复用IO模型 以及 6.0引入的多线程模型
redis为什么选择单线程 采用多线程的话,会出现上下文切换的开销采用多线程,会带来共享资源的竞争控制,比如多个线程同时访问同一个资源(键值)时,需要额外的手段来保障共享资源的正确性,会带来额…...
101alpha_第6个
第6个alpha (-1 * correlation(open, volume, 10)) 这个就是看这两个相似性。10天之内的 如果结果为正且数值较大,投资者可能会认为在开盘价上涨时成交量萎缩,市场上涨动力不足,可能是卖出信号;反之,开盘价下跌时成交…...
crawl4ai能替代scrapy等传统爬虫框架吗?
传统爬虫框架就像拿着渔网在数字海洋中捕鱼——虽然能捞到东西,但面对现代网站的复杂性时常常"漏网之鱼"满天飞。以Scrapy为代表的工具存在三大致命短板:首先是JavaScript盲区,对动态渲染内容束手无策,就像试图用收音机…...
Sui Basecamp 2025 全栈出击
“我们不仅仅是在构建一个 L1,我们是在重建互联网。” — — Mysten Labs 首席产品官 Adeniyi Abiodun 本届 Sui Basecamp 汇聚了 Web3 领域的建设者、合作伙伴和思想领袖,为期两天,不仅展示了 Sui 的未来,也展现了去中心化互联网…...
计算机体系架构-----设计模式:状态模式(从程序员加班问题切入)
文章目录 1.梦开始的地方2.代码1.0版本3.代码2.0版本4.代码3.0版本5.梦结束的地方 最近在学习这个专业课里面的体系结构这门课程,作为专业里面的一门基础课,这个课程里面主要讲解的就是软件的设计思想,一些历程之类的,包括了面向对…...
【C/C++】RPC与线程间通信:高效设计的关键选择
文章目录 RPC与线程间通信:高效设计的关键选择1 RPC 的核心用途2 线程间通信的常规方法3 RPC 用于线程间通信的潜在意义4 主要缺点与限制4.1 缺点列表4.2 展开 5 替代方案6 结论 RPC与线程间通信:高效设计的关键选择 在C或分布式系统设计中,…...
数据结构之串
一、串的定义与基本概念 1. 串的定义 定义:串是由零个或多个字符组成的有限序列,记作 s"a1a2…an",例如 "data structure"、"123" 等。 空串:无任何字符,长度为 0,…...
基于腾讯云MCP广场的AI自动化实践:爬取小红书热门话题
基于腾讯云MCP广场的AI自动化实践:爬取小红书热门话题 我正在参加Trae「超级体验官」创意实践征文,本文所使用的 Trae 免费下载链接:www.trae.com.cn/?utm_source… 🔎 背景 在人工智能快速发展的时代,AI技术不仅重…...
AI领域的MCP(Model-Centric Paradigm)
1. 什么是MCP(Model-Centric Paradigm)? MCP(Model-Centric Paradigm)是人工智能开发中的一种核心理念,强调以模型的优化与改进作为主要驱动因素来提升AI系统的表现。在MCP模式下,开发者专注于…...
裸辞8年前端的面试笔记——JavaScript篇(一)
裸辞后的第二个月开始准备找工作,今天是第三天目前还没有面试,现在的行情是一言难尽,都在疯狂的压价。 下边是今天复习的个人笔记 一、事件循环 JavaScript 的事件循环(Event Loop)是其实现异步编程的关键机制。 从…...
力扣刷题Day 41:除自身以外数组的乘积(238)
1.题目描述 2.思路 方法1:搞一个数组存放各元素之前所有数的乘积(头为1),再搞一个数组存放各元素之后所有数的乘积(尾为1)。 方法2:上面的方法是很好理解的,在此基础上应该如何优化…...
金仓数据库征文-金仓KES数据同步优化实践:逻辑解码与增量同步
目录 一.同步场景与方案选型 二.同步环境配置 1.前置条件验证 2.逻辑解码配置 三.同步实施与问题排查 1.结构映射规则 2.增量数据捕获 3.数据一致性校验 四.性能调优实践 1.同步线程优化 2.批量提交优化 3.资源监控指标 五.典型场景解决方案 1.双向同步冲突处理 …...
【前端基础】9、CSS的动态伪类(hover、visited、hover、active、focus)【注:本文只有几个粗略说明】
一、什么是伪类 选择器的一种,用于选择处于特定状态的元素。 最常见的现象:鼠标放在某些文字上面,文字就会加上颜色。 鼠标没放上去之前: 鼠标放上去之后: 二、动态伪类 图片来源(链接文章也有其他伪…...
企业开发平台大变革:AI 代理 + 平台工程重构数字化转型路径
在企业数字化转型的浪潮中,开发平台正经历着前所未有的技术革命。从 AST(抽象语法树)到 AI 驱动的智能开发,从微服务架构到信创适配,这场变革不仅重塑了软件开发的底层逻辑,更催生了全新的生产力范式。本文…...
ZooKeeper工作机制与应用场景
目录 1.1、概述1.2、选举机制1.2.1、选举触发条件1.2.2、选举规则1.2.3、选举过程详解 1.3、数据同步机制1.3.1、正常同步1.3.2、宕机同步 1.4、客户端常用命令1.5、应用场景1.5.1、配置管理1.5.2、命令服务1.5.3、分布式锁服务1.5.4、集群管理1.5.5、分布式ID1.5.6、分布式协调…...
VR制作软件用途(VR制作软件概述)
虚拟现实(VR)制作软件作为现代科技的瑰宝,正以独特的魅力重塑各行各业。 通过构建三维虚拟环境,这些软件提供了前所未有的沉浸式体验,还推动了技术革新与产业升级。本文将探讨VR制作软件的主要用途,并重点…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】电商数据分析案例-9.1 业务场景与数据准备
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 9.1 业务场景与数据准备9.1.1 业务场景描述核心业务目标业务挑战 9.1.2 数据来源与获取数据源构成数据获取方案 9.1.3 数据结构与字段说明核心数据表设计1. 订单事实表&…...
PyTorch 入门与核心概念详解:从基础到实战问题解决
PyTorch 入门与核心概念详解:从基础到实战问题解决 前言 用PyTorch 编写 Transformer 模型时遇到了多个错误,包括维度不匹配、NaN 损失、注意力权重未记录以及 OpenMP 库初始化等问题。 本文基于以上,对 PyTorch 的基本解释,并对…...
【办公类-99-05】20250508 D刊物JPG合并PDF便于打印
背景需求 委员让我打印2024年2025年4月的D刊杂志,A4彩打,单面。 有很多JPG,一个个JPG图片打开,实在太麻烦了。 我需要把多个jpg图片合并成成为一个PDF,按顺序排列打印。 deepseek写Python代码 代码展示 D刊jpg图片合…...
【C++】手搓一个STL风格的string容器
C string类的解析式高效实现 GitHub地址 有梦想的电信狗 1. 引言:字符串处理的复杂性 在C标准库中,string类作为最常用的容器之一,其内部实现复杂度远超表面认知。本文将通过一个简易仿照STL的string类的完整实现,揭示其设…...
无实体对话式社交机器人 拟人化印象形成机制:基于多模态交互与文化适配的拓展研究
《如何感知AI对话者:无实体对话式社交机器人拟人化对其印象形成效果影响机制的实验研究》解析 一、研究背景与核心问题 (一)技术背景与研究动机 随着生成式AI技术发展,以ChatGPT、文心一言为代表的无实体对话式社交机器人兴起,用户对其高度拟人化特征有显著需求,如扮演…...
存储器:DDR和独立显卡的GDDR有什么区别?
本文来简要对比DDR(Double Data Rate SDRAM)和GDDR(Graphics Double Data Rate SDRAM)的区别,重点说明它们在设计、性能和应用上的差异: 1. 设计目标与架构 DDR:通用型DRAM,设计为…...
viewDesign里的table内嵌套select动态添加表格行绑定内容丢失
问题 描述 viewDesign里的table内嵌套select,表格的行数是手动点击按钮添加的,添加第一行选择select的内容能正常展示,添加第二行第一行的select的内容消失 代码 <FormItem label"内饰颜色"><Tableclass"mt_10&q…...