Dubbo(超级无敌认真好用,万字收藏篇!!!!)

news2024/9/20 16:43:35

文章目录

  • Dubbo
    • 前言
      • 大型互联网架构目标
      • 集群和分布式
        • 集群
        • 分布式
        • 架构演进
    • 1 Dubbo概述
      • 1.1 Dubbo概念
      • 1.2 Dubbo架构图
    • 2 Dubbo快速入门
      • 2.1 Zookeeper的安装
      • 2.2 springBoot整合Dubbo+Zookeeper
        • 2.2.1 创建项目Dubbo--provider
        • 2.2.2 创建项目Dubbo--consumer
        • 2.2.3 测试
    • 3 Dubbo高级特性
      • 3.1 dubbo-admin安装
        • 3.1.1 准备环境
        • 3.1.2 下载解压 Dubbo-Admin
        • 3.1.3 在 dubbo-admin-develop 目录执行打包命令
        • 3.1.4 启动后端
        • 3.1.5 启动前端
        • 3.1.6 进入dubbo-admin ui界面
      • 3.2 dubbo-admin的简单使用
        • 3.2.1 服务查询
        • 3.2.2 服务测试
      • 3.3 序列化
        • 3.3.1 创建model模块,里面定义一个User类
        • 3.3.2 在dubbo--provider模块调用该类
        • 3.3.3 在dubbo-consumer模块调用该类
        • 3.3.4 运行测试
      • 3.4 地址缓存
      • 3.5 超时与重试
      • 3.6 多版本
      • 3.7 负载均衡
      • 3.8 集群容错
      • 3.9 服务降级

Dubbo

前言

大型互联网架构目标

传统项目:面向企业,如OA( 办公自动化系统 ),HR( 人力资源 ),CRM( 客户资源管理系统 )…

互联网项目:面向个人用户,如淘宝,京东,微信…

  • 用户体验:美观,功能,速度,稳定…

互联网项目特点:①用户多②流量大,并发高③海量数据④易受攻击无⑤功能繁琐⑥变更快

大型互联网项目架构目标

  • 高性能:提供快速的访问体验。
  • 高可用:网站服务一直可以正常访问。
  • 可伸缩:通过硬件增加/减少,提高/降低处理能力。
  • 高可扩展:系统间耦合低,方便的通过新增/移除方式,增加/减少新的功能/模块。
  • 安全性:提供网站安全访问和数据加密,安全存储等策略。
  • 敏捷性:随需应变,快速响应。

衡量性能指标

  • 响应时间:指执行一个请求从开始到最后收到响应数据所花费的总体时间。

  • 并发数:指系统同时能处理的请求数量。

    • 并发连接数:指的是客户端向服务器发起请求,并建立了TCP连接。每秒钟服务器连接的总TCP数量

    • 请求数:也称为QPS(Query Per Second) 指每秒多少请求.

    • 并发用户数:单位时间内有多少用户

  • 吞吐量:指单位时间内系统能处理的请求数量。

    • QPS:Query Per Second 每秒查询数
    • TPS:Transactions Per Second 每秒事务数。
    • 一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
    • 一个页面的一次访问,只会形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,就会有多个QPS

集群和分布式

集群

一个项目部署在多个服务器上

集群的目的就是为了,增加服务器缓解客户端的请求压力。

  • 特点:

    • 可扩展性:集群的性能不限制于单一的服务实体,新的服务实体可以动态的添加到集群,从而增强集群的性能。

    • 高可用行:一台服务器的宕机不会影响整体的使用。

    • 高可管理:管理部署服务器时,由于每台服务器都是一样的,由此部署难度小,就像单台机器一样

  • 必须具备的能力

    • 负载均衡:负载均衡把任务比较均匀的分布到集群环境下的计算和网络资源,以提高数据吞吐量。
    • 错误恢复:如果集群中的某一台服务器由于故障或者维护需要无法使用,资源和应用程序将转移到可用的集群节点上。这种由于某个节点的资源不能工作,另一个可用节点中的资源能够透明的接管并继续完成任务的过程,叫做错误恢复。
  • 缺点

    • 当业务量到达一定程度时,单纯的增加服务器不能显著的提高性能。

分布式

将一个项目分为多个子项目,部署在多个服务器上

分布式目的就是为了解决业务量过大,代码量过于庞大,维护困难等问题,产生的。

引入分布式系统,既方便了代码的测试与维护,也方便了开发,不会有各个子项目之间的冲突

  • 特点:

    • 并发能力提高:请求通过 Nginx 负载均衡被分发到不同的服务器上,运行同样代码的服务器可以有 1 台或 N 台,通常情况下会根据实际用户访问量随时增加机器,无论是数据库或者服务,都可以做到随时水平扩展。
      比如双 11 活动,平时订单少 50 台机器就够了,到了 11 订单量剧增,服务器增加到 100 台,每台机器之间相互独立,互不影响。
    • 低延迟:服务器部署在各地,当一个用户发送请求,会被分发到离自己IP最近的城市。
  • 缺点

    • 分布式服务依赖网络

    • 维护成本高

    • 一致性,可用性,分区容错性无法同时满足

      一致性©:在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)

    可用性(A):保证每个请求不管成功或者失败都有响应。

    分区容忍性§:系统中任意信息的丢失或失败不会影响系统的继续运作。

架构演进

单体架构
垂直架构
分布式架构
SOA架构
微服务架构
  • 单体架构

    多个模块放在一个应用程序,部署集群(多机单体架构),部署在一个服务器(单机单体架构)

    优点:

    • 简单:开发部署都很方便,小型项目首选

    缺点:

    • 项目启动慢
    • 可靠性差
    • 可伸缩性差
    • 扩展性和可维护性差
    • 性能低
  • 垂直架构

    单体架构中多个模块拆分为多个独立的项目,形成多个独立的单体架构

    优点

    • 略微解决了单体的架构的缺点

    缺点

    • 重复功能过多,用户表发生变化,都得变化
  • 分布式架构

    将公共业务(重复)模块抽取出来,其他模块调用该模块,以实现服务的共享和重用。

    RPC: Remote Procedure Call远程过程调用。有非常多的协议和技术来都实现了RPC的过程。比如: HTTP REST风格,JavaRMI规范、WebService SOAP协议、 Hession等等。

    优点

    • 解决垂直架构重复功能过多

    缺点

    • 服务方一旦改变,所有调用方都需要改变
  • SOA架构

    SOA:(Service-Oriented Architecture,面向服务的架构)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。

  • 微服务架构

    • 微服务架构是在SOA上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。

    • 微服务架构= 80%的SOA服务架构思想+100%的组件化架构思想+80%的领域建模思想。

    • 特点:

    • 服务实现组件化:开发者可以自由选择开发技术。也不需要协调其他团队。

    • 服务之间交换一般使用REST API。

    • 去中心化:每个微服务有自己私有的数据库持久化业务数据。

    • 自动化部署:把应用拆分成一个一个独立的单个服务,方便自动化部署,测试,运维。

1 Dubbo概述

1.1 Dubbo概念

  • Dubbo是阿里巴巴公司(已贡献给apache)开源的一个高性能,轻量级的Java RPC框架

    RPC:远程过程调用

  • 致力于提供高性能透明化的RPC远程服务调用方案,以及SOA服务治理方案

1.2 Dubbo架构图

在这里插入图片描述

  • 角色

    服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。

    服务消费者(Consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

    注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者

    监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
    容器(Container):服务提供者所在的容器

  • 消费者要去调用 服务提供者 ,但是不能直接调用

    1. 服务提供者需要运行在Container中,将服务提供者启动起来

    2. 启动起来后,然后向注册中心注册自己的服务

    3. 消费者发现从注册中心发现服务

    4. 消费者从注册中心获取服务,注册中心返回服务

    5. 拿到服务路径后,消费者调用服务生产者

    6. 监控中心监控服务生产者和消费者的调用次数和调用时间

2 Dubbo快速入门

2.1 Zookeeper的安装

使用Zookper作为注册中心

  1. 安装Zookeeper,解压

在官网http://zookeeper.apache.org/下载zookeeper安装包.

在这里插入图片描述

  1. 进入解压文件,进入conf目录下,备份zoo_example.cfg并 将zoo_example.cfg重命名为zoo.cfg

在这里插入图片描述

  1. 修改配置文件

    在这里插入图片描述

  2. 配置系统环境变量

在这里插入图片描述

  1. cmd里面输入zkserver命令启动Zookeeoer

    在这里插入图片描述

2.2 springBoot整合Dubbo+Zookeeper

2.2.1 创建项目Dubbo–provider

  • 引入依赖

        <!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <!--zookeeper版本一定要匹配! -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>2.7.8</version>
        </dependency>
    
  • 配置Dubbo

    server:
      port: 8081
    dubbo:
      registry:
        address: zookeeper://127.0.0.1:2181
      application:
        name: dubbo-provider
      protocol:
        port: 20880
      scan:
        base-packages: com.example.dubboprovider.service
    
  • 创建Service层

    ProviderUser

    public interface ProviderUserService {
          String getName();
      }
    

    ProviderUserServiceImpl

    @DubboService
    public class ProviderUserServiceImpl implements ProviderUserService {
        @Override
        public String getName() {
            System.out.println("======dubbo接口被调用了======");
            return "DubboTest";
        }
    }
    
  • DubooConsumerApplication配置运行类

    @SpringBootApplication
    @EnableDubbo //开启Dubbo
    public class DubooConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(DubooConsumerApplication.class, args);
        }
    }
    

2.2.2 创建项目Dubbo–consumer

  • 引入依赖

        <!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <!--zookeeper版本一定要匹配! -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>2.7.8</version>
        </dependency>
    	<!--生产者依赖-->
    	<dependency>
            <groupId>com.example</groupId>
            <artifactId>Dubbo--provider</artifactId>
            <version>0.0.1-SNAPSHOT</version></dependency>
    
  • 配置yml文件

    server:
      port: 8082
    dubbo:
      registry:
        address: zookeeper://127.0.0.1:2181
      application:
        name: dubbo-consumer
      protocol:
        port: 20881
    #    协议名字好像为dubbo
        name: dubbo
      scan:
        base-packages: com.example.dubooconsumer.service
    
  • Service层

    ConsumerUserService

    public interface ConsumerUserService {
        String userName();
    }
    
    

    ConsumerUserServiceImpl

    @DubboReference远程注入

    • 从zookeeper注册中心获取userService的访问url
    • 进行远程调用RPC
    • 将结果封装为一个代理对象,给变量赋值
    @DubboService
    public class ConsumerUserServiceImpl implements ConsumerUserService 	{
    	  @DubboReference
    	  private ProviderUserService providerUserService;
    	  
    	  @Override
     	 public String userName() {
     	     return providerUserService.getName();
     		 }
    }
    
    
  • 编写 UserController

    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private ConsumerUserService consumerUserService;
    
        @GetMapping("/user_name")
        public String userName(){
            return consumerUserService.userName();
        }
    }
    

2.2.3 测试

  1. 启动 zookeeper 服务器

在这里插入图片描述

  1. 启动服务提供者-Dubbo-provider

IDEA 启动服务提供者

在这里插入图片描述

  1. 启动服务消费者 -Dubbo-consumer

IDEA 启动服务消费者

在这里插入图片描述

3 Dubbo高级特性

3.1 dubbo-admin安装

dubbo-admin管理平台,是图形化的服务管理页面。

  • 从注册中心中获取到所有的提供者/消费者进行配置管理

  • 路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能

  • dubbo-admin是一个前后端分离的项目。前端使用vue,后端使用springboot

  • 安装dubbo-admin其实就是部署该项目

3.1.1 准备环境

  • jdk,Maven,node.js

3.1.2 下载解压 Dubbo-Admin

进入github,搜索dubbo-admin (https://github.com/apache/dubbo-admin)

在这里插入图片描述

3.1.3 在 dubbo-admin-develop 目录执行打包命令

mvn clean package

在这里插入图片描述

3.1.4 启动后端

切换到目录 dubbo-Admin-develop\dubbo-admin-distribution\target>

执行java -jar .\dubbo-admin-0.5.0-SNAPSHOT.jar

在这里插入图片描述

3.1.5 启动前端

dubbo-admin-ui 目录下

执行命令npm run dev

在这里插入图片描述

3.1.6 进入dubbo-admin ui界面

地址栏输入 http://localhost:38082/

在这里插入图片描述

  • 账号密码都是root

在这里插入图片描述

3.2 dubbo-admin的简单使用

3.2.1 服务查询

*代表查询所有服务

在这里插入图片描述

点击详情界面,主要分为3个区域

  • 基础信息: 主要包含服务的基础信息比如服务名称、应用名称等
  • 服务信息: 主要包含了服务的ip地址,端口号,注册来源,超时时间,序列化方式,权重和操作
  • 元数据:主要包括服务的方法名,参数列表,返回值

在这里插入图片描述

3.2.2 服务测试

在这里插入图片描述

3.3 序列化

两个资源/网络之间传递数据,需要通过流的管道(二进制)的方式来传递

  • dubbo内部已经将序列化和反序列化的过程内部封装了

  • 我们只需要在定义model类时实现serializable接口即可

  • 一般会定义一个model模块,让生产者消费者都依赖该模块

3.3.1 创建model模块,里面定义一个User类

不继承Serializable接口

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
}

3.3.2 在dubbo–provider模块调用该类

  • 引入依赖
      <dependency>
            <groupId>com.example.dubbo_model</groupId>
            <artifactId>Dubbo--model</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
  • Service调用

ProviderUserService

public User getUserById(int user_id);

ProviderUserServiceImpl

  @Override
    public User getUserById(int user_id) {
        return new User(1,"xiaowang","123456");
    }

3.3.3 在dubbo-consumer模块调用该类

  • Service层

ConsumerUserService

public User getUserById(int user_id);

ConsumerUserServiceImpl

   @Override
    public User getUserById(int user_id) {
        return providerUserService.getUserById(user_id);
    }
  • Controller层
 @GetMapping("/getUserById")
    public User getUserById(int user_id) {
        return consumerUserService.getUserById(user_id);
    }

3.3.4 运行测试

报错

java.lang.IllegalStateException: Serialized class com.dubbo.model.User must implement java.io.Serializable

给model-user实现序列化接口

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
    private Integer id;
    private String username;
    private String password;
}

成功

前端页面得到User对象

{"id":1,"username":"xiaowang","password":"123456"}

3.4 地址缓存

注册中心挂了,服务是否可以正常访问?

  • 可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。
  • 当服务提供者地址发生变化时,注册中心会通知服务消费者。

3.5 超时与重试

  • 超时

服务消费者调用服务生产者时候发生了堵塞,等待情形,服务消费者会一直等待下去

在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。

dubbo使用超时机制,设置一个超时时间,若超过该时间,还无法完成服务访问,会自动断开该访问

dubbo通过属性timeout设置超时时间,默认为1000,单位为毫秒

该属性可在配置文件中配置,也可以在@DubboService@DubboReference中设置

  • 重试

如果出现网络抖动,则这一次请求就会失败。

网络抖动:因为某些原因网络,断开了一下

当这个断开时间大于超时时间,就会造成用户无法请求的影响。

dubbo使用重试机制,当发生抖动,会重新发送该次请求;

dubbo通过属性retries来设置重试次数,默认为2

3.6 多版本

  • 灰度版本:当出现新版本功能,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新版本
  • dubbo中使用version属性来设置和调用同一个接口的不同版本

3.7 负载均衡

当有一个服务消费者去访问服务,此时有多个服务提供者,该访问哪个?

dubbo有负载均衡策略

  • Dubbo负载均衡策略(4种)

    ①Random:按权重随机,默认值,

    • 若多个服务权重(weight)一样,随机访问,若权重大,分配几率大。

    dubbo通过weight属性设置权重

    ② RoundRobin:按权重轮询

    • 先轮询分配服务,然后权重大的开始轮询

    ③ LeastActive:最少活跃调用数,相同活跃度随机

    • 服务响应最短时间,优先分配该服务

    ④ ConsistentHash:一致性hash,相同参数请求总是访问同一服务

3.8 集群容错

服务消费者访问服务,若某个服务提供者出错,dubbo如何调用?

通过cluster属性设置容错模式

容错模式:

  • Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器,默认重试2次,使用retries配置。一般用于读操作

  • Failfast Cluster:快速失败,只发送一次调用,失败立即报错。通常用于写操作

  • Failsafe Cluster:失败安全,出现异常时,直接忽略,返回一个空结果

  • Failback Cluster:失败自动恢复,后台记录失败请求,定时重发

    某个服务必须调用成功,失败之后后台记录失败,定时重新调用,直至调用成功

  • Forking Cluster:并行调用多个服务器,只要成功一个即返回

  • Broadcast Cluster:广播调用所有提供者,逐个报错,任意一台报错则报错。

    用于服务消费者要同步更新多个服务的数据,数据要保持同步

3.9 服务降级

服务消费者有三个服务:

例如:广告服务,日志服务,支付服务(比如支付服务比较重要),当cpu资源快满了,我们就需要把不太重要的资源释放掉,保证核心(支付服务)服务的正常运行。

服务降级方式

  • mock=force:return null表示消费方该服务的方法调用都直接返回null,不发起远程调用。用来屏蔽不重要服务不可用时对方调用的影响
  • mock=fail:return null表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。

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

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

相关文章

可视化 | Flask+Pyecharts可视化模板

文章目录&#x1f3f3;️‍&#x1f308; 1. 系统说明界面&#x1f3f3;️‍&#x1f308; 2. 柱状图示例界面&#x1f3f3;️‍&#x1f308; 3. 饼状图示例界面&#x1f3f3;️‍&#x1f308; 4. 折现图示例界面&#x1f3f3;️‍&#x1f308; 5. 散点图示例界面&#x1f3…

人工智能(Pytorch)搭建transformer模型,真正跑通transformer模型,深刻了解transformer的架构

大家好&#xff0c;我是微学AI&#xff0c;今天给大家讲述一下人工智能(Pytorch)搭建transformer模型&#xff0c;手动搭建transformer模型&#xff0c;我们知道transformer模型是相对复杂的模型&#xff0c;它是一种利用自注意力机制进行序列建模的深度学习模型。相较于 RNN 和…

【数据结构Java】--图、BFS、DFS、拓扑结构

目录 一、图&#xff08;Graph&#xff09; 1.概念 2.有向图 3.出度、入度 4.无向图 5.简单图、多重图 6.无向完全图 7.有向完全图 8.有权图 9.连通图 10.连通分量&#xff08;无向图&#xff09; 11.强连通图&#xff08;有向图&#xff09; 12.强连通分量 13.邻接矩…

微服务架构-服务网关(Gateway)-权限认证(分布式session替代方案)

权限认证-分布式session替代方案 前面我们了解了Gateway组件的过滤器&#xff0c;这一节我们就探讨一下Gateway在分布式环境中的一个具体用例-用户鉴权。 1、传统单应用的用户鉴权 从我们开始学JavaEE的时候&#xff0c;就被洗脑式灌输了一种权限验证的标准做法&#xff0c;…

Adobe全新AI工具引关注,Adobe firefly助力创作更高效、更有创意

原标题&#xff1a;Adobe全新AI工具引关注&#xff0c;Adobe firefly&#xff08;萤火虫&#xff09;助力创作更高效、更有创意。 以ChatGPT为首的生成式AI、AIGC等工具的战局正如火如荼的进行中..... 除了微软、百度的聊天机器人和一些初创公司的AI画图工具令人惊艳&#xff…

Greenplum数据库执行器——PartitionSelector执行节点

为了能够对分区表有优异的处理能力&#xff0c;对于查询优化系统来说一个最基本的能力就是做分区裁剪partition pruning&#xff0c;将query中并不涉及的分区提前排除掉。如下执行计划所示&#xff0c;由于单表谓词在parititon key上&#xff0c;在优化期间即可确定哪些可以分区…

003:Mapbox GL设定不同的投影方式

第003个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中设定不同的投影方式 。默认情况下为Mercator投影,或者设置为null或者undefined时候,显示为Mercator投影。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源…

【分享】维格表集成易聊实现线索自动化,减少流失率

公司•介绍 北京某职业教育公司专注行业发展、国际就业、留学、移民咨询。秉承专业性至上的原则&#xff0c;与行业内专家、高等学府以及产业集团合作&#xff0c;并邀请各领域专家组建了强大的专委会团队&#xff0c;为公司的业务开展提供专业性支持。 客户•遇到的问题 作为…

【Java面试八股文宝典之MySQL篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day23

大家好&#xff0c;我是陶然同学&#xff0c;软件工程大三即将实习。认识我的朋友们知道&#xff0c;我是科班出身&#xff0c;学的还行&#xff0c;但是对面试掌握不够&#xff0c;所以我将用这100多天更新Java面试题&#x1f643;&#x1f643;。 不敢苟同&#xff0c;相信大…

用Spring Doc代替Swagger

1 OpenApi OpenApi 是一个业界的 API 文档标准&#xff0c;是一个规范&#xff0c;这个规范目前有两大实现&#xff0c;分别是&#xff1a; SpringFoxSpringDoc 其中 SpringFox 其实也就是我们之前所说的 Swagger&#xff0c;SpringDoc 则是我们今天要说的内容。 OpenApi 就…

苹果智能戒指专利曝光,Find My技术加持不易丢

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的清单&#xff0c;苹果近日获得了一项“智能戒指”相关的设计专利&#xff0c;编号为“US 11625098 B2”。 这款智能戒指专利主要服务于增强现实&#xff08;AR&#xff09;或者虚拟现实&#xff08;VR&#xff09;场…

leetcodeTmp

39. 组合总和 39. 组合总和 DFS排列&#xff1a;每个元素可选0次&#xff0c;1次以及多次 public List<List<Integer>> combinationSum(int[] candidates, int target) {//Arrays.sort(candidates);//注释了也能通过this.candidates candidates;ans.clear();co…

Omniverse Replicator 入门

OmniverseReplicator入门 Omniverse Replicator 作为 Omniverse Kit 扩展创建&#xff0c;并通过 Omniverse Code 方便地分发。 要使用复制器&#xff0c;您需要下载可在此处找到的 Omniverse 启动器。 有关 Omniverse 启动器的更多详细信息&#xff0c;请查看此视频。 使用…

kafaka学习

kafaka 消息队列&#xff1a;通常用来解决一个进程内&#xff0c;多线程环境下&#xff0c;资源竞争的问题&#xff1b;但是消息队列的锁的粒度太大了&#xff0c;需要进行拆分 消息队列中间组件 一个进程中&#xff0c;同时存在生产者、消费者、消息队列&#xff0c;在分布…

网络文件传输防止篡改-校验工具(md5sum)的使用

说明 MD5报文摘要算法&#xff08;Message-Digest Algorithm 5&#xff09;常常被用来验证网络文件传输的完整性&#xff0c;防止文件被人篡改。此算法对任意长度的信息逐位进行计算&#xff0c;产生一个二进制长度为128位&#xff08;十六进制长度就是32位&#xff09;的“指…

wordpres漏洞扫描器——wpscan

WordPress 使用PHP语言开发的博客平台 WordPress是使用PHP语言开发的博客平台&#xff0c;用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统&#xff08;CMS&#xff09;来使用。 WordPress是一款个人博客系统&#xff0c…

手把手教你在linux中部署stable-diffusion-webui

stable-diffusion-webui是什么就不用多说了&#xff0c;以下是安装步骤&#xff0c;我以linux系统为例介绍&#xff0c;windows系统大同小异&#xff0c;安装期间没有用到梯子&#xff0c;安装目录/opt/stable-diffusion-webui/。 1.安装Anaconda stable-diffusion-webui要求p…

2023年小红书用户种草转化新路径

随着消费者对商品选择性提高&#xff0c;品牌转化链路随之被拉长&#xff0c;在投放操盘上竞争也愈发激烈&#xff0c;本期和大家聊聊如何在关键节点上引领用户决策&#xff0c;完成用户种草转化。种草链路拉长品牌发力点在何处&#xff1f; 基于平台用户的洞察分析&#xff0c…

ESXi安装CentOS

ESXi安装 参考&#xff1a;https://blog.csdn.net/tongxin_tongmeng/article/details/129466704 CentOS安装 镜像&#xff1a;http://mirrors.aliyun.com/centos/7/isos/x86_64-->CentOS-7-x86_64-DVD-2009.iso CentOS配置 FinalShell连接 ESXi简介 1.ESXi是由VMware公司…

leedcode刷题(6)

各位朋友们大家好&#xff0c;今天是我的leedcode刷题系列的第六篇。这篇文章将与队列方面的知识相关&#xff0c;因为这些知识用C语言实现较为复杂&#xff0c;所以我们就只使用Java来实现。 文章目录设计循环队列题目要求用例输入提示做题思路代码实现用栈实现队列题目要求用…