第4章 角色Api控件器的实现与调试

news2024/11/16 16:26:37

自定义管道中间件

1.1 WebApi.Middleware.CorsMiddleware

namespace WebApi.Middleware

{

    /// <summary>

    /// 【跨域访问中间件--类】

    /// <remarks>

    /// 摘要:

    ///     该管道中间件类主要为了解决在由vue/uni-app前端项目(Cors)访问当前后端项目时,浏览器或App中出现的异常:

    ///    1“has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.”

    ///    2“has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”

    /// </remarks>

    /// </summary>

    public class CorsMiddleware

    {

        #region 拷贝构造方法与变量

        /// <summary>

        /// 【下1个】

        /// <remarks>

        /// 摘要:

        ///     .Net(Core)框架内置管道中的下1个管道中间件实例。

        /// </remarks>

        /// </summary>

        private readonly RequestDelegate _next;

        ///<param name="next">.Net(Core)框架内置管道中的下1个管道中间件实例。</param>

        /// <summary>

        /// 【拷贝构造方法】

        /// <remarks>

        /// 摘要:

        ///    通过该构造方法中的参数实例,实例化.Net(Core)框架内置管道中的下1个管道中间件实例。

        /// </remarks>

        /// </summary>

        public CorsMiddleware(RequestDelegate next)

        {

            _next = next;

        }

        #endregion

        #region 方法

        ///<param name="context">HTTP上下文实例。</param>

        /// <summary>

        /// 【异步调用】

        /// <remarks>

        /// 摘要:

        ///    通过该方法向.Net(Core)框架内置管道中集成当前管道中间件,解决由vue/uni-app前端项目(Cors)访问当前后端项目时,浏览器或App中出现的异常:

        ///    1“has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.”

        ///    2“has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”

        /// </remarks>

        /// </summary>

        public async Task InvokeAsync(HttpContext context)

        {

            //解决在由Hbuilder创建的前端Xuni-app项目(Cors)访问当前后端项目时,浏览器或App中会出现异常:

            //“has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.”

            if (!context.Response.Headers.ContainsKey("Access-Control-Allow-Headers"))

            {

                context.Response.Headers.Add("Access-Control-Allow-Headers", "DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization");

            }

            if (!context.Response.Headers.ContainsKey("Access-Control-Allow-Methods"))

            {

                context.Response.Headers.Add("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,PATCH,OPTIONS");

            }

            //解决在由Hbuilder创建的前端Xuni-app项目(Cors)访问当前后端项目时,浏览器或App中会出现异常:

            //“has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”

            if (!context.Response.Headers.ContainsKey("Access-Control-Allow-Origin"))

            {

                context.Response.Headers.Add("Access-Control-Allow-Origin", "*");

            }

            await _next(context);

        }

        #endregion

    }

}

1.2 WebApi.Middleware.SwaggerHomeMiddleware

namespace WebApi.Middleware

{

    /// <summary>

    /// Swagger主页中间件--类】

    /// <remarks>

    /// 摘要:

    ///     该管道中间件类主要为了把“/Swagger/index.html”设定为默认启动页面,在IIS部署后,

    /// 通过当前管道中间件把根路由强制自动跳转到根路由”+“/Swagger/index.html”,从而避免根路由页面中“404”错误的出现。

    /// </remarks>

    /// </summary>

    public class SwaggerHomeMiddleware

    {

        #region 拷贝构造方法与变量

        /// <summary>

        /// 【下1个】

        /// <remarks>

        /// 摘要:

        ///     .Net(Core)框架内置管道中的下1个管道中间件实例。

        /// </remarks>

        /// </summary>

        private readonly RequestDelegate _next;

        ///<param name="next">.Net(Core)框架内置管道中的下1个管道中间件实例。</param>

        /// <summary>

        /// 【拷贝构造方法】

        /// <remarks>

        /// 摘要:

        ///    通过该构造方法中的参数实例,实例化.Net(Core)框架内置管道中的下1个管道中间件实例。

        /// </remarks>

        /// </summary>

        public SwaggerHomeMiddleware(RequestDelegate next)

        {

            _next = next;

        }

        #endregion

        #region 方法

        ///<param name="context">HTTP上下文实例。</param>

        /// <summary>

        /// 【异步调用】

        /// <remarks>

        /// 摘要:

        ///    通过该方法向.Net(Core)框架内置管道中间件集成当前管道中间件,把“/Swagger/index.html”设定为默认启动页面,在IIS部署后,

        ///  通过当前管道中间件把根路由强制自动跳转到根路由”+“/Swagger/index.html”,从而避免根路由页面中“404”错误的出现。

        /// </remarks>

        /// </summary>

        public async Task InvokeAsync(HttpContext context)

        {

            if (context.Request.Path == "/")

            {

                context.Response.Redirect("/Swagger/index.html");

                return;

            }

            await _next(context);

        }

        #endregion

    }

}

2 重构Program.cs

using Data;

using Microsoft.EntityFrameworkCore;

using Microsoft.OpenApi.Models;

using System.Reflection;

using System.Runtime.InteropServices;

using WebApi.Middleware;

var builder = WebApplication.CreateBuilder(args);

//“Microsoft.EntityFrameworkCore.SqlServer”中间件实例,依赖注入到.Net(Core)6框架内置容器中。

builder.Services.AddDbContext<EFCoreContext>(

    //通过“DbContextOptionsBuilder”实例中的参数实例,为“Microsoft.EntityFrameworkCore.SqlServer”中间件的实例化提供参数实例,

    //最终把“Microsoft.EntityFrameworkCore.SqlServer”中间件实例,依赖注入到.Net(Core)6框架内置容器中。

    //IIS发布部署连接字符串必须使用“SQL Server身份认证数据库连接方式,才能实现发布部署程序与数据库的CURD的操作。

    options => options.UseSqlServer(builder.Configuration.GetConnectionString("SqlServerSQL")));

builder.Services.AddControllers();

// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle

builder.Services.AddEndpointsApiExplorer();

//通过AddSwaggerGen依赖注入中间,获取Api控制器方法的版本控制信息和注释等数据信息,依赖注入.Net7框架的内置容器中,为在“index.html”页面上渲染显示这些信息,作好预处理操作。

builder.Services.AddSwaggerGen(options => {

    options.SwaggerDoc("v1",

        new OpenApiInfo

        {

            Version = "v1",

            Title = $"接口文档—{RuntimeInformation.FrameworkDescription}",

        });

    //获取"UserServer.xml"文件的文件名。

    string _xmlFileName = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";

    //获取"WebApi.xml"文件的绝对路径。

    string _xmlFilePath = Path.Combine(AppContext.BaseDirectory, _xmlFileName);

    //把控件器行为方法中的注释信息加载到"Swagger/index.html"页面中的控件器行为方法进行渲染显示。

    //注意:如果不在“*.csproj”文件中启用“<GenerateDocumentationFile>true</GenerateDocumentationFile>”配置,下面语句会出现逻辑异常。

    options.IncludeXmlComments(_xmlFilePath, true);

});

var app = builder.Build();

//把自定义管道中间中集成到.Net(Core)框架内置管道中,解决vue/uni-app前端项目(Cors)访问当前后端项目时,浏览器或App中出现的异常:

//    1“has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.”

//    2“has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”

app.UseMiddleware<CorsMiddleware>();

//注意:在IIS部署时必须把下面两个管道中间件从“if (app.Environment.IsDevelopment())”取出,否则;“http://localhost:8090/Swagger/index.html”页面会出现“404”错误。

app.UseSwagger();

app.UseSwaggerUI();

//该自定义管道中间件设定/Swagger/index.html为默认启动页面。

//注意:在IIS部署时如果不定义该自定义管道中间件“http://localhost:8090”页面会出现“404”错误,但“http://localhost:8090/Swagger/index.html”页面可用;

//如果定义该自定义管道中间件IIS部署后的“http://localhost:8090”页面会强制自动跳转到“http://localhost:8090/Swagger/index.html”页面,从而避免根路由页面中“404”错误的出现。

app.UseMiddleware<SwaggerHomeMiddleware>();

//“SwaggerHomeMiddleware”管道中间件的直接实现调用。

//app.Use(async (context, next) =>

//{

//    if (context.Request.Path == "/")

//    {

//        context.Response.Redirect("/Swagger/index.html");

//        return;

//    }

//    await next.Invoke();

//});

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

3 WebApi.Test.RoleTestModel

namespace WebApi.Test

{

    public record RoleTestModel

    {

        /// <summary>

        /// 【角色名】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定的角色名。

        /// </remarks>

        /// </summary>

        public string Name { get; set; }

        /// <summary>

        /// 【启用?】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个值false(禁用)/true(默认值:启用),该值指示角色实体的1个指定实例是否处于启用状态。

        /// </remarks>

        /// </summary>

        public bool IsActive { get; set; }

        /// <summary>

        /// 【备注】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定角色的备注信息。

        /// </remarks>

        /// </summary>

        public string Remark { get; set; }

    }

}

4 WebApi.Controllers.RoleController

using Core.Domain.Users;

using Data;

using Microsoft.AspNetCore.Mvc;

using Microsoft.EntityFrameworkCore;

using WebApi.Test;

namespace WebApi.Controllers

{

    /// <summary>

    /// 【角色Api控制器--类】

    /// </summary>

    /// <remarks>

    /// 摘要:

    ///     通过该类中的方法成员,为前端角色页面提供Api方法和数据支撑。

    /// </remarks>

    [Route("[controller]/[action]")]

    [ApiController]

    public class RoleController : ControllerBase

    {

        #region 拷贝构造方法与变量

        private readonly EFCoreContext _context;

        public RoleController(EFCoreContext context)

        {

            _context = context;

        }

        #endregion

        #region 方法

        /// <summary>

        /// 【获取角色列表--需权限】

        /// </summary>

        /// <remarks>

        /// 摘要:

        ///     从角色表中获取角色实体的所有实例,并把这些实例存储到列表实例中。

        /// </remarks>

        /// <returns>

        /// 返回:

        ///     列表实例,该实例存储着角色实体的所有实例。

        /// </returns>

        [HttpGet]

        public async Task<List<Role>> GetRoleListAsync()

        {

            return await _context.GetDbSet<Role>().ToListAsync();

        }

        /// <param name="role">角色实体的1个指定实例。</param>

        /// <summary>

        /// 【添加角色--需权限】

        /// </summary>

        /// <remarks>

        /// 摘要:

        ///     把角色实体1个指定实例持久化到持久化到角色表中。

        /// </remarks>

        /// <returns>

        /// 返回:

        ///     角色实体的1个指定实例。

        /// </returns>

        [HttpPost]

        public async Task<Role> AddRoleAsync([FromBody] Role role)

        {

            await _context.GetDbSet<Role>().AddAsync(role);

            await _context.SaveChangesAsync();

            return role;

        }

        /// <param name="roleId">角色实体1个指定实例的长整型编号值。</param>

        /// <summary>

        /// 【更新角色--需权限】

        /// </summary>

        /// <remarks>

        /// 摘要:

        ///     通过1个指定的长整型编号值,对1个角色实体1个指定实例并持久化到角色表的指定行中。

        /// </remarks>

        /// <returns>

        /// 返回:

        ///     角色实体的1个指定实例。

        /// </returns>

        [HttpPost]

        public async Task<Role> UpdateRoleAsync(long roleId)

        {

            Role _model = await _context.GetDbSet<Role>().SingleAsync(role => role.Id == roleId);

            _model.Remark = _model.Remark + "Update";

            _context.GetDbSet<Role>().Update(_model);

            await _context.SaveChangesAsync();

            return _model;

        }

        #endregion

        #region 方法--测试

        /// <param name="roleTestModel">角色测试模型的1个指定实例。</param>

        /// <summary>

        /// 【添加角色(测试模型)--需权限】

        /// </summary>

        /// <remarks>

        /// 摘要:

        ///     把角色实体1个指定实例持久化到持久化到角色表中(只是测试使用,可以被删除)

        /// </remarks>

        /// <returns>

        /// 返回:

        ///     角色实体的1个指定实例。

        /// </returns>

        [HttpPost]

        public async Task<Role> AddRoleTestModelAsync([FromBody] RoleTestModel roleTestModel)

        {

            Role role = new Role() { Name = roleTestModel.Name, IsActive = roleTestModel.IsActive, Remark = roleTestModel.Remark };

            await _context.GetDbSet<Role>().AddAsync(role);

            await _context.SaveChangesAsync();

            return role;

        }

        #endregion

    }

}

5 IIS发布部署与调试注意

5.1 调试注意

5.1.1 使用“/Swagger/index.html”调试

5.1.1.1 通过角色模型记录实例调试

    在“/Swagger/index.html”页面中使用带有“[FromBody]”参数实例的Api方法进行调试时,如果参数实例的类型为:“RoleTestModel”,则可以直接直接执行该Api方法:“WebApi.Controllers.RoleController.AddRoleTestModelAsync”,如下图所示:

5.1.1.2 直接通过角色实体实例调试

 

 

5.1.1 使用“Postman”调试

 

5.2 IIS发布部署注意

5.2.1 IIS发布部署依赖包

5.2.1.1 连接字符串必须使用“SQL Server身份认证”数据库连接方式

    重构“appsettings.json”文件

{

  "ConnectionStrings": {

    //Trusted_Connection=trueIntegrated Security=true/SSPI:“Windows凭据SQL Server进行身份验证,表示可以在不知道数据库用户名和密码的情况下时,依然可以连接SQL Server数据库。

    //"integrated":"security=true是通过“Windows身份认证SQL Server数据库进行身份验证,并与SQL Server数据库进行连接;表示可以在不知道数据库用户名和密码的情况下时,依然可以连接SQL Server数据库,如果integrated", "security=false","或者不写,表示一定要输入正确的数据库登录名和密码。": null

    //Persist Security Info:该配置只用于通过“SQL Server身份认证SQL Server数据库进行身份验证,并与SQL Server数据库进行连接;简单的理解为"ADO在数据库连接成功后是否保存密码信息"True表示保存,False表示不保存.ADO缺省为True(ADO.net缺省为False,未测试,根据参考资料上说的)

    //MultipleActiveResultSets:它允许在单个连接上执行多重的数据库查询或存储过程,目前只适用于Sql Server 2005及其以上版本;如果不用MultipleActiveResultSets ,则一般报错为sqldatareader未关闭,即需要关闭了之后才能打开另一个。

    //Trust Server Certificate:是否使用SSL证书和加密方式,对SQL Server数据库的连接字符串进行加密,该操作属性安全性配置,目前只适用于Sql Server 2005及其以上版本;

   // "SqlServerWindows": "Data Source=.;Initial Catalog=ShopDemo;Integrated Security=true;MultipleActiveResultSets=true;Trust Server Certificate=True"

    "SqlServerSQL": "Data Source=.;Initial Catalog=ShopDemo;Integrated Security=False;Persist Security Info=False;User ID=zz;Password=zz;MultipleActiveResultSets=true;Trust Server Certificate=True"

  },

  "Logging": {

    "LogLevel": {

      "Default": "Information",

      "Microsoft.AspNetCore": "Warning"

    }

  },

  "AllowedHosts": "*"

}

5.2.1.2 依赖包

    在WebApi启用项中添加依赖包:

    1、Microsoft.EntityFrameworkCore.Tools或Microsoft.EntityFrameworkCore.Design;其中Microsoft.EntityFrameworkCore.Tools依赖包包含Microsoft.EntityFrameworkCore.Desig依赖包,当前程序中使用Microsoft.EntityFrameworkCore.Tools依赖包。

    2、注意:这两个依赖包必须直接引用在WebApi启用项目中,而间接Data引用在项目中。

    3、IIS部署的具体操作见:“第1章 基于.Net(Core)框架Web程序的IIS部署发布_zhoujian_911的博客-CSDN博客_.net iis发布”。

5.2.2 IIS发布部署404错误页面解决方案

       在当前程序部署后,默认路由页会出现404错误,为了避免该错误必须把“SwaggerHomeMiddleware”自定义管道中间件集成到.Net内置义管道中间件,把默认路由页强制自动跳转到“/Swagger/index.html”,从而把默认路由页相对设定为了“/Swagger/index.html”。

       对以上功能更为具体实现和注释见:221220_001shopvue(布局设计完成)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你的期待薪资是多少?为什么?

很多人去面试的时候&#xff0c;就像打游戏&#xff0c;过五关斩六将&#xff0c;终于到最后一关了&#xff0c;但是谈薪资的难度堪比打游戏中搞定终级 boss 的难度&#xff0c;真的是太「南」了&#xff0c;好多人都是因为这个问题让自己五味杂陈呀。报高了怕好 offer 失之交臂…

【Call for papers】SIGIR-2023(CCF-A/内容检索/2023年1月31日截稿)

The 46th International ACM SIGIR Conference on Research and Development in Information Retrieval will be held from 23-27 July, 2023 in Taipei. 文章目录1.会议信息2.时间节点3.论文主题1.会议信息 会议介绍&#xff1a; SIGIR是展示新研究成果和展示信息检索新系统和…

Postgresql INDEX HOT 原理与更好的 “玩转” INDEX

随着问问题的同学越来越多&#xff0c;公众号内部私信回答问题已经很困难了&#xff0c;所以建立了一个群&#xff0c;关于各种数据库的问题都可以&#xff0c;目前主要是 POSTGRESQL, MYSQL ,MONGODB ,POLARDB ,REDIS&#xff0c;SQL SERVER 等&#xff0c;期待你的加入&#…

[洛谷]P1996 约瑟夫问题

[洛谷]P1996 约瑟夫问题一、问题描述题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示二、思路分析1、算法标签&#xff1a;2、算法分析&#xff1a;三、代码实现1、环形链表2、队列一、问题描述 [洛谷]P1996 约瑟夫问题 题目描述 nnn 个人围成一圈&#xff0c;从…

3.Spark 操作

基于centos7 ,hadoop2.7.3, spark-2.4.4-bin-hadoop2.7.tgz 目录: 一.spark shell二. 读取hdfs文件三.Idea中编写wordcount一.spark shell 在spark shell中编写wordcount程序读取本地文件 1、准备数据源(创建目录,创建文件) 2.代码: --注意修改文件地址-- sc.textF…

【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.8 画刷设置

本节对应的视频讲解&#xff1a;B_站_视_频 https://www.bilibili.com/video/BV1A44y1Z7vz 本节讲解画刷的设置&#xff0c;包括画刷的颜色和样式 画刷设置完后&#xff0c;就可以把该画刷设置给 QPainter 了 1. 相关 API 1.1 画刷颜色 // 获取和设置画刷的颜色 const QCo…

新冠阳性的第三篇博客,使用Swagger管理API

新冠阳性的第三篇博客&#xff0c;使用Swagger管理API1.Swagger简介2.在项目中使用Swagger3.配置swagger4.swagger配置扫描接口5.配置API文档的分组6.swagger的实体类扫描7.给Controller加文档注释今天是新冠确诊的第二天&#xff0c;得了新冠也不要忘记学习啊&#xff01;&…

一文读懂自动驾驶汽车:软硬结合 造就未来出行体验(上篇)

在 GTC 2022 秋季大会上&#xff0c;NVIDIA 汽车部门营销经理 Katie Burke Washabaugh&#xff0c;面向想要了解自动驾驶汽车、并有志于投身自动驾驶行业的观众&#xff0c;介绍了自动驾驶汽车的历史、工作原理、相关技术以及发展前景。本文对此次分享的精华内容进行了汇总和整…

基于蒙特卡诺的电动汽车对电网影响(数据+Matlab代码)

目录 0 知识回顾 1 电网没考虑电动汽车时 1.1 案例1&#xff08;4kw&#xff09; 1.2 案例2&#xff08;7kw&#xff09; 31.3 案例3&#xff08;20kw&#xff09; 2 静态测试 2.1 收敛的最优结果 2.2 改变电动汽车数量的影响 2.3 收敛的最优结果 3 动态测试 4 一…

图结构

图结构 从哥尼斯堡的七桥问题开始 ▪ 18世纪初普鲁士的哥斯尼堡,有一条河穿过,河上有两个小岛,有七座桥把两个小岛与河岸联系起来 ▪ 问题:一个步行者怎样才能不重复、不遗漏地一次走完七座桥&#xff0c;最后回到出发点。 ▪ 难点&#xff1a;可能的走法----7&#xff01;5…

苹果给出 AirTag 固件更新日志,苹果Find My功能越来越完善

自 11 月以来&#xff0c;苹果已经为其 AirTag 物品追踪器发布了两个固件更新。然而&#xff0c;该公司此前并没有详细说明这些更新带来了什么变化。不过有网友发现&#xff0c;苹果终于分享了最新 AirTag 固件更新的更新内容。 以下是 AirTag 固件更新 2.0.24 和 2.0.36 带来…

[力扣c++实现]85. 最大矩形

85. 最大矩形 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”…

2022最新最全的Java面试八股文小抄开源!带你摸熟 20+ 互联网公司面试考点

2022真是多变的一年&#xff0c;相对往年我们会发现今年猎头电话少了&#xff0c;大部分企业年终奖缩水&#xff0c;加薪幅度也不如往年&#xff0c;选择好 offer 就要趁早&#xff0c;现在开始准备吧&#xff0c;刷一波 Java 面试题&#xff0c;能回答 70%就去 BATJTMD 大胆试…

基于SSM实现的网上手机商城项目(附源码)

基于SpringSpring MVCMyBatisLayui框架 项目完整源码下载 https://download.csdn.net/download/DeepLearning_/87327169 功能&#xff1a; 前台 登录、注册、注销查看商品、商品评论、热销商品收藏、取消收藏商品加入购物车购物车增、删、改、查购买商品、确认收货、删除已…

stop pin/ignore pin/exclude pin/float pin

stop pin、ignore pin、exclude pin和float pin的区别如下图&#xff1a; 1、Stop pins stop pin是clock tree的leaf pin&#xff0c;作为clock tree的终点&#xff0c;需要balance insertion delay&#xff08;latency&#xff09;&#xff0c;clock sink都是stop pin。 2、…

七、http模块

HTTP —— 超文本传输协议&#xff0c;用于规范客户端浏览器和服务端以何种格式进行通信和数据交互&#xff1b;HTTP由请求和响应构成的&#xff0c;是一个标准的客服端服务器模型。 HTTP请求响应过程 先简单的来了解以下HTTP的请求响应过程&#xff1a;1.地址解析&#xff1a…

普通人为什么要学习python?有什么用

为什么要学习python&#xff1f; 比如新媒体职业&#xff1a; 1、简单来说&#xff0c;你会python后就相当于自己建造一个属于自己工作区块的微博热搜榜。你可以利用爬虫、收据抓取等技术知道哪些话题近期特别火&#xff0c;为什么火、有什么共通点&#xff0c;然后根据这些依…

3.1 多集放大电路的耦合方式

在实际应用中&#xff0c;常对放大电路的性能提出多方面的要求。所以&#xff0c;仅靠任何一种基本的放大电路并不能满足要求&#xff0c;此时可以选择多个基本放大电路级联在一起构成多级放大电路。 组成多级放大电路的每一个基本放大电路称为一级&#xff0c;级与级之间的连接…

Win11的两个实用技巧系列之玩游戏闪跳、错误代码0x80004005解决

Win11玩游戏经常无缘无故跳回桌面怎么解决? 最近有Win11用户反应&#xff0c;自己在玩游戏的时候遇到了经常无缘无故跳回桌面的情况&#xff0c;本文就为大家带来了详细的解决方法&#xff0c;需要的朋友一起看看吧 最近有Win11用户反应&#xff0c;自己在玩游戏的时候遇到了…

关于ShardingSphere内置分片算法及其数据倾斜问题总结

ShardingSphere是一款不错的分库分表中间件&#xff0c;并且其内置提供了多种分片算法。但是使用内置的分片算法会造成数据倾斜问题。下面以5.2.0版本的ShardingSphere详细介绍下几种内置分片算法并且分析下数据倾斜问题。 一、ShardingSphere内置分片算法介绍 根据官网描述&…