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

TODO!! IM项目2

感觉似乎部署好了 真不容易

mysql、redis、 rocketmq(nameserver、broker)、nginx

看代码里是mybatisplus、netty->protobuf协议

现在还发不出去消息

每个密码都要改对

现在可以发消息了但不能at 房间成员也没有

broker内存不够?

从日志和异常信息来看,RocketMQ 在尝试发送用户加入房间的消息时失败了。以下是详细的分析和解决方案。

---

### **问题分析**

#### 1. **异常核心信息**
```plaintext
org.apache.rocketmq.client.exception.MQClientException: Send [4] times, still failed, cost [104]ms
```
- RocketMQ 客户端尝试发送消息 4 次均失败。
- 发送目标主题是 `join_room_topic`。
- 目标 Broker 是 `LAPTOP-4UB66RV0`。

#### 2. **Broker 返回的错误**
```plaintext
Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 14 DESC: service not available now.
It may be caused by one of the following reasons:
  - The broker's disk is full [CL: 0.94 CQ: 0.94 INDEX: 0.94].
  - Messages are put to the slave.
  - Message store has been shut down, etc.
```
- 错误码 `14` 表示 Broker 服务不可用。
- 可能原因包括:
  1. **磁盘空间不足**:Broker 的磁盘使用率已经达到 94%,可能已接近满载。
  2. **Slave 节点无法处理写入请求**:如果消息被路由到 Slave 节点,但 Slave 不支持写操作,则会失败。
  3. **Broker 服务未启动或已关闭**:Message Store 可能已经停止运行。

#### 3. **Broker 地址**
```plaintext
BROKER: 10.11.178.240:10911
```
- Broker 的 IP 和端口为 `10.11.178.240:10911`。
- 需要检查该 Broker 的状态。

---

### **解决方案**

#### **1. 检查磁盘空间**
- 根据错误信息,Broker 的磁盘使用率已经达到 94%,可能导致写入失败。
- **解决方法**:
  - 登录到 Broker 所在服务器,检查磁盘空间:
    ```bash
    df -h
    ```
  - 如果磁盘空间不足,清理不必要的文件或扩展磁盘容量。
  - RocketMQ 默认会在磁盘使用率达到一定阈值(如 90%)时拒绝写入。可以通过调整配置文件 `broker.conf` 中的以下参数来提高磁盘使用率限制:
    ```properties
    diskMaxUsedSpaceRatio=95
    ```
    修改后重启 Broker。

---

#### **2. 检查 Broker 状态**
- 确认 Broker 是否正常运行。
- **解决方法**:
  - 检查 Broker 进程是否启动:
    ```bash
    ps -ef | grep mqbroker
    ```
  - 如果未启动,手动启动 Broker:
    ```bash
    nohup sh bin/mqbroker -c conf/broker.conf &
    ```
  - 检查 Broker 日志文件(通常位于 `logs/rocketmqlogs/broker.log`),确认是否有其他错误。

---

#### **3. 检查主从架构**
- 如果使用了主从架构(Master-Slave),需要确保消息被正确路由到 Master 节点。
- **解决方法**:
  - 确认当前 Broker 是 Master 还是 Slave:
    ```bash
    cat /path/to/store/config/broker.properties | grep brokerRole
    ```
    - 如果是 `ASYNC_MASTER` 或 `SYNC_MASTER`,表示是 Master。
    - 如果是 `SLAVE`,表示是 Slave。
  - 如果消息被路由到 Slave 节点,需要调整客户端路由逻辑,确保消息发送到 Master 节点。

---

#### **4. 检查网络连接**
- 确保客户端能够正常连接到 Broker。
- **解决方法**:
  - 使用 `telnet` 或 `nc` 测试网络连通性:
    ```bash
    telnet 10.11.178.240 10911
    ```
  - 如果无法连接,检查防火墙规则或网络配置。

---

#### **5. 检查 Topic 配置**
- 确认 `join_room_topic` 是否正确创建并分配到 Broker。
- **解决方法**:
  - 使用 RocketMQ 提供的命令行工具检查 Topic 配置:
    ```bash
    sh bin/mqadmin topicList -n <nameserver_address>
    ```
  - 如果 Topic 不存在,手动创建:
    ```bash
    sh bin/mqadmin updateTopic -n <nameserver_address> -b 10.11.178.240:10911 -t join_room_topic
    ```

---

#### **6. 增加重试机制**
- 当前客户端尝试发送 4 次后失败。可以适当增加重试次数和超时时间。
- **解决方法**:
  - 修改客户端代码中的重试配置:
    ```java
    DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
    producer.setRetryTimesWhenSendFailed(10); // 增加重试次数
    producer.setSendMsgTimeout(5000); // 增加超时时间(单位:毫秒)
    ```

---

### **总结**

根据日志信息,问题的根本原因是 Broker 的磁盘空间不足或服务不可用。建议按照以下步骤排查和解决问题:

1. **检查磁盘空间**:清理磁盘或扩展容量。
2. **检查 Broker 状态**:确保 Broker 正常运行。
3. **检查主从架构**:确保消息发送到 Master 节点。
4. **检查网络连接**:确保客户端与 Broker 的网络连通性。
5. **检查 Topic 配置**:确保 `join_room_topic` 已正确创建。
6. **优化客户端配置**:增加重试次数和超时时间。

如果问题仍未解决,请提供更多上下文信息(如 Broker 配置、Topic 分布等),以便进一步分析。

在当前项目里,`Handler` 类主要用于处理不同类型的命令或者消息,下面按照不同功能模块为你详细介绍各 `Handler` 的作用。

### 命令处理 `Handler`(位于 `com.howcode.aqchat.handler.impl` 包)
- **`SyncRoomMembersCmdHandler`**:处理同步房间成员命令。验证用户登录状态和是否加入指定房间,若验证通过则获取房间所有成员信息并返回给客户端。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\impl\SyncRoomMembersCmdHandler.java
// 验证用户登录和房间信息,同步房间成员信息
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.SyncRoomMembersCmd cmd) {
    // ...已有代码...
}
```
- **`JoinRoomCmdHandler`**:处理加入房间命令。验证用户登录状态、是否已在房间中以及房间号是否存在,若都满足条件则将用户加入房间并返回加入成功消息。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\impl\JoinRoomCmdHandler.java
// 验证用户登录和房间信息,将用户加入房间
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.JoinRoomCmd cmd) {
    // ...已有代码...
}
```
- **`SendMsgCmdHandler`**:处理发送消息命令。验证消息 `ID`、用户登录状态、是否在房间以及房间是否存在等信息,若验证通过则发送消息并处理 AI 消息,最后返回消息发送成功消息。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\impl\SendMsgCmdHandler.java
// 验证消息和用户信息,发送消息并处理 AI 消息
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.SendMsgCmd cmd) {
    // ...已有代码...
}
```
- **`LeaveRoomCmdHandler`**:处理离开房间命令。验证用户登录状态、是否在房间以及房间是否存在,若验证通过则将用户从房间移除,判断房间是否为空并决定是否解散房间,最后返回离开房间成功消息。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\impl\LeaveRoomCmdHandler.java
// 验证用户登录和房间信息,将用户从房间移除
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.LeaveRoomCmd cmd) {
    // ...已有代码...
}
```
- **`CreateRoomCmdHandler`**:处理创建房间命令。验证用户登录状态、是否已在房间以及房间号是否已存在,若都满足条件则创建房间,将创建者加入房间,处理 AI 助手相关操作,最后返回创建房间成功消息。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\impl\CreateRoomCmdHandler.java
// 验证用户登录和房间信息,创建房间并将用户加入房间
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.CreateRoomCmd cmd) {
    // ...已有代码...
}
```
- **`OpenAiRoomCmdHandler`**:处理创建 AI 房间命令。验证用户登录状态、是否已在房间,若都满足条件则创建 AI 房间,将创建者和 AI 成员加入房间,最后返回创建 AI 房间成功消息。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\impl\OpenAiRoomCmdHandler.java
// 验证用户登录和房间信息,创建 AI 房间并将用户和 AI 成员加入房间
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.OpenAiRoomCmd cmd) {
    // ...已有代码...
}
```
- **`RecoverUserCmdHandler`**:处理恢复用户命令。验证用户信息是否存在,若存在则重新登录用户,添加用户 `channel`,判断用户是否有房间,若有则将用户加入房间,最后返回用户信息。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\impl\RecoverUserCmdHandler.java
// 验证用户信息,恢复用户登录状态并处理房间信息
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.RecoverUserCmd cmd) {
    // ...已有代码...
}
```

### AI 消息处理 `Handler`(位于 `com.howcode.aqchat.handler.at.chain` 包)
这些 `Handler` 采用责任链模式处理 AI 消息,若当前 `Handler` 无法处理消息,则将消息传递给下一个 `Handler`。
- **`XQHandler`**:判断消息是否 @ 了 AI 助手,若是则复制消息,修改消息 `ID` 和内容,去掉 @AI 部分,然后通过消息队列发送给 AI 助手。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\at\chain\XQHandler.java
// 判断消息是否 @ 了 AI 助手,处理 AI 消息
@Override
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}
```
- **`MultipleRoundsHandler`**:判断房间类型是否为 AI 空间且消息扩展信息为空,若是则复制消息,修改消息 `ID`,然后通过消息队列发送进行多轮对话处理。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\at\chain\MultipleRoundsHandler.java
// 判断房间类型和消息信息,处理多轮对话消息
@Override
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}
```
- **`XMHandler`**:判断消息是否 @ 了 XM,若是则复制消息,修改消息 `ID` 和内容,去掉 @XM 部分,然后通过消息队列发送给 XM。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\at\chain\XMHandler.java
// 判断消息是否 @ 了 XM,处理 XM 相关消息
@Override
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}
```
- **`XTHandler`**:判断消息是否 @ 了 XT,若是则复制消息,修改消息 `ID` 和内容,去掉 @XT 部分,然后通过消息队列发送给 XT。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\at\chain\XTHandler.java
// 判断消息是否 @ 了 XT,处理 XT 相关消息
@Override
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}
```
- **`XVHandler`**:判断消息是否 @ 了 XV,若是则复制消息,修改消息 `ID` 和内容,去掉 @XV 部分,然后通过消息队列发送给 XV。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\at\chain\XVHandler.java
// 判断消息是否 @ 了 XV,处理 XV 相关消息
@Override
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}
```

### 工厂类 `Handler`(位于 `com.howcode.aqchat.handler.at` 包)
- **`HandlerFactory`**:实现 `ApplicationContextAware` 和 `InitializingBean` 接口,在初始化时获取所有 `Handler` 实例并构建责任链。提供 `handleMessage` 方法,处理消息内容,然后将消息传递给责任链的第一个 `Handler` 进行处理。
```java:d:\AAAAwo\EverythingAboutJava\AQchat\aq-chat-server\aq-chat-im\src\main\java\com\howcode\aqchat\handler\at\HandlerFactory.java
// 初始化 Handler 责任链,处理消息并传递给责任链
public void handleMessage(MessageDto messageDto) {
    // ...已有代码...
}
``` 

相关文章:

TODO!! IM项目2

感觉似乎部署好了 真不容易 mysql、redis、 rocketmq&#xff08;nameserver、broker&#xff09;、nginx 看代码里是mybatisplus、netty->protobuf协议 现在还发不出去消息 每个密码都要改对 现在可以发消息了但不能at 房间成员也没有 broker内存不够&#xff1f; 从…...

Android ImageView 使用详解

文章目录 一、基本使用1. XML 中声明 ImageView2. Java/Kotlin 中设置图片 二、图片缩放类型 (scaleType)三、加载网络图片1. 使用 Glide (推荐)2. 使用 Picasso 四、高级功能1. 圆形图片2. 圆角图片3. 图片点击缩放动画 五、性能优化六、常见问题解决 ImageView 是 Android 中…...

工资管理系统的主要功能有哪些

工资管理系统通过自动化薪资计算、税务处理、员工数据管理、报表生成等功能&#xff0c;极大地提升了薪资发放的效率和准确性。在传统的人工薪资管理中&#xff0c;HR人员需要手动计算每位员工的薪资&#xff0c;并确保符合税务要求&#xff0c;极易出错且耗时。而现代工资管理…...

WordPiece 详解与示例

WordPiece详解 1. 定义与背景 WordPiece 是一种子词分词算法,由谷歌于2012年提出,最初用于语音搜索系统,后广泛应用于机器翻译和BERT等预训练模型。其核心思想是将单词拆分为更小的子词单元(如词根、前缀/后缀),从而解决传统分词方法面临的词汇表过大和未知词(OOV)处…...

【LeetCode基础算法】滑动窗口与双指针

定长滑动窗口 总结&#xff1a;入-更新-出。 入&#xff1a;下标为 i 的元素进入窗口&#xff0c;更新相关统计量。如果 i<k−1 则重复第一步。 更新&#xff1a;更新答案。一般是更新最大值/最小值。 出&#xff1a;下标为 i−k1 的元素离开窗口&#xff0c;更新相关统计量…...

日本Shopify 3月数据:家居品类销售额激增120%!

2024年第一季度末&#xff0c;电商平台运营商Shopify发布了3月份的最新销售数据&#xff0c;引发业界高度关注。据最新数据显示&#xff0c;日本市场家居品类销售在3月份实现了惊人的增长&#xff0c;同比激增120%&#xff0c;成为该区域增速最快的类目。这一变化不仅映射出日本…...

C语言多进程素数计算

题目描述&#xff1a; 以下代码实现了一个多进程素数计算程序&#xff0c;通过fork()函数创建子进程来并行计算指定范围内的素数。请仔细阅读代码并回答以下问题。 #include "stdio.h" #include "unistd.h" #include <sys/types.h> #include "…...

链表知识回顾

类型&#xff1a;单链表&#xff0c;双链表、循环链表 存储&#xff1a;在内存中不是连续存储 删除操作&#xff1a;即让c的指针指向e即可&#xff0c;无需释放d&#xff0c;因为java中又内存回收机制 添加节点&#xff1a; 链表的构造函数 public class ListNode {// 结点…...

数据库勒索病毒威胁升级:企业数据安全防线如何用安当RDM组件重构

摘要&#xff1a;2025年Q1全球数据库勒索攻击量同比激增101.8%&#xff0c;Cl0p、Akira等团伙通过边缘设备漏洞渗透企业核心系统&#xff0c;制造业、金融业等关键领域面临数据加密与业务停摆双重危机。本文深度解析勒索病毒对数据库的五大毁灭性影响&#xff0c;结合安当RDM防…...

50%时效提升!中巴新航线如何重构ebay跨境电商物流成本?

50%时效提升&#xff01;中巴新航线如何重构eBay跨境电商物流成本&#xff1f; 近年&#xff0c;拉美市场逐步升温&#xff0c;特别是巴西&#xff0c;已成为中国跨境卖家争相布局的新蓝海市场。而随着eBay大力拓展拉美板块&#xff0c;更多卖家开始将目光投向这个人口超2亿、…...

自建 eSIM RSP 服务指南

一、 自建 eSIM RSP 服务的必要性评估 在决定是否自建 RSP&#xff08;远程 SIM 配置&#xff09;服务时&#xff0c;企业需要全面了解其带来的利弊。以下是核心要点&#xff1a; 1. GSMA 安全认证 (SAS-SM) 的重要性 目的: 确保 RSP 服务符合全球移动网络运营商 (MNO) 对安…...

TensorRT模型部署剪枝

TensorRT模型部署剪枝 本文属于学习笔记&#xff0c;在重点章节或代码位置加入个人理解&#xff0c;欢迎批评指正&#xff01; 参考&#xff1a; CUDA与TensorRT部署部署实战第四章 一. Pruning 学习目标 理解什么是模型剪枝模型剪枝的分类&#xff0c;以及各类剪枝的利弊都…...

Servlet 线程安全与并发编程深度解析

Servlet 线程安全与并发编程深度解析 一、Servlet 线程安全机制与风险场景 1.1 Servlet 容器工作原理 单实例多线程模型&#xff1a;每个Servlet在容器中只有一个实例&#xff0c;通过线程池处理并发请求请求处理流程&#xff1a; 接收HTTP请求创建HttpServletRequest和HttpS…...

C++学习:六个月从基础到就业——面向对象编程:封装、继承与多态

C学习&#xff1a;六个月从基础到就业——面向对象编程&#xff1a;封装、继承与多态 本文是我C学习之旅系列的第九篇技术文章&#xff0c;主要讨论C中面向对象编程的三大核心特性&#xff1a;封装、继承与多态。这些概念是理解和应用面向对象设计的关键。查看完整系列目录了解…...

光谱相机的成像方式

光谱相机的成像方式决定了其如何获取物体的空间与光谱信息&#xff0c;核心在于分光技术与扫描模式的结合。以下是主要成像方式的分类解析&#xff1a; ‌一、滤光片切换型‌ ‌1. 滤光片轮&#xff08;Filter Wheel&#xff09;‌ ‌原理‌&#xff1a;通过旋转装有多个窄带…...

Excel 中让表格内容自适应列宽和行高

Excel 中让表格内容自适应列宽和行高 目录 Excel 中让表格内容自适应列宽和行高自适应列宽自适应行高在Excel中让表格内容自适应列宽和行高,可参考以下操作: 自适应列宽 方法一:手动调整 选中需要调整列宽的列(如果是整个表格,可点击表格左上角行号和列号交叉处的三角形全…...

android rtsp 拉流h264 h265,解码nv12转码nv21耗时卡顿问题及ffmpeg优化

一、 背景介绍及问题概述 项目需求需要在rk3568开发板上面&#xff0c;通过rtsp协议拉流的形式获取摄像头预览&#xff0c;然后进行人脸识别 姿态识别等后续其它操作。由于rtsp协议一般使用h.264 h265视频编码格式&#xff08;也叫 AVC 和 HEVC&#xff09;是不能直接用于后续处…...

Day(21)--网络编程

网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输 应用场景&#xff1a;即使通信、网友对战、金融证券等等&#xff0c;不管是什么场景&#xff0c;都是计算机和计算机之间通过网络进行的数据传输 java.net 常见的软件架构 C/S&am…...

Android主流播放器功能详解

Android主流播放器功能详解 前言 本文将深入介绍Android三大主流播放框架(ijkplayer、ExoPlayer和MediaPlayer)的功能特性和实战应用,帮助你选择合适的播放框架并掌握其使用方法。 三大播放框架概述 播放框架开发方特点适用场景MediaPlayerAndroid官方简单易用,系统内置…...

牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记2

目录 一、ArcGIS Engine概述 1、 定义 2、 核心功能 3、 与ArcObjects&#xff08;AO&#xff09;的关系 二、开发环境搭建 1、 开发工具要求 2、 关键步骤 三、 ArcGIS Engine核心组件 1、 对象模型 2、 类库分类 四、 第一个AE应用程序&#xff08;C#示例&#xf…...

语音合成(TTS)从零搭建一个完整的TTS系统-第一节-效果演示

一、概述 语音合成又叫文字转语音&#xff08;TTS-text to speech &#xff09;&#xff0c;本专题我们记录从零搭建一个完整的语音合成系统&#xff0c;包括文本前端、声学模型和声码器&#xff0c;从模型训练到系统的工程化实现&#xff0c;模型可以部署在手机等嵌入式设备上…...

文章记单词 | 第35篇(六级)

一&#xff0c;单词释义 across [əˈkrɒs] prep. 从一边到另一边&#xff1b;横过&#xff1b;在… 对面&#xff1b;遍及&#xff1b;在… 上&#xff1b;跨越&#xff1b;adv. 从一边到另一边&#xff1b;横过&#xff1b;宽&#xff1b;从… 的一边到另一边&#xff1b;在…...

MySQL Binlog 数据恢复总结

&#x1f332; 总入口&#xff1a;你想恢复什么&#xff1f; 恢复类型 ├── 表结构 表数据&#xff08;整张表被 DROP&#xff09; │ ├── Binlog 中包含 CREATE TABLE │ │ └── ✅ 直接用 mysqlbinlog 提取建表 数据语句&#xff0c;回放即可 │ └── B…...

【Linux】进程基础入门指南(下)

> &#x1f343; 本系列为Linux的内容&#xff0c;如果感兴趣&#xff0c;欢迎订阅&#x1f6a9; > &#x1f38a;个人主页:【小编的个人主页】 >小编将在这里分享学习Linux的心路历程✨和知识分享&#x1f50d; >如果本篇文章有不足&#xff0c;还请多多包涵&a…...

NoETL×大模型:Aloudata重构数据智能新范式,开启Chat BI新落地之道

在当今数据驱动的时代&#xff0c;企业对于高效、智能的数据处理与分析需求日益增长。随着大模型的兴起&#xff0c;如DeepSeek等&#xff0c;数据智能领域正经历着前所未有的变革。 Aloudata大应科技创始人&CEO周卫林表示&#xff0c;企业的核心竞争力包括人才壁垒、技术…...

算法题(126):前缀和

审题&#xff1a; 本题需要我们将题目给出的数组的数据的[l,r]范围内的数据和打印 思路&#xff1a; 方法一&#xff1a;前缀和 前缀和的思想就是预处理数据&#xff0c;通过空间换时间的方式提高代码效率 第一步&#xff1a;利用数组f将前缀和记录下来&#xff0c;f[i]表示索引…...

选择排序(简单选择排序、堆排序)

简单选择排序&#xff08;Selection Sort&#xff09; 1. 算法思想 它通过多次遍历数组&#xff0c;每次从未排序部分中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其放到已排序部分的末尾&#xff08;或开头&#xff09;&#xff0c;直到整个数组有序。 2.…...

【JavaEE】Spring AOP的注解实现

目录 一、AOP 与 Spring AOP二、Spring AOP简单实现三、详解Spring AOP3.1 Spring AOP 核心概念3.1.1 切点&#xff08;Pointcut&#xff09;3.1.2 连接点&#xff08;Join Point&#xff09;3.1.3 通知&#xff08;Advice&#xff09;3.1.4 切面&#xff08;Aspect&#xff09…...

【天外之物】加速度与速度的单位向量的内积得到加速度在切向向量上的值

切向加速度的标量值 a T a_T aT​ 正是加速度矢量 a \mathbf{a} a 与单位切矢量 T ^ \mathbf{\hat{T}} T^ 的内积&#xff08;点积&#xff09;。 1. 数学定义 设物体的速度为 v \mathbf{v} v&#xff0c;加速度为 a \mathbf{a} a&#xff0c;单位切矢量为 T ^ \mathbf{…...

​​eBay 2025春季财报揭示跨境电商新蓝海:五大隐秘品类引爆增长密码​

核心数据速览​​ 2024年第一季度&#xff0c;eBay全球商品交易总额&#xff08;GMV&#xff09;达255亿美元&#xff0c;同比增长5%。这一增长不仅源于季节性消费回暖&#xff0c;更折射出跨境电商行业在能源转型、供应链重构及消费需求升级中的结构性变革。透过数据&#xff…...

兔子桌面tv版下载-兔子桌面tv版官方app免费下载安装

兔子桌面 TV 版是一款专为智能电视和机顶盒设计的轻量化桌面应用&#xff0c;其界面采用大图标、大字体设计&#xff0c;支持自由调整应用顺序&#xff0c;将常用的影视、游戏 App 置顶&#xff0c;还可通过主题市场下载动态背景&#xff0c;满足用户对电视界面的个性化需求。 …...

绿算轻舟系列FPGA加速卡:驱动数字化转型的核心动力【2】

工业与医疗&#xff1a;精准化的幕后推手 在工业4.0与智慧医疗领域&#xff0c;绿算轻舟FPGA加速卡通过实时信号处理与高精度控制&#xff0c;推动关键场景的技术升级。 工业自动化&#xff1a;在机器视觉质检中&#xff0c;实现亚像素级缺陷检测&#xff0c;产线检测速度大幅…...

ubuntu1804服务器开启ftp,局域网共享特定文件给匿名用户

要在 Ubuntu 18.04 上设置一个 FTP 服务器&#xff0c;满足以下要求&#xff1a; 允许匿名登录&#xff08;无需账号密码&#xff09;。指定分享特定目录下的文件。只允许只读下载。 可以使用 vsftpd&#xff08;Very Secure FTP Daemon&#xff09;来实现。以下是详细步骤&a…...

k8s中pod报错 FailedCreatePodSandBox

问题现象&#xff1a; 创建容器时出现一下情况 而且删掉控制器的时候pod还会卡住 解决&#xff1a; 将calico的pod重新删掉。其中有1个控制器pod以及3个node pod 删掉后&#xff0c;大概10来秒就重新创建完成了。 然后现在在使用kubectl apply -f 文件.yaml 就可以正常创…...

请详细说明下面训练阶段的差别: Supervised Fine-Tuning、Reward Modeling、PPO、DPO、KTO、Pre-Training

目录 &#x1f527; 一、训练阶段总体流程&#xff08;从底层到上层&#xff09; &#x1f9e0; 1. Pre-Training&#xff08;预训练&#xff09; &#x1f4cc; 目的&#xff1a; &#x1f4da; 数据&#xff1a; ⚙️ 方法&#xff1a; &#x1f4a1; 举个例子&#xf…...

Go语言入门到入土——一、安装和Hello World

Go语言入门到精通——安装和Hello World 文章目录 Go语言入门到精通——安装和Hello World下载并安装让Go跑起来为你的代码启动依赖跟踪调用外部包总结 下载并安装 下载地址&#xff1a;https://go.dev/dl/ 下载后傻瓜式安装 查看是否安装完成 go version让Go跑起来 创建一个…...

React 入门完全指南:从零开始构建现代 Web 应用

在当今快速发展的前端开发领域&#xff0c;React 凭借其高效的组件化架构和强大的生态系统&#xff0c;已成为最受欢迎的 JavaScript 库之一。根据 2023 年 Stack Overflow 开发者调查&#xff0c;React 连续七年成为最常用的 Web 框架。无论是初创公司还是科技巨头&#xff0c…...

0701表单组件-react-仿低代码平台项目

文章目录 1 react表单组件1.1 受控组件 (Controlled Components)示例代码&#xff1a; 1.2 非受控组件 (Uncontrolled Components)示例代码&#xff1a; 2 AntD表单组件实战2.1 开发搜索功能2.2 开发注册页2.3 开发登录页2.4 表单组件校验 结语 1 react表单组件 input表单组件…...

Android ViewStub显示VISIBLE与消失GONE,Kotlin(2)

Android ViewStub显示VISIBLE与消失GONE&#xff0c;Kotlin&#xff08;2&#xff09; 在 Android ViewStub显示VISIBLE与消失GONE&#xff0c;Kotlin-CSDN博客 基础上完善。 import android.os.Bundle import android.util.Log import android.view.View import android.view…...

跨站脚本(XSS) 的详细分类、对比及解决方案

以下是 跨站脚本&#xff08;XSS&#xff09; 的详细分类、对比及解决方案&#xff1a; 一、XSS的分类与详解 1. 反射型XSS&#xff08;非持久型XSS&#xff09; 定义&#xff1a;攻击载荷通过URL参数传递&#xff0c;服务器直接返回到页面中&#xff0c;需用户主动触发。 工…...

JVM:程序计数器、虚拟机栈、本地方法栈

一、程序计数器 &#xff08;1&#xff09;程序计数器介绍 作用&#xff1a;当线程执行 Java 方法时&#xff0c;程序计数器记录该线程下一条要执行的字节码指令的地址&#xff1b;当线程执行本地方法时&#xff0c;程序计数器的值为未指定&#xff08;undefined&#xff09;…...

适配器模式在Java开发中的应用

适配器模式&#xff08;Adapter Pattern&#xff09;是设计模式中的一种结构型模式&#xff0c;它允许将一个类的接口转换成客户端所期望的另一个接口。通过这种方式&#xff0c;原本因接口不兼容而无法协同工作的类能够一起工作。适配器模式在Java开发中非常常见&#xff0c;尤…...

(三)谷歌Code as Policies复现(操作记录)

目录 《复现的项目来源》 一、创建虚拟环境 二、下载原项目并修改&#xff08;非必须&#xff09; 二、可直接下载修改后的项目 三、配置环境 &#xff08;1&#xff09;安装jupyterlab以及内核 &#xff08;2&#xff09;安装ffmpeg &#xff08;3&#xff09;配置环境…...

驱动学习专栏--字符设备驱动篇--2_字符设备注册与注销

对于字符设备驱动而言&#xff0c;当驱动模块加载成功以后需要注册字符设备&#xff0c;同样&#xff0c;卸载驱动模 块的时候也需要注销掉字符设备。字符设备的注册和注销函数原型如下所示 : static inline int register_chrdev(unsigned int major, const char *name, const…...

奥创中心卸载工具Armoury Crate Uninstall Tool官网下载

为了应对用户对 Armoury Crate 占用资源大、卸载困难等问题的普遍反馈&#xff0c;ASUS 官方提供了一个专门的卸载工具&#xff0c;即 Armoury Crate Uninstall Tool(奥创中心卸载工具)。该工具的主要作用是帮助用户彻底从系统中移除 Armoury Crate 相关的所有组件&#xff0c;…...

【Linux网络】网络基础概念深度解析

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

【NLP 61、大模型应用 —— RAG方法】

生活打不败一个大口吃饭的人&#xff01; —— 25.4.13 一、模型幻觉问题 模型幻觉&#xff08;AI Hallucination&#xff09;是指人工智能模型&#xff08;尤其是大语言模型&#xff09;生成看似合理但实际不准确、虚构或与事实不符内容的现象。其本质是模型基于统计概…...

UV工具——小试牛刀

背景 MCP开发使用到 为什么MCP更推荐使用uv进行环境管理&#xff1f; MCP 依赖的 Python 环境可能包含多个模块&#xff0c;uv 通过 pyproject.toml 提供更高效的管理方式&#xff0c;并且可以避免 pip 的一些依赖冲突问题。此外&#xff0c;uv 的包管理速度远超 pip…...

vue3+vite 多个环境配置

同一套代码 再也不用在不同的环境里来回切换请求地址了 然后踩了一个坑 就是env的文件路径是在当前项目下 不是在views内 因为公司项目需求只有dev和pro两个环境 虽然我新增了3个 但是只在这两个里面配置了 .env是可以配置一些公共配置的 目前需求来说不需要 所以我也懒得配了。…...

《分布式软总线架构下,设备虚拟化技术的深度剖析与优化策略》

设备之间的互联互通和协同工作已成为一种趋势。分布式软总线架构作为实现这一目标的关键技术&#xff0c;为不同设备之间的通信和协作提供了基础。而设备虚拟化技术则是在分布式软总线架构下&#xff0c;进一步提升设备资源利用效率的重要手段。本文将深入探讨在分布式软总线架…...