C# .NETCORE3.1 系列教程(一) 开发环境搭建与创建的一个Web项目

2023-11-08

@[TOC](JXMaker .NET CORE3.1系列教程(一)——开发环境与创建Web项目)

JXMaker .NET CORE3.1系列教程(一)——开发环境搭建与创建的一个Web项目

开发环境

教程中使用的开发环境为Win2010 +VS 2019

安装VS2019

  1. 下载VS2019
    打开VS2019官方网站
    https://visualstudio.microsoft.com/zh-hans/vs/
    下载在线安装包(安装过程需要联网,必须保证网络质量),我下载的是企业版(Enterprise )
    在这里插入图片描述
  2. 安装
    双击打开安装程序,等待下载完成后弹出如下窗口。如果有条件可以全部安装,否则可以按需勾选,本教程只需勾选左上角第一个“asp.net and web development”即可,然后点击安装(install)继续安装直到完成即可
    在这里插入图片描述
  3. 打开并激活
    从开始菜单打开VS2019(如下图),
    在这里插入图片描述
    选择“继续但无需代码”
    在这里插入图片描述
    点击帮助——注册产品
    在这里插入图片描述
    输入注册码即可注册

分享一个激活码:
Visual Studio 2019企业版 Enterprise 激活码:BF8Y8-GN2QH-T84XB-QVY3B-RC4DF

创建Web项目

打开VS2019,在弹出窗口点击“创建新项目”
在这里插入图片描述
在弹出窗口选择语言为C#
在这里插入图片描述

C#和.NET CORE的关系,可以查看这篇文章:https://www.cnblogs.com/sumuncle/p/9262764.html

再选择“ASP.NET CORE Web应用程序”,点击“下一步”按钮
在这里插入图片描述
完善相应的项目信息点击“创建”即可进入下一步

在这里插入图片描述

选择.netcore版本为 ASP.NET Core 3.1 ,取消勾选“https支持”,选择空模板,点击“创建”按钮
在这里插入图片描述

了解项目属性

  1. 查看项目属性
    在项目上点击右键——“属性”即可查看相应项目属性,可以查看属性
    在这里插入图片描述

  2. 修改目标框架
    如果刚才上一步选择错误可以在如下图所示位置修改框架(或者需要引用别人的项目但双方框架版本不一致可以在此升级/降级)
    在这里插入图片描述

  3. 设置默认图标、清单
    在这里可以设置程序的默认图标
    在这里插入图片描述
    当然,也可以选择“编辑项目文件”,在里面直接添加节点进行配置。
    在这里插入图片描述

项目的基本结构

一个空Web项目包含了

  1. Program.cs
    Program.cs控制程序的启动,该类中的Main()方法是程序的入口
  2. Startup.cs
    Startup.cs类用于设置程序的初始配置
  3. appsettings.json
    该Json是程序的配置文件,允许用户动态修改的配置可以写在该文件中

Program.cs解析

在这里插入图片描述

  1. Main方法是程序的入口
    程序运行时首先执行的是Program类中的Main方法
    我们来看Main方法的代码
      public static void Main(string[] args) //该方法是一个静态方法,参数args可以在通过控制台启动它时传入
      //常见的args参数使用方法:如程序在开发环境和生产环境(实际使用的环境)需要读取不同的配置文件,我们就可以
      //规定args的第一个参数如果为"dev"则读取开发环境使用的配置appsettings.dev.json 如果为"prod" 则使用正式的	   
      //appsettings.json配置文件。
        {
            CreateHostBuilder(args).Build().Run();//创建一个服务器(.net core 内置一个服务器Kestrel)并运行,
            //CreateHostBuilder方法用于创建该服务器(底下定义的,放回类型为IHostBuilder),Build()方法则是创建(获得
            //实例),Run()方法为启动这个服务器,开始监听。
        }
  1. Kestrel服务器的配置与启动
    前文我们提到了.net core中内置了一个Kestrel服务器,该服务器是一个基于libuv的跨平台ASP.NET Core web服务器,libuv是一个跨平台的异步I/O库。ASP.NET Core模板项目使用Kestrel作为默认的web服务器。Main方法所执行的代码就是创建并启动该服务器。它调用了一个CreateHostBuilder方法,该方法需要返回一个IHostBuilder类型的对象(IHostBuilder是一个接口,不是实际的类型,为了方便理解我们就暂且这么说),因此系统帮我们在Program类中又生成了一个默认的方法,代码如下:
			public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

这种写法(箭头函数)等价于:

 public static IHostBuilder CreateHostBuilder(string[] args)
        {
            return Host.CreateDefaultBuilder(args)//创建一个服务器Builder对象
                .ConfigureWebHostDefaults(webBuilder =>//ConfigureWebHostDefault方法对Web服务器进行默认设置
                //该函数的参数是一个委托(Action<T>是一个可以传入参数,没有返回值的委托),函数可以接收一个
                //IWebHostBuilder类型的参数webBuilder,通过调用该对象的相关方法可以实现对配置的修改
                {
                    webBuilder.UseStartup<Startup>();//使用名为"Startup"的类作为Startup(配置),意味着我们可以将更多的
                    //配置写在Startup.cs文件中
                });
        }

Startup.cs解析

  1. Startup只是一个单纯的类,并没有继承其他类或实现其他接口,通过约定(我感觉是通过反射调用这个类),该类具有ConfigureServices方法和Configure方法。
	public class Startup
    {
    	public void ConfigureServices(IServiceCollection services)
        {
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });
        }
    }
  1. IOC 与 ConfigureServices方法
    该方法用于将服务注入到容器中(依赖注入(DI)和反转控制(IOC)),依赖注入按我个人理解就是一个大的工厂模式,在web服务器启动之前将后面需要一直调用的服务(类的实例、配置值对象)加载到程序的底层,一旦需要使用哪个服务直接找底层获取,由底层根据需求创建这个服务的实例并注入给顶层,不用再自己写一遍获取、实例化的函数。
    这样做的好处比如我们系统现有设计使用SQLServer,客户需要临时切换到mongodb,此时我们无需修改代码,只需要另外写一套mongodb 只要进行一次配置,顶层下次需要时就会得到mongodb 的操作类(服务),而所有数据库类都是使用相同的接口,因此传入的参数、返回的参数均一致,业务层编写时就不用具体去关注使用哪个数据库,只要调用通过注入得到的服务中的相关方法即可。

    • IoC容器及其操作
      ConfigureServices函数的参数 IServiceCollection services对象就是对IoC容器进行操作(服务注册)的对象,可以通过它在容器中对服务进行注册。
    • 注入服务的生命周期
      .netcore中,注入服务的生命周期分为三种 Transient、Scoped、Singleton

    Transient(瞬时的)
    每次请求时都会创建的瞬时生命周期服务。这个生命周期最适合轻量级,无状态的服务。
    (每次都进行实例化)
    Scoped(作用域的)
    在同作用域,服务每个请求只创建一次。
    (从请求开始就创建,请求结束就销毁)
    Singleton(唯一的)
    全局只创建一次,第一次被请求的时候被创建,然后就一直使用这一个.
    (相当于单例)

使用语法如下(在ConfigureServices中使用):

//ITestService为接口 TestService为实现这个接口的类(下同)
 services.AddTransient<ITestService, TestService>();
 services.AddScoped<ITestService2, TestService2>();
 services.AddSingleton<ITestService3, TestService3>();
例1:

比如我们现在需要使用mvc模式,我们可以在ConfigureServices中添加如下代码:

		public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();//需要使用controllers和views(不含RazorPages)
            //services.AddRazorPages();//要使用RazorPages需要再添加这个
            //services.AddControllers();//只需要控制器,不需要视图使用这个(只写api使用)
            //services.AddMvc();//MVC全部功能,比较大,3.1版本如果没用到其他功能建议不要用
        }
例2:

系统中需要一个时钟处理的操作类Clock,里面包含一个输出当前时区的方法GetTimeZone(),该方法返回值为string,输出当前所使用的时间模式/时区(如“China(+8)”或"UTC")。当系统在中国运行时使用中国时区的模式,当系统在国外运行时可以选择使用UTC时间(在Startup中修改一下配置即可)。

我们先在项目中创建两个目录IServices和Services,Services目录主要时存放服务的类,IServices用来存放服务的接口。
我们在Iservices创建一个IClock接口,代码如下:

public interface IClock
    {
        /// <summary>
        /// 获取时区
        /// </summary>
        /// <returns>返回时区说明字符串,如中国为“China(+8)”,UTC为“UTC”</returns>
        public string GetTimeZone();
    }

在这里插入图片描述
之后在Services目录创建两个类,分别是ChinaClock和UTCClock,他们的代码分别如下:

首先要添加引用(两个类都要):

using WebApplication1.IServices;
public class ChinaClock : IClock
    {
        public string GetTimeZone()
        {
            return "China(+8)";
        }
    }
public class UTCClock:IClock
    {
        public string GetTimeZone()
        {
            return "UTC";
        }

    }

接下来我们添加依赖注入,在Startup.cs的ConfigureServices方法中,加入以下代码:

services.AddSingleton<IClock,ChinaClock>();//在中国使用则使用此代码
//services.AddSingleton<IClock, UTCClock>();//在非中国地区使用改为此代码

程序运行时需要调用时钟操作类则底层会根据情况返回不同的时钟类的实例供顶层使用,顶层就不用再去区分相应时区。具体如何调用我们在后面创建控制器部分再讲。

  1. Configuere方法
    Configuere对Asp.Net Code中HTTP请求的管道(Pipeline)进行配置(响应HTTP/HTTPS请求的整个过程)

在HTTP请求管道中对http请求进行处理的服务就称为中间件,如MVC就是一个中间件。在进入MVC之前可能需要进行身份认证(Auth),因此这也是一个中间件,Auth中间件一般放在MVC之前。又比如对静态文件请求进行响应的具体过程,称为Static Files中间件。
借用一张图:
在这里插入图片描述

  • 代码解析

重要的中间件

错误页面(DeveloperExceptionPage)中间件

DeveloperExceptionPage中间件可以将未被处理的异常在页面中展示,如需使用,则在Startup.cs文件Configure方法中添加如下代码:

app.UseDeveloperExceptionPage();

一般地,这种操作存在安全漏洞,容易被别人根据错误堆栈猜测出工程中使用的技术、数据库等信息,因此我们需要定义他只在开发环境中使用,到生产环境中则不使用此中间件。

Configure函数有一个IWebHostEnvironment类型的参数 env,该参数在运行时会被注入一个IWebHostEnvironment实例,通过该实例的IsDevelopment()方法可以用于判断当前开发过程中的环境变量“ASPNETCORE_ENVIRONMENT”的值,当该值为“Development”则为开发环境,为“Production”则是在生产环境中。

此时,Configure方法中代码如下:

if (env.IsDevelopment())//当前是否是开发模式
            {
                app.UseDeveloperExceptionPage();//该中间件实现如果异常未被处理则使用一个页面展示异常信息
            }

该环境变量可以在项目属性中配置,配置修改方法如下:

在这里插入图片描述
在这里插入图片描述

静态文件中间件

在Startup.cs文件Configure方法中添加如下代码

app.UseStaticFiles();

即可引入静态文件中间件,该中间件默认对项目目录下"wwwroot"目录里的文件/文件夹提供服务,比如wwwroot目录下有index.html文件,则在浏览器输入http://项目运行地址/index.html 就能访问。

如果需要修改这些默认信息,可以按如下方式:

 app.UseStaticFiles(new StaticFileOptions()
                {
                    FileProvider = new PhysicalFileProvider("d:/www/"),//物理路径地址(绝对路径),注意斜杠方向
                    RequestPath="/static"//可以指定子目录 如"static"则需要输入http://项目运行地址/static/index.html 才能访问到d:/www/index.html
                });

端点中间件、路由中间件

  1. 端点
    端点就是请求的URL结尾部分(从Path部分开始),这部分会被中间件进行处理,如下图:
    在这里插入图片描述
  2. 端点中间件
app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context => //对端点为“/”的请求进行响应
                {
                    await context.Response.WriteAsync("Hello World!");//输出helloworld
                });
            });
  1. 路由+端点实现路由功能
    我们对端点中间件的配置进行修改,强调:必须先上路由中间件再上端点中间件(先后顺序),因为路由中间件可以获取端点,再将端点传送给端点中间件进行处理。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            
            if (env.IsDevelopment())//当前是否是开发模式
            {
                app.UseDeveloperExceptionPage();//该中间件实现如果异常未被处理则使用一个页面展示异常信息
            }

            app.UseRouting();//路由中间件,低版本该中间件集成在MVC中间件中。3.0以后独立出来
            
            //必须先引入路由中间件,端点中间件才能对路由中间件处理后得到的端点进行配置,否则会报错

            app.UseEndpoints(endpoints => //端点中间件 对端点进行配置处理
            {
                endpoints.MapControllerRoute(name:"default",pattern: "{Controller=Home}/{Action=Index}/{id?}");//通过端点中间件实现路由配置 如端点与规则(pattern)相匹配,则推送给相应控制器的对应action
            });
        }

Configure整体代码:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            
            if (env.IsDevelopment())//当前是否是开发模式
            {
                app.UseDeveloperExceptionPage();//该中间件实现如果异常未被处理则使用一个页面展示异常信息
            }


            app.UseStaticFiles();//他不需要知道路由信息,所以可以放在路由前面

            app.UseRouting();//路由中间件,低版本该中间件集成在MVC中间件中。3.0以后独立出来
            
            //必须先引入路由中间件,端点中间件才能对路由中间件处理后得到的端点进行配置,否则会报错

            app.UseEndpoints(endpoints => //端点中间件 对端点进行配置处理
            {
                endpoints.MapControllerRoute(name:"default",pattern: "{Controller=Home}/{Action=Index}/{id?}");//通过端点中间件实现路由配置 如端点与规则(pattern)相匹配,则推送给相应控制器的对应action
            });
        }

创建控制器(Controller)

Controller(控制器),是MVC模式中是用来处理传入浏览器的请求,从Model里面取数据,然后指定返回浏览器响应的视图模板的Class类。

控制器类一般放在项目的Controllers目录中,按照约定,控制器类都以Controller结尾。

接下来我们来创建一个名为Home的控制器。先在项目里创建一个Controllers目录,并在里面创建一个类 名为HomeController的类(HomeController.cs文件),如下:
在这里插入图片描述

HomeController类中首先要添加 MVC的引用

using Microsoft.AspNetCore.Mvc;

控制器类继承Microsoft.AspNetCore.Mvc下的Controller类

public class HomeController:Controller
    {
       
    }

假如我们在该控制器中需要调用我们前面写的时钟处理帮助类实例中的相关方法,就需要使用依赖注入,.net core默认带有一个轻量级依赖注入框架,我们只需要为该类写一个构造函数,构造函数中的参数会被自动注入

 public class HomeController:Controller
    {
        private readonly IClock _clockServices; 

        public HomeController(IClock clock)//构造函数,运行时会自动注入IClock的实例
        {
            _clockServices = clock;//将注入的实例的引用(内存地址)赋值给_clockServices变量,action中需要引用该实例的直接使用_clockServices变量即可。
        }
    }

创建Action

Action是控制器(Controller)类中提供的方法,在.netcore中该方法返回类型统一为IActionResult(也可以沿用.net framework mvc4的ContentResult、JsonResult等,在core中他们都实现IActionResult接口,使用该接口即可),参数会根据用户请求自动注入。

比如我们在Home控制器中创建一个名为Index的action,我们只需要在HomeController类中添加一个返回类型为IActionResult的函数,函数名为Index,代码如下:

public ContentResult Index()
        {
            return Content(_clockServices.GetTimeZone(),"text/html",Encoding.UTF8);
        }

点击运行,即可查看到如下效果:
在这里插入图片描述
修改Startup.cs内容,将IClock类型的服务注入改为 UTCClock,则浏览器将会输出"UTC"。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# .NETCORE3.1 系列教程(一) 开发环境搭建与创建的一个Web项目 的相关文章

  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 如何为网站创建 RSS feed?

    我开发了一个网络应用程序 现在我想为我的网站创建 Rss 提要 在我的应用程序中 我有一个名为电影新闻的模块 其中包含电影明星的最新新闻 现在我想为该模块创建 RSS 提要 该新闻包含标题和描述 如何为我的应用程序创建 RSS 源 这是我用
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 使用未分配的局部变量

    我遇到了一个错误 尽管声明了变量 failturetext 和 userName 错误仍然出现 谁能帮帮我吗 Use of Unassigned local variable FailureText Use of Unassigned lo

随机推荐

  • pcie设备之驱动加载udev事件详解

    打卡打卡 udev 自内核2 6之后取代devfs udev配置 usr lib udev rules d etc udev rules d 如何触发udev事件 kobject uevent函数 pcie scan扫描函数 初始化pcie
  • python在linux系统下的编辑编译运行

    PYTHON在linux系统下的编辑编译 新建一个脚本文件 编写程序 运行程序 若安装了如spyder这样的编辑器 若是很简单的代码 新建一个脚本文件 gedit xxx py 新建py格式文件 编写程序 运行程序 在当前目录下 输入pyt
  • 【论文学习】FD-MonbileNet: IMPROVED MOBILENET WITH A FAST DOWNSAMPLING STRATEGY

    原文链接 https arxiv org abs 1802 03750 作者介绍了一种高效且在有限运算量限制上十分准确的网络 Fast Downsampling MobileNet FD MobileNet 其中心思想是在MobileNet
  • 中国钢铁产业产量分析与市场需求状况研究报告2022版

    中国钢铁产业产量分析与市场需求状况研究报告2022版 修订日期 2021年12月 搜索鸿晟信合研究院查看官网更多内容 第一章 产业转移的内涵及模式概述 1 1 产业转移的概念界定 1 1 1 产业转移的定义 1 1 2 产业转移的分类 1
  • mysql 连续打卡_MySQL查询连续打卡信息?

    最近多次看到用SQL查询连续打卡信息问题 自己也实践一波 抛开问题本身 也是对MySQL窗口函数和自定义变量用法的一种练习 01 建表 所用数据库为MySQL8 0 简单而不失一般性 建立一个仅有记录id 用户id 日期和打卡标记共4个字段
  • Python用户消费行为分析实例

    本文借鉴于知乎用户秦路的专栏https zhuanlan zhihu com p 27910430 这里只是自己理解基础上加以扩充和整理修改 丰富细节 由于手头用户消费数据的缺失我们这次采用专栏的数据进行实战 原数据在此 链接 https
  • vue判断input框不能为空_vue判断input输入内容全是空格的方法

    moduleinfo card count count phone 1 count 1 search count count phone 7 count 7 card des 支持文本 图片 视频 网站安全检测等多格式识别服务 提供色情 涉
  • 吃透MIPI接口,你必须了解它这三种PHY规范的区别

    MIPI接口及其物理层特性 MIPI 移动行业处理器接口 是专为移动设备 如智能手机 平板电脑 笔记本电脑和混合设备 设计的行业规范的标准定义 MIPI标准定义了三个通用的唯一物理 PHY 层 即MIPID PHY C PHY和M PHY
  • Stars in Your Window 【POJ - 2482】【线段树扫描线】

    题目链接 最开始的时候做成了贪心 离线求二维前缀和 然后树状数组维护二维偏序 这样的想法是存在BUG的 因为我是将每个点当成左下角 右下角 左上角 右上角来分别计算最大贡献的 但这样的做法却不是最贪心的 因为有可能该点并不作为矩形的四个顶角
  • [ESP][驱动]ST7701S RGB屏幕驱动

    ST7701SForESP ST7701S ESP系列驱动 基于ESP IDF5 0 ESP32S3编写 本库只负责SPI的配置 SPI设置屏幕信息两方面 由于RGB库和图形库的配置无法解耦 具体使用的图形库需要自行配置添加 本示例默认绑定
  • 全局异常处理Seata事务失效解决方案

    全局异常处理Seata事务失效解决方案 最近的项目用到了seata来管理全局事务 在进行测试的时候 发现当service A 调用Service B时 如果ServiceA报错 ServiceB能回滚 但是如果ServiceB报错 Serv
  • 区块链基础和底层技术

    大家好 这里是链客区块链技术问答社区 链客 有问必答 区块链基础 区块链的维基百科定义 区块链是一个基于比特币协议的不需要许可的分布式数据库 它维护了一个持续增长的不可篡改的数据记录列表 即使对于该数据库节点的运营者们也是如此 简而言之 区
  • 机器视觉图像分析领域,单目测量和双目测量有什么区别和用途?

    单目测量和双目测量在许多应用场景中都有广泛的应用 以下是一些典型的应用场景 单目测量应用场景 1 无人机定位与导航 单目摄像头可以用于无人机的视觉定位与导航 通过捕捉地面特征点 实现无人机的姿态估计和位置定位 2 机器人视觉导航 在轻量级的
  • CART回归树 GBDT XGB LGB

    CART回归树 GBDT XGB LGB 1 决策树 ID3 C4 5 CART 决策树算法原理 上 CART树 首先我们看看决策树算法的优点 1 简单直观 生成的决策树很直观 2 基本不需要预处理 不需要提前归一化 处理缺失值 3 使用决
  • Windows中使用Docker安装Redis

    1 拉取Redis 以管理员身份运行CMD 执行如下命令拉取Redis docker pull redis 2 在D盘新建目录D Net Program Net Docker Redis 在D盘新建D Net Program Net Doc
  • DataSphereStudio创建工作流时报错No FileSystem for scheme: hdfs问题

    DataSphereStudio创建工作流时报错No FileSystem for scheme hdfs问题 最近在用微众银行开发的dss工具 但是安装完之后 创建工作流报错No FileSystem for scheme hdfs 如果
  • java nio socket,Java----NioSocket的简单使用

    一 自己理解的概念 nioSocket 即new io socket 是一种同步非阻塞的I O 其使用buffer来缓存数据和channel来传输数据 使用select来分拣消息 其使用的ServerSocketChannel和Socket
  • 激光SLAM直接线性方法里程计运动模型及标定

    原创作者 W Tortoise 原创作者文章 https blog csdn net learning tortosie article details 107763626 1 里程计运动模型 1 1 两轮差分底盘的运动模型 1 2 三轮全
  • [转]换位思考多周期约束

    在开篇前先推荐两篇文档 一篇是altera的官方文档 Appling Multicycle Execptions in the TimeQuest Timing Analyzer 另一篇是riple兄很早之前推荐过的Multicycles
  • C# .NETCORE3.1 系列教程(一) 开发环境搭建与创建的一个Web项目

    TOC JXMaker NET CORE3 1系列教程 一 开发环境与创建Web项目 JXMaker NET CORE3 1系列教程 一 开发环境搭建与创建的一个Web项目 开发环境 教程中使用的开发环境为Win2010 VS 2019 安