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

(八)RestAPI 毛子(Unit Testing)


文章目录

  • 项目地址
  • 一、Unit Testing
    • 1.1 创建X unit 测试项目
      • 1. 创建项目目录
      • 2. 管理包
    • 1.2 创建CreateEntryDtoValidator测试
    • 1.3 创建CreateEntryDtoValidator测试
  • 二、Integration test
    • 2.1 创建Integration test环境
      • 1. 安装所需要的包
    • 2.2 配置基础设置
      • 1. 数据库链接DevHabitWebAppFactory
      • 2.创建测试共享类IntegrationTestCollection
      • 3. 注入登录用户
    • 2.3 添加测试用例
      • 1. 测试用户创建
      • 2. 测试添加Habits


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、Unit Testing

  • 适合单元测试的代码

在这里插入图片描述

1.1 创建X unit 测试项目

1. 创建项目目录

  • 创建测试
    在这里插入图片描述
  • 目录
    在这里插入图片描述

2. 管理包

  1. 修改Packages.props
    在这里插入图片描述
  2. 修改项目本身的包,并且添加项目引用到api项目
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><IsPackable>false</IsPackable></PropertyGroup><ItemGroup><PackageReference Include="coverlet.collector" /><PackageReference Include="Microsoft.NET.Test.Sdk" /><PackageReference Include="xunit" /><PackageReference Include="xunit.runner.visualstudio" /></ItemGroup><ItemGroup><ProjectReference Include="..\DevHabit\DevHabit.Api\DevHabit.Api.csproj" /></ItemGroup><ItemGroup><Using Include="Xunit" /></ItemGroup></Project>
  1. 在api的项目配置中添加,我们就可以引用internal 类型在Unitest里
    在这里插入图片描述

1.2 创建CreateEntryDtoValidator测试

  • 创建CreateEntryDtoValidatorTests用来测试
    在这里插入图片描述
namespace DevHabit.UnitTests.Validators;
public class CreateEntryDtoValidatorTests
{private readonly CreateEntryDtoValidator _validator = new();[Fact] // 用来定义不带参数的独立测试public async Task Validate_ShouldSucceed_WhenInputDtoIsValid(){// Arrangevar dto = new CreateEntryDto{HabitId = Habit.NewId(),Value = 1,Date = DateOnly.FromDateTime(DateTime.UtcNow)};// ActValidationResult validationResult = await _validator.ValidateAsync(dto);// AssertAssert.True(validationResult.IsValid);Assert.Empty(validationResult.Errors); //通过验证,错误列表为空}[Fact]public async Task Validate_ShouldFail_WhenHabitIdIsEmpty(){// Arrangevar dto = new CreateEntryDto{HabitId = string.Empty,Value = 1,Date = DateOnly.FromDateTime(DateTime.UtcNow)};// ActValidationResult validationResult = await _validator.ValidateAsync(dto);// AssertAssert.False(validationResult.IsValid); //验证失败ValidationFailure validationFailure = Assert.Single(validationResult.Errors); //检查错误列表里应该有且只有一个错误Assert.Equal(nameof(CreateEntryDto.HabitId), validationFailure.PropertyName); //验证这个错误是针对 HabitId 字段的}
}

1.3 创建CreateEntryDtoValidator测试

  • 为加密服务创建测试

public sealed class EncryptionServiceTests
{private readonly EncryptionService _encryptionService;public EncryptionServiceTests(){IOptions<EncryptionOptions> options = Options.Create(new EncryptionOptions{Key = Convert.ToBase64String(RandomNumberGenerator.GetBytes(32))});_encryptionService = new EncryptionService(options);}[Fact]public void EncryptAndDecrypt_ShouldReturnOriginalPlainText(){// Arrangeconst string plainText = "sensitive data";string cipherText = _encryptionService.Encrypt(plainText);// Actstring decryptedText = _encryptionService.Decrypt(cipherText);// AssertAssert.Equal(plainText, decryptedText);}
}

二、Integration test

  • 用于测试一个用例或者

2.1 创建Integration test环境

1. 安装所需要的包

  • 用于测试api
    在这里插入图片描述
  • 用于测试数据库
    在这里插入图片描述

2.2 配置基础设置

在这里插入图片描述

1. 数据库链接DevHabitWebAppFactory

  • 测试时,应用只连接到 DevHabitWebAppFactory 启动的那个 Postgres 容器。测试结束后,DisposeAsync() 会自动停止并清理容器
namespace DevHabit.IntegrationTests.Infrastructure;
public sealed class DevHabitWebAppFactory : WebApplicationFactory<Program>, IAsyncLifetime
{private readonly PostgreSqlContainer _postgresContainer = new PostgreSqlBuilder().WithImage("postgres:17.2").WithDatabase("devhabit").WithUsername("postgres").WithPassword("postgres").Build();protected override void ConfigureWebHost(IWebHostBuilder builder){builder.UseSetting("ConnectionStrings:Database", _postgresContainer.GetConnectionString());}public async Task InitializeAsync(){await _postgresContainer.StartAsync();}public new async Task DisposeAsync(){await _postgresContainer.StopAsync();}
}

2.创建测试共享类IntegrationTestCollection

  • 让多个测试类能共享同一个 DevHabitWebAppFactory
namespace DevHabit.IntegrationTests.Infrastructure;//让多个测试类能共享同一个 DevHabitWebAppFactory
[CollectionDefinition(nameof(IntegrationTestCollection))]
public sealed class IntegrationTestCollection : ICollectionFixture<DevHabitWebAppFactory>;

3. 注入登录用户

  • 由于测试api需要登录用户,所以创建用户并且保存token
namespace DevHabit.IntegrationTests.Infrastructure;//IClassFixture整个测试类共享一个 WebAppFactory
public abstract class IntegrationTestFixture(DevHabitWebAppFactory factory) : IClassFixture<DevHabitWebAppFactory>
{//1.定义了一个缓存的 HttpClient,用于存储登录过的、有认证 token 的客户端private HttpClient? _authorizedClient;//2.创建一个普通的(未登录的)HttpClientpublic HttpClient CreateClient() => factory.CreateClient();//3.创建已经登录好的 HttpClient 的方法public async Task<HttpClient> CreateAuthenticatedClientAsync(string email = "test@test.com",string password = "Test123!"){if (_authorizedClient is not null){return _authorizedClient;}HttpClient client = CreateClient();// Check if user existsbool userExists;using (IServiceScope scope = factory.Services.CreateScope()){using ApplicationDbContext dbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();userExists = await dbContext.Users.AnyAsync(u => u.Email == email);}if (!userExists){// Register a new userHttpResponseMessage registerResponse = await client.PostAsJsonAsync(Routes.Auth.Register,new RegisterUserDto{Email = email,Name = email,Password = password,ConfirmPassword = password});registerResponse.EnsureSuccessStatusCode();}// Login to get the tokenHttpResponseMessage loginResponse = await client.PostAsJsonAsync(Routes.Auth.Login,new LoginUserDto{Email = email,Password = password});loginResponse.EnsureSuccessStatusCode();AccessTokensDto? loginResult = await loginResponse.Content.ReadFromJsonAsync<AccessTokensDto>();if (loginResult?.AccessToken is null){throw new InvalidOperationException("Failed to get authentication token");}client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loginResult.AccessToken);_authorizedClient = client;return client;}
}
  • Routes.cs:测试使用的路由
namespace DevHabit.IntegrationTests.Infrastructure;
public static class Routes
{public static class Auth{public const string Register = "auth/register";public const string Login = "auth/login";}public static class Habits{public const string Create = "habits";}
}

2.3 添加测试用例

1. 测试用户创建

  • 测试用户注册
public sealed class AuthenticationTests(DevHabitWebAppFactory factory) : IntegrationTestFixture(factory)
{[Fact]public async Task Register_ShouldSucceed_WithValidParameters(){// Arrangevar dto = new RegisterUserDto{Name = "register@test.com",Email = "register@test.com",Password = "Test123!",ConfirmPassword = "Test123!"};HttpClient client = CreateClient();// ActHttpResponseMessage response = await client.PostAsJsonAsync(Routes.Auth.Register, dto);// AssertAssert.Equal(HttpStatusCode.OK, response.StatusCode);}[Fact]public async Task Register_ShouldReturnAccessTokens_WithValidParameters(){// Arrangevar dto = new RegisterUserDto{Name = "register1@test.com",Email = "register1@test.com",Password = "Test123!",ConfirmPassword = "Test123!"};HttpClient client = CreateClient();// ActHttpResponseMessage response = await client.PostAsJsonAsync(Routes.Auth.Register, dto);response.EnsureSuccessStatusCode();// AssertAccessTokensDto? accessTokensDto = await response.Content.ReadFromJsonAsync<AccessTokensDto>();Assert.NotNull(accessTokensDto);}
}

2. 测试添加Habits

  • 测试创建CreateHabit
public sealed class HabitsTests(DevHabitWebAppFactory factory) : IntegrationTestFixture(factory)
{[Fact]public async Task CreateHabit_ShouldSucceed_WithValidParameters(){// Arrangevar dto = new CreateHabitDto{Name = "Read Books",Description = "Read technical books to improve skills",Type = HabitType.Measurable,Frequency = new FrequencyDto{Type = FrequencyType.Daily,TimesPerPeriod = 1},Target = new TargetDto{Value = 30,Unit = "pages"}};HttpClient client = await CreateAuthenticatedClientAsync();// ActHttpResponseMessage response = await client.PostAsJsonAsync(Routes.Habits.Create, dto);// AssertAssert.Equal(HttpStatusCode.Created, response.StatusCode);Assert.NotNull(response.Headers.Location);Assert.NotNull(await response.Content.ReadFromJsonAsync<HabitDto>());}
}

相关文章:

(八)RestAPI 毛子(Unit Testing)

文章目录 项目地址一、Unit Testing1.1 创建X unit 测试项目1. 创建项目目录2. 管理包 1.2 创建CreateEntryDtoValidator测试1.3 创建CreateEntryDtoValidator测试 二、Integration test2.1 创建Integration test环境1. 安装所需要的包 2.2 配置基础设置1. 数据库链接DevHabitW…...

德州仪器(TI)—TDA4VM芯片详解(2)—产品应用和介绍

写在前面 本系列文章主要讲解德州仪器&#xff08;TI&#xff09;TDA4VM芯片的相关知识&#xff0c;希望能帮助更多的同学认识和了解德州仪器&#xff08;TI&#xff09;TDA4VM芯片。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 错过其他章节的同学…...

vue2,3:v-model的语法糖

Vue2的v-model 语法糖 **1. **v-model 的作用 v-model 是 Vue 中用于实现双向数据绑定的指令&#xff0c;主要用于表单元素&#xff08;如 、、&#xff09;和自定义组件。它简化了数据与视图之间的同步&#xff0c;使得开发者可以方便地处理用户输入。 **2. **v-model 的语…...

【深度学习】#10 注意力机制

主要参考学习资料&#xff1a; 《动手学深度学习》阿斯顿张 等 著 【动手学深度学习 PyTorch版】哔哩哔哩跟李牧学AI 目录 注意力提示生物学中的注意力提示查询、键和值 注意力汇聚注意力评分函数掩蔽softmax操作加性注意力缩放点积注意力 Bahdanau注意力多头注意力自注意力和位…...

Modbus总线协议智能网关协议转换案例解析:提升系统兼容性

Modbus是一种串行通信协议&#xff0c;是Modicon公司(现在的施耐德电气,Schneider Electic)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(Defacto)&#xff0c;并日现在是工业电子设备之间常用的连接方式 Modbus是一种串行通信协…...

echarts自定义图表--仪表盘

基于仪表盘类型的自定义表盘 上图为3层结构组成 正常一个仪表盘配置要在外圈和内圈之间制造一条缝隙间隔 再创建一个仪表盘配置 背景透明 进度条拉满 进度条颜色和数据的背景相同开始处的线 又一个仪表盘配置 数值固定一个比较小的值 <!DOCTYPE html> <html><h…...

第五章:Execution Flow Framework

Chapter 5: Execution Flow Framework 从消息记忆到执行流程&#xff1a;如何让多个AI“同事”协同完成复杂任务&#xff1f; 在上一章的消息与记忆系统中&#xff0c;我们已经能让AI记住之前的对话内容。但你是否想过&#xff1a;如果用户要求“预订从北京到上海的高铁&#…...

01 C++概述

一、C语言发展史 起源与演进 • 1960s&#xff1a;剑桥大学Martin Richards开发BCPL语言&#xff0c;用于系统软件开发。 • 1970年&#xff1a;贝尔实验室Ken Thompson在BCPL基础上发明B语言。 • 1972年&#xff1a;Dennis Ritchie和Brian Kernighan设计出C语言&#xff0c;兼…...

Kotlin DSL 深度解析:从 Groovy 迁移的困惑与突破

引言 Gradle 作为现代构建工具&#xff0c;支持 Groovy 和 Kotlin 两种 DSL&#xff08;领域特定语言&#xff09;。Kotlin DSL 因其类型安全和更好的 IDE 支持逐渐流行&#xff0c;但它的语法设计却让许多开发者感到困惑&#xff0c;尤其是从 Groovy 迁移时。 本文将从 Kotl…...

2025年二级造价师考点总结

二级造价师考点总结 一、建设工程造价管理 工程造价构成&#xff1a;重点掌握建筑安装工程费&#xff08;人工费、材料费、机械费、企业管理费、利润、规费、税金&#xff09;的组成及计算。 计价依据&#xff1a;熟悉工程量清单计价规范&#xff0c;掌握定额计价与清单计价的…...

Typecho博客使用阿里云cdn和oss:handsome主题进阶版

Typecho使用阿里云cdn和oss 设置前需要保证阿里云cdn和oss已配置好且可以正常使用一、准备工作二、修改 Handsome 主题的静态资源链接方法 1&#xff1a;直接修改主题文件&#xff08;推荐&#xff09;方法 2&#xff1a;通过主题设置自定义&#xff08;方便&#xff09; 三、处…...

知识体系_用户研究_用户体验度量模型

1 用户体验度量常见模型 1.1 满意度(CSAT/PSAT) CSAT(Customer Satisfaction)指客户满意度&#xff0c;PAST(Product Satisfaction)指产品满意度。顾名思义&#xff0c;其用于衡量客户对产品或服务的体验度量指标。在用户完成某个产品或某项服务的体验后&#xff0c;对其进行…...

邮件分类特征维度实验分析

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…...

Linux服务之Nginx服务部署及基础配置

目录 一.Nginx介绍 1.Nginx功能介绍 2.基础特性 3.Web服务相关的功能 4.I/O模型相关概念 5.nginx模块 6.Nginx文件存放位置 7.Nginx事件驱动模型 二.平滑升级及信号使用 1.Nginx 程序当作命令使用 2.信号类型 3.平滑升级nginx 4.回滚 三.Nginx调优 1.隐藏版本号或…...

Centos小白之在CentOS8.5中安装Rabbitmq 3.10.8

注意事项 安装以及运行等其他操作&#xff0c;要使用root账号进行&#xff0c;否则会遇到很多麻烦的事情。 使用命令行进行远程登录 ssh root192.168.0.167 安装make 执行安装命令 yum -y install make gcc gcc-c kernel-devel m4 ncurses-devel openssl-devel这里有可能会…...

基于单片机的游泳馆智能管理系统设计与实现

标题:基于单片机的游泳馆智能管理系统设计与实现 内容:1.摘要 随着游泳馆规模的不断扩大和管理需求的日益提高&#xff0c;传统的管理方式已难以满足高效、精准的管理要求。本文旨在设计并实现一种基于单片机的游泳馆智能管理系统。采用单片机作为核心控制单元&#xff0c;结合…...

深度相机(一)——深度相机模型及用途介绍

一、深度相机概述 深度相机&#xff0c;又称 3D 相机&#xff0c;是一种能够获取场景中物体深度信息&#xff08;即物体到相机的距离&#xff09;的设备。与传统相机只能拍摄二维平面图像不同&#xff0c;深度相机不仅能记录物体的颜色和纹理&#xff0c;还能通过特定技术手段测…...

【Torch】nn.Conv1d、nn.Conv2d、nn.Conv3d算法详解

1. nn.Conv1d 1.1 输入&#xff08;Input&#xff09;和输出&#xff08;Output&#xff09; 输入张量 形状&#xff1a;(batch_size, in_channels, length) batch_size&#xff1a;一次过网络的样本数in_channels&#xff1a;每个样本的通道数&#xff08;特征维度&#xff0…...

Android WebRTC回声消除

文章目录 安卓可用的回声消除手段各种回声消除技术优缺点WebRTC回声消除WebRTC回声消除回声消除处理流程WebRTC AECM APP 安卓可用的回声消除手段 硬件回声消除 使用 AudioRecord 的 VOICE_COMMUNICATION 模式&#xff1a;通过 AudioRecord 的 VOICE_COMMUNICATION 音频源可以…...

[Linux运维] [Ubuntu/Debian]在Lightsail Ubuntu服务器上安装Python环境的完整指南

在之前的教程中&#xff0c;我们已经讲过如何开通亚马逊Lightsail服务器并安装宝塔面板。今天&#xff0c;我们来进一步补充&#xff1a;如何在Lightsail上的Ubuntu/Debian系统中安装和配置Python开发环境。 本教程不仅适用于Lightsail服务器&#xff0c;也适用于所有使用Ubunt…...

2025医疗领域AI发展五大核心趋势与路线研究

引言 人工智能技术正在全球范围内深刻改变医疗服务的提供方式,推动全球医疗的普惠化、技术合作、产业升级以及公共卫生防控发生巨变[0]。医疗AI的浪潮奔涌向前,从2024年开始,生成式AI的爆发式发展更是将医疗AI推到了新的十字路口[1]。在这一背景下,本报告将深入探讨医疗领…...

【学习笔记】机器学习(Machine Learning) | 第六周|过拟合问题

机器学习&#xff08;Machine Learning&#xff09; 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习&#xff08;Machine Learning&#xff09;简要声明 摘要过拟合与欠拟合问题一、回归问题中的过拟合1. 欠拟合&#xff08;Underfit&#x…...

【MQ篇】RabbitMQ之惰性队列!

目录 引言&#xff1a;当“生产”大于“消费”&#xff0c;队列就“胖”了&#xff01;肥宅快乐队列&#xff1f;&#x1f914;队列界的“躺平”大师&#xff1a;惰性队列&#xff08;Lazy Queues&#xff09;驾到&#xff01;&#x1f634;如何“激活”你的队列的“惰性”属性…...

计算机视觉——通过 OWL-ViT 实现开放词汇对象检测

介绍 传统的对象检测模型大多是封闭词汇类型&#xff0c;只能识别有限的固定类别。增加新的类别需要大量的注释数据。然而&#xff0c;现实世界中的物体类别几乎无穷无尽&#xff0c;这就需要能够检测未知类别的开放式词汇类型。对比学习&#xff08;Contrastive Learning&…...

第二部分:网页的妆容 —— CSS(下)

目录 6 布局基础&#xff1a;Display 与 Position - 元素如何排列和定位6.1 小例子6.2 练习 7 Flexbox 弹性布局&#xff1a;一维布局利器7.1 小例子7.2 练习 8 Grid 网格布局&#xff1a;强大的二维布局系统8.1 小例子8.2 练习 9 响应式设计与媒体查询&#xff1a;适应不同设备…...

vite项目tailwindcss4的使用

1、安装taillandcss 前几天接手了一个项目&#xff0c;看到别人用tailwindcss节省了很多css代码的编写&#xff0c;所以自己也想在公司项目中接入tailwindcss。 官网教程如下&#xff1a; Installing Tailwind CSS with Vite - Tailwind CSS 然而&#xff0c;我在vite中按…...

css中:is和:where 伪函数

在 CSS 里&#xff0c;:is() 属于伪类函数&#xff0c;其作用是对一组选择器进行匹配&#xff0c;只要元素与其中任何一个选择器相匹配&#xff0c;就可以应用对应的样式规则。以下是详细介绍&#xff1a; 基本语法 :is() 函数的参数是一个或多个选择器&#xff0c;各个选择器之…...

线下零售数据采集:在精度与效率之间寻找平衡点

线下零售数据采集&#xff1a;在精度与效率之间寻找平衡点 为什么线下零售必须重视数据采集&#xff1f; 随着零售行业竞争加剧&#xff0c;门店执行的标准化与透明化成为供应链协作、销售提升的基础工作。 POG&#xff08;陈列执行规范&#xff09;的落地效果、陈列策略的调整…...

【Robocorp实战指南】Python驱动的开源RPA框架

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1&#xff1a;网页数据抓取案例2&#xff1a;Excel报表生成 运行结果验证 三、性能对比测试方…...

新ubuntu物理机开启ipv6让外网访问

Ubuntu 物理机 SSH 远程连接与 IPv6 外网访问测试指南 1. 通过 SSH 远程连接 Ubuntu 物理机 1.1 安装 SSH 服务 sudo apt update sudo apt install openssh-server1.2 检查 SSH 服务状态 sudo systemctl status ssh确认出现 active (running)。 1.3 获取物理机 IP 地址 i…...

驱动开发硬核特训 │ Regulator 子系统全解

一、Regulator子系统概述 在 Linux 内核中&#xff0c;Regulator 子系统是专门用于管理电源开关、电压调整、电流控制的一套完整框架。 它主要解决以下问题&#xff1a; 设备需要的电压通常不一样&#xff0c;如何动态调整&#xff1f;有些设备休眠时需要关闭供电&#xff0…...

入门版 鸿蒙 组件导航 (Navigation)

入门版 鸿蒙 组件导航 (Navigation) 注意&#xff1a;使用 DevEco Studio 运行本案例&#xff0c;要使用模拟器&#xff0c;千万不要用预览器&#xff0c;预览器看看 Navigation 布局还是可以的 效果&#xff1a;点击首页&#xff08;Index&#xff09;跳转到页面&#xff08…...

怎样将visual studio 2015开发的项目 保存为2010版本使用

用的老旧电脑跑vs2015太慢了&#xff0c;实在忍不了了&#xff01; 想把用 Visual Studio 2015 的做的项目保存为 Visual Studio 2010 兼容的格式&#xff0c;以后都使用2010写了。自己在网上搜了一下&#xff0c;亲测以下步骤可以的 手动修改解决方案和项目文件 修改解决方案…...

【学习笔记】软件测试流程-测试设计阶段

软件测试设计阶段这个阶段主要工作是编写测试用例。 什么是测试用例&#xff1f; 测试用例&#xff08;TestCase&#xff09;是为项目需求而编制的一组测试输入、执行条件以及预期结果&#xff0c;以便测试某个程序是否满足客户需求。简而言之&#xff0c;测试用例是每一个测…...

Rust 学习笔记:关于切片的两个练习题

Rust 学习笔记&#xff1a;关于切片的两个练习题 Rust 学习笔记&#xff1a;关于切片的两个练习题引用和切片引用的大小以下程序能否通过编译&#xff1f; Rust 学习笔记&#xff1a;关于切片的两个练习题 参考视频&#xff1a; https://www.bilibili.com/video/BV1GrDQYeEzS…...

BeeWorks企业内部即时通讯软件支持国产化,已在鸿蒙系统上稳定运行

一、企业用户面临的困境与痛点 一些企业用的即时通讯软件比较旧&#xff0c;存在的问题不仅影响了日常工作的正常开展&#xff0c;也阻碍了企业信息化建设的进程&#xff1a; ● 国产系统与移动端不兼容&#xff1a;仅支持Windows和MAC系统&#xff0c;无法在银河麒麟、统信U…...

java对文字按照语义切分

实现目标 把一段文本按照一个完整的一句话为单元进行切分。如&#xff1a;以逗号&#xff0c;感叹号结尾看作是一个句子。 实现方案 StanfordCoreNLP切分 引入依赖 <dependency><groupId>edu.stanford.nlp</groupId><artifactId>stanford-corenlp<…...

华纳云:centos如何实现JSP页面的动态加载

JSP(JavaServer Pages)作为Java生态中常用的服务器端网页技术&#xff0c;具有动态内容生成、可扩展性强、与Java无缝结合等优势。 而CentOS作为一款稳定、高效、安全的Linux服务器操作系统&#xff0c;非常适合部署JSP应用。 想要让JSP页面实现动态更新加载&#xff0c;避免…...

Android 消息队列之MQTT的使用(二):会话+消息过期机制,设备远程控制,批量控制实现

目录 一、实际应用场景 室内温湿度数据上传设备远程控制批量控制实现 二、会话管理、消息过期设置 4.1 会话管理 Clean Session参数 新旧会话模式对比典型应用场景 4.2 消息过期设置 MQTT 5.0消息过期机制 Message Expiry Interval属性QoS级别影响 三、实际应用场景 …...

一、JVM基础概念

一、JVM的设计目标 一次编译&#xff0c;到处运行(跨平台) ➔ Java编译成字节码&#xff0c;由JVM在不同平台解释/编译执行&#xff0c;实现跨平台。 内存管理与垃圾回收 ➔ JVM统一负责内存分配和回收&#xff0c;降低内存泄漏的风险。 性能优化 ➔ JIT&#xff08;即时编译…...

深度学习---Pytorch概览

一、PyTorch 是什么&#xff1f; 1. 定义与定位 开源深度学习框架&#xff1a;由 Facebook&#xff08;Meta&#xff09;AI 实验室开发&#xff0c;基于 Lua 语言的 Torch 框架重构&#xff0c;2017 年正式开源&#xff0c;主打动态计算图和易用性。核心优势&#xff1a;灵活…...

第33周JavaSpringCloud微服务 分布式综合应用

第33周JavaSpringCloud微服务 分布式综合应用 一、分布式综合应用概述 分布式知识体系内容广泛&#xff0c;主要包括分布式事务、分布式锁、RabbitMQ等消息中间件的应用以及跨域问题的解决。 1.1 课程重点内容介绍 分布式事务 &#xff1a;在大型项目中普遍存在&#xff0c;…...

Paramiko 完全指南

目录 Paramiko 概述核心功能与模块框架安装与依赖基础用法与案例详解 SSH 连接与命令执行密钥认证SFTP 文件传输交互式会话端口转发 高级功能与实战技巧常见问题与解决方案总结与资源推荐 1. Paramiko 概述 是什么&#xff1f; Paramiko 是一个纯 Python 实现的 SSHv2 协议库…...

夜莺监控V8(Nightingale)二进制部署教程(保姆级)

夜莺监控部署 前置工作 1. 部署好mysql 2. 部署好redis 3. 部署好prometheus夜莺压缩包下载 本教程基于Centos7系统下的二进制方式部署&#xff0c;先去官网进行压缩包下载 在系统创建/opt/n9etest目录,并将压缩包拖进目录 mkdir /opt/n9etest进入/opt/n9etest&#xff0…...

鸿蒙应用开发 知识点 官网快速定位表

ArkTS 语言介绍 ArkTS 语言介绍 基础入门 资源分类与访问 添加组件(基础组件) 显示图片 (Image) 按钮 (Button) 单选框 (Radio) 切换按钮 (Toggle) 进度条 (Progress) 视频播放 (Video) 使用文本 文本显示 (Text/Span) 文本输入 (TextInput/TextArea) 使用弹窗 使用弹…...

【神经网络与深度学习】两种加载 pickle 文件方式(joblib、pickle)的差异

引言 从深度学习应用到数据分析的多元化需求出发&#xff0c;Python 提供了丰富的工具和模块&#xff0c;其中 pickle 和 joblib 两种方式在加载数据文件方面表现尤为突出。不同场景对性能、兼容性以及后续处理的要求不尽相同&#xff0c;使得这两种方式各显优势。本文将通过深…...

quickbi finebi 测评(案例讲解)

quickbi & finebi 测评 国产BI中入门门槛比较低的有两个&#xff0c;分别是quickbi和finebi。根据我的经验通过这篇文章做一个关于这两款BI的测评文章。 quickbi分为个人版、高级版、专业版、私有化部署四种。这篇文章以quickbi高级版为例&#xff0c;对quickbi进行分享。…...

vue的生命周期 以及钩子

最早可以在created 时调用后端接口获取数据&#xff0c;因为beforecreated的时候 那个data 都还还是初始化出来 修改数据的时候触发 update 案例1&#xff1a;create 案例2:一进来页面获取搜索框焦点 echarts 饼图渲染 初始化dom后才去准备实例&#xff0c;所以必须要在dom之后…...

Mariadb 防火墙服务器和端口:mysql | 3306

Centos7 Mariadb 理解&#xff1a;Mariadb数据库就类似于我们生活中常见的Excel。 主要工作原理就是我们创造一个数据库其中创造一个数据表再在数据表中输入内容&#xff0c;分为三类。在详细点就是打开Excel&#xff08;数据库&#xff09;&#xff0c;我们在其中加入…...

爬虫学习笔记(二)--web请求过程

Web请求全过程&#xff08;重要&#xff09; 从输入完网址&#xff08;如输入百度网址&#xff09;到返回页面以及页面中的数据这一完整的过程发生了什么事情&#xff1f; 服务器端渲染 在服务器端直接把数据和html整合&#xff0c;统一返回给浏览器&#xff0c;在页面源代码…...