自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 Docker入门

Docker官网地址 : https://www.docker.com/Docker文档地址 : https://docs.docker.com/Docker镜像仓库地址 : https://hub.docker.com/Docker是一个开源的应用容器引擎,让开发者把他们的应用以及依赖打包到一个可移植的镜像中(打包),然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口(隔离)。Docker Client:客户端。

2024-04-06 17:06:37 1537 2

原创 sql优化

我们写sql语句时,经常直接使用select *,一次性查出表中所有列的数据。其实是会影响查询速度的,我们最好只查询自己所需要的列反例:在实际业务场景中,可能我们真正需要使用的只有其中一两列。查了很多数据,但是不用,白白浪费了数据库资源,比如:内存或者cpu。此外,多查出来的数据,通过网络IO传输的过程中,也会增加数据传输的时间。还有一个最重要的问题是: select * 不会走覆盖索引,会出现大量的回表操作,而从导致查询sql的性能很低。正例 sql语句查询时,只查需要用到的列,多余的列根

2023-06-16 17:11:53 65

原创 微服务跟传统单体结构项目

微服务第一定律 避免使用微服务,除非有充足的理由。

2023-06-16 11:12:14 76

原创 C#新语法

简化的“using”写法在保证了资源回收的前提下,保持了代码的优美。执行这一段代码,第4行会报异常,因为outStream和writer两个变量的作用域是当前方法执行完成,才会释放资源,当程序执行到第4行时,文件乃然被占用,所以会报异常。有些类库(命名空间)在多个文件中都会引用,使用全局using指令,就可以随便在项目的任何的一个类里面引入类库(命名空间),整个项目就都可以使用了。传统的using写法存在多层的作用域嵌套,会让代码结构复杂,在c#8开始,可以使用简化的“using”语法,例子如下。

2023-06-16 10:49:41 62

原创 ASP.NET Core的部署

网站发布1、不能直接把bin/Debug部署到生产环境的服务器上,性能低。应该创建网站的发布版,用【发布】功能。2、两种部署模式:“框架依赖”和“独立”。两者的优缺点。1:框架依赖的部署模式下,我们发布生成的程序集中不包含.NET运行时,所以我们需要在服务器上安装对应版本的.NET运行时2:独立模式下,我们生成的程序集包含.NET运行时,所以我们不需要在服务器上安装对应版本的.NET运行时。3:对于大多数情况下,独立模式更符合项目的部署要求。在独立模式下,我们只需要把程序集复制到服务器上

2023-06-15 18:52:46 262

原创 ASP.NET Core Web API

Controller继承自ControllerBase,只不过增加了视图相关的方法,一般mvc项目选用Controller而Web API项目选择ControllerBase即可。ASP.NET Core Web API中的操作方法返回值如果是普通数据类型,则返回值默认被序列化为JSON格式的响应报文体返回。对于失败的请求,一般要统一响应报文体的格式以便在客户端进行处理。声明一个表示错误的详细信息类其中code参数表示错误的自定义业务代码。

2023-06-15 16:18:21 82

原创 Restful

5:服务器端要通过状态码来反映资源获取的结果:200 (意思是一切正常),201(新增成功),400(错误请求,一般是客户端请求的参数错误),401(未授权,没登录的意思),、403(没有权限,一般指已经登录,但是你没有权限访问当前方法),404(没有找到任何资源),500 (服务器错误)2:具有不同的请求方法(也叫请求谓词),主要有get、post、put、delete,获取资源使用get,新增资源使用post,整体更新使用put,删除资源使用delete。3:什么是“幂等”,举例?

2023-06-15 15:44:13 38

原创 ASP.NET Core Web 入门

1:MVC开发的系统一般是在浏览器中查看,而目前访问服务器的客户端已不仅仅是浏览器了,很多客户端和服务器之间一般都是使用JSON结构来传递数据,所以需要将数据进行结构化,执行结构化操作的服务叫做Web API。浏览器提交的请求会被封装到模型类的对象中,然后传递给控制器,控制器对其进行处理后将结果放到模型类的对象中再传给视图,视图则解析模型对象渲染成HTML输出给浏览器。1:MVC中,控制器由Controller类实现,视图一般为*.cshtml文件,模型则是C#中的普通类。

2023-06-15 15:19:13 129

原创 SignalR服务器端消息推送

在传统的HTTP中,只能客户端主动向服务器端发起请求,服务器端是无法主动向客户端发送消息的,但是有一些场景需要我们服务器端主动向客户端发送消息,那么主要有以下3种方式实现原理: 利用Ajax定时朝后端发送请求,比如每隔五秒钟发一次请求,那么你的数据延迟就可能会高达五秒特点: 数据延迟,消耗资源过大,请求次数太多原理: 利用Ajax + 队列 定时朝后端发送请求, 如果没有数据则会阻塞但是不会一直阻塞, 比如阻塞你30秒,还没有数据则返回,然后让客户端浏览器再次发送请求数据的请求。

2023-06-15 11:57:10 311

原创 请求数据校验

上文中,我们提到了.NET Core中内置数据校验机制的不足,这里向读者推荐优秀的数据校验框架FentValidaion 它可以让我们用类似于.NET Core中Fluent API的方式进行校验规则的配置,也就是我们可以把对模型类的校验放到单独的校验类中。在程序中,需要进行数据验证的场景经常存在,且数据验证是有必要的。1:我们的校验规则都是跟模型类耦合在一起的,这违返了面向对象的“单一职责原则”,而且同一个模型类在不同的地方可能需要不同的校验规则,这种难以实现.[比较]:验证模型中的两个属性是否匹配。

2023-06-15 09:48:29 87

原创 托管服务(IHostedService,BackgroundService)

有些工作是需要后台运行的,比如每天凌晨备份数据库。ASP.NET Core提供了托管服务来供我们编写后台代码。托管服务只需要实现IHostedService即可,一般在开发时编写继承自BackgroundService的类,该类不进实现了IHostedService接口,并且处理了任务取消等逻辑,我们只需实现BackgroundService中定义的ExecuteAsync方法即可。

2023-06-14 21:00:37 236

原创 JWT提前撤回

当遇到用户被删除或者用户在另一个设备上登陆等场景时需要将JWT提前撤回,但是JWT是保存在客户端,无法在服务器中进行删除。:是在用户表中增加一列JWTVersion,用来存储最后一次发放出去的令牌版本号,每次登陆、发放令牌的时候都让JWTVersion自增,当服务器收到客户端提交的JWT后,将客户端的JWTVersion和服务器的进行比较,如果客户端的值小于服务器中的值则过期。

2023-06-13 16:14:51 74

原创 JWT(代替Session会话)

经典的保持登陆状态的办法是Session,也就是用户登陆后,服务器产生唯一标识SessionId,并把SessionId和登陆的用户信息保存在服务器内存中,通时将SessionId发送给浏览器(),当浏览器再次访问的时候,http请求中便携带了SessionId,服务器根据该Id在内存中取到用户信息,这样就实现了登陆功能功能。1:如果Session保存在内存中,当登陆用户多的时候,会占用服务器大量服务器内存,而且无法支持分布式集群。

2023-06-11 18:23:09 189

原创 缓存(性能的万金油)

缓存是一个用来保存数据的区域,从缓存中读取数据要比从数据源读取数据的速度快很多。:从缓存中获取到了要获取的数据则称之为“缓存命中”:多次请求命中的请求占全部请求的百分比叫做“命中率:如果数据源中的数据保存到了缓存后,发生了变化则称之为“缓存数据不一致”缓存又分为响应缓存,内存缓存,分布式缓存,其中响应缓存又分为客户端响应缓存,服务器端响应缓存。

2023-06-10 16:21:45 41

原创 c# 日志

Microsoft.Extensions.Logging(这个是日志的基础包)

2023-06-02 15:30:55 160

原创 .Net Core配置系统

Net Core配置系统支持文件(Json、XML、INI)、注册表、环境变量、命令行、Key Vault等。:Microsoft.Extensions.Configuration(这个是个基础包)//配置创建器//添加一个待解析的JSON文件//option:option为true时,Config.json文件不存在时不会报错,返回null;//option为false时,Config.json文件不存在时直接报异常。

2023-06-02 14:31:13 72

原创 .NET Core 依赖注入

使用了依赖注入框架之后,所有我们注入到容器中的类型的创建、销毁工作都由容器来完成,那么容器什么时候创建一个类型实例,什么时候销毁一个类型实例呢?根据我们的需要,我们可以向容器中注册服务的时候,对服务的生命周期进行设置。注册到容器中的对象(依赖项注入术语中,服务通常是指向其他对象提供服务的对象,既可以作为其他类的依赖项,也可能依赖于其他服务。在某些情况下,对于某些特殊的类,我们需要注册成单例模式,这可以减少实例初始化的消耗,还能实现跨 Service 事务的功能。控制反转的目的是让框架完成对象的创建和组装。

2023-06-01 16:13:41 251

原创 C# Lambda表达式

Action fun1 = (name, age) => Console.WriteLine("你好");正因为任何 Lambda表达式都可以转换为委托类型,那么在需要使用委托的地方都可以结合Lambda使用,极大的方便了委托的使用和提高代码的简洁度。若指定有0个输入参数,则需要用空括号( )表示,即:( ) => { Console.WriteLine(“你好”);如果编译器无法推算出类型,则可以显示地指定类型,即:( int x, int y) => x+y;

2023-05-25 15:00:52 71 1

原创 C# 委托

从数据结构来讲,委托是和类一样是一种用户自定义类型。委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。

2023-05-25 12:04:50 64 1

原创 C# 异步编程

异步方法:在执行完成前立即返回调用方法,在调用方法继续执行的过程中完成任务。async/await 结构可分成三部分:(1)调用方法:该方法调用异步方法,然后在异步方法执行其任务的时候继续执行;(2)异步方法:该方法异步执行工作,然后立刻返回到调用方法;(3)await 表达式:用于异步方法内部,指出需要异步执行的任务。一个异步方法可以包含多个 await 表达式(不存在 await 表达式的话 IDE 会发出警告)

2023-05-24 22:03:49 105

原创 .net 数据库操作技术

现代应用开发的经验,都要求尽量保持数据库的干净,避免使用存储过程、外键、视图等,这些功能都应该在程序端来实现,所以推荐使用Dapper。2、由于EFCore,增加了LINQ至SQL的翻译步骤,如果复杂一些的LINQ语句,机翻的结果可能不是最优的SQL语句,同时,EFCore会对实体类状态进行跟踪,所以性能会稍低于Dapper。5、EF Core是官方推荐、推进的框架,尽量屏蔽底层数据库差异,.NET开发者必须熟悉,根据的项目情况再决定用哪个。.net 常用的orm:EF,EF core、Dapper、

2023-05-22 15:08:40 249

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除