Dubbo3简单使用

news2024/11/27 20:58:26

Dubbo3简单使用

👉 使用Spring Boot实现Dubbo3,请参见以下地址。

# Dubbo3官网地址
https://cn.dubbo.apache.org/zh/

# 使用SpringBoot实现Dubbo3的地址
https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/quick-start/spring-boot/

# 该项目的git地址
https://github.com/MasonYyp/mydubbo

1 同一个项目中创建多个应用

1.1 创建空项目

(1)创建空项目

(2)提示错误

⚠️ 注意:会提示下面错误,点击“OK”即可。

在这里插入图片描述

(3)空项目创建完成

在这里插入图片描述

1.2 创建应用模块

(1)创建模块

在这里插入图片描述

(2)创建Maven

选择Maven模块,点击“Next”。

在这里插入图片描述

(3)设置应用信息

设置应用信息后,点击“Finish”即可。

在这里插入图片描述

(4)创建完成

在这里插入图片描述

1.3 创建其他

创建其他应用的方法和上面的方法类似,分别创建Dubbo的服务提供者(duprovider)和服务消费者(duconsumer)。

  • GroupId: com.mason
  • Version: 1.0
  • 创建应用的目录:mydubbo目录下

分别在应用下创建java包(选择Module时创建Maven默认不会创建java包)。

应用名称(ch)应用名称(en)包名备注
公共模块ducommoncom.mason.ducommon为其他模块提供公共接口
服务提供者duprovidercom.mason.duprovider提供服务
服务消费者duconsumercom.mason.duconsumer消费服务

应用创建完成后如下

在这里插入图片描述

2 软件版本选择

(1)Spring Cloud Alibaba版本说明

https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

(2)Spring Cloud版本说明

# 介绍了相应的版本
https://spring.io/projects/spring-cloud#overview

# 介绍了稳定版(含有GA标识)
https://spring.io/projects/spring-cloud#learn

(3)版本选择

⚠️ 组件版本很重要,需要慎重选择,Dubbo3需要配合Nacos2使用。

软件版本号
Spring CloudHoxton.SR12
Spring Boot2.3.12.RELEASE
Spring Cloud Alibaba2.2.9.RELEASE
Sentinel1.8.5
Nacos2.1.0
RocketMQ4.9.4
Seata1.5.2
Dubbo3.1.4

3 安装nacos

3.1 Nacos安装参考地址

https://blog.csdn.net/make_progress/article/details/128855472

3.2 安装MySQL

# 创建网桥
docker network create --driver bridge du_net

# 下载MySQL
docker pull mysql:5.7.34

# 创建数据库
docker run -itd --name du_mysql \
--net du_net \
--restart=always \
-p 3306:3306 \
-v /home/dubbo/mysql/conf:/etc/mysql/conf.d \
-v /home/dubbo/mysql/data:/var/lib/mysql \
-v /home/dubbo/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7.34

3.3 初始化Nacos数据库


# 解压“nacos-server-2.1.0.zip”文件,将“nacos-server-2.1.0/nacos/conf”目录中的“nacos-mysql.sql”复制到容器中
docker cp nacos-mysql.sql du_mysql:/home/

# 进入容器
docker exec -it du_mysql /bin/bash

# 进入MySQL数据库,输入密码后进入MySQL
mysql -u root -p

# 创建数据库
create database nacos_config;

# 切换数据库
use nacos_config

# 导入nacos配置信息到数据库
source /home/nacos-mysql.sql

3.4 安装Nacos

# 下载Nacos镜像
docker pull nacos/nacos-server:v2.1.0

# 安装nacos
# 注意:Nacos2比Nacos1多开9848、9849两个端口需求全部开放,否则应用无法注册到Nacos
docker run -itd --name du_nacos \
--net du_net \
--restart=always \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--env MODE=standalone \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=du_mysql \
--env MYSQL_SERVICE_PORT=3306 \
--env MYSQL_SERVICE_USER=root \
--env MYSQL_SERVICE_PASSWORD=123456 \
--env MYSQL_SERVICE_DB_NAME=nacos_config \
nacos/nacos-server:v2.1.0

访问Nacos

# 地址
http://192.168.108.200:8848/nacos

账号:nacos
密码:nacos

4 公共模块

4.1 项目截图

在这里插入图片描述

4.2 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.mason</groupId>
    <artifactId>ducommon</artifactId>
    <version>1.0</version>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>

        <!-- Parse json -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>

        <!-- Init the entity -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

</project>

4.3 服务层service下接口文件

service包下文件

package com.mason.ducommon.service;

public interface TestService {

    public String getInfo(String message);
}

5 服务提供者

5.1 项目截图

在这里插入图片描述

5.2 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.mason</groupId>
    <artifactId>duprovider</artifactId>
    <version>1.0</version>

    <properties>
        <java.version>11</java.version>
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
        <spring.cloud.alibaba.version>2.2.9.RELEASE</spring.cloud.alibaba.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>3.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>3.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 引入自定义的公共模块 -->
        <dependency>
            <groupId>com.mason</groupId>
            <artifactId>ducommon</artifactId>
            <version>1.0</version>
        </dependency>

    </dependencies>

    <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>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

5.3 yml文件

服务提供者做了3个节点,yml文件有“application-node1.yml,application-node2.yml,application-node3.yml”

application-node1.yml

server:
  port: 8081

spring:
  # 配置注册在Nacos中的应用名称
  application:
    name: app-duprovider

  cloud:
    # 设置Nacos服务注册地址
    nacos:
      discovery:
        server-addr: 192.168.108.200:8848

dubbo:
  # 设置Dubbo服务的应用名,如果不设置此应用名默认为应用名,此外默认为“app-duprovider”
  application:
    name: dubbo-duprovider

  # 设置Dubbo协议信息
  protocol:
    name: dubbo
    # 端口可以设置为“-1”,表示端口自增长
    port: 9081

  # 设置注册地址
  registry:
    address: nacos://192.168.108.200:8848

  # 设置服务超时
  provider:
    timeout: 3000

management:
  endpoints:
    web:
      exposure:
        include: '*'

application-node2.yml

server:
  port: 8082

spring:
  application:
    name: app-duprovider

  cloud:
    nacos:
      discovery:
        server-addr: 192.168.108.200:8848

dubbo:
  application:
    name: dubbo-duprovider
  protocol:
    name: dubbo
    port: 9082

  registry:
    address: nacos://192.168.108.200:8848

  provider:
    timeout: 3000

management:
  endpoints:
    web:
      exposure:
        include: '*'

application-node3.yml

server:
  port: 8083

spring:
  application:
    name: app-duprovider

  cloud:
    nacos:
      discovery:
        server-addr: 192.168.108.200:8848

dubbo:
  application:
    name: dubbo-duprovider
  protocol:
    name: dubbo
    port: 9083

  registry:
    address: nacos://192.168.108.200:8848

  provider:
    timeout: 3000

management:
  endpoints:
    web:
      exposure:
        include: '*'

5.4 controller

此处的controller的作用是查看服务是否启动,与Dubbo提供服务无关,可以不要controller。

DubboController.java

package com.mason.duprovider.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/provider")
public class DubboController {

    @Value("${server.port}")
    private String port;

    @RequestMapping("/getdata")
    public String getData(){
        return "Dubbo " + this.port;
    }
}

5.5 service

提供Dubbo服务,实现公共模块(ducommon)中的服务接口。

Dubbo在新版本中使用@DubboService,旧版本中使用@Service,将Dubbo服务注册到注册中心。

TestServiceImpl.java

package com.mason.duprovider.service;

import com.mason.ducommon.service.TestService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Value;


@DubboService
public class TestServiceImpl implements TestService {

    @Value("${server.port}")
    private String port;

    @Override
    public String getInfo(String message) {
        return "Service " + this.port + message;
    }
}

5.6 启动类

DuproviderApplication.java

⚠️ 注意:需要在启动类上,添加“@EnableDubbo"注解

package com.mason.duprovider;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class DuproviderApplication {

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

}

5.7 访问controller的服务

# 访问地址
http://127.0.0.1:8081/provider/getdata

浏览器结果

在这里插入图片描述

Nacos中结果

在这里插入图片描述

6 服务消费者

6.1 项目截图

在这里插入图片描述

6.2 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.mason</groupId>
    <artifactId>duconsumer</artifactId>
    <version>1.0</version>

    <properties>
        <java.version>11</java.version>
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
        <spring.cloud.alibaba.version>2.2.9.RELEASE</spring.cloud.alibaba.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>3.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>3.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 引入自定义的公共模块 -->
        <dependency>
            <groupId>com.mason</groupId>
            <artifactId>ducommon</artifactId>
            <version>1.0</version>
        </dependency>

    </dependencies>

    <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>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

6.3 yml文件

服务消费者也做了3个节点,yml文件有“application-node1.yml,application-node2.yml,application-node3.yml”

application-node1.yml

server:
  port: 8091

spring:
  # 配置注册在Nacos中的应用名称
  application:
    name: app-duconsumer

  cloud:
    # 设置Nacos服务注册地址
    nacos:
      discovery:
        server-addr: 192.168.108.200:8848

dubbo:

  # 此处可以不设置Dubbo服务的应用名,因为没有注册Dubbo服务
  application:
  name: dubbo-duprovider

  # 设置Dubbo协议信息
  protocol:
    name: dubbo
    # 端口可以设置为“-1”,表示端口自增长
    port: 9091

  # 设置注册地址
  registry:
    address: nacos://192.168.108.200:8848

  # 设置服务超时
  provider:
    timeout: 3000

management:
  endpoints:
    web:
      exposure:
        include: '*'

application-node2.yml

server:
  port: 8092

spring:
  application:
    name: app-duconsumer

  cloud:
    nacos:
      discovery:
        server-addr: 192.168.108.200:8848

dubbo:

  application:
  name: dubbo-duprovider

  protocol:
    name: dubbo
    port: 9092

  registry:
    address: nacos://192.168.108.200:8848

  provider:
    timeout: 3000

management:
  endpoints:
    web:
      exposure:
        include: '*'

application-node3.yml

server:
  port: 8093

spring:
  application:
    name: app-duconsumer

  cloud:
    nacos:
      discovery:
        server-addr: 192.168.108.200:8848

dubbo:

  application:
  name: dubbo-duprovider

  protocol:
    name: dubbo
    port: 9093

  registry:
    address: nacos://192.168.108.200:8848

  provider:
    timeout: 3000

management:
  endpoints:
    web:
      exposure:
        include: '*'

6.4 controller

控制层,为用户提供服务。

DubboController.java

package com.mason.duconsumer.controller;

import com.mason.duconsumer.service.TestServiceRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/consumer")
public class DubboController {

    @Autowired
    private TestServiceRequest testServiceRequest;

    @RequestMapping("/getdata")
    public String getData(){
        return this.testServiceRequest.getInfo();
    }

}

6.5 service

服务层,消费Dubbo服务提供者提供的服务。

Dubbo在新版本中使用@DubboReference,旧版本中使用@Reference,消费注册中心的Dubbo服务。

TestServiceRequest.java

package com.mason.duconsumer.service;

import com.mason.ducommon.service.TestService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;


@Service
public class TestServiceRequest {

    @DubboReference
    private TestService testService;

    public String getInfo() {
        return this.testService.getInfo(" -- Hello Dubbo");
    }
}

6.6 启动类

DuconsumerApplication.java

package com.mason.duconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class DuconsumerApplication {

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

}

6.7 访问controller的服务

# 访问地址
http://127.0.0.1:8081/consumer/getdata

浏览器中的结果

在这里插入图片描述

Nacos中结果

在这里插入图片描述

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

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

相关文章

C语言位域(位段)详解

有些数据在存储时并不需要占用一个完整的字节&#xff0c;只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态&#xff0c;用 0 和 1 表示足以&#xff0c;也就是用一个二进位。正是基于这种考虑&#xff0c;C语言又提供了一种叫做位域的数据结构。在结构体定义…

在CANoeCANalyzer中“在线回放”CAN Log.asc/blf文件

案例背景&#xff08;共11页精讲&#xff09;&#xff1a; 该篇博文将告诉您&#xff0c;在CANoe/CANalyzer中&#xff0c;“Online在线”模式下&#xff0c;回放一个CAN Log.asc/blf文件&#xff0c;重现那时CAN网络中CAM Message/报文的收发过程&#xff0c;让ECU在该环境下…

面试题:Redis常用数据结构

1 string基本编码方式&#xff0c;基于简单动态字符串(SDS)实现&#xff0c;存储上线为512mb.如果存储的SDS长度小于44字节&#xff0c;则会采用EMBSTR编码&#xff0c;此时object head与SDS是一段连续空间。申请内存时只需要调用一次内存分配函数&#xff0c;效率更高。如果存…

【官方 | 计算机二级Python教程】第九章:Python标准库概览

【官方 | 计算机二级Python教程】第九章&#xff1a;Python标准库概览参考书目第九章&#xff1a;Python标准库概览本章知识导图10.1 turtle库10.2 random库10.3 time库习题本文代码编译环境及版本更新日志参考书目 拜读的是计算机等级考试官方推荐教程 《全国计算机等级考试二…

JavaScript入门

介绍:JavaScript(通常缩写为JS)是一门基于原型和头等函数的多范式高级解释型编程语言, 它支持面向对象程序设计、指令式编程和函数式编程。它提供方法来操控文本、数组、日期和正则表达式等。不支持I/O, 比如网络、存储和图形等, 但这些都可以由它的宿主环境提供支持。目前它被…

以太网知识-GMII / RGMII接口

今天和海翎光电的小编一起分析MII/RMII/SMII&#xff0c;以及GMII/RGMII/SGMII接口的信号定义&#xff0c;及相关知识&#xff0c;同时小编也对RJ-45接口进行了总结&#xff0c;分析了在10/100模式下和1000M模式下的连接方法。GMII 接口分析GMII接口提供了8位数据通道&#xff…

“青春树儿童摄影网”首页制作

“青春树儿童摄影网”首页制作一、实验名称&#xff1a;二、实验日期&#xff1a;三、实验目的&#xff1a;四、实验内容&#xff1a;五、实验步骤&#xff1a;六、实验结果&#xff1a;七、源程序&#xff1a;八、心得体会&#xff1a;一、实验名称&#xff1a; “青春树儿童…

Nginx转发http到https和开机自动启动

场景&#xff1a; 以下都是基于windows系统&#xff08;ip为虚构&#xff09; 1.ip:172.16.54.55需要访问172.16.54.57的接口服务&#xff0c;来查看机械臂的运行状况 2.存在网络隔离&#xff0c;172.16.54.55无法直接访问172.16.54.57 3.172.16.54.56与172.16.54.57是机械…

reac面试题

1.React有什么特点&#xff1f;&#xff08;react的主要功能有哪些&#xff1f;&#xff09; 它用于虚拟DOM&#xff0c;组件化设计模式&#xff0c;声明式代码&#xff0c;单向数据流&#xff0c;使用jsx描述信息等特点 2.什么是组件化设计模式 复用的代码可以抽成组件共同…

VS Code 1.75 发布!

欢迎使用 2023 年 1 月版的 Visual Studio Code。希望您喜欢此版本中的许多更新&#xff0c;其中一些主要亮点包括&#xff1a;配置文件、VS Marketplace 签名、辅助功能改进、更轻松地调整多视图大小、树视图搜索历史、新的 Git 命令等等。让我们一起看看吧&#xff01; 配置文…

真实还原项目案例

真实模拟项目案例&#xff1a; 核心和出口用ospf&#xff0c;出口ospf路由用 default-route-advertise always 解决默认路由。 其它的都是常规的就不说了&#xff0c;都在配置里看配置。 出口路由配置&#xff1a; [H3C]dis current-configuration version 7.1.064, Release 04…

中国大学mooc 机器人操作系统讲义以及部分笔记

这里写目录标题二进制与源码包1.7 安装RoboWare Studio新的连接配套代码 官方看了一下课程官方的讲义连接&#xff0c;似乎很多页面已经丢失&#xff1f;或者是未授权&#xff1f;二进制与源码包 https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/chapter…

Web3中文|太心急!谷歌匆忙上线自家“ChatGPT”导致市值蒸发逾千亿美元

谷歌想证明它可以在AI竞赛中与微软抗衡&#xff0c;创建一个新的人工智能搜索引擎&#xff0c;但一个错误回答最终导致母公司 Alphabet 的市场损失超过千亿美元。 低开低走的美股市场 周三&#xff0c;美股三大指数低开低走。道琼斯指数收盘下跌207.68点&#xff0c;跌幅0.61%…

设计模式之单例模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、单例模式是什么&#xff1f; 单例模式是一种创建型的软件设计模式&#xff0c;在工程项目中非常常见。通过单例模式的设计&am…

具有大部分相似的项目之间的项目整合

1.将多个项目文件合并&#xff0c;如&#xff1a;c2文件夹和c3文件夹不同&#xff0c;其余文件都是可以一起用的 2. router/index.js (1) 声明 公用路由&#xff0c;如 const common [{// :xxxx 代表任意匹配&#xff08;输啥都可以匹配&#xff09;path: /:channel/login,c…

html 浏览器存储方式

浏览器有三种本地存储方式&#xff1a; 1、localstorage 2、sessionStorage 3、cookie 浏览器 F12 打开调试模式&#xff0c;可以看到&#xff1a; 点击对应域名&#xff0c;可以看到当前域名下存储的数据&#xff0c;是以key&#xff0c;value形式存储的。 三种方式的共同…

某程序员去华为面试,因为错了一道题而被淘汰

题目有一道数学的逻辑题&#xff0c;这种提一般智商测试或者公务员考试中经常见到&#xff0c;传说华为有道面试题是这样的&#xff0c;求出下划线的数字应该是多少&#xff1f;请准备好纸和笔&#xff0c;思考10分钟&#xff0c;看看你能否得出正确答案。1分钟后。。。2分钟后…

MySQl学习(从入门到精通11)

MySQl学习&#xff08;从入门到精通11&#xff09;第 14 章_视图1. 常见的数据库对象2. 视图概述2. 1 为什么使用视图&#xff1f;2. 2 视图的理解3. 创建视图3. 1 创建单表视图3. 2 创建多表联合视图3. 3 基于视图创建视图4. 查看视图5. 更新视图的数据5. 1 一般情况5. 2 不可…

餐饮企业数据可视化大屏(智慧餐饮)

随着信息技术的深入发展&#xff0c;数据大屏的适用场景日益广泛&#xff0c;集工作汇报、实时监控和预测分析等功能于一身。 数据可视化的本质是视觉对话&#xff0c;数据可视化将数据分析技术与图形技术结合&#xff0c;清晰有效地将分析结果信息进行解读和传达。 当前很多餐…

第八天字符串

344.反转字符串力扣题目链接(opens new window)编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中…