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

WebApi配置Swagger、Serilog、NewtonsoftJson、Sqlsugar、依赖注入框架Autofac、MD5加密

文章目录

  • 项目准备
    • 1、创建WebApi项目
    • 配置Swagger、Serilog、NewtonsoftJson
      • NewtonsoftJson
      • Swagger
      • Serilog
    • 使用ORM框架`SqlSugar`
    • 创建Service类库构成MVC框架
    • 使用AutoFac进行依赖注入
  • 创建用户登录接口
      • 添加用户时进行安全防护

项目准备

1、创建WebApi项目

配置Swagger、Serilog、NewtonsoftJson

NewtonsoftJson

引入Microsoft.AspNetCore.Mvc.NewtonsoftJson的包

编写配置代码,在启动类中使用Program

/*Json格式化*/
builder.Services.AddControllers().AddNewtonsoftJson(options =>
{options.SerializerSettings.ContractResolver = new DefaultContractResolver();options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
});

Swagger

使用扩展的方式进行swagger注释的配置

using System.Reflection;
using Microsoft.OpenApi.Models;
using noteVersion.utils;namespace noteVersion.ExtTool;public static class SwaggerExt
{/// <summary>/// 添加Swagger扩展/// </summary>public static void AddSwaggerExt(this IServiceCollection services){services.AddSwaggerGen(c =>{/*版本控制*/typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>{c.SwaggerDoc(version, new OpenApiInfo { Title = "NoteVersion Api", Version = version });});/*添加注释*/var xmlFile = $"{Assembly.GetEntryAssembly().GetName().Name}.xml";var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);c.IncludeXmlComments(xmlPath);});}/// <summary>/// 使用Swagger扩展/// </summary>public static void UseSwaggerExt(this WebApplication application){application.UseSwagger();application.UseSwaggerUI(c =>{foreach (var item in typeof(ApiVersion).GetEnumNames()){c.SwaggerEndpoint($"/swagger/{item}/swagger.json", $"WebAread Api {item}版本");}});}
}

在启动类中使用Program

//注册扩展
builder.Services.AddSwaggerExt();
//使用扩展
app.UseSwaggerExt();

在项目的属性文件里配置开启文档生成projrct.csproj

<GenerateDocumentationFile>True</GenerateDocumentationFile>

Serilog

下载Serilog.AspNetCore

编写log扩展(依赖注入方式使用插件,还有配置文件方式等)

using Serilog;
using Serilog.Events;namespace noteVersion.ExtTool;public static class SerilogExt
{public static void AddSerilogExt(this WebApplicationBuilder builder){builder.Services.AddSerilog(cfg =>{cfg.MinimumLevel.Information().WriteTo.File("Logs/log.txt", rollingInterval: RollingInterval.Day, restrictedToMinimumLevel: LogEventLevel.Information).WriteTo.File("Logs/Errors/log.txt", rollingInterval: RollingInterval.Day, restrictedToMinimumLevel: LogEventLevel.Error);});}
}

在Program里注册Serilog

builder.AddSerilogExt();

使用在Controller类里

using Microsoft.AspNetCore.Mvc;namespace noteVersion.Controllers;
/// <summary>
/// 用户
/// </summary>
[ApiController]
[Route("[Controller]/[Action]")]
public class UserController : ControllerBase
{private readonly ILogger<UserController> _logger;private int a = 27;public UserController(ILogger<UserController> logger){_logger = logger;}/// <summary>/// 测试/// </summary>/// <returns></returns>[HttpGet]public async Task<IActionResult> Test(){_logger.LogInformation($"{typeof(UserController).FullName}:{nameof(Test)}\n log测试{a}");return Ok("测试成功");}
}

使用ORM框架SqlSugar

下载SqlSugarCore

编写json连接字符串在appsettings.json

 "SqlSugar": {"ConnectString": "server = 127.0.0.1; Database = test; Uid = root; Pwd = root; AllowLoadLocalInfile = true;"},

创建Helper类库进行sqlsugar配置

由于Sqlsugar官方网站建议不要让SqlClient进行上下文的联动,所以一个块里new一个Sqlclient。

于是我使用传参的方式进行实例化时的配置。

using Microsoft.Extensions.Configuration;
using SqlSugar;namespace WebReadSite.DataAccess;
public class DbContext
{private readonly IConfiguration _configuration;private SqlSugarClient _dbClient;public DbContext(IConfiguration configuration){_configuration = configuration;InitializeDatabase();}private void InitializeDatabase(){string connectionString = _configuration["SqlSugar:ConnectString"];_dbClient = new SqlSugarClient(new ConnectionConfig(){ConnectionString = connectionString,DbType = DbType.MySql,IsAutoCloseConnection = true});}public SqlSugarClient GetDbClient(){return _dbClient;}
}

创建Models类库进行数据实体的配置

using SqlSugar;namespace Models;[SugarTable(tableName: "Users")]
public class User
{[SugarColumn(IsPrimaryKey = true)] public string USERID { get; set; }public string USERNAME { get; set; }public string EMAIL { get; set; }public string PASSWORD { get; set; }public DateTime CREATEAT { get; set; }public DateTime UPDATEAT { get; set; }
}

Controller类中使用Sqlsugar

使用IConfiguration读取Json配置,在方法里使用SqlClient执行插入

using Microsoft.AspNetCore.Mvc;
using Models;
using SqlSugar;
using WebReadSite.DataAccess;namespace noteVersion.Controllers;
/// <summary>
/// 用户
/// </summary>
[ApiController]
[Route("[Controller]/[Action]")]
public class UserController : ControllerBase
{private readonly ILogger<UserController> _logger;IConfiguration configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();public UserController(ILogger<UserController> logger){_logger = logger;}/// <summary>/// 测试/// </summary>/// <returns></returns>[HttpGet]public async Task<IActionResult> Test(){DbContext dbContext = new DbContext(configuration);SqlSugarClient dbClient = dbContext.GetDbClient();dbClient.Insertable(new User() { USERID = Guid.NewGuid().ToString(), USERNAME = "jack" }).ExecuteCommand();_logger.LogInformation($"{typeof(UserController).FullName}:{nameof(Test)}\n log测试");return Ok("测试成功");}
}

创建Service类库构成MVC框架

创建IServiceService类库

使用AutoFac进行依赖注入

安装Autofac包和Autofac.Extensions.DependencyInjection

创建Autofac扩展

using System.Reflection;
using Autofac;
using Autofac.Extensions.DependencyInjection;namespace noteVersion.ExtTool;public static class AutofacExt
{/// <summary>/// Autofac使用dll注入/// </summary>/// <param name="builder"></param>/// <exception cref="Exception"></exception>public static void AddAutofac(this WebApplicationBuilder builder){var basePath = AppContext.BaseDirectory;var servicesDllFile = Path.Combine(basePath, "noteVersion.Service.dll"); //服务层if (!(File.Exists(servicesDllFile) && File.Exists(servicesDllFile))){throw new Exception("service.dll 丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin 文件夹,并拷贝。");}//使用IOC工厂类builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());// 获取 Repository.dll 程序集服务,并注册var assemblysRepository = Assembly.LoadFrom(servicesDllFile);builder.Host.ConfigureContainer<ContainerBuilder>(build =>{build.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces().InstancePerDependency();});} 
}

Program进行注册

builder.AddAutofac();

使用在Controller中

注入了IUserManager类

using Microsoft.AspNetCore.Mvc;
using Models;
using Service;
using IService;
using WebReadSite.DataAccess;namespace noteVersion.Controllers;/// <summary>
/// 用户
/// </summary>
[ApiController]
[Route("[Controller]/[Action]")]
public class UserController : ControllerBase
{private readonly ILogger<UserController> _logger;private readonly IUserManager _userManager;private readonly IConfiguration _configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();/// <summary>/// 构造函数/// </summary>/// <param name="logger"></param>/// <param name="userManager"></param>public UserController(ILogger<UserController> logger,IUserManager userManager){_logger = logger;_userManager = userManager;}/// <summary>/// 测试/// </summary>/// <returns></returns>[HttpGet]public async Task<IActionResult> Test(){var dbContext = new DbContext(_configuration);var dbClient = dbContext.GetDbClient();await dbClient.Insertable(new User() { USERID = Guid.NewGuid().ToString(), USERNAME = "jack" }).ExecuteCommandAsync();_logger.LogInformation($"{typeof(UserController).FullName}:{nameof(Test)}\n log测试");return Ok("测试成功");}/// <summary>/// 添加用户/// </summary>/// <returns></returns>[HttpGet]public async Task<IActionResult> AddUser(string name, string email, string password){try{var result =await _userManager.CreateUser(name, email, password);return Ok(result);}catch (Exception e){Console.WriteLine(e);return BadRequest(e.Message);}}
}

创建用户登录接口

  1. 用户管理(User Management)
    • 这个模块负责用户账户的创建、修改和删除操作。它通常包括注册新用户、更新用户信息、重置密码等功能。

Service类库下的UserManager

using System.Runtime.InteropServices.JavaScript;
using IService;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Models;
using WebReadSite.DataAccess;namespace Service;public class UserManager : IUserManager
{private readonly ILogger<UserManager> _logger;IConfiguration configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();public UserManager(ILogger<UserManager> logger){_logger = logger;}public UserManager(){}/// <summary>/// 创建用户/// </summary>public async Task<int> CreateUser(string name, string email, string password){var dbContext = new DbContext(configuration);var dbClient = dbContext.GetDbClient();try{await dbClient.BeginTranAsync();var result = await dbClient.Insertable(new User(){USERID = Guid.NewGuid().ToString(),USERNAME = name, EMAIL = email, PASSWORD = password,CREATEAT = DateTime.Now}).ExecuteCommandAsync();await dbClient.CommitTranAsync();return result;}catch (Exception e){_logger.LogInformation($"{typeof(UserManager).FullName}-{nameof(CreateUser)}:{e.Message}");await dbClient.RollbackTranAsync(); //数据回滚throw new Exception("创建用户失败");}}public void UpdateUser(){try{}catch (Exception e){_logger.LogInformation($"{typeof(UserManager).FullName}-{nameof(CreateUser)}:{e.Message}");throw;}}public void DeleteUser(){try{}catch (Exception e){_logger.LogInformation($"{typeof(UserManager).FullName}-{nameof(CreateUser)}:{e.Message}");throw;}}
}

在Controller中使用(同上上)

 /// <summary>/// 添加用户/// </summary>/// <returns></returns>[HttpGet]public async Task<IActionResult> AddUser(string name, string email, string password){try{var result =await _userManager.CreateUser(name, email, password);return Ok(result);}catch (Exception e){Console.WriteLine(e);return BadRequest(e.Message);}}

添加用户时进行安全防护

使用Post传输且用body传输

/// <summary>/// 添加用户/// </summary>/// <returns></returns>[HttpPost]public async Task<IActionResult> AddUser(UserInfo userInfo){try{var result =await _userManager.CreateUser(userInfo.name, userInfo.email, userInfo.password);return Ok(result);}catch (Exception e){Console.WriteLine(e);return BadRequest(e.Message);}}

*添加MD5加密,之后保存进数据库UserManager*类

 /// <summary>/// 创建用户/// </summary>public async Task<int> CreateUser(string name, string email, string password){var dbContext = new DbContext(configuration);var dbClient = dbContext.GetDbClient();try{await dbClient.BeginTranAsync();var result = await dbClient.Insertable(new User(){USERID = Guid.NewGuid().ToString(),USERNAME = name, EMAIL = email, PASSWORD = GetMD5Encryption(password),CREATEAT = DateTime.Now}).ExecuteCommandAsync();await dbClient.CommitTranAsync();return result;}catch (Exception e){_logger.LogInformation($"{typeof(UserManager).FullName}-{nameof(CreateUser)}:{e.Message}");await dbClient.RollbackTranAsync(); //数据回滚throw new Exception("创建用户失败");}} /// <summary>/// 获取MD5算法字符串/// </summary>/// <param name="passWord"></param>/// <returns></returns>public string GetMD5Encryption(string passWord){// 创建一个 MD5 实例using (MD5 md5Hash = MD5.Create()){// 将输入字符串转换为字节数组,并计算哈希值byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(passWord));// 创建一个 StringBuilder 来收集字节并创建字符串StringBuilder sBuilder = new StringBuilder();// 将每个字节的哈希值转换为十六进制并追加到字符串构建器for (int i = 0; i < data.Length; i++){sBuilder.Append(data[i].ToString("x2")); // 使用 "x2" 格式化符将每个字节转换为十六进制}// 返回十六进制字符串return sBuilder.ToString();}}

TODO:用户登录后进行JWT校验,校验通过后进行单点登录,之后进行文件的上传、文件列表的获取

相关文章:

WebApi配置Swagger、Serilog、NewtonsoftJson、Sqlsugar、依赖注入框架Autofac、MD5加密

文章目录 项目准备1、创建WebApi项目配置Swagger、Serilog、NewtonsoftJsonNewtonsoftJsonSwaggerSerilog 使用ORM框架SqlSugar创建Service类库构成MVC框架使用AutoFac进行依赖注入 创建用户登录接口添加用户时进行安全防护 项目准备 1、创建WebApi项目 配置Swagger、Serilog…...

【ffmpeg命令基础】视频选项讲解

文章目录 前言设置输出文件的帧数设置每秒播放的帧数设置输出视频的帧率示例1&#xff1a;更改输出视频的帧率示例2&#xff1a;将图像序列转换为视频 设置输入视频的帧率示例3&#xff1a;处理高帧率视频示例4&#xff1a;处理低帧率视频 同时设置输入和输出帧率示例5&#xf…...

使用uniapp开发小程序(基础篇)

本文章只介绍微信小程序的开发流程&#xff0c;如果需要了解其他平台的开发的流程的话&#xff0c;后续根据情况更新相应的文章,也可以根据uniapp官网的链接了解不同平台的开发流程 HBuilderX使用&#xff1a;https://uniapp.dcloud.net.cn/quickstart-hx.html 开发工具 开始…...

vue3【详解】组合式函数

什么是组合式函数&#xff1f; 利用 Vue 的组合式 API 来封装和复用有状态逻辑的函数&#xff0c;用于实现逻辑复用&#xff0c;类似 react18 中的 hook 函数名称 – 以 use 开头&#xff0c;采用驼峰命名&#xff0c;如 useTitle参数 – 建议使用 toValue() 处理&#xff08;…...

微服务实战系列之玩转Docker(六)

前言 刚进入大暑&#xff0c;“清凉不肯来&#xff0c;烈日不肯暮”&#xff0c;空调开到晚&#xff0c;还是满身汗。——碎碎念 我们知道&#xff0c;仓库可见于不同领域&#xff0c;比如粮食仓库、数据仓库。在容器领域&#xff0c;自然也有镜像仓库&#xff08;registry&…...

Python题解Leetcode Hot100之动态规划

动态规划解题步骤-5部曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 70. 爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到…...

你了解GD32 MCU上下电要求吗

你了解GD32 MCU的上下电要求吗&#xff1f;MCU的上下电对于系统的稳定运行非常重要。 以GD32F30X为例&#xff0c;上电/掉电复位波形如如下图所示。 上电过程中&#xff0c;VDD/VDDA电压上电爬坡&#xff0c;当电压高于VPOR&#xff08;上电复位电压&#xff09;MCU开始启动&a…...

二、【Python】入门 - 【PyCharm】安装教程

往期博主文章分享文章&#xff1a; 【机器学习】专栏http://t.csdnimg.cn/sQBvw 目录 第一步&#xff1a;PyCharm下载 第二步&#xff1a;安装&#xff08;点击安装包打开下图页面&#xff09; 第三步&#xff1a;科学使用&#xff0c;请前往下载最新工具及教程&#xff1a…...

2、程序设计语言基础知识

这一章节的内容在我们的软件设计师考试当中&#xff0c;考的题型比较固定&#xff0c;基本都是选择题&#xff0c;分值大概在2~4分左右。 而且考的还多是程序设计语言的一些基本语法&#xff0c;特别是这两年比较火的Python。 所以对于有一定要编程基础的即使本章的内容不学习&…...

ARM/Linux嵌入式面经(十八):TP-Link联洲

文章目录 虚拟内存,页表,copy on write面试题1:面试题2:面试题3:进程和线程的区别红黑树和b+树的应用红黑树的应用B+树的应用视频会议用了哪些协议1. H.323协议2. SIP协议(会话发起协议)3. WebRTC(网页实时通信)4. 其他协议io多路复用(select,poll,epoll)面试题li…...

解读vue3源码-响应式篇2

提示&#xff1a;看到我 请让我滚去学习 文章目录 vue3源码剖析reactivereactive使用proxy代理一个对象1.首先我们会走isObject(target)判断&#xff0c;我们reactive全家桶仅对对象类型有效&#xff08;对象、数组和 Map、Set 这样的集合类型&#xff09;&#xff0c;而对 str…...

【测开能力提升-fastapi框架】fastapi能力提升 - 中间件与CORS

1. 中间件 1.1 介绍&#xff08;ChatGPT抄的&#xff0c;大致可以理解&#xff09; 一种机制&#xff0c;用于在处理请求和响应之前对其进行拦截、处理或修改。中间件可以在应用程序的请求处理管道中插入自定义逻辑&#xff0c;以实现一些通用的功能&#xff0c;如身份验证、…...

centos7安装es及简单使用

为了方便日后查看&#xff0c;简单记录下&#xff01; 【启动es前,需要调整这个配置文件(/opt/elasticsearch-6.3.0/config/elasticsearch.yml)的两处ip地址,同时访问页面地址的ip:9200时,ip地址也对应修改】 【启动kibana前,需要调整这个配置文件(/opt/kibana-6.3.0/config/k…...

2024年自动驾驶SLAM面试题及答案(更新中)

自动驾驶中的SLAM&#xff08;Simultaneous Localization and Mapping&#xff0c;即同步定位与地图构建&#xff09;是关键技术&#xff0c;它能够让车辆在未知环境中进行自主定位和地图建构。秋招来临之际&#xff0c;相信大家都已经在忙碌的准备当中了&#xff0c;尤其是应届…...

HTML零基础自学笔记(上)-7.18

HTML零基础自学笔记&#xff08;上&#xff09; 参考&#xff1a;pink老师一、HTML, Javascript, CSS的关系是什么?二、什么是HTML?1、网页&#xff0c;网站的概念2、THML的基本概念3、THML的骨架标签/基本结构标签 三、HTML标签1、THML标签介绍2、常用标签图像标签&#xff…...

数学建模--图论与最短路径

目录 图论与最短路径问题 最短路径问题定义 常用的最短路径算法 Dijkstra算法 Floyd算法 Bellman-Ford算法 SPFA算法 应用实例 结论 延伸 如何在实际应用中优化Dijkstra算法以提高效率&#xff1f; 数据结构优化&#xff1a; 边的优化&#xff1a; 并行计算&…...

FLINK-checkpoint失败原因及处理方式

在 Flink 或其他分布式数据处理系统中&#xff0c;Checkpoint 失败可能由多种原因引起。以下是一些常见的原因&#xff1a; 资源不足&#xff1a; 如果 TaskManager 的内存或磁盘空间不足&#xff0c;可能无法完成状态的快照&#xff0c;导致 Checkpoint 失败。 网络问题&am…...

Hbase映射为Hive外表

作者&#xff1a;振鹭 Hbase对应Hive外表 (背景&#xff1a;在做数据ETL中&#xff0c;可能原始数据在列式存储Hbase中&#xff0c;这个时候&#xff0c;如果我们想清洗数据&#xff0c;可以考虑把Hbase表映射为Hive的外表&#xff0c;然后使用Hive的HQL来清除处理数据) 1. …...

洛谷P1002(过河卒)题解

题目传送门 思路 直接爆搜会TLE&#xff0c;所以考虑进行DP。 由于卒只可以从左边和上面走&#xff0c;所以走到(i,j)的路程总数为从上面走的路程总数加上从左边走的路程总数。我们用dp[i][j]表示从起点走到(i,j)的路程总数&#xff0c;那么状态转移方程为&#xff1a; dp[…...

微信小程序 async-validator 表单验证 第三方包

async-validator 是一个基于 JavaScript 的表单验证库&#xff0c;支持异步验证规则和自定义验证规则 主流的 UI 组件库 Ant-design 和 Element 中的表单验证都是基于 async-validator 使用 async-validator 可以方便地 构建表单中逻辑&#xff0c;使得错误提示信息更加友好和灵…...

马克·扎克伯格解释为何开源AI对开发者有利

Meta 今天发布了 Llama 3.1 系列人工智能模型&#xff0c;在人工智能领域取得了重大进展&#xff0c;其性能可与领先的闭源模型相媲美。值得一提的是&#xff0c;在多项人工智能基准测试中&#xff0c;Llama 3.1 405B 模型的性能超过了 OpenAI 的 GPT-4o 和 Claude 3.5 Sonnet。…...

游戏外挂的技术实现与五年脚本开发经验分享

引言&#xff1a; 在数字娱乐的浪潮中&#xff0c;电子游戏成为许多人生活中不可或缺的一部分。然而&#xff0c;随着游戏的普及&#xff0c;一些玩家为了追求更高效的游戏体验或不正当竞争优势&#xff0c;开始使用游戏外挂程序。这些外挂往往通过修改游戏正常运行机制来提供非…...

认识神经网络【多层感知器数学原理】

文章目录 1、什么是神经网络2、人工神经网络3、多层感知器3.1、输入层3.2、隐藏层3.2.1、隐藏层 13.2.2、隐藏层 2 3.3、输出层3.4、前向传播3.4.1、加权和⭐3.4.2、激活函数 3.5、反向传播3.5.1、计算梯度3.5.2、更新权重和偏置 4、小结 &#x1f343;作者介绍&#xff1a;双非…...

MySQL入门学习-SQL高级技巧.CTE和递归查询

在 MySQL 中&#xff0c;SQL 高级技巧包括了 Common Table Expressions&#xff08;CTE&#xff09;和递归查询等。 一、CTE&#xff08;Common Table Expressions&#xff0c;公共表表达式&#xff09;的概念&#xff1a; CTE 是一个临时的结果集&#xff0c;它可以在一个查询…...

键盘是如何使用中断机制的?当打印一串字符到显示屏上时发生了什么???

当在键盘上按下一个键时会进行一下操作&#xff1a; 1.当按下任意一个键时&#xff0c;键盘编码器监控会来判断按下的键是哪个 2.键盘控制器用将解码,将键盘的数据保存到键盘控制器里数据寄存器里面 3.此时发送一个中断请求给中断控制器&#xff0c;中断控制器获取到中断号发送…...

Spring Boot 接口访问频率限制的实现详解

目录 概述为什么需要接口访问频率限制常见的实现方式 基于过滤器的实现基于拦截器的实现基于第三方库Bucket4j的实现 实际代码示例 基于过滤器实现Rate Limiting基于拦截器实现Rate Limiting使用Bucket4j实现Rate Limiting 最佳实践 选择合适的限流算法优化性能记录日志和监控…...

前端页面:用户交互持续时间跟踪(duration)user-interaction-tracker

引言 在用户至上的时代&#xff0c;精准把握用户行为已成为产品优化的关键。本文将详细介绍 user-interaction-tracker 库&#xff0c;它提供了一种高效的解决方案&#xff0c;用于跟踪用户交互的持续时间&#xff0c;并提升项目埋点的效率。通过本文&#xff0c;你将了解到如…...

中文分词库 jieba 详细使用方法与案例演示

1 前言 jieba 是一个非常流行的中文分词库&#xff0c;具有高效、准确分词的效果。 它支持3种分词模式&#xff1a; 精确模式全模式搜索引擎模式 jieba0.42.1测试环境&#xff1a;python3.10.9 2 三种模式 2.1 精确模式 适应场景&#xff1a;文本分析。 功能&#xff1…...

EXO-helper解释

目录 helper解释 helper解释 在Python中,字符串 "\033[93m" 是一个ANSI转义序列,用于在支持ANSI转义码的终端或控制台中改变文本的颜色。具体来说,\033[93m 用于将文本颜色设置为亮黄色(或浅黄色,具体取决于终端的显示设置)。 这里的 \033 实际上是八进制的 …...

Qt开发网络嗅探器01

引言 随着互联网的快速发展和普及&#xff0c;人们对网络性能、安全和管理的需求日益增长。在复杂的网络环境中&#xff0c;了解和监控网络中的数据流量、安全事件和性能问题变得至关重要。为了满足这些需求&#xff0c;网络嗅探器作为一种重要的工具被 广泛应用。网络嗅探器是…...

mysql面试(三)

MVCC机制 MVCC&#xff08;Multi-Version Concurrency Control&#xff09; 即多版本并发控制&#xff0c;了解mvcc机制&#xff0c;需要了解如下这些概念 事务id 事务每次开启时&#xff0c;都会从数据库获得一个自增长的事务ID&#xff0c;可以从事务ID判断事务的执行先后…...

阿里云公共DNS免费版自9月30日开始限速 企业或商业场景需使用付费版

本周阿里云发布公告对公共 DNS 免费版使用政策进行调整&#xff0c;免费版将从 2024 年 9 月 30 日开始按照请求源 IP 进行并发数限制&#xff0c;单个 IP 的请求数超过 20QPS、UDP/TCP 流量超过 2000bps 将触发限速策略。 阿里云称免费版的并发数限制并非采用固定的阈值&…...

捷配生产笔记-一文搞懂阻焊层基本知识

什么是阻焊层&#xff1f; 阻焊层&#xff08;也称为阻焊剂&#xff09;是应用于PCB表面的一层薄薄的聚合物材料。其目的是保护铜电路&#xff0c;防止焊料在焊接过程中流入不需要焊接的区域。除焊盘外&#xff0c;整个电路板都涂有阻焊层。 阻焊层应用于 PCB 的顶部和底部。树…...

html 常用css样式及排布问题

1.常用样式 <style>.cy{width: 20%;height: 50px;font-size: 30px;border: #20c997 solid 3px;float: left;color: #00cc00;font-family: 黑体;font-weight: bold;padding: 10px;margin: 10px;}</style> ①宽度&#xff08;长&#xff09; ②高度&#xff08;宽&a…...

【SpingCloud】客户端与服务端负载均衡机制,微服务负载均衡NacosLoadBalancer, 拓展:OSI七层网络模型

客户端与服务端负载均衡机制 可能有第一次听说集群和负载均衡&#xff0c;所以呢&#xff0c;我们先来做一个介绍&#xff0c;然后再聊服务端与客户端的负载均衡区别。 集群与负载均衡 负载均衡是基于集群的&#xff0c;如果没有集群&#xff0c;则没有负载均衡这一个说法。 …...

【Elasticsearch】Elasticsearch 中的节点角色

Elasticsearch 中的节点角色 1.主节点&#xff08;master&#xff09;1.1 专用候选主节点&#xff08;dedicated master-eligible node&#xff09;1.2 仅投票主节点&#xff08;voting-only master-eligible node&#xff09; 2.数据节点&#xff08;data&#xff09;2.1 内容…...

pip install与apt install区别

pipapt/apt-get安装源PyPI 的 python所有依赖的包软件、更新源、ubuntu的依赖包 1 查看pip install 安装的数据包 命令 pip list 2 查看安装包位置 pip show package_name参考 https://blog.csdn.net/nebula1008/article/details/120042766...

分表分库是一种数据库架构的优化策略,用于处理大规模数据和高并发请求,提高数据库的性能和可扩展性。

分表分库是一种数据库架构的优化策略&#xff0c;用于处理大规模数据和高并发请求&#xff0c;提高数据库的性能和可扩展性。以下是一些常见的分表分库技术方案&#xff1a; 1. **水平分表&#xff08;Horizontal Sharding&#xff09;**&#xff1a; - 将单表数据根据某个…...

【ffmpeg命令入门】获取音视频信息

文章目录 前言使用ffmpeg获取简单的音视频信息输入文件信息文件元数据视频流信息音频流信息 使用ffprobe获取更详细的音视频信息输入文件信息文件元数据视频流信息音频流信息 总结 前言 在处理多媒体文件时&#xff0c;了解文件的详细信息对于调试和优化处理过程至关重要。FFm…...

【IoTDB 线上小课 05】时序数据文件 TsFile 三问“解密”!

【IoTDB 视频小课】持续更新&#xff01;第五期来啦~ 关于 IoTDB&#xff0c;关于物联网&#xff0c;关于时序数据库&#xff0c;关于开源... 一个问题重点&#xff0c;3-5 分钟详细展开&#xff0c;为大家清晰解惑&#xff1a; IoTDB 的 TsFile 科普&#xff01; 了解了时序数…...

python-爬虫实例(4):获取b站的章若楠的视频

目录 前言 道路千万条&#xff0c;安全第一条 爬虫不谨慎&#xff0c;亲人两行泪 获取b站的章若楠的视频 一、话不多说&#xff0c;先上代码 二、爬虫四步走 1.UA伪装 2.获取url 3.发送请求 4.获取响应数据进行解析并保存 总结 前言 道路千万条&#xff0c;安全第一条 爬…...

C# yaml 配置文件的用法(一)

目录 一、简介 二、yaml 的符号 1.冒号 2.短横杆 3.文档分隔符 4.保留换行符 5.注释 6.锚点 7.NULL值 8.合并 一、简介 YAML&#xff08;YAML Aint Markup Language&#xff09;是一种数据序列化标准&#xff0c;广泛用于配置文件、数据交换和存储。YAML的设计目标是…...

人工智能与机器学习原理精解【4】

文章目录 马尔科夫过程论要点理论基础σ代数定义性质应用例子总结 马尔可夫过程概述一、马尔可夫过程的原理二、马尔可夫过程的算法过程三、具体例子 马尔可夫链的状态转移概率矩阵一、确定马尔可夫链的状态空间二、收集状态转移数据三、计算转移频率四、构建状态转移概率矩阵示…...

Go channel实现原理详解(源码解读)

文章目录 Go channel详解Channel 的发展Channel 的应用场景Channel 基本用法Channel 的实现原理chan 数据结构初始化sendrecvclose使用 Channel 容易犯的错误总结Go channel详解 Channel 是 Go 语言内建的 first-class 类型,也是 Go 语言与众不同的特性之一。Channel 让并发消…...

数据结构-C语言-排序(4)

代码位置&#xff1a; test-c-2024: 对C语言习题代码的练习 (gitee.com) 一、前言&#xff1a; 1.1-排序定义&#xff1a; 排序就是将一组杂乱无章的数据按照一定的规律&#xff08;升序或降序&#xff09;组织起来。(注&#xff1a;我们这里的排序采用的都为升序) 1.2-排…...

灰色关联分析【系统分析+综合评价】

系统分析&#xff1a; 判断哪个因素影响最大 基本思想&#xff1a;根据序列曲线几何形状的相似程度来判断其练习是否紧密 绘制统计图并进行分析 确定子序列和母序列 对变量进行预处理&#xff08;去量纲、缩小变量范围&#xff09; 熟练使用excel与其公式和固定&#xff08…...

linux 部署flask项目

linux python环境安装: https://blog.csdn.net/weixin_41934979/article/details/140528410 1.创建虚拟环境 python3.12 -m venv .venv 2.激活环境 . .venv/bin/activate 3.安装依赖包(pip3.12 install -r requirements.txt) pip3.12 install -r requirements.txt 4.测试启…...

ES6 数值的扩展(十八)

1. 二进制和八进制字面量 特性&#xff1a;可以直接在代码中使用二进制&#xff08;0b 或 0B&#xff09;和八进制&#xff08;0o 或 0O&#xff09;字面量。 用法&#xff1a;简化二进制和八进制数值的表示。 const binaryNumber 0b1010; // 二进制表示 10 const octalNumb…...

面试知识储备-redis和redission

1.redis的使用 引入依赖&#xff0c;自动注解redistemplate即可使用&#xff0c; 默认的redistemplate存入到redis中是字符流的形式&#xff0c;需要配置redistemplate&#xff0c; 如果不想配置&#xff0c;可以使用stringRedistemplate 可以使用string类型&#xff0c;但是…...

【5本可选】保证知网检索,现在投稿可在8月见刊,对文科领域友好

AEPH出版社旗下有5本学术期刊&#xff0c;专门出版自然科学、社会科学研究与教育领域论文的高影响力期刊&#xff0c;拥有正规ISSN号&#xff0c;出版类型涉及应用和理论方面的原创和未曾公开发表的研究论文&#xff0c;分配独立DOI号。 期刊1 Philosophy and Social Science…...