自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(137)
  • 资源 (4)
  • 收藏
  • 关注

原创 C# 索引器的范例和要点

索引器其实是一个语法糖,他提供了一种访问多个属性的遍历,有时候用起来会省事很多

2024-04-03 16:39:10 552

原创 C#中值类型与引用类型的存储

请记住一个引用类型,其实例数据部分始终存放在堆里,既然两个成员都是对象数据的一部分,那么他们都会被存放在堆里,无论他们诗值类型还是引用类型。记住上面的两张图,搞不清楚时,自己划一下,以后分析值对象和引用对象在内存的位置就心里有数了。首先,构造student对象用了new,所以student的实例数据存储在堆上,其引用部分放在堆里。C#中类型分为两种:值类型和引用类型,这两种类型的对象在内存中的存储方式不同。如果存储了一个对象,该对象有多个成员,成员既有值对象又有引用对象时,存储情况如何呢?

2024-04-02 20:53:36 512

原创 C# 取消一个不带CancellationToken的任务?

在异步函数中,一般使用CancellationToken来控制函数的执行。那么如果一个异步函数没有这个Token参数,如何取消呢?

2023-10-18 18:08:03 345

翻译 C#中的TaskCompletionSource

在C#异步编程中使用await/async时,会经常使用Task类,除了void之外,Task是异步方法的主要返回类型,还有后来的TaskValue(较少使用)。那偶尔也会看见异步中使用TaskCompletionSource,它有什么用呢?

2023-10-18 16:40:21 522

原创 C# 通过回调获取多线程中的结果

答案是传递一个回调函数。看具体的例子,假设我有一个求自然数的累加和函数,我想让一个线程单独运行,且返回结果。在C#中多线程运行一旦开启,是没办直接返回你要的结果的,但有时候我们确实需要线程给我们结果要怎么做呢?这个类不仅接受参数Number,还接受一个回调函数:Action.在计算完成前将结果传递给回调函数。这里只是简单地打印,事实上还可以将取值拿出来,做法类似于上一节提到的。

2023-10-13 12:10:52 364

原创 C# 往多线程传递安全参数的方法

这样,在执行时,我们向多线程传递的是类PassParameter。sToThread的成员函数,且没有任何参数。这样就实现了安全的将参数传递到线程中。为此要如何避免这种问题呢?

2023-10-13 11:41:30 267

原创 C#关于接口的常见面试问题

1. C# 中的接口是一个完全未实现的类,用于声明对象的一组方法。因此,我们可以将接口定义为纯抽象类,它允许我们仅定义抽象方法。抽象方法是指没有主体或实现的方法。2. 一个类可以从另一个类继承,也可以从接口继承。所以,继承可以分为两类:实现继承和接口继承。3. C#不支持多重继承,接口可以弥补这一缺陷。4. 不行,默认情况下,.NET 接口方法是隐式公共的,即使它们属于嵌套接口。非公共修饰符对于接口方法无效。因此,在这种情况下,编译器将失败并警告您。5. 不可以。

2023-10-12 16:17:56 284 1

原创 数学计算式转为表达式树

数据结构“栈”的一个用途就是:平衡符号,比如这样一个代数式:(a(b+c)*a(e*f+a*(c+d))),你能一眼看出这个式子的括号是否正确吗?更何况还可以加入中括号([]),大括号({})。如果写一个算法来验证这个式子的话,利用栈这种数据结果是最方便的:构造一个空栈,读入字符串直到文件尾。如果字符是一个开放符号,则将其推入栈中,如果字符是一个封闭符号,则房栈空时报错;否则将栈元素弹出。如果弹出的符号不是对应的开放符号,则报错。在文件尾,如果栈非空则报错。

2023-09-07 10:35:45 229

原创 4个基本不等式的函数证明

也就是上面这个函数可以一下子证明完上面的不等式链。其中a、b都是大于0的常数。在此之前,我们需要考虑函数。

2023-07-03 15:41:12 491

原创 C# 泛型集合中的排序

就算不熟悉Linq,熟悉SQL查询语句的,也能很快上手Linq。List类的Sort方法有4个重载,其中一个是Sort(IComparer comparer),也就是你可以直接传入一个实现ICompare的对象,Sort方法会调用次对象的固定方法,这里我们将这个特殊的对象叫做。从前面的讨论可以看出最简单的排序方法是利用Linq或者Lambda,另外两种会增加额外的代码量,但是我们应该了解其背后的原理,Linq和Lambda都是C#后面陆续推出的,自然会更能节省开发者时间。

2023-02-13 17:51:25 1129 1

原创 再说多线程(六)——Thread生命周期

前面一直在用Thread介绍多线程任务,本节对线程类Thread的生命周期进行简单的梳理。

2023-02-10 15:57:14 647

原创 再说多线程(五)——死锁

在前面四节中,我们一直没有讨论多线程程序的一个负面问题——死锁,有了一定的基础,现在是时候研究一下死锁了。死锁一定是出现在多线程程序中,单线程是不可能造成死锁的,因为你不可能同时加两把锁。死锁有个简单的例子,假设你和你的邻居关系很好,你们相互放了一把备用钥匙在对方家里,一般来说,只要有一个人带了钥匙,那两个人一定可以各回各家,但是恰好有一天,两人出门都忘记带钥匙,回家时发现对方在门口等着,两个人只能干瞪眼。这就是死锁。

2023-01-13 16:40:00 588

翻译 再说多线程(四)——Semaphore类

C#中的信号量类用于限制可以同时访问共享资源的外部线程的数量。换句话说,我们可以说Semaphore允许一个或多个外部线程进入临界区并在线程安全的情况下并发执行任务。因此,在实时情况下,当我们的资源数量有限并且我们想限制可以使用它的线程数量时,我们需要使用信号量。

2023-01-13 11:15:20 694

翻译 再说多线程(三)——Mutex类

在前面2节,我们已经讨论了Lock语句和Monitor类,Locks 和 Monitors 确保 InProcess 线程的线程安全,即由应用程序本身生成的线程,即内部线程。但是,如果线程来自 OutProcess,即来自外部应用程序,那么 Locks 和 Monitors 将无法控制它们。而 Mutex 确保进程外线程的线程安全,即由外部应用程序生成的线程,即外部线程。可能前面一段是说的不是很明白,什么是内部进程和外部进程呢?让我们首先创建一个控制台应用程序,然后将以下代码复制并粘贴到其中。

2023-01-13 09:29:15 831 2

原创 再说多线程(二)——细说Monitor类

1. Monitor.Wait 方法有两个比较常用的方法重载:Object:等待的锁的对象功能:释放当前线程所占用的对象锁,并且阻塞当前的线程直到它再次拥有这个锁。- Object:等待的锁的对象- Int32:线程再次进入就绪队列的等待时长,单位毫秒功能:释放当前线程所占用的对象锁,并且阻塞当前的线程直到它再次拥有这个锁。如果指定的时长过去,线程将由等待队列转移到就绪队列。2. Monitor.Wait 方法的主要执行步骤阻塞当前的线程将这个线程移动到等待队列中释放当前的同步锁。

2023-01-12 14:09:38 842

原创 再说多线程(一)

世界是并行!做过复杂项目的朋友一定遇到过并发的问题,无论是大项目如订票系统,还是小项目中的文件管理都会有并行需求。所以不同于上学时接触的大部分代码,实际的业务往往是为多人提供服务,必然天然的带有并发的需求。这里我先不解释并行和并发的区别,也不去讨论cpu和操作系统的低层是如何做到并发的,让我们从最简单的串行说起。一个简单的打印函数,只不过,在两句话之间,添加了一个小停顿。

2023-01-11 16:30:38 278

原创 高观点下的数学:自然数

如何构建一个完备的自然数系

2023-01-02 22:53:18 407

原创 关于枚举类(Enumeration Class )

在微软的微服务架构案例eshopOnContainer中,对于订单的状态是这样的: 微软没有直接使用传统的Enum关键字,而是自定了以一个抽象类:Enumeration。最开始,我有些不解,为什么么要“舍近求远”?其实微软官方在此文中提到了枚举类,理由是启动面向对象语言的所有丰富功能。解释的很晦涩,虽然给出了代码案例,但是还是让人很难体会到其中奥妙。直到最近又看了这个博客,似乎才深入理解了一些。结合一个例子说明,可能更好! 假设你要去买咖啡,正常情况下会有“大、中、小”三种

2022-12-06 01:45:39 844

原创 关于架构的一些理念

软件的需求是不断变更的,软件的升级也是必然的,因此我们应该再进行架构设计的时候,避免后续软件需求变更,导致软件退化,并且在软件的升级过程中,我们要适时的进行架构的升级,以保持高质量的软件设计。如果我们每次软件升级的时候,没有及时的调整程序结构,而是在原有的程序结构上不断的加入代码,最终的软件就会退化。他分为战略设计和战术设计两个层次:DDD的战略设计可以帮助公司的领导人进行团队的划分,人员的组织,产品线的规划,也可以帮助产品经理对产品功能进行规划,还可以帮助架构师进行项目架构的规划,术站的选择等;

2022-11-17 15:13:39 1002

原创 Fluent Facede Pattern(外观模式)

外观模式的用意是为子系统提供一个集中化和简化的沟通渠道,而不是向子系统加入新的行为,新的行为的增加应该通过修改原有子系统类或增加新的子系统类来实现,不能通过外观类来实现。现代的软件系统都非常复杂,尽管我们已经想尽一切方法将其“分而治之”,把一个系统划分为好几个较小的子系统了,但是仍然可能会存在这样的问题:子系统内有非常多的类,客户端往往需要和许多对象打交道之后 才能完成想要完成的功能。接下来我们定义Car的外观,我们将外观定义放在两类中,一类定义颜色,品牌,门数,一类定义生产城市地址。

2022-11-11 16:45:53 280

原创 递归泛型(recursive generic)

原因很简单,SetName函数返回的对象类型是EmployeeInfoBuilder,无法调用EmployeePositionBuilder类的函数成员。当然我们可以将Employee对象以构造注入的方式传入进去,但是这样就违背了我们的Fluent原则。稍微说明一下的就是,这么做一方面是不好理解,另一方面可能对性能有一定的影响,我认为这个派生链条不宜过长,希望有懂的朋友可以指点一下。对于上面两个泛型类,我们无法直接定义,只能借助更高层次的派生类构造,且这个类不能再是泛型,也就是泛型链的终点。

2022-11-11 11:48:27 399

原创 Asp.NetCore 从数据库加载配置(二)

在第一节中,我们实现了基本的自定义数据库配置源,从而可以读取MySql数据库的配置,但是,我们没有实现动态加载数据库配置,也就是程序一但运行起来,数据库的配置更改后就不在被更新。所以本节重点来解决这个问题。

2022-11-03 12:24:36 549

原创 Asp .NetCore 从数据库加载配置(一)

asp.net core官方不支持直接从数据库中读取配置,所以这里我们要自定义配置。而自定义配置都需要实现IConfigurationProvider接口,也就是真正将数据库的字段构建成Dictionary。一般我笨都直接集成这个抽象类,ConfigurationProvider中最重要的方法就是Load,自定义配置提供者要实现Load方法。

2022-11-02 15:33:18 1372

原创 Web Api的参数传递建议

在进行Restful接口设计时,我们需要考虑如何给服务器传递参数。

2022-10-31 15:28:46 646

原创 C# 新语法

C#8.0,9.0,10.0中增加了很多新的语法,这些语法中有一些对开发人员帮助很大,这里做一点整理。C# 10.0中增加了“全局using指令”语法,我们可以将global修饰符添加到任何using关键字前,这样通过using语句引入的命名空间就可以应用到这个项目的所以源代码中,因此同一个项目中的C#代码就不需要再去重复引入这个命名空间了。在实践中,通常专门创建一个来编写全局using代码的文件,然后把项目中经常用到的命名空间声明到这个C#文件。

2022-10-28 16:29:59 1735

原创 Windows下优秀的软件包管理器Chocolatey安装

用过mac的人都知道Brew非常好用,现在Windows下页有一个很好用的包管理器:Chocolatey。官网安装了这个工具,很多软件可以直接在powershell中敲命令搞定,比如java Runtime运行环境,NotePad++,Redis等。

2022-09-20 17:04:20 226

原创 C# 中的守卫语句(GuardClause)

一般而言,我们认为代码的最小单元就是一个函数或者方法,我们写出的代码应该能让人迅速理解,所以这要求我们的代码行数不要太多、命名清晰规范、功能单一(一个方法只做一件事)。导致代码复杂性增加的一个原因是条件判断,这时代码中往往会出现或者语句,如果没有组织好你的程序结构,这两种语句很容易将你的代码从简洁易懂的变成冗长,模糊,甚至低效的。所以有一个办法是通过使用守卫语句(Guard Clause)来避免这些问题。

2022-09-13 14:14:43 562

原创 简单的密码加密

无论密码长度是对少,因为MD5的算法,都会转为这个长度。

2022-09-08 14:39:06 396

原创 建造者模式

今天我们讨论一下 Builder 建造者模式,这个 Builder,其实和模板模式非常的像,但是也有区别,那就是在模板模式中父类对子类中的实现进行操作,在父类之中进行一件事情的处理,但是在 Builder 模式之中,父类和子类都不用关心怎么处理,而是用另一个类来完成对这些方法的有机组合,这个类的职责就是监工,规定了到底要怎么样有机的组合这些方法。...

2022-08-13 23:53:41 110

原创 原型模式(prototype pattern)

原型模式其实很简单,又可以成为克隆模式。想象你要造一架飞机,如果你要重头到位掌握造飞机的核心技术,那么你要从力学,材料学开始学起。但是你想快点看到成果,那你就把对应的零件买回来自己组装一个就好了。...

2022-08-12 17:20:43 178

原创 抽象工厂模式

为抽象工厂中相互依赖的每种产品定义抽象接口对象,也可以这样说,有几种产品,就要声明几个抽象角色,每一个抽象产品角色和一种具体的产品相匹配。

2022-08-12 12:04:11 210

原创 工厂方法模式

在工厂方法中,用户只需要知道所要产品的具体工厂,无须关系具体的创建过程,甚至不需要具体产品类的类名。在系统增加新的产品时,我们只需要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”。...

2022-08-12 10:36:30 107

原创 简单工厂模式

简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。。

2022-08-11 18:24:21 387

原创 在 ASP.NET Core 使用 IOptions pattern

由于配置结构随着嵌套部分而变得多样化,其关键表示变得冗长且难以维护。当然可以通过创建一个强类型的ConfigurationManager类来解决这个问题,该类封装了这种密钥访问机制,并且还处理了非字符串属性的类型转换要求。一个更优雅的方案是根据强类型类匹配,让Asp.NetCore为我们做这些复杂的匹配工站。.........

2022-08-03 20:08:19 557

原创 C#Linq中的GroupBy

然后你想根据ID建立一个映射表你要怎么做?

2022-07-26 19:00:17 1902

原创 C# Linq中的Select和SelectMany

关于C#中Linq扩展方法SelectMany的解释

2022-07-26 14:58:26 4280

原创 微服务实战之领域事件

微服务中关于领域事件的处理,如何将领域事件限定在实体呢?

2022-07-26 11:52:28 218

原创 C# 查漏补缺(三)

BCL声明了一个Type的抽象类,用来包含类型的特征。可以从Type对象中获取有关类型的几乎所有信息,可以通过实例对象的GetType方法或者typeof运算符来获得Type对象,object类型包含一个叫Gettype的方法。要声明一个自定义特性,需要如下工作自定义特性的最佳实践:可以使用Type对象的IsDefined方法来检测 第一个参数接受需要检查的type对象 第二个参数是bool类型,它知识是否搜索MyClass的继承树来查找这个特性Type类的GetCusto

2022-06-10 19:26:45 194

原创 C# 查漏补缺(二)

目录1.泛型结构1.1扩展方法和泛型类1.2泛型委托 2.协变和逆变21.协变2.2 逆变3.迭代器3.1IEnumerator接口3.2 IEnumerable 接口 3.3.使用yeild创建可枚举类型4.Linq4.1Join4.2.let子句4.3.into子句5.异步编程5.1线程知识点5.2 ValueTask 5.3 Task.Delay5.4.BackgroundWorker6. 异步编程旧模式6.1介绍6.2. BeginInvoke和EndIvoke6.3 等待直到完成

2022-06-10 12:06:25 250

原创 C# 查漏补缺(一)

C#的一些容易被忽视的知识点,仅供查阅

2022-06-07 12:12:21 187

timestamp.proto

用于记录文件传输的时间戳,常常被包含在你自己写的proto文件下。

2019-04-09

google/protobuf/duration.proto

google proto-buf中常被使用的一个计时文件,可能你的proto文件需要使用

2019-04-09

Windows系统下西门子通信动态链接库

西门子通讯系统的动态链接库。实测可以运行,安全无毒,放心下载。

2019-04-03

java核心编程配套源代码

自己下载时看到要很多积分,于是就去官网下载了,有第10,9,8版的。本来想免费的,发现不能设置为零,有的人居然要10多个积分,气愤。

2018-01-28

空空如也

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

TA关注的人

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