# RocketMQ 实战:模拟电商网站场景综合案例(十一)

news2024/11/9 4:40:31

RocketMQ 实战:模拟电商网站场景综合案例(十一)

一、RocketMQ 实战:模拟电商网站场景综合案例-- web 端项目开发

1、在 shop-order-web 工程模块中,创建 Controller 类 OrderControllre.java


/**
 *   shop\shop-order-web\src\main\java\com\itheima\shop\controller\OrderControllre.java
 *
 *   2024-6-12  创建 Controller 类 OrderControllre.java
 */
package com.itheima.shop.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.api.IOrderService;
import com.itheima.entity.Result;
import com.itheima.shop.pojo.TradeOrder;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/order")
public class OrderControllre {

    @Reference
    private IOrderService orderService;

    @RequestMapping("/confirm")
    public Result confirmOrder(@RequestBody TradeOrder order){
        return orderService.confirmOrder(order);
    }
}

2、在 shop-order-web 工程模块中,创建 启动 类 OrderWebApplication.java


/**
 *   shop\shop-order-web\src\main\java\com\itheima\shop\OrderWebApplication.java
 *
 *   2024-6-12  创建 启动 类 OrderWebApplication.java
 */
package com.itheima.shop;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubboConfiguration
@SpringBootApplication
public class OrderWebApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderWebApplication.class,args);
    }
}

3、在 shop-pay-web 工程模块中,创建 Controller 类 PayController.java


/**
 *   shop\shop-pay-web\src\main\java\com\itheima\shop\controller\PayController.java
 *
 *   2024-6-12  创建 Controller 类 PayController.java
 */
package com.itheima.shop.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.api.IPayService;
import com.itheima.entity.Result;
import com.itheima.shop.pojo.TradePay;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/pay")
public class PayController {

    @Reference
    private IPayService payService;

    @RequestMapping("/createPayment")
    public Result createPayment(@RequestBody TradePay pay){
        return payService.createPayment(pay);
    }

    @RequestMapping("/callBackPayment")
    public Result callBackPayment(@RequestBody TradePay pay) throws Exception {
        return payService.callbackPayment(pay);
    }
}

4、在 shop-pay-web 工程模块中,创建 启动 类 PayWebApplication.java



/**
 *   shop\shop-pay-web\src\main\java\com\itheima\shop\PayWebApplication.java
 *
 *   2024-6-12  创建 启动 类 PayWebApplication.java
 */
package com.itheima.shop;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubboConfiguration
@SpringBootApplication
public class PayWebApplication {

    public static void main(String[] args) {
        SpringApplication.run(PayWebApplication.class,args);
    }
}

二、RocketMQ 实战:模拟电商网站场景综合案例-- 整体联调:Rest 测试准备工作

1、在 shop-order-web 工程模块中,创建 配置 RestTemplate 类 RestTemplateConfig.java


/**
 *   shop\shop-order-web\src\main\java\com\itheima\shop\config\RestTemplateConfig.java
 *
 *   2024-6-12  创建 配置 RestTemplate 类 RestTemplateConfig.java
 */
package com.itheima.shop.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestOperations;
import org.springframework.web.client.RestTemplate;

import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.List;

@Configuration
public class RestTemplateConfig {

    @Bean
    @ConditionalOnMissingBean({ RestOperations.class, RestTemplate.class })
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {

        RestTemplate restTemplate = new RestTemplate(factory);

        // 使用 utf-8 编码集的 conver 替换默认的 conver(默认的 string conver 的编码集为"ISO-8859-1")
        List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
        Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator();
        while (iterator.hasNext()) {
            HttpMessageConverter<?> converter = iterator.next();
            if (converter instanceof StringHttpMessageConverter) {
                iterator.remove();
            }
        }
        messageConverters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));

        return restTemplate;
    }

    @Bean
    @ConditionalOnMissingBean({ClientHttpRequestFactory.class})
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        // ms
        factory.setReadTimeout(15000);
        // ms
        factory.setConnectTimeout(15000);
        return factory;
    }
}

2、在 shop-order-web 工程模块中,创建 application.properties 配置文件。


# shop\shop-order-web\src\main\resources\application.properties

server.host=http://localhost
server.servlet.path=/order-web
# 端口不能冲突
server.port=8080  

# dubbo
spring.application.name=dubbo-order-consumer
spring.dubbo.application.id=dubbo-order-consumer
spring.dubbo.application.name=dubbo-order-consumer
spring.dubbo.registry.address=zookeeper://192.168.25.140:2181;zookeeper://192.168.25.140:2182;zookeeper://192.168.25.140:2183

order.port=8080
shop.order.baseURI=${server.host}:${order.port}${server.servlet.path}
shop.order.confirm=/order/confirm

3、在 shop-pay-web 工程模块中,创建 配置 RestTemplate 类 RestTemplateConfig.java


/**
 *   shop\shop-pay-web\src\main\java\com\itheima\shop\config\RestTemplateConfig.java
 *
 *   2024-6-12  创建 配置 RestTemplate 类 RestTemplateConfig.java
 */
package com.itheima.shop.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestOperations;
import org.springframework.web.client.RestTemplate;

import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.List;

@Configuration
public class RestTemplateConfig {

    @Bean
    @ConditionalOnMissingBean({ RestOperations.class, RestTemplate.class })
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {

        RestTemplate restTemplate = new RestTemplate(factory);

        // 使用 utf-8 编码集的 conver 替换默认的 conver(默认的 string conver 的编码集为"ISO-8859-1")
        List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
        Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator();
        while (iterator.hasNext()) {
            HttpMessageConverter<?> converter = iterator.next();
            if (converter instanceof StringHttpMessageConverter) {
                iterator.remove();
            }
        }
        messageConverters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));

        return restTemplate;
    }

    @Bean
    @ConditionalOnMissingBean({ClientHttpRequestFactory.class})
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        // ms
        factory.setReadTimeout(15000);
        // ms
        factory.setConnectTimeout(15000);
        return factory;
    }
}

4、在 shop-pay-web 工程模块中,创建 application.properties 配置文件。


# shop\shop-pay-web\src\main\resources\application.properties

server.host=http://localhost
server.servlet.path=/pay-web
# 端口不能冲突
server.port=9090

# dubbo
spring.application.name=dubbo-pay-consumer
spring.dubbo.application.id=dubbo-pay-consumer
spring.dubbo.application.name=dubbo-pay-consumer
spring.dubbo.registry.address=zookeeper://192.168.25.140:2181;zookeeper://192.168.25.140:2182;zookeeper://192.168.25.140:2183

pay.port=9090

shop.pay.baseURI=${server.host}:${pay.port}${server.servlet.path}

shop.pay.createPayment=/pay/createPayment

shop.pay.callbackPayment=/pay/callBackPayment

三、RocketMQ 实战:模拟电商网站场景综合案例-- 整体联调:Rest 方式测试下单

1、在 shop-order-web 工程模块中,创建 测试类 OrderWebTest.java


/**
 *   shop\shop-order-web\src\test\java\com\itheima\test\OrderWebTest.java
 *
 *   2024-6-12 创建 测试类 OrderWebTest.java
 */
package com.itheima.test;

import com.itheima.entity.Result;
import com.itheima.shop.OrderWebApplication;
import com.itheima.shop.pojo.TradeOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.RestTemplate;

import java.math.BigDecimal;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = OrderWebApplication.class)
public class OrderWebTest {

    @Autowired
    private RestTemplate restTemplate;

    @Value("${shop.order.baseURI}")
    private String baseURI;

    @Value("${shop.order.confirm}")
    private String confirmOrderPath;

    @Test
    public void confirmOrder(){
        Long coupouId = 345988230098857984L;
        Long goodsId = 345959443973935104L;
        Long userId = 345963634385633280L;

        TradeOrder order = new TradeOrder();
        order.setGoodsId(goodsId);
        order.setUserId(userId);
        order.setCouponId(coupouId);
        order.setAddress("北京");
        order.setGoodsNumber(1);
        order.setGoodsPrice(new BigDecimal(1000));
        order.setShippingFee(BigDecimal.ZERO);
        order.setOrderAmount(new BigDecimal(1000));
        order.setMoneyPaid(new BigDecimal(100));

        Result result = restTemplate.postForEntity(baseURI + confirmOrderPath, order, Result.class).getBody();

        System.out.println(result);
    }
}

2、启动各 service 工程模块的 启动类,进行测试。

在这里插入图片描述
在这里插入图片描述

四、RocketMQ 实战:模拟电商网站场景综合案例-- 整体联调:Rest 方式测试支付下单和支付回调

1、在 shop-pay-web 工程模块中,创建 测试类 PayWebTest.java


/**
 *   shop\shop-pay-web\src\test\java\com\itheima\test\PayWebTest.java
 *
 *   2024-6-12 创建 测试类 PayWebTest.java
 */
package com.itheima.test;

import com.itheima.constant.ShopCode;
import com.itheima.entity.Result;
import com.itheima.shop.PayWebApplication;
import com.itheima.shop.pojo.TradePay;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.RestTemplate;

import java.math.BigDecimal;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = PayWebApplication.class)
public class PayWebTest {

    @Autowired
    private RestTemplate restTemplate;

    @Value("${shop.pay.baseURI}")
    private String baseURI;

    @Value("${shop.pay.createPayment}")
    private String createPaymentPath;

    @Value("${shop.pay.callbackPayment}")
    private String callBackPaymentPath;

    @Test
    public void createPayment(){
        long orderId = 352537369385242624L;  //对应数据库中的 orderId 唯一性
        TradePay tradePay = new TradePay();
        tradePay.setOrderId(orderId);
        tradePay.setPayAmount(new BigDecimal(880));

        Result result = restTemplate.postForEntity(baseURI + createPaymentPath, tradePay, Result.class).getBody();
        System.out.println(result);
    }

    @Test
    public void callBackPayment(){
        long payId = 352542415984402432L;
        long orderId = 352537369385242624L;

        TradePay tradePay = new TradePay();
        tradePay.setPayId(payId);
        tradePay.setOrderId(orderId);
        tradePay.setIsPaid(ShopCode.SHOP_ORDER_PAY_STATUS_IS_PAY.getCode());
        Result result = restTemplate.postForEntity(baseURI + callBackPaymentPath, tradePay, Result.class).getBody();
        System.out.println(result);
    }
}

2、启动各 service 工程模块的 启动类,进行测试。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

五、RocketMQ 实战:模拟电商网站场景综合案例-- 总结

1、案例介绍:

1.1 业务分析

1)下单业务
2)支付业务

1.2 问题分析

2、技术分析

2.1 技术选型:

1)SpringBoot
2)Dubbo
3)Zookeeper
4)RocketMQ
5)Mysql

2.2 SpringBoot 整合 RocketMQ

1)消息生产者
2)消息消费者。

2.3 SpringBoot 整合 Dubbo

1)搭建 Zookeeper 集群
2)RPC 服务接口
3)服务提供者
4)服务消费者。

3、环境搭建

3.1 数据库

1)优惠券表
2)商品表
3)订单表
4)订单商品日志表
5)用户表
6)用户余额日志表
7)订单支付表
8)MQ 消息生产表
9)MQ 消息消费表。

3.2 项目初始化

1)工程浏览

  • shop-api 接口层
  • shop-common 工具工程
  • shop-coupon-service 优惠券服务
  • shop-goods-service 商品服务
  • shop-order-service 订单服务
  • shop-order-web 订单系统
  • shop-parent 父工程
  • shop-pay-service 支付服务
  • shop-pay-web 支付系统
  • shop-pojo 实体类
  • shop-user-service 用户服务。
  • shop-dao 持久层
    2)工程关系:12个系统
  • shop-common 工具工程
  • shop-parent 父工程
  • shop-pojo 实体类
  • shop-dao 持久层
  • web 层 :
  • shop-order-web 订单系统
  • shop-pay-web 支付系统
  • 接口层:shop-api 接口层
  • 服务层:
  • shop-coupon-service 优惠券服务
  • shop-goods- 商品服务
  • shop-order-service 订单服务
  • shop-pay-service 支付服务
  • shop-user-service 用户服务。
  • 储存层:数据库 Mysql
3.3 MyBatis 逆向工程使用

1)代码生成
2)代码导入。

3.4 公共类介绍

1)ID 生成器
2)异常处理类
3)常量类
4)响应实体类。

4、下单业务

4.1 下单基本流程
  • 1)接口定义
  • 2)业务类实现
  • 3)校验订单
  • 4)生成预订单
  • 5)扣减库存
  • 6)扣减优惠券
  • 7)扣减用户余额
  • 8)确认订单
  • 9)小结
4.2 失败补偿机制
  • 1)消息发送方
  • 2)消费接收方
4.3 测试

5、支付业务

5.1 创建支付订单
5.2 支付回调

6、整体联调

6.1 准备工作

1)配置 RestTemplate 类。
2)配置请示地址。

6.2 下单测试
6.3 支付测试。

上一节关联链接请点击:
# RocketMQ 实战:模拟电商网站场景综合案例(十)

环境搭建:数据库表结构介绍–项目工程初始化 查看 请点击:
# RocketMQ 实战:模拟电商网站场景综合案例(三)

mybatis 逆向工程 生成 POJO 类 源文件 和 mapper 映射文件 查看 请点击:
RocketMQ 实战:模拟电商网站场景综合案例(四)

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

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

相关文章

Threejs-09、贴图的加载与环境遮蔽强度设置

1、创建文理加载器 let textureLoader new THREE.TextureLoader();2、加载贴图 // 加载文理 let texture textureLoader.load("./img/image.png") // 加载ao贴图 let aoMap textureLoader.load("./img/image.png");3、创建一个平面 let planeGeomet…

这总商务会议图怎么绘制?一行代码搞定...

今天这篇推文小编给大家介绍一个一直想绘制的图表-议会图(parliament diagrams),当然这也是柱形图系列变形的一种。绘制这种图表也是超级简单的&#xff0c;只需使用R-ggpol包进行绘制即可&#xff0c;当然&#xff0c;改包还提供其他优秀的绘图函数&#xff0c;下面就一起来看…

Final Cut Pro:剪辑之巅,创意无界

Final Cut Pro是一款由Apple推出的专业视频剪辑软件&#xff0c;以其强大的功能和卓越的性能&#xff0c;成为众多影视制作人员、广告设计师和视频编辑师的首选工具。 Final Cut Pro获取 Final Cut Pro提供了丰富的剪辑功能&#xff0c;包括多轨道编辑、精确剪辑控制、实时预览…

AI绘画工具介绍(清晰图例)

一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的各个领域&#xff0c;绘画艺术界也不例外。近年来&#xff0c;AI在绘画领域的应用日益广泛&#xff0c;展现出了令人瞩目的发展趋势。通过深度学习和图像处理技术&#xff…

如何在浏览器书签栏设置2个书签实现一键到达网页顶部和底部

本次设置浏览器为&#xff1a;Chrome浏览器&#xff08;其他浏览器可自行测试&#xff09; 1&#xff0c;随便收藏一个网页到浏览器书签栏 2&#xff0c;右键这个书签 3&#xff0c;修改 4&#xff0c;修改名称 5&#xff0c;修改网址&#xff1a; javascript:(function(…

vue 之 vuex

目录 vuex 是什么 Vuex管理哪些状态呢&#xff1f; Vuex 页面刷新数据丢失怎么解决 1. 使用浏览器的本地存储 2. 使用 Vuex 持久化插件 3. 使用后端存储 注意事项 Vuex 为什么要分模块并且加命名空间 vuex 是什么 vuex 是专门为 vue 提供的全局状态管理系统&#xff0c…

flask南京市旅游景点信息可视化的设计与实现-计算机毕业设计源码02941

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对南京市旅游景点信息可视化等问题&#xff0…

【stable diffusion】ComfyUI扩展安装以及”127.0.0.1拒绝了我们的连接请求“解决记录

扩展安装 虽然大家都推荐将扩展包直接放到extension文件夹的方式&#xff0c;但我还是推荐直接在sd webui的扩展处下载&#xff0c;酱紫比较好维护一点&#xff0c;我个人感觉。 按照上图顺序点击会出现”URLError: <urlopen error [Errno 11004] getaddrinfo failed>”…

C# Winform DPI自适应方案

Winform窗体随着屏幕的DPI缩放,会引起窗体变形及字体变形。 1.设置窗体和自定义用户控件的AutoScaleMode为None 实现目标:禁止窗体因为字体大小缩放变形 因为显示的高分屏,然后操作系统的设置了字体缩放引起的。窗体默认的AutoScaleMode = Font,控件会因为高分屏自动缩放…

算法体系-21 第二十一 暴力递归到动态规划(三)

一 最长回文子串 1.1 描述 给定一个字符串str&#xff0c;返回这个字符串的最长回文子序列长度 比如 &#xff1a; str “a12b3c43def2ghi1kpm” 最长回文子序列是“1234321”或者“123c321”&#xff0c;返回长度7 1.2 分析 1.2.1 先将原传逆序&#xff0c;求原串和反转后的…

复旦测评13家大模型高考数学成绩,字节豆包II卷超GPT-4o夺冠

近日&#xff0c;复旦大学自然语言处理&#xff08;NLP&#xff09;实验室LLMEVAL团队公布了2024 年高考数学大模型评测结果。数据显示&#xff0c;字节豆包在2024高考数学新 II 卷客观题正确率达到74.66%&#xff0c;在13家大模型中排名首位&#xff0c;阿里千问和GPT-4o分列二…

MySQL查询数据库中所有表名表结构及注释以及生成数据库文档

MySQL查询数据库中所有表名表结构及注释 生成数据库文档在后面&#xff01;&#xff01;&#xff01; select t.TABLE_COMMENT -- 数据表注释 , c.TABLE_NAME -- 表名称 , c.COLUMN_COMMENT -- 数据项 , c.COLUMN_NAME -- 英文名称 , -- 字段描述 , upper(c.DATA_TYPE) as …

Python-程序流程控制

目录 1. 分支语句 1.1 if 1.2 if-else 1.3 if-elif-else 2. 循环语句 2.1 while 2.2 for 3.跳转语句 3.1 break 3.2 continue 1. 分支语句 1.1 if aint(input("请输入成绩")) if a>100:print ("牛逼") if a<60:print("不牛逼")1.2 if-e…

2002-2023年款别克君威 君威GS维修手册和电路图资料更新

经过整理&#xff0c;2002-2023年款别克君威 君威GS全系列已经更新至汽修帮手资料库内&#xff0c;覆盖市面上99%车型&#xff0c;包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图…

公司面试题总结(五)

25.谈一谈箭头函数与普通函数的区别&#xff0c;箭头函数主要解决什么问题&#xff1f; 箭头函数与普通函数的区别&#xff1a; ⚫ 语法简洁性&#xff1a; ◼ 箭头函数使用>符号定义&#xff0c;省略了 function 关键字&#xff0c;使得语法更为紧凑。 ◼ 对于单行函…

如何更新 iOS 18 Beta 版本?具体步骤总结

如何更新 iOS 18 Beta 想必有一些用户已经迫不及待的想要知道怎么更新 iOS 18 Beta 版本了吧&#xff0c;下面就给大家总结了具体的操作步骤&#xff1a; 在更新 iOS 18 Beta 版本之前记得我们需要将手机的数据进行备份&#xff0c;大家可以自行选用备份软件比如 iCloud 等。…

mtk低压充电关机充电关机动画显示

lk下充电&#xff1a; 在启动时读取电压小于BATTERY_LOWVOL_THRESOLD便会到lk循环充电&#xff0c;这里的BATTERY_LOWVOL_THRESOLD是3.45v 1、mtk_battery.c&#xff1a; 通过fg计算电池充电电流&#xff0c;电池温度等2、mtk_charger_intf.c&#xff1a; 在mtk_charger_init…

jsl+rs???企业信用系统,秒了~

文章目录 写在前面流程分析521412 加速乐第一次请求第二次请求第三次请求 瑞数看看效果秒了~ 本文仅供参考学习使用&#xff0c;不得用于非法盈利&#xff0c;如有侵权&#xff0c;请联系作者删 写在前面 好久没更新了&#xff0c;送给有缘人 目标网站&#xff1a;aHR0cHM6Ly9…

周四 A股震荡走低,行情总结

文章正文 周四&#xff0c;A股全日震荡走低&#xff0c;上证指数收跌0.28%&#xff0c;深成指跌近0.创业板指跌0.09%。猪肉、有色金属、中药、磷化工、煤炭、房地产、白酒行业跌幅靠前。科特估概念股掀起20cm涨停潮&#xff0c;半导体、机器人、消费电子、光伏、虚拟电厂概念股…

C++ ─── STL 以及string

前言&#xff1a;什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架 STL的六大组件 1. 为什么学习string类&#xff1f; 1.1 C语言中的字符…