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

Dubbo 深度解析

Dubbo 深度解析与实战指南


一、Dubbo 核心设计理念与应用场景

1.1 为什么需要 Dubbo?

随着互联网业务规模扩大,单体架构面临以下挑战:

  • 服务依赖复杂:模块间耦合度高,难以独立迭代[[5]]。
  • 性能瓶颈:单一应用承载所有功能,无法横向扩展。
  • 维护困难:代码冗余,故障排查效率低。

Dubbo 通过服务化拆分解决这些问题,其核心设计目标包括:

  • 透明化 RPC 调用:开发者无需关注网络通信细节[[9]]。
  • 服务治理能力:提供负载均衡、熔断降级等企业级特性[[6]]。
  • 可扩展性:通过 SPI 机制支持自定义扩展[[7]]。

1.2 典型应用场景

  • 电商业务:订单、支付、库存等模块独立部署。
  • 金融系统:高并发场景下的风控、交易服务拆分。
  • 物联网平台:设备管理、数据采集服务的分布式管理。

二、架构演进与核心组件深度剖析

2.1 架构演进史

2.1.1 Dubbo 1.x:基于 RMI 的初代架构
  • 核心问题:JDK 自带的 RMI(Remote Method Invocation)存在以下缺陷:
    • 依赖 Java 序列化,性能差且易受攻击[[5]]。
    • 缺乏服务治理能力,无法应对分布式场景。
  • 改进方案:Dubbo 1.x 引入自定义协议和注册中心,但未完全解耦服务治理逻辑。
2.1.2 Dubbo 2.x:服务化架构成熟期
  • 关键改进
    • 注册中心:支持 ZooKeeper、Nacos 等组件,实现服务自动注册与发现[[3]]。
    • 集群容错:新增 Failover、Failfast 等容错策略。
    • 协议扩展:支持 HTTP、Hessian 等多种协议[[9]]。
2.1.3 Dubbo 3.x:云原生时代
  • 核心变化
    • Triple 协议:兼容 gRPC,支持跨语言调用。
    • 应用级服务发现:优化大规模集群下的地址推送性能。
    • Mesh 化支持:适配 Service Mesh 架构,与 Istio 等组件集成[[4]]。

2.2 核心组件详解

组件功能描述典型实现
Provider服务提供方,暴露接口供远程调用Spring Bean + Dubbo SPI
Consumer服务消费方,通过代理调用远程服务动态代理(Javassist)
Registry注册中心,存储服务地址信息ZooKeeper、Nacos
Monitor监控中心,统计调用次数与响应时间Prometheus、Dubbo Admin
Protocol定义通信协议(如 dubbo://http://Netty、Tomcat

三、实战:从零构建分布式服务

3.1 环境准备

  • 依赖管理(Maven):
    <!-- 服务提供者 -->
    <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.2.0</version>
    </dependency>
    <dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.8.0</version>
    </dependency>
    

3.2 服务提供者实现

3.2.1 接口定义
public interface UserService {User getUserById(Long id);
}
3.2.2 服务实现
@Service // Dubbo 服务注解
public class UserServiceImpl implements UserService {@Overridepublic User getUserById(Long id) {return new User(id, "user_" + id);}
}
3.2.3 配置文件(application.properties)
# 应用名称
dubbo.application.name=user-service-provider
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 协议与端口
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

3.3 服务消费者实现

3.3.1 引用服务
@RestController
public class UserController {@DubboReference // 引用远程服务private UserService userService;@GetMapping("/user/{id}")public User getUser(@PathVariable Long id) {return userService.getUserById(id);}
}
3.3.2 配置文件
dubbo.application.name=user-service-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181

3.4 高级配置示例

3.4.1 多注册中心配置
<dubbo:registry id="zookeeper" address="zookeeper://127.0.0.1:2181"/>
<dubbo:registry id="nacos" address="nacos://127.0.0.1:8848"/>
<dubbo:service interface="UserService" ref="userServiceImpl" registry="zookeeper,nacos"/>
3.4.2 异步调用
@DubboReference(async = true)
private UserService userService;public void asyncCall() {CompletableFuture<User> future = RpcContext.getContext().getCompletableFuture();future.whenComplete((user, throwable) -> {// 处理结果});userService.getUserById(1L); // 异步触发
}

四、服务治理与性能优化

4.1 负载均衡策略

  • Random(默认):按权重随机选择服务实例。
  • RoundRobin:轮询分配请求。
  • LeastActive:优先选择活跃请求数最少的实例。
  • ConsistentHash:基于一致性哈希实现会话粘滞。

配置示例

<dubbo:reference interface="UserService" loadbalance="roundrobin"/>

4.2 容错机制

策略描述
Failover失败自动切换,重试其他节点(默认)
Failfast快速失败,只发起一次调用
Failsafe失败后忽略异常,适用于写日志等操作
Failback失败后记录日志,定时重试
Forking并行调用多个节点,返回最快响应

4.3 性能优化技巧

  1. 序列化优化
    • 使用 KryoProtobuf 替代 Hessian。
    • 配置 dubbo.serialization=fastjson
  2. 线程池调优
    • 调整 dubbo.protocol.threads=500 以支持高并发。
  3. 直连调用
    • 测试环境可通过 @DubboReference(url = "dubbo://127.0.0.1:20880") 绕过注册中心。

五、监控与运维

5.1 Dubbo Admin 使用

  1. 部署监控中心
    git clone https://github.com/apache/dubbo-admin.git
    mvn clean package
    java -jar dubbo-admin-0.1.jar
    
  2. 核心功能
    • 服务查询:查看接口列表、方法签名。
    • 流量统计:监控 QPS、响应时间。
    • 配置管理:动态调整超时、重试次数。

5.2 日志分析

  • 关键日志路径
    • 服务暴露:org.apache.dubbo.config.ServiceConfig
    • 调用链路:org.apache.dubbo.rpc.filter

六、常见问题与解决方案

6.1 服务注册失败

  • 可能原因
    • 网络不通:检查注册中心地址是否可达。
    • 权限问题:Nacos 需配置命名空间与分组。
  • 解决方案
    # 指定 Nacos 命名空间
    dubbo.registry.parameters.namespace=prod
    

6.2 调用超时

  • 优化建议
    • 增加超时时间:@DubboReference(timeout = 5000)
    • 启用异步调用降低阻塞。

参考文献
[[2]] 极客时间 Dubbo 架构演进分析
[[3]] CSDN 博客 Dubbo 1.x 到 3.x 演进
[[4]] Apache 官方 Dubbo 3.x 新特性
[[5]] RMI 架构缺陷分析
[[6]] Dubbo 核心功能与扩展点
[[7]] Dubbo 高性能设计原理
[[9]] CSDN 博客 Dubbo 详细解析

相关文章:

Dubbo 深度解析

Dubbo 深度解析与实战指南 一、Dubbo 核心设计理念与应用场景 1.1 为什么需要 Dubbo&#xff1f; 随着互联网业务规模扩大&#xff0c;单体架构面临以下挑战&#xff1a; 服务依赖复杂&#xff1a;模块间耦合度高&#xff0c;难以独立迭代[[5]]。性能瓶颈&#xff1a;单一应…...

基于javaweb的SpringBoot校园运动会管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

Socket封装---模板方法类

目录 一、模板方法类 二、Socket的框架 三、TCPSocket对父类的虚函数重写 在平时写网络代码的时候&#xff0c;经常会涉及到socket套接字的部分&#xff0c;这一部分用的十分频繁&#xff0c;但是流程都是固定的&#xff0c;我实在是饱受其苦&#xff0c;但是由于C不像java一…...

牛客周赛84 题解 Java ABCDEFG AK实录

目录 题目地址 做题情况 A 题 B 题 C / D 题 E 题 F / G 题 题目地址 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ 做题情况 A 题 import java.io.*; import java.math.*; import java.util.*;// xixi♡西 public class Main {static IOS scnew…...

如何使用MySQL快速定位慢SQL问题?企业级开发中常见业务场景中实际发生的例子,涉及分页查询问题。(二)

如何使用MySQL快速定位慢SQL问题&#xff1f; 在企业级开发中&#xff0c;尤其是涉及到订单查询的业务时&#xff0c;经常会发生慢查询的问题。比如用户翻页到后面的页数时&#xff0c;查询变慢&#xff0c;因为传统的LIMIT offset, size在数据量大时效率低下。这时候&#xff…...

双链笔记新选择!使用Docker私有化部署Logseq知识库远程团队协作

前言&#xff1a;嘿&#xff0c;小伙伴们&#xff0c;今天要给大家安利一个超酷的技能——如何在本地Linux服务器上使用Docker轻松搭建Logseq笔记软件&#xff0c;并通过cpolar内网穿透工具实现远程访问。大家都知道&#xff0c;在快节奏的工作和学习中&#xff0c;一个好的笔记…...

C# 不同框架如何调用framework 和 net core

在 C# 中实现进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;有多种方式&#xff0c;适用于不同场景。以下是常见 IPC 方法的实现方案、代码示例及适用场景对比&#xff1a; 1. 命名管道&#xff08;Named Pipes&#xff09; 特点&#xff1a;…...

【Linux-传输层协议TCP】TCP协议段格式+确认应答+超时重传+连接管理机制(三次握手、四次挥手、理解TIME_WAIT + CLOSE_WAIT)

TCP协议 TCP全称为“传输控制协议&#xff08;Transmission Control Protocol&#xff09;”人如其名&#xff0c;要对数据的传输进行一个详细的控制。 1.TCP协议段格式 下面是TCP报头各个字段的表格形式&#xff1a; 字段名称字段大小描述源端口16位发送端TCP端口号。目的端…...

怎样使用Modbus转Profinet网关连接USB转485模拟从站配置案例

怎样使用Modbus转Profinet网关连接USB转485模拟从站配置案例 Modbus转profinet网关可以将Modbus协议转化为profinet协议&#xff0c;以实现设备之间的数据交互。在实际使用过程中&#xff0c;我们需要使用Modbus协议进行设备通讯&#xff0c;而profinet协议则是用于工业自动化…...

从“自习室令牌”到线程同步:探秘锁与条件变量

目录 互斥 为什么需要锁 锁的原理--互斥 锁的使用 同步 锁的问题 条件变量 互斥 为什么需要锁 先看结果&#xff1a; 以下代码是我模拟创建线程抢票&#xff0c;由于不加锁导致票抢到了负数 main.cc: #include<vector> #include<iostream> #include"…...

Java 大视界 -- Java 大数据在智能政务舆情引导与公共危机管理中的应用(138)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

LeetCode[59]螺旋矩阵Ⅱ

思路&#xff1a; 这种题我第一次确实没做出来&#xff0c;第一次做的时候一圈一圈处理&#xff0c;发现圈数越往里&#xff0c;越乱&#xff0c;原来之前是没从圈数开始遍历。思路&#xff1a;第一个大循环先遍历圈数&#xff0c;一共遍历n/2圈&#xff0c;如果是奇数那就最后…...

【Python 算法 1.线性枚举】

我装作漠视一切&#xff0c;以为这样就可以不在乎 —— 25.3.17 一、线性枚举的基本概念 1.时间复杂度 线性枚举的时间复杂度为 O(nm)&#xff0c;其中 n是线性表的长度。m 是每次操作的量级&#xff0c;对于求最大值和求和来说&#xff0c;因为操作比较简单&#xff0c;所以 …...

C# 嵌套类 详解

一个类在它的包容类外没有多大意义&#xff0c;就适合设计成嵌套类。 嵌套类&#xff1a;定义在另一个类内部的类。 包容类&#xff08;外部类&#xff09;&#xff1a;包含嵌套类的类。 嵌套类的独特之处是可以为类自身指定private访问修饰符。 嵌套类能访问包容类的任何成…...

深度学习中学习率调整策略

学习率衰减策略是深度学习优化过程中的一个关键因素&#xff0c;它决定了训练过程中学习率的调整方式&#xff0c;从而影响模型收敛的速度和效果。不同的衰减策略在不同的任务和模型上可能有不同的表现&#xff0c;下面从我用到过的几个衰减策略进行记录&#xff0c;后续慢慢跟…...

基于Flask的东方财富网股票数据可视化分析系统

【大数据】基于Flask的东方财富网股票数据可视化分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统能够高效地从东方财富网抓取股票数据&#xff0c;并通过Python的强大数据处理能…...

卓越的用户体验需要智能内容

摘要&#xff1a;这篇文章指出静态文档已无法满足现代用户的需求&#xff0c;而智能内容则是构建卓越用户体验的关键。文章从智能内容的定义、优势和实际应用等方面进行了详细阐述&#xff0c;并强调了企业应积极拥抱智能内容&#xff0c;以提升客户满意度、降低成本并创造新的…...

c++基础知识-图论进阶

一、拓扑排序 1、基础知识 1&#xff09;什么是拓扑排序 对一个有向无环图G进行拓扑排序&#xff0c;是将G中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点u和v&#xff0c;若&#xff0c;则u在线性序列中出现在v之前。 2&#xff09;拓扑排序的操作方法 重复执行…...

Java 买百鸡问题

二阶买百鸡问题&#xff1a;母鸡5元一只&#xff0c;公鸡3元一只&#xff0c;35元可以有多少种买法刚好用完&#xff1f; package com.software.first;import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner scan new Scanner(Syste…...

为什么手机上用 mA 和 mAh 来表示功耗和能耗?

在手机上&#xff0c;我们经常会看到 mA&#xff08;毫安&#xff09; 和 mAh&#xff08;毫安时&#xff09; 这两个单位&#xff0c;它们分别用来表示 功耗水平 和 能耗水平。为什么用这两个单位呢&#xff1f;其实这和电流、时间以及电池的特性有关。 1.mA&#xff08;毫安…...

使用SDKMAN!安装springboot

在 Ubuntu 环境中使用 sdk install springboot 命令之前&#xff0c;您需要先安装 SDKMAN!&#xff08;Software Development Kit Manager&#xff09;。以下是详细的安装步骤&#xff1a; 安装 SDKMAN! 打开终端。 运行以下命令以安装 SDKMAN!&#xff1a; curl -s "htt…...

【AI学习从零至壹】Pytorch神经⽹络

Pytorch神经⽹络 神经网络简介神经元激活函数 神经网络神经⽹络的⼯作过程前向传播(forward) 反向传播(backward)训练神经⽹络 Pytorch搭建并训练神经⽹络神经⽹络构建和训练过程数据预处理构建模型优化器&提取训练数据训练样本 神经网络简介 神经元 在深度学习中&#x…...

Linux应用 / 驱动程序崩溃调试

文章目录 前言一、GDB 使用1. GDB 介绍2. Debug版本与Release版本3. 指令演示3.1 显示行号3.2 断点设置3.3 查看断点信息3.4 删除断点3.5 开启 / 禁用断点3.6 运行3.7 打印 / 追踪变量 4. 最常用指令 二、Linux 应用程序调试1. codedump 介绍2. 在 Linux 系统中使用 coredump2.…...

k8s集群-kubeadm init

为了使用阿里云的镜像源加速 kubeadm init 初始化 Kubernetes 集群的过程&#xff0c;你需要修改 kubeadm 的配置文件以指向阿里云提供的镜像仓库。以下是具体步骤&#xff1a; 1. 创建或编辑 kubeadm 配置文件 首先&#xff0c;创建一个 kubeadm 的配置文件&#xff08;如果还…...

Python 视频爬取教程

文章目录 前言基本原理环境准备Python安装选择Python开发环境安装必要库 示例 1&#xff1a;爬取简单直链视频示例 2&#xff1a;爬取基于 HTML5 的视频&#xff08;以某简单视频网站为例&#xff09; 前言 以下是一个较为完整的 Python 视频爬取教程&#xff0c;包含基本原理…...

Linux应用软件编程(多任务:进程间通信)

一.进程间通信 同一主机下&#xff1a; &#xff08;1&#xff09;无名管道&#xff1a;pipe &#xff08;2&#xff09;有名管道&#xff1a;fifo &#xff08;3&#xff09;信号&#xff1a;异步通知机制 &#xff08;4&#xff09;共享内存&a…...

工厂方法模式和抽象工厂模式详解

由于工厂方法模式和抽象工厂模式有点类似&#xff0c;可以放着一块说下。 一、工厂方法模式 (Factory Method Pattern) 场景描述 假设需要实现一个跨平台日志系统&#xff0c;支持文件日志和数据库日志&#xff0c;且未来可能扩展其他日志方式。通过工厂方法模式&#xff0c;…...

js给后端发送请求的方式有哪些

在 JavaScript 中&#xff0c;有多种方式可以向后端发送请求&#xff0c;以下为你详细介绍&#xff1a; 1. XMLHttpRequest XMLHttpRequest 是最早用于在浏览器和服务器间进行异步通信的 API。虽然它使用起来相对复杂&#xff0c;但兼容性很好&#xff0c;能兼容较旧的浏览器…...

无人机吊舱模块更换技术难点分析!

一、模块更换的可行性 模块化设计的支持 部分吊舱采用模块化设计&#xff0c;允许根据任务需求更换传感器模块。例如&#xff0c;某些吊舱系统支持定制化组合&#xff0c;如“红外激光测距”或“可见光激光测距”等。这表明在硬件结构上&#xff0c;若吊舱预留了标准化的接…...

高数1.4 无穷小与无穷大

1.无穷小 1.1.定义 1.2 常规性质 2.无穷大 2.1 定义 2.无穷小与无穷大的关系...

深入理解MySQL数据库索引

深入理解MySQL数据库索引 个人主页&#xff1a;顾漂亮 1. 索引简介 1.1 索引是什么&#xff1f; MySQL的索引是一种数据结构&#xff0c;它可以帮助数据库高效地查询、更新数据表中的数据。索引通过一定的规则排列数据表中的记录&#xff0c;使得对表的查询可以通过对索引的搜…...

Spring 中 BeanPostProcessor 的作用和示例

一、BeanPostProcessor 的核心作用 1、作用 BeanPostProcessor 是 Spring Bean 实例级别的扩展接口&#xff0c;在 Bean 初始化前后对实例进行加工或替换。其核心功能包括&#xff1a; 修改 Bean 属性&#xff08;如动态注入值、调整配置&#xff09;。生成代理对象&#xf…...

图 最 短 路

Diikstra朴素 非负边权单源最短路顶点数最好小于1000少量数据结构知识和一点点的算法基础 算法描述 这个算法我们采用邻接矩阵来存储&#xff0c;有时候输入数据&#xff0c;并不是我们期待的那样&#xff0c;所以需要对数据做一些处理&#xff0c;也就是把图创建起来的过程…...

NA611系列WiFi串口服务器常见问题以及解决办法

NA611系列WiFi串口服务器是一款高性能、高可靠的工业级双频RS485 ⇌ WiFi数据双向透明传输的串口服务器。实现RS485串口数据通过WiFi实现设备联网数据交互&#xff0c;支持 IEEE 802.11 a/b/g/n 标准。WiFi串口服务器在连接、配置和使用过程中可能会遇到多种问题。以下是一些常…...

工程化与框架系列(36)--前端监控告警实践

前端监控告警实践 &#x1f514; 引言 前端监控是保障应用质量和用户体验的重要手段。本文将深入探讨前端监控的实现方案&#xff0c;包括性能监控、错误监控、用户行为监控等方面&#xff0c;以及相应的告警机制。 监控系统概述 前端监控系统主要包括以下方面&#xff1a;…...

【深度学习|目标检测】YOLO系列anchor-based原理详解

YOLO之anchor-based 一、关于anchors的设置二、网络如何利用anchor来训练关于register_buffer训练阶段的anchor使用推理阶段的anchor使用 三、训练时的正负样本匹配anchor匹配grid匹配 总结起来其实就是&#xff1a;基于anchor-based的yolo就是基于三个检测头的分支上的grids和…...

vue3+Ts+elementPlus二次封装Table分页表格,表格内展示图片、switch开关、支持

目录 一.项目文件结构 二.实现代码 1.子组件&#xff08;表格组件&#xff09; 2.父组件&#xff08;使用表格&#xff09; 一.项目文件结构 1.表格组件&#xff08;子组件&#xff09;位置 2.使用表格组件的页面文件&#xff08;父组件&#xff09;位置 3.演示图片位置 ele…...

【C/C++】文件句柄

什么是文件句柄&#xff1f; 文件句柄&#xff08;File Handle&#xff09;是操作系统中的一种抽象概念&#xff0c;它用来表示一个打开的文件或输入/输出设备。 文件句柄是程序与文件之间的桥梁&#xff0c;程序通过文件句柄来访问和操作文件的内容。 1. 文件句柄——作用 文…...

Matlab 基于专家pid控制的时滞系统

1、内容简介 Matlab 185-基于专家pid控制的时滞系统 可以交流、咨询、答疑 2、内容说明 略 在处理时滞系统&#xff08;Time Delay Systems&#xff09;时&#xff0c;使用传统的PID控制可能会面临挑战&#xff0c;因为时滞会导致系统的不稳定或性能下降。专家PID控制通过结…...

【高项】信息系统项目管理师(六)项目进度管理【3分】

项目进度管理是为了保证项目按时完成。对项目所需的各个过程进行管理,包括规划进度、定义活动、排列活动顺序、估算活动持续时间、制订项目进度计划和控制进度。小型项目中,定义活动、排列活动顺序、估算活动持续时间以及制订进度模型形成进度计划等过程的联系非常紧密,可以…...

通过MATLAB和Carsim进行联合仿真,利用强化学习实现自动驾驶人机控制权策略的详细步骤和示例代码

以下是一个通过MATLAB和Carsim进行联合仿真,利用强化学习实现自动驾驶人机控制权策略的详细步骤和示例代码: 步骤概述 Carsim配置:对Carsim进行必要的设置,包括车辆模型、道路场景等,并生成S - function接口。MATLAB环境搭建:在MATLAB中配置Carsim的S - function,并创建…...

iOS 模块化架构设计:主流方案与实现详解

随着 iOS 工程规模的扩大&#xff0c;模块化设计成为提升代码可维护性、团队协作效率和开发灵活性的关键。本文将探讨为什么需要模块化&#xff0c;介绍四种主流的模块化架构方案&#xff08;协议抽象、依赖注入、路由机制和事件总线&#xff09;&#xff0c;并通过代码示例和对…...

PostreSQL指南-内幕探索-学习笔记-01-数据库集簇的逻辑与物理结构

目录 一、环境信息 二、参考内容 三、逻辑结构概念 四、物理结构概念 五、逻辑映射关系 1、数据库与oid映射关系 2、堆表对象与oid映射关系 五、物理映射关系 1、数据库与oid映射关系 2、堆表对象与oid映射关系 六、数据库文件布局 1、表格 2、postmaster.pid文件解…...

java使用(Preference、Properties、XML、JSON)实现处理(读写)配置信息或者用户首选项的方式的代码示例和表格对比

在Java应用程序中&#xff0c;处理应用首选项&#xff08;preferences&#xff09;有多种方法&#xff0c;包括使用java.util.prefs.Preferences类、属性文件&#xff08;如.properties文件&#xff09;、XML文件和JSON文件。下面是每种方法的详细说明和代码示例&#xff0c;最…...

spring动态代理是在生命周期的哪个阶段实现的

Spring AOP&#xff08;面向切面编程&#xff09;的动态代理是在 Bean 生命周期的 初始化后阶段 实现的&#xff0c;具体来说是在 BeanPostProcessor 的 postProcessAfterInitialization() 方法中完成的。下面我们来详细分析 Spring AOP 动态代理的实现位置及其工作原理。 1. S…...

Oracle静默安装方法

Web服务器上面的Linux一般是不会有图形界面的&#xff0c;所有通过图形界面来安装Linux的方式在没有图形界面的Linux上面是行不通的&#xff0c;我们要使用的安装方式叫做Linux的静默安装。即在没有图形界面的Linux上面安装。 1. 下载地址 http://www.oracle.com/technetwork…...

本地部署deepseek-r1建立向量知识库和知识库检索实践【代码】

目录 一、本地部署DS 二、建立本地知识库 1.安装python和必要的库 2.设置主目录工作区 3.编写文档解析脚本 4.构建向量数据库 三、基于DS,使用本地知识库检索 本地部署DS,其实非常简单,我写了一篇操作记录,我终于本地部署了DeepSeek-R1(图文全过程)-CSDN博客 安装…...

单词翻转(信息学奥赛一本通-1144)

【题目描述】 输入一个句子(一行)&#xff0c;将句子中的每一个单词翻转后输出。 【输入】 只有一行&#xff0c;为一个字符串&#xff0c;不超过500个字符。单词之间以空格隔开。 【输出】 翻转每一个单词后的字符串&#xff0c;单词之间的空格需与原文一致。 【输入样例】 he…...

Python基础入门掌握(十三)

从基础到进阶&#xff0c;轻松掌握文件读写 目录 文件操作的基本概念 文件的打开与关闭 读取文件内容 写入文件内容 文件操作的高级技巧 总结与建议‍ 文件操作的基本概念 在Python中&#xff0c;文件操作主要涉及以下几个步骤&#xff1a; 打开文件&#xff08;open…...

【再读】R1-Onevision通过跨模态形式化为复杂多模态推理任务提供了系统性解决方案

R1-Onevision:跨模态形式化驱动的多模态推理技术突破,R1-Onevision通过跨模态形式化、双阶段训练和教育级基准测试,为多模态推理树立了新标杆。其技术创新不仅提升了模型在复杂任务中的表现,更重要的是为行业提供了一种可解释、可迁移的多模态处理范式。随着形式化方法的不断…...