当前位置: 首页 > news >正文

虚拟电商-话费充值业务(二)话费充值对接供应商模块开发

一、对接供应商模块开发

供应商对接模块chongba_recharge_supplier主要负责的就是调用外部的供应商系统进行充值下单,这种调用是一种基于HTTP协议的调用。

此外在供应商对接模块中主要是实现的业务逻辑有:

1:余额或押金不足情况下的失败轮转

2:网络故障/充值失败重试,需要添加一个重试任务

3:重试次数到达阈值后停止供应商对接

4:供应商异步回调,订单状态修改

二、对接供应商服务接口定义

chongba_recharge_supplier监听到支付成功消息之后,接收到的消息:RechargeRequest,具体对接的不直接写在监听类中,单独定义一个对接供应商服务接口

步骤1:在chongba_recharge_supplier模块下创建包:com.chongba.supplier.inf,在该包下创建充吧系统对接供应商接口:SupplierService,接口中定义一个对接方法:void recharge(RechargeRequest rechargeRequest);

public interface SupplierService {/*** 对接供应商下单* @param rechargeRequest*/public void recharge(RechargeRequest rechargeRequest);
}

步骤2:在chongba_recharge_supplier模块下创建包:com.chongba.supplier.service,在该包下创建一个接口的实现类:SupplierServiceImpl

@Slf4j
@Service
public class SupplierServiceImpl implements SupplierService{    @Overridepublic void recharge(RechargeRequest rechargeRequest) {}
}

步骤3:配置供应商系统的接口地址,在实际业务中调用第三方系统接口大都基于HTTP协议调用,充吧系统在模块中模拟了两个供应商,注意这个模块并没有在充吧的注册中心去注册,因为我们模拟的是外部系统,所以我们要调用外部系统必须得知道系统接口的调用地址;

在application-dev.yml中配置如下:

supplier:apis: {"jisuapi": "http://127.0.0.1:8090/jisuapi/mobilerecharge/recharge","juheapi": "http://127.0.0.1:8090/juheapi/recharge"}

步骤4:编写配置类读取配置,在chongba_recharge_supplier模块下创建包:com.chongba.supplier.conf,在该包下创建配置类:SupplierConfig

@Data
@Component
@ConfigurationProperties(prefix = "supplier")
public class SupplierConfig {private Map<String,String> apis; //加载供应商api地址
}

步骤5:在对接服务实现类:SupplierServiceImpl中注入配置类SupplierConfig,并测试配置能否正常读取

@Slf4j
@Service
public class SupplierServiceImpl implements SupplierService{@Autowiredprivate SupplierConfig supplierConfig;@PostConstructpublic void init(){System.out.println("加载到的配置如下:"+supplierConfig.getApis());}@Overridepublic void recharge(RechargeRequest rechargeRequest) {}
}

运行启动类:SupplierApplication,查看控制台输出:

三、对接供应商逻辑编写

配置正常加载之后需要编写对接供应商的处理逻辑,先将代码结构实现,然后补充细节

1).编写对接逻辑分发方法:doDispatchSupplier(RechargeRequest rechargeRequest),根据供应商编号进行分发
2).编写对接聚合的方法:doPostJuhe(RechargeRequest rechargeRequest)
3).编写对接极速的方法:doPostJisu(RechargeRequest rechargeRequest)

对接第三方其实就是向第三方系统接口地址发起HTTP请求,我们可以使用HttpClient等工具。

步骤1:在启动类SupplierApplication中向容器注入RestTemplate

@Bean
public RestTemplate restTemplate(){return new RestTemplate();
}

步骤2:整体对接代码结构如下:

@Autowiredprivate RestTemplate restTemplate;@Overridepublic void recharge(RechargeRequest rechargeRequest) {doDispatchSupplier(rechargeRequest);}/*** 对接逻辑分发* @param rechargeRequest*/private void doDispatchSupplier(RechargeRequest rechargeRequest) {//设置供应商的调用地址:String url = supplierConfig.getApis().get(rechargeRequest.getSupply());rechargeRequest.setRechargeUrl(url);//根据需要对接的供应商的编号确定不同的对接方式---不同的api需要传递的参数类型和参数名称等各不相同if(Constants.juheapi.equals(rechargeRequest.getSupply())){//对接聚合doPostJuhe(rechargeRequest);}else if(Constants.jisuapi.equals(rechargeRequest.getSupply())) {//对接极速doPostJisu(rechargeRequest);}}private void doPostJuhe(RechargeRequest rechargeRequest) {//聚合要求传递的是json格式的数据//创建并设置请求头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);//创建请求实体HttpEntity httpEntity = new HttpEntity(JSON.toJSONString(rechargeRequest),headers);//发送请求ResponseEntity<String> responseEntity = restTemplate.postForEntity(rechargeRequest.getRechargeUrl(), httpEntity, String.class);//获得结果String body = responseEntity.getBody();System.out.println(body);}private void doPostJisu(RechargeRequest rechargeRequest) {}

然后注意:在我们监听类中监听到消息之后,要去调用我们供应商对接服务接口方法:

@Component
@Slf4j
@RocketMQMessageListener(topic = "pay",consumerGroup = "order-paid-consumer")
public class PayRocketListener implements RocketMQListener<RechargeRequest>{@Autowiredprivate SupplierService supplierService;/*** 监听消息:* @param rechargeRequest*/@Overridepublic void onMessage(RechargeRequest rechargeRequest) {log.info("PayRocketListener 监听到了消息,{}",rechargeRequest);supplierService.recharge(rechargeRequest);}
}

启动测试:

启动chongba_recharge_web工程,chongba_recharge_mock工程,chongba_recharge_supplier工程

访问:http://localhost:191/ 进行充值,查看结果

步骤3:供应商返回结果封装处理:对于供应商的返回结果数据我们可以统一封装处理

对进行泛型的反序列化,使用TypeReference可以明确的指定反序列化的类型

@Overridepublic void recharge(RechargeRequest rechargeRequest) {Result<RechargeResponse> result = doDispatchSupplier(rechargeRequest);if(result !=null){           }}/*** 对接逻辑分发* @param rechargeRequest*/private Result<RechargeResponse> doDispatchSupplier(RechargeRequest rechargeRequest) {//设置供应商的调用地址:String url = supplierConfig.getApis().get(rechargeRequest.getSupply());rechargeRequest.setRechargeUrl(url);//根据需要对接的供应商的编号确定不同的对接方式---不同的api需要传递的参数类型和参数名称等各不相同if(Constants.juheapi.equals(rechargeRequest.getSupply())){//对接聚合return  doPostJuhe(rechargeRequest);}else if(Constants.jisuapi.equals(rechargeRequest.getSupply())) {//对接极速return  doPostJisu(rechargeRequest);}return null;}private Result<RechargeResponse> doPostJuhe(RechargeRequest rechargeRequest) {//聚合要求传递的是json格式的数据//创建并设置请求头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);//创建请求实体HttpEntity httpEntity = new HttpEntity(JSON.toJSONString(rechargeRequest),headers);//发送请求ResponseEntity<String> responseEntity = restTemplate.postForEntity(rechargeRequest.getRechargeUrl(), httpEntity, String.class);//获得结果/*String body = responseEntity.getBody();// Result<RechargeResponse>Result result = JSON.parseObject(body, Result.class);//因为泛型的问题可能会导致出现问题System.out.println(body);*/Result<RechargeResponse> result = JSON.parseObject(responseEntity.getBody(), new TypeReference<Result<RechargeResponse>>(){});return result;}// 对接极速private Result<RechargeResponse> doPostJisu(RechargeRequest rechargeRequest) {return null;}

四、对接供应商测试

业务逻辑:

选择 手机充值进行话费充值。进行充值,然后支付成功。支付成功后,对接供应商模块,发送消息到供应商平台,然后接收聚合供应商返回的消息。进行处理。

选择充值:
在这里插入图片描述

进行充值:
在这里插入图片描述
充值话费成功:
在这里插入图片描述
对接供应商模块,发送消息到供应商平台,然后接收聚合供应商返回的消息(余额不足)。对接成功。

相关文章:

虚拟电商-话费充值业务(二)话费充值对接供应商模块开发

一、对接供应商模块开发 供应商对接模块chongba_recharge_supplier主要负责的就是调用外部的供应商系统进行充值下单&#xff0c;这种调用是一种基于HTTP协议的调用。 此外在供应商对接模块中主要是实现的业务逻辑有&#xff1a; 1&#xff1a;余额或押金不足情况下的失败轮…...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例3,TableView16_03 拖拽视觉反馈示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例3,TableView16_03 拖…...

游戏引擎学习第186天

回顾并规划今天的任务 现在&#xff0c;我们站在了一个关键的时刻&#xff0c;准备突破&#xff0c;拥有一些优秀的性能分析代码。从目前来看&#xff0c;我们已经能够看到时间的消耗情况&#xff0c;我对这一点感到非常兴奋。昨天的直播中我们勉强让一些东西工作了&#xff0…...

树的基础_遍历(蓝桥云课)

一些树上问题&#xff1a; 树的直径&#xff1a; import java.util.*;public class TreeDiameter {static List<List<Integer>> tree; // 用邻接表存储树结构static int[] depth; // 记录每个节点的深度public static void main(String[] args) {S…...

29_项目

目录 http.js 1、先注册账号 register.html 2、再登录 login.html 3、首页 index.html 4 详情 details.html cart.html css index.css register.css details.css 演示 进阶 http.js let baseURL "http://localhost:8888"; let resgiterApi baseURL &…...

vue搭建一个树形菜单项目

首先搭建项目需要先通过步骤搭建一个vue的项目&#xff0c;然后创建一个component文件&#xff0c;里面新建一个index.vue页面来。 这是引入的element-ui组件库里的组件&#xff0c;来实现我的路由&#xff0c;渲染的是我存储的动态路由&#xff0c;所以需要先安装并且引用。 …...

Python包管理完全指南:pip常用命令与最佳实践

一、pip核心功能解析 作为Python官方推荐的包管理工具&#xff0c;pip承担着以下关键职责&#xff1a; 从PyPI&#xff08;Python Package Index&#xff09;仓库安装/卸载第三方库管理项目依赖关系和版本控制支持本地/私有仓库的包安装维护虚拟环境中的包隔离 二、20个必知…...

Eigen 3

本文来源&#xff1a;腾讯元宝 Eigen 3 是一个专注于线性代数运算的高性能 ​C 模板库&#xff0c;广泛应用于科学计算、机器学习、计算机视觉等领域。以下是其核心特性与功能的综合介绍&#xff1a; 1. ​核心定义与设计理念 ​纯头文件库&#xff1a;Eigen 3 无需编译或链接…...

数字化转型国家标准- GB/T 45341-2025《数字化转型管理 参考架构》

GB/T 45341-2025《数字化转型管理 参考架构》 前言一、数字化转型的根本任务二、标准的主要内容2.1、 核心概念2.2、总体框架2.3、 主要视角2.4、过程方法2.5、 发展阶段与水平档次 前言 在工业和信息化部和国家标准化管理委员会的指导下&#xff0c;全国信息化和工业化融合管…...

Redis 源码硬核解析系列专题 - 第三篇:核心数据结构之字典(Dict)

1. 引言 字典(Dict)是Redis的核心数据结构之一,用于实现键值存储(Redis数据库的核心)和内部元数据管理(如客户端状态)。Redis的字典基于哈希表实现,支持高效的增删改查操作。本篇将深入剖析其源码实现,包括哈希表结构、冲突解决和渐进式rehash机制。 2. 字典的结构体…...

JS—异步编程:3分钟掌握异步编程

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–引言三–JavaScript 事件循环机制四–定时器的秘密&#xff1a;setTimeout 和 setInterval五–异步编程模型对比 二. 引言 在现代Web开发中&#xff0c;异步编程是提升性能的关键技术。无论是脚本加载&am…...

Linux C语言调用第三方库,第三方库如何编译安装

在 Linux 环境下使用 C 语言调用第三方库时&#xff0c;通常需要先对第三方库进行编译和安装。以下为你详细介绍一般的编译安装步骤&#xff0c;并给出不同类型第三方库&#xff08;如使用 Makefile、CMake 构建系统&#xff09;的具体示例。 一般步骤 1. 获取第三方库源码 …...

gogs私服搭建

一.介绍&#xff1a; gogs是一个用Go语言开发的自助Git服务&#xff0c;目标是简单、快速搭建Git服务&#xff0c; 支持多种平台&#xff0c;包括Linux、Windows等。它类似于GitHub&#xff0c;但更轻量&#xff0c;适合个人或小团队使用&#xff0c; 在简化git服务搭建流程的…...

python和c中作用域的差异

好的&#xff0c;我将详细列举 Python 和 C 语言在作用域规则上的主要差异&#xff0c;并为每种差异提供具体的代码示例&#xff0c;以便更清晰地理解它们之间的不同。 1. 块级作用域&#xff08;Block Scope&#xff09; C 语言 在 C 语言中&#xff0c;任何用 {} 包裹的代…...

C++ 中将函数作为参数传递

C 中将函数作为参数传递 1. 通过指针传递函数 函数可以通过传递函数的地址来作为参数传递&#xff1b;简而言之&#xff0c;就是通过指针实现这一点。 示例代码 #include <iostream> using namespace std;// 定义加法和减法函数 #include <iostream> #include …...

【C++】右值引用与完美转发

目录 一、右值引用&#xff1a; 1、左值与右值&#xff1a; 2、左值引用和右值引用&#xff1a; 二、右值引用的使用场景&#xff1a; 1、左值引用的使用场景&#xff1a; 2、右值引用的使用场景&#xff1a; 移动构造 移动赋值 三、完美转发&#xff1a; 1、万能引用…...

批量合并 PDF 文档,支持合并成单个文档,也支持按文件夹合并 PDF 文档

在日常工作中&#xff0c;合并多个 PDF 文档为一个文件是非常常见的需求。通过合并 PDF&#xff0c;不仅能够更方便地进行管理&#xff0c;还能在特定场景下&#xff08;如批量打印&#xff09;提高效率。那么&#xff0c;当我们需要批量合并多个 PDF 文件时&#xff0c;是否有…...

SQL Server 备份相关信息查看

目录标题 一、统计每个数据库在不同备份目录和备份类型下的备份次数&#xff0c;以及最后一次备份的时间整体功能详细解释 二、查询所有完整数据库备份的信息&#xff0c;包括备份集 ID、数据库名称、备份开始时间和备份文件的物理设备名称&#xff0c;并按备份开始时间降序排列…...

Flutter_学习记录_AppBar中取消leading的占位展示

将leading设置为null将automaticallyImplyLeading设置为false 看看automaticallyImplyLeading的说明&#xff1a; Controls whether we should try to imply the leading widget if null. If true and [AppBar.leading] is null, automatically try to deduce what the leading…...

多省发布!第27届中国机器人及人工智能大赛各赛区比赛通知

01 大赛介绍 中国机器人及人工智能大赛是由中国人工智能学会主办的极具影响力的全国性学科竞赛&#xff0c;旨在推动我国机器人及人工智能技术的创新与应用&#xff0c;促进相关专业的人才培养。作为全国高校学科竞赛A类赛事&#xff0c;该比赛吸引了众多高校和科研机构的积极…...

leetcode199 二叉树的右视图

小问题&#xff1a;if(!q.empty()) 这个条件会导致只处理一层&#xff0c;而不会处理所有层。正确的做法应该是用 while(!q.empty()) 循环处理每一层。 class Solution { public:vector<int> rightSideView(TreeNode* root) {vector<int> res;queue<TreeNode…...

大模型评测框架evalscope、openCompass

一、evalscope使用说明 1、如何使用智增增的接口&#xff1a; VLLM_USE_MODELSCOPETrue evalscope eval \--model qwen2.5-14b-instruct \--api-url https://api.zhizengzeng.com/v1/chat/completions \--api-key skxxx \--eval-type service \--datasets gsm8k \--limit 10 …...

接口自动化——初识pytest

缩写单词含义.passed通过Ffailed失败&#xff08;用例执行时报错&#xff09;Eerror出错&#xff08;fixture执行报错&#xff09;sskipped跳过Xxpassed预期外的通过&#xff08;不符合预期&#xff09;xxfailed预期内的失败&#xff08;符合预期&#xff09; 1.pytest 配置 1…...

SkyWalking实战

1、下载SkyWalking APM 1.手动下载 Downloads | Apache SkyWalkinghttps://skywalking.apache.org/downloads/ 2.链接下载 https://dlcdn.apache.org/skywalking/10.2.0/apache-skywalking-apm-10.2.0.tar.gzhttps://dlcdn.apache.org/skywalking/10.2.0/apache-skywalking-…...

游戏AI实现-GOAP

GOAP原理&#xff1a; GOAP&#xff08;面向目标的行动规划&#xff0c;Goal - Oriented Action Planning&#xff09; 旨在让智能体通过选择一系列行动来达成特定目标。它基于对世界状态的理解&#xff0c;每个行动都有前提条件和效果。智能体通过分析当前世界状态与目标状态…...

Baklib内容中台的核心优势是什么?

智能化知识管理引擎 Baklib的智能化知识管理引擎通过多源数据整合与智能分类技术&#xff0c;实现企业知识资产的自动化归集与动态更新。系统内置的语义分析算法可自动识别文档主题&#xff0c;结合自然语言处理技术生成结构化标签体系&#xff0c;大幅降低人工标注成本。针对…...

windows第二十章 单文档应用程序

文章目录 单文档定义新建一个单文档应用程序单文档应用程序组成&#xff1a;APP应用程序类框架类&#xff08;窗口类&#xff09;视图类&#xff08;窗口类&#xff0c;属于框架的子窗口&#xff09;文档类&#xff08;对数据进行保存读取操作&#xff09; 直接用向导创建单文档…...

eBay多账号安全运营技术体系:从环境隔离到智能风控的工程化实践

一、多账号运营风险模型解析 &#xff08;技术化重构关联检测机制&#xff09; 环境指纹维度&#xff1a; 浏览器指纹参数&#xff1a;Canvas/WebGL渲染特征&#xff08;差异度要求≥98%&#xff09; 设备指纹参数&#xff1a;GPU型号/声卡特征&#xff08;识别准确率92%&…...

《Python Web网站部署应知应会》No4:基于Flask的调用AI大模型的高性能博客网站的设计思路和实战(上)

基于Flask的调用AI大模型的高性能博客网站的设计思路和实战&#xff08;上&#xff09; 摘要 本文详细探讨了一个基于Flask框架的高性能博客系统的设计与实现&#xff0c;该系统集成了本地AI大模型生成内容的功能。我们重点关注如何在高并发、高负载状态下保持系统的高性能和…...

vulnhub-Node1

一、信息收集 1、扫靶机ip arp-scan -l 2、端口扫描 淦&#xff0c;只有22端口和3000端口&#xff0c;访问一下3000端口吧&#xff0c;估计是个网页 nmap -p- -Pn -sC -sV -n 192.168.66.130PORT STATE SERVICE VERSION 22/tcp open ssh OpenSS…...

什么是 OLAP 数据库?企业如何选择适合自己的分析工具

引言&#xff1a;为什么企业需要 OLAP 数据库&#xff1f; 你是否曾经经历过这样的场景&#xff1a; 市场部门急需一份用户行为分析报告&#xff0c;数据团队告诉你&#xff1a;“数据太大了&#xff0c;报表要跑 4 个小时”&#xff1b;业务负责人在会议中提出一个临时性分析…...

计算机视觉准备八股中

一边记录一边看&#xff0c;这段实习跑路之前运行完3DGAN&#xff0c;弄完润了&#xff0c;现在开始记忆八股 1.CLIP模型的主要创新点&#xff1a; 图像和文本两种不同模态数据之间的深度融合、对比学习、自监督学习 2.等效步长是每一步操作步长的乘积 3.卷积层计算输入输出…...

电源系统的热设计与热管理--以反激式充电器为例

前言 反激电源常用于各种电子设备中&#xff0c;比如充电器、适配器等&#xff0c;它们通过变压器进行能量转换。高温环境可能对电子元件造成影响&#xff0c;特别是像MOSFET、二极管、变压器这样的关键部件&#xff0c;导致效率变低&#xff0c;甚至可能导致功能失效。还有安…...

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft 服务器搭建,并实现远程联机,详细教程

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft 服务器搭建&#xff0c;详细详细教程 一、 服务器介绍二、下载 Minecraft 服务端三、安装 JDK 21四、搭建服务器五、本地测试连接六、添加服务&#xff0c;并设置开机自启动 前言&#xff1a; 推荐使用云服务器部署&…...

vue数据两个相同的参数对比只显示一个

vue数据两个相同的参数对比只显示第一个 如每条的rq0/rq1对比data() { return{dataList: [{CurrencyName: "现金",rq0: "2017-10-20 19:22:17",rq1: "2018-02-07 19:48:00",yje: -1179.8},{CurrencyName: "微支付",rq0: "2017-10…...

vue如何实现前端控制动态路由

在 Vue.js 中&#xff0c;动态路由是一种根据不同用户权限或其他因素动态改变路由列表的功能。这种机制允许开发者根据后端提供的权限数据动态渲染前端路由&#xff0c;实现多用户权限系统&#xff0c;不同用户展示不同的导航菜单。 动态路由的配置 动态路由的配置涉及到前端…...

开发环境部署

一、安装Django-5.0.3 1、将已下载的软件通过winscp上传至centos下 2、 安装 [root@hcss-ecs-1e19 ~]# ll total 10372 -rw-r--r-- 1 root root 10620661 Feb 10 10:16 Django-5.0.3.tar.gz [root@hcss-ecs-1e19 ~]# pip3 install Django-5.0.3.tar.gz Processing ./Django-…...

C语言入门教程100讲(0)从了解C语言的发展史开始

文章目录 引言1. C语言的起源2. C语言的诞生3. C语言的标准化4. C语言的进一步发展5. C语言的影响与应用6. C语言的未来结语引言 C语言作为一种高效、灵活且具有广泛应用的编程语言,在计算机科学史上占据着举足轻重的地位。它的设计不仅影响了后来的编程语言,也对操作系统、…...

笔记本电脑更换主板后出现2203:System configuration is invalid,以及2201、2202系统错误的解决

笔记本电脑更换主板后启动出现2203:System configuration is invalid,以及2201、2202系统错误的解决 自用的一台ThinkpadT490笔记本电脑 ,由于主板故障,不得不更换主板,通过某宝购置主板后进行了更换。 具体拆卸笔记本可搜索网络视频教程。 注意: 在更换主板时,注意先拍…...

如何为 Debian 和 Kali 系统更换软件源并更新系统

在 Linux 系统中&#xff0c;软件源&#xff08;Software Repository&#xff09;是获取软件包和更新的核心途径。然而&#xff0c;默认的软件源可能会因为地理位置、网络状况等原因导致下载速度缓慢&#xff0c;甚至无法访问。为了提升系统的软件获取效率&#xff0c;许多用户…...

git:远程仓库拉取到本地,fork到本地,修改后再上传

讲述仓库成员拉取远程仓库&#xff08;即组长的仓库&#xff0c;里面有成员&#xff09;到本地&#xff0c;修改内容再上传的详细步骤&#xff1a; 1.进入仓库&#xff0c;首先fork &#xff08;如不&#xff0c;所作操作会直接对远程仓库进行&#xff0c;不用管理员审核&…...

C++ 中名字的作用域、概念、嵌套与实践(十八)

1. 名字的作用域基本概念 作用域&#xff08;scope&#xff09; 指的是程序中的一个区域&#xff08;通常被花括号 {} 包围&#xff09;&#xff0c;在这里一个名字&#xff08;如变量名、函数名、类名等&#xff09;有其特定含义。 在 同一个作用域 中&#xff0c;一个名字只…...

Go语言nil原理深度解析:底层实现与比较规则

Go语言nil原理深度解析&#xff1a;底层实现与比较规则 引言 在Go语言中&#xff0c;nil 是一个特殊的关键字&#xff0c;用于表示引用类型的“零值”。它在指针、切片、映射、通道、接口和函数等类型中广泛使用。本文将从 底层实现、比较规则、与其他语言的对比 等角度&#…...

使用Java操作Redis

文章目录 常用Redis键操作命令使用Java操作Redis配置 Redis 连接信息创建 Maven 项目结构 操作字符串操作列表操作集合操作散列操作有序集合总结 报错解决办法&#xff1a; 当使用redis-cli连接客户端出现not connected时 使用redis-cli -h 192.168.222.101 -p 6379即可解决 …...

开源的CMS建站系统可以随便用吗?有什么需要注意的?

开源CMS建站系统虽然具有许多优点&#xff0c;但并非完全“随便用”。无论选哪个CMS系统&#xff0c;大家在使用的时候&#xff0c;可以尽可能地多注意以下几点&#xff1a; 1、版权问题 了解开源许可证&#xff1a;不同的开源CMS系统采用不同的开源许可证&#xff0c;如GPL、…...

数据结构:探秘AVL树

本节重点 理解AVL树的概念掌握AVL树正确的插入方法利用_parent指针正确更新平衡因子掌握并理解四种旋转方式&#xff1a;左单旋&#xff0c;右单旋&#xff0c;左右双旋&#xff0c;右左双旋 一、AVL树的概念 AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis&…...

C++ 变量与初始化详解(十五)

1. 变量定义 在 C 中&#xff0c;定义变量的基本形式通常是先写出 类型说明符&#xff08;type specifier&#xff09;&#xff0c;后面紧跟由逗号分隔的一个或多个变量名&#xff0c;最后以分号结束。简单示例如下&#xff1a; int sum 0, value, units_sold 0; Sales_ite…...

【网络协议详解】—— STP 、RSTP、MSTP技术(学习笔记)

一、STP技术工作原理 STP&#xff08;Spanning Tree Protocol&#xff09;生成树协议&#xff08;IEEE 802.1D&#xff09;是一种网络协议&#xff0c;用于在网络拓扑中防止环路的产生。在二层交换网络中&#xff0c;逻辑上阻塞部分接口&#xff0c;实现从根交换机到所有节点的…...

C++中将记录集的数据复制到Excel工作表中的CRange类CopyFromRecordset函数异常怎么捕获

文章目录 一、异常类型及捕获逻辑二、完整代码示例三、关键错误场景与解决方案1. CopyFromRecordset 返回空数据2. COM错误 0x800A03EC3. Excel进程残留4. 内存不足 四、调试与日志记录1. 启用详细日志2. 捕获错误描述3. 调试断点 五、最佳实践 在C中使用 CRange::CopyFromReco…...

综述速读|086.04.24.Retrieval-Augmented Generation for AI-Generated Content A Survey

论文题目&#xff1a;Retrieval-Augmented Generation for AI-Generated Content: A Survey 论文地址&#xff1a;https://arxiv.org/abs/2402.19473 bib引用&#xff1a; misc{zhao2024retrievalaugmentedgenerationaigeneratedcontent,title{Retrieval-Augmented Generation…...