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

springboot+dubbo+zookeeper的注册服务和调用实践

目录

    • zookeeper为什么可作为注册中心
    • zookeeper注册中心优缺点
    • 启动zookeeper
    • 编写springboot项目提供dubbo服务
      • 1. 服务接口
      • 2. Springboot引入dubbo实现服务接口
        • 2.1 工程目录和依赖
        • 2.2 启动程序和application.properties
        • 2.3 @DubboService 实现服务接口
        • 2.4 测试api,用于测试启动
    • 开启两个springboot应用
    • dubboAdmin配置随机策略
    • 客户端测试
      • zookeeper客户端查看服务信息
      • zookeeper node metadata字段含义说明
      • 服务提供者2个实例
      • 测试输出和关闭
    • dubbo客户端分析
    • dubbo服务端分析

zookeeper为什么可作为注册中心

在这里插入图片描述

zookeeper注册中心优缺点

首先需要了解下zookeeper作为注册中心的优缺点
在这里插入图片描述

在这里插入图片描述
结论:尽管ZooKeeper在服务注册与发现、配置管理、分布式锁等场景中非常有用,但它并不适合所有的场景。在选择使用ZooKeeper时,需要根据具体的应用需求、性能要求以及系统的复杂性来综合考虑其优缺点。在一些情况下,可以考虑使用更轻量级的解决方案如Consul或Etcd,这些工具在某些方面可能更适合特定的需求。

启动zookeeper

随意启动即可

mubi@mubideMacBook-Pro zookeeper-3.4.12 $ ./bin/zkServer.sh start conf/zoo_local.cfg
ZooKeeper JMX enabled by default
Using config: conf/zoo_local.cfg
Starting zookeeper ... STARTED

编写springboot项目提供dubbo服务

1. 服务接口

在这里插入图片描述
简单的测试服务接口

package com.example.demoapi.dubboprovider;/*** @Author mubi* @Date 2025/2/21 21:46*/
public interface TestService {int add(int a, int b);
}

依赖

<dependency><groupId>com.dq</groupId><artifactId>spring-groovy-open-service</artifactId><version>1.0-SNAPSHOT</version>
</dependency>

2. Springboot引入dubbo实现服务接口

2.1 工程目录和依赖

在这里插入图片描述

依赖如下

  • dubbo 2.7.8
  • spring 4.3.18.RELEASE
  • springboot 2.1.4.RELEASE
<?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"><parent><artifactId>spring-groovy-test</artifactId><groupId>com.dq</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>spring-api2</artifactId><dependencies><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.8</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>2.7.8</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>2.8.0</version></dependency><!--模块依赖--><dependency><groupId>com.dq</groupId><artifactId>spring-groovy-open-service</artifactId><version>1.0-SNAPSHOT</version></dependency><!--依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version></dependency><!-- junit依赖包 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies></project>
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version>
</parent>
2.2 启动程序和application.properties
package com.example.demoapi;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;/*** @Author mubi* @Date 2021/2/13 12:04*/
@EnableDubbo
@SpringBootApplication
@ComponentScan("com.example")
public class DemoApiApplication2 {public static void main(String[] args) {SpringApplication.run(DemoApiApplication2.class, args);}
}
  • application.properties
#https
server.port=8089# Dubbo 配置
dubbo.application.name=demoprovider
dubbo.registry.address=zookeeper://127.0.0.1:2181 
dubbo.protocol.name=dubbo
dubbo.scan.base-packages=com.example.demoapi.dubboprovider
dubbo.protocol.port=20881
2.3 @DubboService 实现服务接口
package com.example.demoapi.dubboprovider;import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;@DubboService
@Service
public class TestServiceImpl implements TestService {@Overridepublic int add(int a, int b) {return a + b + 1;}
}
2.4 测试api,用于测试启动
package com.example.demoapi.control;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Author mubi* @Date 2021/2/13 12:04*/
@RestController
public class TestControl {@GetMapping(value = "/test")public String getTest() {return "hello test2";}}

在这里插入图片描述

开启两个springboot应用

都提供同样的服务:com.example.demoapi.dubboprovider.TestService,dubbo端口不同

dubbo.protocol.port=20880
dubbo.protocol.port=20881

为了方便测试,可以故意把实现写的不一样

一个是return a + b;
一个是return a + b + 1;

dubboAdmin配置随机策略

下载一个dubboAmdin.war 然后放到tomcat webapps下启动tomcat即可,如下图
在这里插入图片描述

打开dubbo-admin: http://localhost:8080/dubbo-admin-2.8.4/
在这里插入图片描述
配置一个随机策略,方便测试

在这里插入图片描述

客户端测试

随便起个maven项目
在这里插入图片描述

spring xml配置如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><dubbo:application name="dubbotest" /><dubbo:registry address="zookeeper://127.0.0.1:2181" /><!-- 向注册中心订阅服务 --><dubbo:reference id="testService" interface="com.example.demoapi.dubboprovider.TestService" />
</beans>
  • 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"><parent><artifactId>dubbo-demo</artifactId><groupId>com.mubi.dubbo</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>dubbotest</artifactId><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- spring版本号 --><spring.version>4.3.18.RELEASE</spring.version><!-- log4j日志包版本号 --><slf4j.version>1.7.18</slf4j.version><log4j.version>1.2.17</log4j.version></properties><dependencies><!--模块依赖--><dependency><groupId>com.dq</groupId><artifactId>spring-groovy-open-service</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- spring begin --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!-- spring end --><!-- 注册中心zookeeper begin --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.14</version></dependency><!-- 注册中心zookeeper end --><!-- 添加日志相关jar包 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!-- dubbo --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.10</version></dependency></dependencies></project>
  • 测试
    在这里插入图片描述
    有时候输出4, 有时候输出5,符合预期的负载均衡策略

zookeeper客户端查看服务信息

mac使用PrettyZoo可参考文档:https://blog.csdn.net/gitblog_06511/article/details/142393820

可以看到服务如下

在这里插入图片描述

zookeeper node metadata字段含义说明

在ZooKeeper中,节点(node)的元数据(metadata)包含了关于该节点的各种信息,这些信息通常通过ZooKeeper的Stat类表示。Stat类包含了多个字段,每个字段都提供了关于节点的不同方面信息。以下是一些常见的Stat类字段及其含义:

  1. czxid - 创建节点的事务ID(Transaction ID)。这是创建该节点时ZooKeeper服务器分配的事务ID。

  2. mzxid - 最后修改节点的事务ID。这是最后一次修改该节点内容或其子节点时ZooKeeper服务器分配的事务ID。

  3. pzxid - 最后修改子节点的事务ID。这是最后一次修改该节点的子节点时ZooKeeper服务器分配的事务ID。

  4. ctime - 创建时间。这是节点被创建的时间戳(以毫秒为单位)。

  5. mtime - 最后修改时间。这是节点最后一次被修改的时间戳(以毫秒为单位),包括内容或子节点的修改。

  6. version - 版本号。每次对节点数据进行修改,版本号会增加。

  7. cversion - 子节点版本号。每次对节点的子节点进行增加、删除操作时,此版本号会增加。

  8. aversion - ACL版本号。每次对节点的ACL(访问控制列表)进行修改时,此版本号会增加。

  9. ephemeralOwner - 临时节点的所有者会话ID。如果是临时节点,则此字段包含创建该临时节点的会话ID;如果是持久节点,则此字段为0。

  10. dataLength - 数据长度。这是存储在节点中的数据部分的长度(以字节为单位)。

  11. numChildren - 子节点数量。这是直接子节点的数量。

  12. pzxid - 最后子节点变更的事务ID(在某些实现中可能不直接暴露,但在某些情况下,特别是在使用某些特定命令或API时可以看到)。

服务提供者2个实例

如下,服务具体提供者(黄色框)是临时结点,其它是持久结点。

  • 测试程序有2个服务提供者
    在这里插入图片描述

测试输出和关闭

  • 测试了三次,且没有关闭测试程序,可以看到三个服务消费者(也是临时结点)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看到有4的输出,也有5的输出


测试进程关闭后,consumer也就没有临时结点了
在这里插入图片描述

dubbo客户端分析

注意到客户端一直能看到如下日志,即客户端与zookeeper保持了心跳连接

连接在则服务在,consumer临时结点在,否则临时结点消失
在这里插入图片描述

服务的调用当然是dubbo rpc机制。这里暂不具体分析rpc机制,重点看下zookeeper 客户端 SendThread线程(百度AI回答如下)

在这里插入图片描述
所以当我们设计一个客户端的时候,也要考虑心跳维持,队列缓存,异常处理等等问题

dubbo服务端分析

通过dubbo-admin可以看到服务,并可进行简单的配置负载均衡策略

在这里插入图片描述

在这里插入图片描述

当关闭一个服务提供者之后,同客户端程序,临时结点也是没有了

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

所以服务的动态新增删除,用zookeeper临时结点很方便的表达了

相关文章:

springboot+dubbo+zookeeper的注册服务和调用实践

目录 zookeeper为什么可作为注册中心zookeeper注册中心优缺点启动zookeeper编写springboot项目提供dubbo服务1. 服务接口2. Springboot引入dubbo实现服务接口2.1 工程目录和依赖2.2 启动程序和application.properties2.3 DubboService 实现服务接口2.4 测试api&#xff0c;用于…...

ARM Cortex-M处理器中的MSP和PSP

在ARM Cortex-M系列处理器中&#xff0c;MSP&#xff08;主堆栈指针&#xff09;和PSP&#xff08;进程堆栈指针&#xff09;是两种不同的堆栈指针&#xff0c;主要用于实现堆栈隔离和提升系统可靠性。以下是它们的核心区别和应用场景&#xff1a; 1. 基本定义 MSP&#xff08;…...

计算机网络:应用层 —— 电子邮件

文章目录 电子邮件的起源与发展电子邮件的组成电子邮件协议邮件发送和接收过程邮件发送协议SMTP协议多用途因特网邮件扩展MIME 电子邮件的信息格式 邮件读取协议邮局协议POP因特网邮件访问协议IMAP 基于万维网的电子邮件 电子邮件&#xff08;E-mail&#xff09;是因特网上最早…...

Vue3 + Spring WebMVC 验证码案例中的跨域问题与解决方法

最近在基于vue3 SpringWebMVC前后端分离的开发环境中实现一个验证码的案例&#xff0c;在开发过程中遇到了一些复杂的跨域问题&#xff0c;现已解决&#xff0c;故将解决方法分享&#xff0c;希望能帮到有需要的人。 出现的问题&#xff1a; 对于验证码的实现&#xff0c;我选…...

【Python爬虫(60)】解锁社交媒体数据宝藏:Python爬虫实战攻略

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…...

Comfy UI 快捷键

Comfy UI 页面的快捷键操作&#xff08;记录下&#xff0c;以防忘记&#xff09;&#xff1a; 捷径命令Ctrl Enter将当前图表排队等待生成Ctrl Shift Enter将当前图表排成第一个生成图表Ctrl Z/Ctrl Y撤消/重做Ctrl S保存工作流程Ctrl O加载工作流Ctrl A选择所有节点A…...

【C++】Arrays

《C程序设计基础教程》——刘厚泉&#xff0c;李政伟&#xff0c;二零一三年九月版&#xff0c;学习笔记 文章目录 1、一维数组的定义与初始化1.1、一维数组的定义1.2、一维数组的初始化 2、一维数组的使用3、一维数组与函数4、二维数组4.1、二维数组的定义4.2、二维数组的初始…...

EX_25/2/24

写一个三角形类&#xff0c;拥有私有成员 a,b,c 三条边 写好构造函数初始化 abc 以及 abc 的set get 接口 再写一个等腰三角形类&#xff0c;继承自三角形类 1&#xff1a;写好构造函数&#xff0c;初始化三条边 2&#xff1a;要求无论如何&#xff0c;等腰三角形类对象&#x…...

批量导出数据库表到Excel

这篇文章将介绍如何批量的将多个甚至成千上万的数据库表导出为Excel文件。 准备数据 如下图是数据库里的表&#xff0c;我们需要将它们全部导出为excel文件&#xff0c;这里以SQL Server数据库为例 新增导出 打开的卢导表工具&#xff0c;新建数据库连接&#xff0c;这里以S…...

代码随想录D52-53 图论 Python

目录 101. 孤岛的总面积 102. 沉没孤岛 103. 水流问题 104. 建造最大岛屿 101. 孤岛的总面积 要点&#xff1a; 整体来说是一个图着色的问题。 这道题目的思路符合直觉&#xff0c;但代码实现会和直觉有差别。如果仅使用visit记录不使用着色&#xff0c;会遇到非常多的…...

机器学习(部分算法、模型)

一、KNN 算法 原理 K-近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;,根据K个邻居样本的类别来判断当前样本的类别; 如果一个样本在特征空间中的k个最相似(最邻近)样本中的大多数属于某个类别&#xff0c;则该类本也属于这个类别 比如: 有10000个样…...

axios几种请求类型的格式

Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;广泛用于浏览器和 Node.js 中发送 HTTP 请求。它支持多种请求格式&#xff0c;包括 GET、POST、PUT、DELETE 等。也叫RESTful 目录 一、axios几种请求类型的格式 1、get请求 2、post请求 3、put请求 4、delete请求 二…...

SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)

SpringBoot使用Jasypt对YML文件配置内容进行加密&#xff08;例&#xff1a;数据库密码加密&#xff09; 前言 在SpringBoot的项目开发中&#xff0c;大多数情况下 yml 配置文件中存储的密码均以明文形式展示&#xff0c;这种方式显然存在较大的安全隐患。一旦有开发人员离职&…...

【C语言】指针笔试题

前言&#xff1a;上期我们介绍了sizeof与strlen的辨析以及sizeof&#xff0c;strlen相关的一些笔试题&#xff0c;这期我们主要来讲指针运算相关的一些笔试题&#xff0c;以此来巩固我们之前所学的指针运算&#xff01; 文章目录 一&#xff0c;指针笔试题1&#xff0c;题目一…...

力扣 下一个排列

交换位置&#xff0c;双指针&#xff0c;排序。 题目 下一个排列即在组成的排列中的下一个大的数&#xff0c;然后当这个排列为降序时即这个排列最大&#xff0c;因为大的数在前面&#xff0c;降序排列的下一个数即升序。所以&#xff0c;要是想找到当前排列的下一个排列&…...

Three.js 快速入门教程【八】常见材质类型

系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…...

python~http的请求参数中携带map

背景 调试 http GET请求的 map 参数&#xff0c;链路携带参数一直有问题&#xff0c;最终采用如下方式携带map 解决 user{"demo":"true","info":"王者"}url encode之后的效果如下所示 user%7B%22demo%22:%22true%22,%22info%22:%22…...

爬虫第九篇-结束爬虫循环

最近在学习Python爬虫的过程中&#xff0c;遇到了一个很有趣的问题&#xff1a;如何优雅地结束爬虫循环&#xff1f;今天&#xff0c;我想和大家分享一下我的发现和心得。 一、爬虫循环结束的常见问题 在写爬虫时&#xff0c;我们经常会遇到这样的情况&#xff1a;当爬取到的…...

考研/保研复试英语问答题库(华工建院)

华南理工大学建筑学院保研/考研 英语复试题库&#xff0c;由华工保研er和学硕笔试第一同学一起整理&#xff0c;覆盖面广&#xff0c;助力考研/保研上岸&#xff01;需要&#x1f447;载可到文章末尾见小&#x1f360;。 以下是主要内容&#xff1a; Part0 复试英语的方法论 Pa…...

《Effective Objective-C》阅读笔记(中)

目录 接口与API设计 用前缀避免命名空间冲突 提供“全能初始化方法” 实现description方法 尽量使用不可变对象 使用清晰而协调的命名方式 方法命名 ​编辑类与协议命名 为私有方法名加前缀 理解OC错误模型 理解NSCopying协议 协议与分类 通过委托与数据源协议进行…...

前端如何解决跨域

解决前端跨域问题有多种方法 JSONP&#xff1a;利用 <script> 标签的跨域能力&#xff0c;通过动态创建 script 标签并指定回调函数来获取数据。但只能处理 GET 请求&#xff0c;安全性较低。 JSONP 的原理是利用了 <script> 标签的跨域能力。因为浏览器允许 <…...

【HDLbits--Comb组合逻辑】

HDLbits--Comb组合逻辑 1.5 组合逻辑1.5 Demo 在 Verilog 中&#xff0c;组合逻辑&#xff08;Combinational Logic&#xff09;是指输出仅依赖于当前输入的逻辑电路&#xff0c;没有记忆功能&#xff08;即没有状态存储&#xff09;。组合逻辑的特点是&#xff1a; 无时钟信号…...

如何在 Linux 上安装和配置 Zsh

文章目录 如何在 Linux 上安装和配置 Zsh1. 安装 Zsh1.1 在 Ubuntu/Debian 上安装1.2 在 CentOS/RHEL/Fedora 上安装1.3 在 Arch Linux 上安装1.4 验证 Zsh 安装 2. 设置 Zsh 为默认 Shell2.1 验证默认 shell 3. 配置 Zsh3.1 使用 Oh My Zsh3.1.1 安装 Oh My Zsh3.1.2 启用插件…...

Chromedriver与Chrome版本映射表

‌Chromedriver与Chrome版本映射表‌如下&#xff1a; ‌Chrome 71-73版本对应Chromedriver 2.46‌‌Chrome 70-72版本对应Chromedriver 2.45‌‌Chrome 69-71版本对应Chromedriver 2.44‌‌Chrome 68-70版本对应Chromedriver 2.43‌‌Chrome 67-69版本对应Chromedriver 2.42‌…...

HarmonyOS学习第7天: 文本组件点亮界面的文字魔法棒

一、引言 在 HarmonyOS 那丰富多彩的系统界面中&#xff0c;从简洁直观的应用图标&#xff0c;到交互流畅的操作菜单&#xff0c;再到生动形象的图文展示&#xff0c;每一处细节都经过精心雕琢&#xff0c;为用户带来了独特而美妙的视觉与交互体验。而在这琳琅满目的界面元素中…...

06C语言——指针

一、指针入门 (1)、准备知识 0、图解&#xff1a; 1、内存地址 字节&#xff1a;字节是内存的容量单位&#xff0c;英文称为 byte&#xff0c;一个字节有8位&#xff0c;即 1byte(0000 0000 --- 1111 1111) 8bits(0 --- 1) 地址&#xff1a;系统为了便于区分每一个字节而对…...

Ubuntu DeepSeek磁盘空间不够解决办法

标签&#xff1a; Ubuntu&#xff1b; DeepSeek磁盘空间不够解决办法&#xff1b;Ubuntu 22, DeepSeek R1 671 B, solution for Insufficient Disk Space 问题&#xff1a;Ubuntu 22&#xff0c; DeepSeek R1 671B 磁盘空间不够解决办法 Ubuntu 22.04操作系统&#xff0c;台式…...

东信营销科技巨额补贴仍由盈转亏:毛利率大幅下滑,现金流告急

《港湾商业观察》施子夫 近期&#xff0c;东信营销科技有限公司&#xff08;以下简称&#xff0c;东信营销科技&#xff09;递表港交所&#xff0c;联席保荐机构为海通国际和中银国际。 东信营销科技的国内运营主体为深圳市东信时代信息技术有限公司。尽管期内收入规模有所提…...

Qt layout

文章目录 Qt layout**关键机制****验证示例****常见误区****最佳实践****总结**关键点总结&#xff1a;示例代码说明&#xff1a;结论&#xff1a; Qt layout 在 Qt 中&#xff0c;当调用 widget->setLayout(layout) 时&#xff0c;layout 的父对象会被自动设置为该 widget…...

本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程…...

基于YOLO11深度学习的苹果叶片病害检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

Android MMKV集成指南

首先简单介绍一下MMKV当下Android Studio最版本及Gradle8.7 MMKV集成根据官方文档重新对mmkv重新包了一次(便于开发)总结首先简单介绍一下MMKV MMKV 是腾讯开源的一款专为移动端设计的高性能键值存储组件,旨在替代传统的 SharedPreferences 和 SQLite,尤其在频繁读写和数据…...

React七Formik

Formik是一个专为React构建的开源表单库。它提供了一个易于使用的API来处理表单状态管理&#xff0c;表单验证以及表单提交。Formik支持React中的所有表单元素和事件&#xff0c;可以很好地与React生态系统中的其他库集成。同时&#xff0c;Formik还提供了一些高级功能&#xf…...

5分钟使用Docker部署Paint Board快速打造专属在线画板应用

文章目录 前言1.关于Paint Board2.本地部署paint-board3.使用Paint Board4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Paint Board公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住…...

可狱可囚的爬虫系列课程 14:10 秒钟编写一个 requests 爬虫

一、前言 当重复性的工作频繁发生时&#xff0c;各种奇奇怪怪提高效率的想法就开始萌芽了。当重复代码的模块化封装已经不能满足要求的时候&#xff0c;更高效的方式就被揭开了神秘的面纱。本文基于这样的想法&#xff0c;来和大家探讨如何 10 秒钟编写一个 requests 爬虫程序。…...

【深度学习神经网络学习笔记(三)】向量化编程

向量化编程 向量化编程前言1、向量化编程2、向量化优势3、正向传播和反向传播 向量化编程 前言 向量化编程是一种利用专门的指令集或并行算法来提高数据处理效率的技术&#xff0c;尤其在科学计算、数据分析和机器学习领域中非常常见。它允许通过一次操作处理整个数组或矩阵的…...

PHP入门基础学习四(PHP基本语法)

运算符 运算符&#xff0c;专门用于告诉程序执行特定运算或逻辑操作的符号。根据运算符的作用&#xff0c;可以将PHP语言中常见的运算符分为9类 算数运算符&#xff1a; 是用来处理加减乘除运算的符号 也是最简单和最常用的运算符号 赋值运算符 1. 是一个二元运算符&#x…...

【十二】Golang 映射

&#x1f4a2;欢迎来到张胤尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 映射映射的定义映射初始化make 函数使用字面量 源…...

简单理解Oracle中的latch

可以用一个小卖部抢购的例子来理解 Oracle 数据库中的 Latch&#xff1a; 1、 什么是 Latch&#xff1f; 打个比方&#xff0c;假设数据库的某个内存区域&#xff08;比如缓存的数据块&#xff09;是小卖部货架上的最后一包辣条&#xff0c;Latch 就像是货架前的一个狭窄通道&a…...

hbase集群部署

1.hbase集群的搭建&#xff08;以及内部逻辑&#xff09; 虽然Hmaster有多个&#xff0c;但是属于热备&#xff0c;起作用的就active上的这个。 部署流程&#xff1a; 因为我配置的hadoop是一个非HA的&#xff0c;所以修改为以下 如果是HA的hadoop一定要做以下这一步。 在启动…...

塔能物联运维保障智慧地下停车场安全与高效

一、智慧地下停车场安全在城市升级改造中的关键地位 随着城市的不断发展和升级改造&#xff0c;智慧地下停车场的重要性日益凸显。在现代城市中&#xff0c;土地资源愈发珍贵&#xff0c;地下停车场成为解决停车难题的关键设施。然而&#xff0c;停车场的安全问题是其正常运行和…...

面试八股文--数据库基础知识总结(2) MySQL

本文介绍关于MySQL的相关面试知识 一、关系型数据库 1、定义 关系型数据库&#xff08;Relational Database&#xff09;是一种基于关系模型的数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;它将数据存储在表格&#xff08;表&#xff09;中&#xff0c;并通过表格…...

深入理解指针2

深入理解指针2 数组名的理解 数组名就是首元素的地址 int arr[]{1,3,2}; printf("%p\n",arr); printf("%p\n",&arr[0]);但是有两种情况除外&#xff0c; 1.sizeof(数组名)&#xff0c;sizeof操作符统计的是整个数组的大小&#xff0c;并不是第一个元素…...

QT各种版本下载安装

参考链接&#xff1a; 【Qt】超详细&#xff01;Qt4.8.6和VS2010的配置及使用 由于QT官网一般现在进不去&#xff0c;所以下载一些QT版本只能通过镜像或者以前下载存储的安装包来进行&#xff0c;现在推荐两种方法 从参考链接中搬过来&#xff1a; 方案一&#xff1a;国内镜…...

java进阶学习脑图

今天开始分享我的第一篇博客&#xff0c;先放上我自己花费一个月完成的java进阶学习脑图吧&#xff01; 谁都想像R大一样对JVM可以知无不言&#xff0c;言无不尽&#xff1b; 谁都想像Doug Lea一样可以参与JUC这种核心模块的开发&#xff1b; 但是&#xff0c;不能只停留在想…...

Spring 原始注解详解与实战指南

&#x1f4dd; 1. 前言 在 Spring 框架的发展过程中&#xff0c;注解的引入大大简化了配置&#xff0c;提升了开发效率 本文将详细介绍 Spring 最初引入的核心注解&#xff0c;包括 Component、Controller、Service、Repository、Autowired、Qualifier 和 Value 等&#xff0c;…...

uniapp封装请求

在uniapp中封装HTTP请求&#xff0c;通常我们会使用uni.request方法。uni.request是uni-app提供的一个网络请求API&#xff0c;可以用来发送各种类型的HTTP请求&#xff08;GET、POST、PUT、DELETE等&#xff09;。下面是如何在uniapp中封装一个通用的HTTP请求方法&#xff0c;…...

YOLOv10 解析与地平线 征程 6 模型量化

一&#xff0c;YOLOv10 解析 1.简介 近些年来&#xff0c;研究人员对 YOLO 的架构设计、优化目标、数据增强策略等进行了探索&#xff0c;取得了显著进展。然而&#xff0c;后处理对非极大值抑制&#xff08;NMS&#xff09;的依赖阻碍了 YOLO 的端到端部署&#xff0c;并对推…...

基本网络安全的实现

基本网络安全的实现 一 &#xff1a;AAA AAA 是Authentication&#xff0c;Authorization and Accounting&#xff08;认证、授权和计费&#xff09;的简 称&#xff0c;它提供了一个用来对认证、授权和计费这三种安全功能进行配置的一致性框架&#xff0c; 它是对网络安全…...

ROS2 强化学习:案例与代码实战

一、引言 在机器人技术不断发展的今天&#xff0c;强化学习&#xff08;RL&#xff09;作为一种强大的机器学习范式&#xff0c;为机器人的智能决策和自主控制提供了新的途径。ROS2&#xff08;Robot Operating System 2&#xff09;作为新一代机器人操作系统&#xff0c;具有…...