自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

子昊

一介草民

  • 博客(56)
  • 收藏
  • 关注

原创 Windows:Docker安装

如果您不同意更新后的条款,Docker Desktop 应用程序将关闭,您将无法再在您的机器上运行 Docker Desktop。如果您不同意这些条款,Docker Desktop 应用程序将关闭,您将无法再在您的机器上运行 Docker Desktop。从 Docker Desktop 4.2.0 开始,所有 Docker 订阅(包括 Docker Personal 和 Docker Pro)的用户都可以使用关闭自动检查更新的选项。,以了解使用 Docker Desktop 的公司可能受到的影响。

2022-08-20 10:36:23 637 1

原创 C#:模式匹配与模式

“模式匹配”是一种测试表达式是否具有特定特征的方法。 C# 模式匹配提供更简洁的语法,用于测试表达式并在表达式匹配时采取措施。模式匹配最常见的方案之一是确保值不是 。 使用以下示例进行 测试时,可以测试可为 null 的值类型并将其转换为其基础类型:上述代码时声明模式,用于测试变量类型并将其分配给新变量。变量 仅在 子句的 true 部分可供访问和分配。 如果尝试在 子句或 程序块后等其他位置访问,编译器将出错。 其次,由于不使用 运算符,因此当类型重载 运算符时,此模式有效。 这使该方

2022-08-15 16:51:21 733

原创 C#:序列化

序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。 它的主要用途是保存对象的状态,以便能够在需要时重新创建对象。 反向过程称为“反序列化”。下图展示了序列化的整个过程:将对象序列化为带有数据的流。 该流还可能包含有关对象类型的信息,例如其版本、区域性和程序集名称。 可以将此流中的对象存储在数据库、文件或内存中。通过序列化,开发人员可以保存对象的状态,并能在需要时重新创建对象,同时还能存储对象和交换数据。 通过序列化,开发人员可以执行如下操作:若要对二进制或 XML 进行序列化

2022-06-16 11:35:02 644

原创 C#:LINQ

语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。随着时间的推移,人们已经为各种数据源开发了不同的语言。因此,开发人员需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。 LINQ 通过提供处理各种数据源和数据格式的数据的一致模型,简化了这一情况。 借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。 可以使用语言关键字和熟悉的运算符针对强类型化对象集合编写查询。 LINQ 系列技术提供了针对对象 (LINQ to O

2022-06-16 11:14:21 221

原创 C#:集合

对于许多应用程序,我们都会想要创建和管理相关对象的组。 有两种方法对对象进行分组:许多通用集合由 .NET 提供。 每种类型的集合用于特定的用途。可以使用 System.Collections.Generic 命名空间中的某个类来创建泛型集合。 当集合中的所有项都具有相同的数据类型时,泛型集合会非常有用。 泛型集合通过仅允许添加所需的数据类型,强制实施强类型化。下表列出了 System.Collections.Generic 命名空间中的一些常用类:在 .NET Framework 4 以及更新的版本中,S

2022-06-15 15:28:57 612

原创 C#:特性

使用特性,可以有效地将元数据或声明性信息与代码(程序集、类型、方法、属性等)相关联。 将特性与程序实体相关联后,可以在运行时使用反射这项技术查询特性。 有关详细信息,请参阅反射 (C#)。特性具有以下属性:特性的常见用途:可以将特性附加到几乎任何声明中,尽管特定特性可能会限制可有效附加到的声明的类型。 在 C# 中,通过用方括号 ([]) 将特性名称括起来,并置于应用该特性的实体的声明上方以指定特性。在此示例中,SerializableAttribute 特性用于将具体特征应用于类:按照约定,所有特性

2022-06-15 15:05:24 366

原创 C#:异步编程

异步操作表示执行某项操作之后不等待操作结束,但可以在操作结束后收到通知。示例:示例是一个调用阻塞操作的例子。tcp连接的方法就是一个阻塞操作,只有连接成功或是失败的时候才会回复。发送数据也是同样的。线程阻塞的时候操作系统会调度这些执行操作的线程进入等待状态,等到操作完成后再重新把线程放入待运行队列中并调度执行。这种方式会出现一个问题,如果我们要同时管理多个tcp连接,那么我们就需要创建很多的线程,每个线程分配的栈空间加起来就会消耗很多的内存。在linux平台下,一个线程栈会默认分配8~10M的空间,也

2022-06-15 13:32:03 2020

原创 C#:事件

和 委托 类似,事件是后期绑定机制。 实际上,事件是建立在对 委托 的语言支持之上的。事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式。 任何其他组件都可以订阅事件,并在事件引发时得到通知。许多图形系统都具有用于报告用户交互的事件模型。 这些事件会报告鼠标移动、按钮点击和类似的交互。 这是使用事件的最常见情景之一,但并非唯一的情景。要使用事件首先就得定义委托,如下:然后再定义使用 关键字的事件:对事件所依赖的事务赋值:调用事件:通过使用 运算符增加订阅事件:

2022-06-09 16:46:18 544

原创 C#:委托

C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。在 .NET 中委托提供后期绑定机制。 后期绑定意味着调用方在你所创建的算法中至少提供一个方法来实现算法的一部分。比如,我们要实现一个多语言的问候。当我们没有使用委托的时候可以这样实现。示例:虽然这样解决了问题,但是

2022-06-08 16:01:49 176

原创 C#:异常

C# 语言的异常处理功能有助于处理在程序运行期间发生的任何意外或异常情况。异常处理功能使用 、 和 关键字来尝试执行可能失败的操作、在你确定合理的情况下处理故障,以及在事后清除资源。公共语言运行时 (CLR)、.NET/第三方库或应用程序代码都可生成异常。 异常是使用 关键字创建而成。在许多情况下,异常并不是由代码直接调用的方法抛出,而是由调用堆栈中再往下的另一方法抛出。 如果发生这种异常,CLR 会展开堆栈,同时针对特定异常类型查找包含 代码块的方法,并执行它找到的首个此类 代码块。 如果在调用堆

2022-06-07 14:01:52 412

原创 C#:元组

元组提供一种从方法调用中检索多个值的轻量级方法。假设我们有一个方法具有多个返回值,在没有元组之前,我们可以使用out和对象。例如:下面是一个使用out的示例:这样,按元素逐个操作比较麻烦,而当我们使用元组时,则可以这样实现:注:在 C# 7.0 及更高版本中,才可以从元组中检索多个元素。1. 在括号内显式声明每个字段的类型。示例:2.使用 关键字,以便 C# 推断每个变量的类型。示例:3.将元组析构到已声明的变量中。示例:4.从 C# 10 开始,可在析构中混合使用变量声明和

2022-06-07 13:48:30 268

原创 C#:记录

C# 中的记录是一个类或结构,它为使用数据模型提供特定的语法和行为。在下列情况下,请考虑使用记录而不是类或结构:声明和实例化类或结构时使用的语法与操作记录时的相同。只是将 关键字替换为 ,或者使用 而不是 。 同样地,记录类支持相同的表示继承关系的语法。记录与类的区别如下所示:记录结构与结构的不同之处是,编译器合成了方法来确定相等性和 。 编译器为位置记录结构合成 方法。下面的示例定义了一个公共记录,它使用位置参数来声明和实例化记录。 然后,它会输出类型名称和属性值:下面的示例演示了记录中的值相

2022-06-07 11:43:37 566

原创 C#:顶级语句

从 C# 9 开始,无需在控制台应用程序项目中显式包含 方法。 相反,可以使用顶级语句功能最大程度地减少必须编写的代码。 在这种情况下,编译器将为应用程序生成类和 方法入口点。下面是一个 Program.cs 文件看,它是 C# 10 中的一个完整 C# 程序:注意点:参考:Microsoft C# 顶级语句...

2022-06-07 10:39:13 2346

原创 C#:弃元

从 C# 7.0 开始,C# 支持弃元,这是一种在应用程序代码中人为取消使用的占位符变量。简单来说,弃元的作用就是告诉编译器和其他读取代码的文件你打算忽略表达式的结果。当我们不需要或不使用赋值的结果时,就可以使用弃元。我们在代码中一定遇到过这种苦恼:此时,我们并不需要使用到返回的值,但是方法又规定必须传递out的值,此时,我们就可以这样实现代码:除了out之外,我们还可以在元组和对象析构、等语句中使用弃元写出优雅代码例如,下面的例子我们只希望使用到日期中的年份。例如,我们在的模式匹配中不期

2022-06-07 10:20:41 808

原创 ASP.NET Core:MediatR

什么是MediatR?简单来说MediatR是一个可以帮助我们实现中介者模式的类库。在具体进入MediatR这个类库之前,我们需要先简单的了解一下CQRS。

2022-03-14 17:30:58 1180

原创 .NET:Core CLI常用命令

注:[]表示可选、<>表示必传、-简称、--全称、|或者基础信息dotnet --info描述:查看系统安装的所有SDK的信息dotnet --version描述:当前使用的SDK版本dotnet new global.json --sdk-version 3.1.200描述:给当前目录创建一个版本文件,确定当前文件使用的SDK版本(实际上是在当前目录创建一个文件,文件中确定版本号,dotnet调用版本时是从项目的当前目录向上搜索版本文件,用以确定版本,如

2022-03-11 15:16:11 752

原创 设计模式:中介者模式

什么是中介者模式?首先中介者模式(Mediator Pattern)属于行为模式。主要是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常用来处理不同类之间的通信,并支持松耦合,使代码易于维护。简单来说,中介者就是中间人的意思。比如,之前常使用的MVC模式,C(Controller控制器)是M(Model模型)和V(View试图)的中介者,在前后端交互时起到中间人的作用。再比如,房产买卖房产时的房产中介,就是购买者和出售者的中间人。中介者模式的主要目的就是用一个中介

2022-03-11 09:25:57 395

原创 DDD:CQRS

什么是CQRS?CQRS(Command and Query Responsibility Segregation),命令查询责任分离。一种将数据存储的读取和更新操作分开的模式。从名称简单理解则是将commad与query分离的一种模式。CQRS 将系统中的操作分为两类:Command:命令则是对会引起数据发生变化操作的总称,即我们常说的新增,更新,删除这些操作都是命令 Query:查询则是不会对数据产生变化的操作,即我们常说的查找数据。CQRS 的核心思想是将这两类不同的操作进行分离,然后

2022-03-10 11:24:53 445

原创 Nginx:vue路由使用history模式刷新404

当vue-router使用history模式时,当我们刷新页面或直接访问路径的时候就会返回404,如图。在history模式下,只是动态的通过js操作window.history来改变浏览器地址栏里的路径,并没有发起http请求,但是当我们直接在浏览器输入这个地址的时候,就会对服务器发起http请求,但是这个目标在服务器上又不存在,所以会返回404。我们可以通过把所有请求都转发到首页上来解决这个问题。nginx配置:location /{ root /website/wenf

2022-02-16 15:17:40 6896

原创 Linux:内存情况处理

free命令Linux free命令用于显示内存状态。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。#语法free [-bkmotV][-s <间隔秒数>]#参数说明-b 以Byte为单位显示内存使用情况。-k 以KB为单位显示内存使用情况。-m 以MB为单位显示内存使用情况。-h 以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有: B=bytes K=kilos

2022-02-14 16:15:00 493

原创 ASP.NET Core:认证与授权

认证认证是安全体系的第一道屏障。当访问者的请求进入的时候,认证体系通过验证对方提供的凭证来确定它的真实身份。认证体系只有在证实了访问者的真实身份之后才允许它进入。.NET Core提供了多种认证方式。但是它们的实现都是一样的。都是基于同一个认证模型的。ASP.NET Core的认证功能是通过内置的一个认证组件来提供的。这个组件在处理分发给它的请求时会按照指定的认证方案从请求中提取能够验证用户真实身份的数据。我们一般把这种数据称为安全令牌。在ASP.NET Core应用下的安全令牌也叫做认证票据。

2022-01-27 10:09:09 3447

原创 Linux:Nginx安装

Nginx下载地址:nginx: download

2022-01-13 17:51:51 335

原创 设计模式:基本概念

对象对象的概念:广义上讲,对象就是客观世界中的事物,可以是具体的事物,也可以是抽象事物。狭义上讲,对象表示正在创建的系统中的一个实体。这些对象对于实现系统的完整功能都是必不可少的。对象的结构:对象是属性(状态)和方法(或操作)的封装体。属性是由对象的数据结构的内容和值定义的,方法是一系列的实现步骤,它是由若干操作构成的。对象的状态:对象的状态实际上是为执行行为而必须存在于对象之中的数据、信息。每个对象的状态都会随着对...

2022-01-07 16:42:50 285

原创 Linux:Mongodb安装

Mongodb包下载地址:MongoDB Community Download | MongoDB将下载的包上传到要安装的服务器,这里使用的是tgz格式的。1. 解压、改名// 解压tar -zxvf /usr/mongodb-linux-x86_64-rhel70-4.4.10.tgz// 改名mv /usr/mongodb-linux-x86_64-rhel70-4.4.10.tgz /usr/mongodb2.创建相关文件夹// 创建数据文件夹mkdi..

2022-01-07 15:40:27 413

原创 ASP.NET Core:CORS

跨域是由于请求违反了同源策略导致的。而同源策略是所有浏览器都遵循的一种安全原则。也正是因为同源策略的存在决定了浏览器在默认情况下无法对跨域请求的资源做进一步的处理。为了实现对跨域资源的共享,W3C制定了一种叫做CORS的规范。CORS规定了浏览器在接收到从资源提供者获取到资源时能够决定是否将此资源分发给资源消费者做进一步的处理。同时规定浏览器需要得到资源提供者的授权后才能将此资源分发给消费者。资源提供者需要如何进行资源的授权?并将结果告知给浏览器?如果浏览器本身支持CORS规范,那么通过

2021-11-11 16:17:57 446

原创 ASP.NET Core:路由

路由主要是由UseRouting和UseEndpoints两个组件协同完成的。我们可以将ASP.NET Core的应用设为一组终结点(能够通过http请求的方式访问的远程服务)的组合。示例: public class demo14 { private static readonly Dictionary<string, string> Cities = new Dictionary<string, string> { ..

2021-11-11 10:54:37 722

原创 ASP.NET Core:异常处理

ASP.NET Core是一个同时处理多个请求的Web应用框架,所以在处理某个请求中抛出的异常不会导致整个应用的终止。而且处于安全的考虑为了避免敏感信息的泄露,客户端在默认情况下是不会得到详细的错误信息。这回让我们在开发过程中增加了差错的难度。ASP.NET Core提供了相应的组件,可以帮助我们将定制化错误消息呈现出来。当ASP.NET Core在处理某个请求的过程中出现异常,一般都会返回一个状态码为500的错误响应。为了避免一些敏感信息的泄露,详细的错误信息一般都不会跟着响应发送到客户端。客户端

2021-11-10 15:44:47 1367

原创 ASP.NET Core:静态文件

在Web开发中,如js脚本、css样式、图片等的静态文件通常占据了很大一部分。ASP.NET Core提供了三个中间件来处理这种针对静态文件的请求。利用它们我们不经可以将物理文件发布为通过http请求可以去获取的外部资源。还可以将所在的物理结构也给呈现出来。通过http请求获取的外部资源大部分都来源于存储在服务器磁盘上的静态文件。对于ASP.NET Core来说,如果静态文件存储在约定的目录下,那么绝大部分文件类型都是可以通过web的形式对外发布的。像这种在web根目录下的所有文件都会自动的发.

2021-10-28 16:45:45 982

原创 ASP.NET Core:Hosting与管道

ASP.NET Core应用本质上是一个服务,这个服务启动了一个网络监听器,这个监听器需要长时间的运行。当这个监听器接收到一个HTTP请求之后,监听器会将这个请求传递给管道进行处理。完成处理后就会生成HTTP响应,并通过这个监听器返回给客户端。这个长时间运行的服务需要寄宿在托管进程中。而提供这个功能的组件,我们称为Hosting。HostingHosting所实现的功能就是将一个或多个长时间运行的服务寄宿在托管进程中。由Hosting管理的服务我们称为托管服务。我们可以简单理解Hosting

2021-10-21 10:59:30 634

原创 .NET:配置系统

在Framework时代,我们都习惯将配置放在web.config这种xml这种格式的文件中。在.NET Core中这种配置方式发生了改变 。有了新的配置系统,这种新的配置系统具有更好的扩展性。最大的特点就是支持各种数据源、多种数据源。从应用层面上来讲,.NET Core的配置模型有三个核心对象:配置源对象,代表数据最原始的来源。 配置构建对象,会通过配置源对象来构建最终的配置对象。 配置对象,应用程序中读取并使用的配置对象。这三个对象都以接口的形式体现。在读取配置的时候,我们可以根据

2021-10-19 10:01:49 168

原创 .NET:文件系统

IFileProviderIFileProvider,抽象的文件系统,可以构建具有层次化的目录结构。

2021-09-06 13:33:33 316

原创 .NET:依赖注入

控制反转(Inversion of Control,缩写为IOC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。用来注册服务、解析实例。依赖注入(Dependency Injection,简称DI)是一个将行为从依赖中分离的技术,简单地说,它允许开发者定义一个方法函数依赖于外部其他各种交互,而不需要编码如何获得这些外部交互的实例。为了方便理解,我使

2021-09-03 13:51:53 4741

原创 C#:多线程与异步

多线程介绍:多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多余一个线程,进而提升整体处理性能。--来自百度百科分类:原生线程: 托管线程:.........

2021-08-20 14:20:06 3428

原创 .NET:异步本地存储

线程本地存储是按线程隔离的变量,每一个线程都有专属于自己的值。由于异步操作执行完成后它调用的回调的线程和之前的线程是不一定相同的,所以线程本地存储并不适用于异步。为解决这个问题.Net提供了AsyncLocal(异步本地存储)。异步本地变量是通过执行上下文来实现的。执行上下文是一个专门保存异步本地变量数据的一个类型。每一个托管线程对象都会保存一个执行上下文对象。执行上下文对象可以看作是一个线程本地变量。TPL在创建Task对象的时候会记录当前托管线程的执行上下文,并且在执行回调前把它恢复。执行上下文会在

2021-08-20 14:08:56 279

原创 .NET:GC

.Net程序可以找出某个时间点上哪些已分配的内存空间没有被程序使用,并自动释放它们。自动找出并释放不再使用的内存空间的机制,就称为垃圾回收机制(Garbage Collection,简称GC)。

2021-08-13 14:43:06 847

原创 .NET:锁

原子操作在多线程的环境中有可能多个线程同时访问同一个资源时,我们需要一些方法保证多个线程访问不发生冲突,其中最基本的就是原子操作。原子操作指的是不可分割,并且与其它原子操作互斥的操作。示例: public class demo9 { public static int a = 0; public static void test() { //给变量a自增1,返回变量a增加后的值

2021-08-11 15:11:13 1737

原创 .NET:线程本地存储

用于实现线程隔离的线程本地变量。包含在托管线程对象Thread中。对于同一个线程本地变量,各个线程分别有独立的值,修改的值只针对修改的线程可见。示例: public class demo7 { [ThreadStatic] static int a, b; public static void test() { var thread1 = new Thread(Thread1);

2021-08-10 15:15:11 272

原创 .NET:LINQ

语言集成查询(Language Integrated Query,缩写:LINQ),是微软的一项技术,新增的一种自然查询语言。LINQ加载数据LINQ特殊化操作符namespace Test{ public class demo2 { /// <summary> /// LINQ特殊化操作符 /// </summary> public static void test()..

2021-08-03 16:34:02 257

原创 .NET:Core源码编译

.NET Platform源码仓库:https://github.com/dotnet环境系统:windows10(官方建议版本为专业版1903)VS:https://visualstudio.microsoft.com/zh-hans/GIT:https://git-scm.com/downloadsCMake(建议最新):https://cmake.org/download/Python(建议最新):https://www.python.org/downloads/.

2021-08-03 15:47:51 985

原创 计算机系统:网络编程

所有的网络应用都是基于相同的基本编程模型(客户端-服务器编程模型),有着相似的整体逻辑结构,并且依赖相同的编程接口。客户端-服务器编程模型每个网络应用都是基于客户端-服务器模型的。采用这个模型,一个应用是由一个服务器进程和一个或者多个客户端进程组成。服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务。例如,一个Web服务器管理着一组磁盘文件,它会代表客户端进行检索和执行。客户端-服务器模型中的基本操作是事务(transaction)。一个客户端-服务器事务由以下四步组成。.

2021-06-09 16:58:37 342 3

空空如也

空空如也

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

TA关注的人

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