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

TPS入门DAY04 服务器篇

1.创建委托并绑定回调,实现解耦

/* 创建会话完成 */
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiPlayerOnCreateSessionCompleted, bool, bWasSuccessful);
/* 开始会话完成 */
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiPlayerOnStartSessionComplted, bool, bWasSuccessful);
/* 销毁会话完成 */
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiPlayerOnDestorySessionCompleted, bool, bWasSuccessful);/* 发现会话完成 */
DECLARE_MULTICAST_DELEGATE_TwoParams(FMultiPlayerOnFindSessionCompleted,const TArray<FOnlineSessionSearchResult>& SessoinResults, bool bWasSuccessful);/* 加入会话完成 */
DECLARE_MULTICAST_DELEGATE_OneParam(FMultiPlayerOnJoinSessionCompleted, bool bWasSuccessful);FMultiPlayerOnCreateSessionCompleted MultiPlayerOnCreateSessionCompleted;FMultiPlayerOnStartSessionComplted MultiPlayerOnStartSessionComplted;FMultiPlayerOnDestorySessionCompleted MultiPlayerOnDestorySessionCompleted;FMultiPlayerOnFindSessionCompleted MultiPlayerOnFindSessionCompleted;FMultiPlayerOnJoinSessionCompleted MultiPlayerOnJoinSessionCompleted;
UFUNCTION()
void OnCreateSession(bool bWasSuccessful);UFUNCTION()
void OnStartSession(bool bWasSuccessful);UFUNCTION()
void OnDestorySession(bool bWasSuccessful);void OnFindSession(const TArray<FOnlineSessionSearchResult>& SessoinResults, bool bWasSuccessful);void OnJoinSession(bool bWasSuccessful);MultiplayerSessionsSubsystem->MultiPlayerOnCreateSessionCompleted.AddDynamic(this, &ThisClass::OnCreateSession);
MultiplayerSessionsSubsystem->MultiPlayerOnStartSessionComplted.AddDynamic(this, &ThisClass::OnStartSession);
MultiplayerSessionsSubsystem->MultiPlayerOnDestorySessionCompleted.AddDynamic(this, &ThisClass::OnDestorySession);MultiplayerSessionsSubsystem->MultiPlayerOnFindSessionCompleted.AddUObject(this, &ThisClass::OnFindSession);
MultiplayerSessionsSubsystem->MultiPlayerOnJoinSessionCompleted.AddUObject(this, &ThisClass::OnJoinSession);

2.发现会话

当加入会话按钮点击时

void UMenu::OnJoinButtonClicked()
{Print(TEXT("JoinButton is Clicked!!!"));if (MultiplayerSessionsSubsystem){MultiplayerSessionsSubsystem->FindSessions(10000);}
}

设置会话搜索条件,并存储会话的搜索结果

/* 会话搜索条件 */
TSharedPtr<FOnlineSessionSearch> SessionSearch;
/* 查找会话 */
void UMultiplayerSessionsSubsystem::FindSessions(int32 MaxSearchResults)
{// 1.检查管理会话的接口if (!OnlineSessionInterface)return;// 2.获取当查找到会话时的句柄OnFindSessionsCompleteDelegateHandle = OnlineSessionInterface->AddOnFindSessionsCompleteDelegate_Handle(OnFindSessionsCompleteDelegate);// 3.设置会话搜索的条件SessionSearch = MakeShareable(new FOnlineSessionSearch);SessionSearch->bIsLanQuery = IOnlineSubsystem::Get()->GetSubsystemName() == "NULL" ? true : false;SessionSearch->MaxSearchResults = MaxSearchResults;SessionSearch->QuerySettings.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);// 4.查找会话ULocalPlayer* LocalPC = GetWorld()->GetFirstLocalPlayerFromController();if (!OnlineSessionInterface->FindSessions(*LocalPC->GetPreferredUniqueNetId(), SessionSearch.ToSharedRef())){// 查找会话失败OnlineSessionInterface->ClearOnFindSessionsCompleteDelegate_Handle(OnFindSessionsCompleteDelegateHandle);// 广播会话失败MultiPlayerOnFindSessionCompleted.Broadcast(TArray<FOnlineSessionSearchResult>(),false);}
}

执行查找会话指令成功

/* 查找会话完成对应的回调 */
void UMultiplayerSessionsSubsystem::OnFindSessionsComplete(bool bWasSuccessful)
{if (OnlineSessionInterface){OnlineSessionInterface->ClearOnFindSessionsCompleteDelegate_Handle(OnFindSessionsCompleteDelegateHandle);}if (SessionSearch->SearchResults.Num() <= 0){MultiPlayerOnFindSessionCompleted.Broadcast(TArray<FOnlineSessionSearchResult>(), false);return;}MultiPlayerOnFindSessionCompleted.Broadcast(SessionSearch->SearchResults, bWasSuccessful);
}

当查找到会话时,遍历查找到的会话结果找到匹配的会话,加入该会话

// 当查找会话指令执行时
void UMenu::OnFindSession(const TArray<FOnlineSessionSearchResult>& SessoinResults, bool bWasSuccessful)
{// 查找到会话if (bWasSuccessful){for (auto& SessionResult  : SessoinResults){// 1.获取会话的键所对应的ValueFString MatchSessionValue;SessionResult.Session.SessionSettings.Get("MatchType", MatchSessionValue);// 2.判断是不是要加入的会话if (MatchSessionValue == MatchType){MultiplayerSessionsSubsystem->JoinSession(SessionResult);return;}}}
}

3.加入会话

/* 加入会话 */
void UMultiplayerSessionsSubsystem::JoinSession(const FOnlineSessionSearchResult& SearchResult)
{// 1.检查管理会话的接口if (!OnlineSessionInterface.IsValid()){MultiPlayerOnJoinSessionCompleted.Broadcast(EOnJoinSessionCompleteResult::UnknownError);return;}// 2.管理加入会话的委托的生命周期OnJoinSessionCompleteDelegateHandle = OnlineSessionInterface->AddOnJoinSessionCompleteDelegate_Handle(OnJoinSessionCompleteDelegate);// 3.加入会话ULocalPlayer* LocalPC = GetWorld()->GetFirstLocalPlayerFromController();if (!OnlineSessionInterface->JoinSession(*LocalPC->GetPreferredUniqueNetId(), NAME_GameSession, SearchResult)){OnlineSessionInterface->ClearOnJoinSessionCompleteDelegate_Handle(OnJoinSessionCompleteDelegateHandle);MultiPlayerOnJoinSessionCompleted.Broadcast(EOnJoinSessionCompleteResult::UnknownError);}
}/* 加入会话完成对应的回调 */
void UMultiplayerSessionsSubsystem::OnJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type Result)
{if (OnlineSessionInterface){OnlineSessionInterface->ClearOnJoinSessionCompleteDelegate_Handle(OnJoinSessionCompleteDelegateHandle);}MultiPlayerOnJoinSessionCompleted.Broadcast(EOnJoinSessionCompleteResult::Success);
}

当加入会话指令执行成功时,跳转到会话的场景

/* 当加入会话指令执行完成时 */
void UMenu::OnJoinSession(EOnJoinSessionCompleteResult::Type Result)
{if (Result == EOnJoinSessionCompleteResult::Success){// 1.检查管理会话的接口if (MultiplayerSessionsSubsystem && MultiplayerSessionsSubsystem->OnlineSessionInterface){// 2.通过会话的名称来获取会话的地址并跳转到会话FString SessionAddress;MultiplayerSessionsSubsystem->OnlineSessionInterface->GetResolvedConnectString(NAME_GameSession, SessionAddress);APlayerController* PlayerController = GetGameInstance()->GetFirstLocalPlayerController();if (PlayerController){PlayerController->ClientTravel(SessionAddress, ETravelType::TRAVEL_Absolute);}}}
}

4.创建游戏模式

重载当客户端加进来时和退出时的函数

UCLASS()
class MULTIPLAYERSESSIONS_API ALobbyGameModeBase : public AGameModeBase
{GENERATED_BODY()public:/* 当玩家成功连接进入服务器时 */virtual void PostLogin(APlayerController* NewPlayer) override;/* 当玩家退出时 */virtual void Logout(AController* Exiting) override;
};
#include "LobbyGameModeBase.h"#include "GameFramework/GameStateBase.h"
#include "GameFramework/PlayerState.h"#include "PluginsDebugHelper.h"
using namespace Debug;void ALobbyGameModeBase::PostLogin(APlayerController* NewPlayer)
{Super::PostLogin(NewPlayer);if (GameState){int NumberOfPlayers = GameState.Get()->PlayerArray.Num();Print("Players in game: " + FString::FromInt(NumberOfPlayers));APlayerState* PlayerState = NewPlayer->GetPlayerState<APlayerState>();if (PlayerState){Print("Player " + PlayerState->GetName() + " has joined the game");}}
}void ALobbyGameModeBase::Logout(AController* Exiting)
{Super::Logout(Exiting);APlayerState* PlayerState = Exiting->GetPlayerState<APlayerState>();if (PlayerState){Print("Player " + PlayerState->GetName() + " has Exited the game");}
}

修改创建会话

// 在创建会话的函数里加上这一句
SessionSettings->BuildUniqueId = 1;

修改DefaultGame.ini

[/Script/EngineSettings.GeneralProjectSettings]
ProjectID=CA381F6F4A941684425AAFA0E51AE3FC
ProjectName=Third Person Game Template[StartupActions]
bAddPacks=True
InsertPack=(PackSource="StarterContent.upack",PackName="StarterContent")[/Script/Enginne.GameSession]
MaxPlayers=100

创建游戏模式蓝图

由于测试时间比较繁琐,目前还在Debug,等后面慢慢找

相关文章:

TPS入门DAY04 服务器篇

1.创建委托并绑定回调&#xff0c;实现解耦 /* 创建会话完成 */ DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiPlayerOnCreateSessionCompleted, bool, bWasSuccessful); /* 开始会话完成 */ DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiPlayerOnStartSessionC…...

YOLO学习笔记 | YOLOv8环境搭建全流程指南(2025.4)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== YOLOv8环境搭建 一、环境准备与工具配置1. Conda虚拟环境搭建2. CUDA与…...

Java 设计模式:适配器模式详解

Java 设计模式&#xff1a;适配器模式详解 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过将一个类的接口转换为客户端期望的另一个接口&#xff0c;使原本不兼容的类能够协同工作。适配器模式就像现实生活中的电源适配器&#xf…...

Java的基本语法(1)

一、运算符和表达式 举例说明什么是运算符&#xff0c;什么是表达式&#xff1a; int a 1; int b 2; int c a b; 在这个例子当中&#xff0c;是运算符&#xff0c;并且是算术运算符 ab是表达式&#xff0c;因为是运算符&#xff0c;所以ab是算术表达式 1.1算术运算符 …...

Spark-Core编程二

23) sortByKey import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object Cww { def main(args: Array[String]): Unit { // 创建 SparkConf 对象&#xff0c;设置应用名称和运行模式 val conf new SparkConf().setAppName("SortBy…...

【antd + vue】Modal 对话框:修改弹窗标题样式、Modal.confirm自定义使用

一、标题样式 1、目标样式&#xff1a;修改弹窗标题样式 2、问题&#xff1a; 直接在对应css文件中修改样式不生效。 3、原因分析&#xff1a; 可能原因&#xff1a; 选择器权重不够&#xff0c;把在控制台找到的选择器直接复制下来&#xff0c;如果还不够就再加&#xff…...

JavaWeb 课堂笔记 —— 08 请求响应

本系列为笔者学习JavaWeb的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程&#xff08;涵盖SpringMyBatisSpringMVCSpringBoot等&#xff09;》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习…...

DataWorks智能体Agent发布!基于MCP实现数据开发与治理自动化运行

在传统的数据开发工作中&#xff0c;企业用户或者开发者常常需要进行繁琐的配置、复杂的代码撰写、反复的性能调优和大量重复性的操作&#xff0c;才能实现数据开发、数据集成和数据治理等工作&#xff0c;效率十分低下。 近日&#xff0c;阿里云大数据开发治理平台DataWorks基…...

VitePress 项目部署 cloudflare page 提示 Node 构建错误

提示的构建错误信息为&#xff1a; 09:35:29.838 Error: Exit with error code: 1 09:35:29.839 at ChildProcess.<anonymous> (/snapshot/dist/run-build.js) 09:35:29.839 at Object.onceWrapper (node:events:652:26) 09:35:29.839 at ChildProcess.emit …...

VUE的node包缓存很严重,问题及解决办法

以下是一些可能导致缓存问题的地方以及如何检查和解决这些问题的建议&#xff1a; 1. 检查依赖包的版本是否过时 某些依赖包可能有已知的缓存问题或性能问题。以下是需要特别注意的几个包&#xff1a; Vue CLI 相关&#xff1a; vue/cli-service 和 vue/cli-plugin-babel 的版…...

<C#>在 .NET 开发中,依赖注入, 注册一个接口的多个实现

在 .NET 开发里&#xff0c;有时一个接口会有多个实现类&#xff0c;此时就需要向依赖注入容器注册多个实现。下面会详细介绍不同场景下如何注册多个实现&#xff0c;以及怎样从容器中解析这些实现。 1. 注册多个实现 在 .NET 中&#xff0c;依赖注入容器可以通过不同方式注册…...

计算机视觉色彩空间全解析:RGB、HSV与Lab的实战对比

计算机视觉色彩空间全解析&#xff1a;RGB、HSV与Lab的实战对比 一、前言二、RGB 色彩空间​2.1 RGB 色彩空间原理​2.1.1 基本概念​2.1.2 颜色混合机制​ 2.2 RGB 在计算机视觉中的应用​2.2.1 图像读取与显示​2.2.2 颜色识别​2.2.3 RGB 色彩空间的局限性​ 三、HSV 色彩空…...

美食推荐小程序

用户端 1. **定位与筛选** - **精准定位**&#xff1a;根据用户所在位置&#xff0c;推荐周边美食餐厅。 - **筛选条件**&#xff1a;支持按菜系&#xff08;如川菜、粤菜&#xff09;、价格区间、评分、距离远近等筛选餐厅。 2. **餐厅展示** - **基本信息**&#xff1a;…...

使用django实现windows任务调度管理

在 Django 中实现 Windows 任务调度管理&#xff0c;你可以使用几种不同的方法。最常见的方法是使用 Django 自带的 celery 或者 django-background-tasks 库&#xff0c;或者使用 Windows 自带的任务计划程序。下面我会分别介绍这几种方法&#xff1a; 方法 1&#xff1a;使用…...

【Android】Android 打包 Release 崩溃问题全解析:Lint 错误、混淆类丢失及解决方法大全

摘要&#xff1a; 在 Android 项目的 Release 打包过程中&#xff0c;经常遇到诸如 Lint 校验失败、程序闪退、类找不到等问题。本文将详细分析 Android 打包时常见的崩溃原因&#xff0c;特别是如何应对 Lint 报错、混淆引发的类丢失&#xff08;NoClassDefFoundError&#xf…...

【Python 开源】你的 Windows 关机助手——PyQt5 版定时关机工具

&#x1f5a5;️ 你的 Windows 关机助手——PyQt5 版定时关机工具 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&#xff0c;秉着开源精神的…...

布局决定终局:基于开源AI大模型、AI智能名片与S2B2C商城小程序的战略反推思维

摘要&#xff1a;在商业竞争日益激烈的当下&#xff0c;布局与终局预判成为企业成功的关键要素。本文探讨了布局与终局预判的智慧性&#xff0c;强调其虽无法做到百分之百准确&#xff0c;但能显著提升思考能力。终局思维作为重要战略工具&#xff0c;并非一步到位的战略部署&a…...

vue3循环表单【以el-form组件为例】,如何校验所有表单,所有表单校验通过后提交

1.循环时&#xff0c;在组件标签上使用ref绑定组件实例 3.如何校验所有表单都通过后方可提交&#xff1f;利用promise.all()判断 代码如下&#xff1a; <template><div><!-- 循环渲染表单 --><el-formv-for"(formItem, index) in formList":…...

量子代理签名:量子时代的数字授权革命

1. 量子代理签名的定义与核心原理 量子代理签名&#xff08;Quantum Proxy Signature, QPS&#xff09;是经典代理签名在量子信息领域的延伸&#xff0c;允许原始签名者&#xff08;Original Signer&#xff09;授权给代理签名者&#xff08;Proxy Signer&#xff09;代为签署文…...

HTTPS代理的实际优势,如何选择HTTPS代理服务?

在数字化时代&#xff0c;网络请求的安全性和效率成为企业和个人用户关注的焦点。HTTPS代理作为一种强大的工具&#xff0c;不仅在数据安全方面表现出色&#xff0c;还在安全访问、突破地域限制以及支持复杂任务等方面展现出多样化的优势。本文将深入探讨HTTPS代理的实际优势&a…...

Java 中常见的数据结构

目录 1. List (列表) 2&#xff09;ArrayList 2&#xff09;LinkedList 2. Set (集合) 1&#xff09;HashSet 2&#xff09;TreeSet 3. Map (映射) 1&#xff09;HashMap 2&#xff09;TreeMap 4. Queue (队列) 1&#xff09;LinkedList (也实现了Queue接口) 2&…...

Transformer多卡训练初始化分布式环境:(backend=‘nccl‘)

Transformer多卡训练初始化分布式环境:(backend=‘nccl’) dist.init_process_group(backend=nccl)在多卡环境下初始化分布式训练环境,并为每个进程分配对应的 GPU 设备。下面为你逐行解释代码的含义: 1. 初始化分布式进程组 try:dist.init_process_group(backend=nccl) e…...

云曦月末断网考核复现

Web 先看一个BUUCTF中的文件一个上传题 [BUUCTF] 2020新生赛 Upload 打开后是一个文件上传页面 随便上传一个txt一句话木马后出现js弹窗&#xff0c;提示只能上传图片格式文件 说明有前端验证。我的做法是把一句话改为.jpg格式&#xff0c; 然后上传 访问发现虽然上传成功了…...

SQL Server AlwaysOn (SQL 查询数据详解及监控用途)

修正后的完整查询 SELECT ar.replica_server_name AS [副本名称],ar.availability_mode_desc AS [同步模式],DB_NAME(dbr.database_id) AS [数据库名称],dbr.database_state_desc AS [数据库状态],dbr.synchronization_state_desc AS [同步状态],dbr.synchronization_health_d…...

使用 Q - learning 算法解决迷宫路径规划问题

整体功能概述 这段 Python 代码实现了一个使用 Q - learning 算法解决迷宫路径规划问题的程序。智能体在给定的迷宫环境中学习如何找到从起点到终点的最优路径&#xff0c;以获得最大奖励。 模块导入 python import numpy as np import randomnumpy&#xff1a;用于处理数组…...

SqlYog无限试用方法

1、WinR ,输入 &#xff1a;regedit 回车 2、进入注册表&#xff0c;在 \HEYK_CURRENT_USER\Software\{*********-D8CE-4637-9BC7-93E************}下的【InD100】保存着SQLyog的使用天数 3、在【InD】上右键&#xff0c;点击删除该项&#xff0c;在重启SQLyog后注册表中会重…...

14 nginx 的 dns 缓存的流程

前言 这个是 2020年11月 记录的这个关于 nginx 的 dns 缓存的问题 docker 环境下面 前端A连到后端B 前端B连到后端A 最近从草稿箱发布这个问题的时候, 重新看了一下 发现该问题的记录中仅仅是 定位到了 nginx 这边的 dns 缓存的问题, 但是 并没有到细节, 没有到 具体的 n种…...

Spring Cloud Gateway 具体的实现案例

文章目录 前言✅ 1. **创建 Spring Boot 项目**Maven 依赖&#xff1a;Gradle 依赖&#xff1a; ✅ 2. **配置 application.yml 路由和过滤器**解释&#xff1a; ✅ 3. **创建自定义过滤器**3.1 **前置过滤器&#xff08;Pre Filter&#xff09;**3.2 **后置过滤器&#xff08;…...

css易混淆的知识点

子选择器 (>) vs 后代选择器 (空格) 子选择器 (>) 只匹配直接子元素。后代选择器 (空格) 匹配所有后代元素&#xff08;无论嵌套多深&#xff09;。 绝对定位vs相对定位 布局&#xff1a; justify-content 的作用 控制子元素在主轴上的分布方式。常见值包括 flex-start、…...

OpenCV 图形API(27)图像滤波-----膨胀函数dilate()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用特定的结构元素膨胀图像。 cv::gapi::dilate 是 OpenCV G-API 模块中的一个函数&#xff0c;用于对图像执行膨胀操作。膨胀是一种形态学操作…...

13. Git 远程仓库配置

基本步骤 以Gitee为例子&#xff0c;GitHub的步骤也基本一致 1.注册/登录 Gitee 账号 https://gitee.com/ 2.新建仓库 3.配置仓库 根据自己的喜好&#xff0c;配置即可。 4.生成SSH密钥 ssh-keygen -t ed25519 -C "你的邮箱example.com"-t ed25519&#xff1a;使…...

语音识别——根据声波能量、VAD 和 频谱分析实时输出文字

ASR(语音识别)是将音频信息转化为文字的技术。在实时语音识别中,一个关键问题是:如何决定将采集的音频数据输入大模型的最佳时机?固定时间间隔显然不够灵活,太短可能导致频繁调用模型,太长则会延迟文字输出。有没有更智能的方式?答案是肯定的。 一种常见的解决方案是使…...

netty中的ChannelHandler详解

Netty中的ChannelHandler是网络事件和数据处理的核心执行单元,负责处理I/O事件(如连接建立、数据读写)以及业务逻辑的实现。它通过ChannelPipeline形成责任链,实现事件的动态编排与传播。以下从功能分类、核心机制到实际应用进行详细解析: 1. ChannelHandler的核心功能与分…...

介绍一下freertos

FreeRTOS 是一款‌开源的实时操作系统&#xff08;RTOS&#xff09;‌&#xff0c;专为嵌入式系统和微控制器设计&#xff0c;以‌轻量级、高可靠性、低延迟‌著称。它广泛应用于物联网&#xff08;IoT&#xff09;、工业自动化、消费电子等领域。以下是详细介绍&#xff1a; ‌…...

使用克魔助手查看iOS 应用程序使用历史记录和耗能历史记录

使用克魔助手查看iOS 应用程序使用历史记录和耗能历史记录 功能概述 克魔助手无需越狱即可访问iOS上各个应用程序的历史记录&#xff0c;包括&#xff1a; 最近几个月的app的详细启动时间记录&#xff0c;结束时间&#xff0c;app使用的硬件组件应用的耗能具体情况&#xff…...

mysql和mongodb

1.mongodb 写入更快&#xff0c;数据结构频繁更新&#xff0c;这个不方便工程管理.另外会序列化成json格式&#xff0c;比如为json的成员建立索引&#xff0c;这都是比较损耗性能。字段太多&#xff0c;moondbjson名太多&#xff0c;导致数据冗余, moongodb频繁按字段更新&…...

介绍一下 ChibiOS

ChibiOS 是一款专为嵌入式系统设计的‌开源实时操作系统&#xff08;RTOS&#xff09;‌&#xff0c;以其‌硬实时性能、轻量化架构和高可移植性‌著称。它广泛应用于无人机、机器人、工业控制等领域&#xff0c;尤其在无人机飞控&#xff08;如 ArduPilot 的某些硬件平台&…...

《Vue Router实战教程》3.动态路由匹配

欢迎观看《Vue Router 实战&#xff08;第4版&#xff09;》视频课程 动态路由匹配 带参数的动态路由匹配 很多时候&#xff0c;我们需要将给定匹配模式的路由映射到同一个组件。例如&#xff0c;我们可能有一个 User 组件&#xff0c;它应该对所有用户进行渲染&#xff0c;…...

NLP高频面试题(四十)——什么是 BitFit?

BitFit(Bias-term Fine-tuning)是一种参数高效的微调方法,专注于在预训练模型中仅调整偏置项(bias term),而将其他参数保持不变。这种方法在自然语言处理领域,尤其是在中小规模数据集上,展现出了与全量微调相媲美的性能,同时显著减少了计算资源的消耗。 什么是 BitFi…...

react+Tesseract.js实现前端拍照获取/选择文件等文字识别OCR

需求背景 在开发过程中可能会存在用户上传一张图片后下方需要自己识别出来文字数字等信息&#xff0c;有的时候会通过后端来识别后返回&#xff0c;但是也会存在纯前端去识别的情况&#xff0c;这个时候就需要使用到Tesseract.js这个库了 附Tesseract.js官方&#xff08;htt…...

go:实现最简单区块链

1.新建文件夹命名为blockchain,在此文件夹下分别创建两个文件一个为block.go另一个为chain.go如下图所示: 2.写入代码: block.go package blockchainimport ("bytes""crypto/sha256""encoding/gob""log""strconv""ti…...

使用Python写入JSON、XML和YAML数据到Excel文件

在当今数据驱动的技术生态中&#xff0c;JSON、XML和YAML作为主流结构化数据格式&#xff0c;因其层次化表达能力和跨平台兼容性&#xff0c;已成为系统间数据交换的通用载体。然而&#xff0c;当需要将这类半结构化数据转化为具备直观可视化、动态计算和协作共享特性的载体时&…...

如何使用通义灵码玩转Linux - AI编程助手提升效率

一、引言 Linux 作为服务器常用的操作系统&#xff0c;其命令行界面、繁多的命令以及需要进行的配置等&#xff0c;都给初学者带来了不小的挑战。为了帮助初学者快速上手 Linux&#xff0c;本文将介绍如何使用通义灵码这一智能编码助手&#xff0c;提升在 Linux 环境下的开发效…...

主服务器和子服务器之间通过NFS实现文件夹共享

背景&#xff1a; 子服务器想做一个备份服务器 但是之前有很多文件是上传到本地的&#xff0c;于是服务要从本地读取文件 但是在不在同一台服务器中&#xff0c;读取就会有问题&#xff0c;想 实现在两者之间创建一个共享文件夹 一 NFS挂载步骤&#xff1a; 在主服务器&#…...

前端知识点---防抖(javascript)

什么是防抖 ? 防抖:单位时间内&#xff0c;频繁触发事件&#xff0c;只执行最后一次 举例: 百度输入框, 输入一个字母下面就会有提示 输入第二个字母下面的提示就会变 而别的浏览器只有在你输入结束之后才出现提示, 这就是做了防抖处理 使用场景: 搜索框搜索输入。只需用户…...

django rest framework相关面试题

django rest framework相关面试题 1.什么是restful规范 link link link link...

突破性能瓶颈:Java微服务多任务管理的架构设计与实践

摘要 本文深度解析Java微服务架构下的多任务管理机制&#xff0c;围绕串行任务、并行任务及跨服务器协同三大核心场景&#xff0c;结合线程池、任务队列、分布式调度算法等关键技术&#xff0c;探讨如何通过精细化的任务拆分、资源调度和容错设计实现系统高吞吐与低延迟。 关…...

为啥物联网用MQTT?

前言 都说物联网用MQTT&#xff0c;那分别使用Http和Mqtt发送“Hello”&#xff0c;比较一下就知道啦 HTTP HTTP请求报文由请求行、头部字段和消息体组成。一个最简单的HTTP POST请求如下&#xff1a; POST / HTTP/1.1 Host: example.com Content-Length: 5 Content-Type: …...

onenote的使用技巧以及不足之处

OneNote我用了三年了&#xff0c;感觉这软件还是记一些手写笔记会比较好吧&#xff0c;记和编程有关的就显然不如markdown了&#xff0c; 插入公式&#xff1a; 按alt输入公式&#xff0c;再按退出公式输入 不足之处&#xff1a; onenote是我用了很长时间的一款笔记软件&…...

人工智能在医疗设备中的最新应用案例与技术挑战?

人工智能&#xff08;AI&#xff09;在医疗设备中的应用正以前所未有的速度发展&#xff0c;带来了许多创新和改进。以下是一些最新的应用案例和相关的技术挑战&#xff1a; 最新应用案例 智能诊断和成像&#xff1a; AI技术在医学影像分析中得到了广泛应用。通过深度学习算法…...