- 博客(18)
- 资源 (8)
- 收藏
- 关注
原创 Dictionary源码解析及实现原理(C#)
Dictionary 又称C#中的哈希表,是一个Collection(集合)类型,可以通过Key/Value(键值对)的形式来存放数据;该类最大的优点就是它查找元素的时间复杂度接近O(1),实际项目中常被用来做一些数据的本地缓存,提升整体效率。那么是什么样的设计能使得Dictionary类能实现O(1)的时间复杂度呢?本章节就喝大家聊聊dictionary的实现及原理。如有表述不清楚、错误之处,请大家批评指正,共同进步。
2024-08-14 09:54:55
586
原创 c#知识总结-常用的并行库
本章主要介绍并发编程相关的不同的数据结构。包含使用ConcurrentDictionary使用ConcurrentQueue实现异步处理改变ConcurrentStack异步处理顺序使用ConcurrentBag创建一个可扩展的爬虫使用BlockingCollection进行异步处理ConcurrentQueue集合使用了原子的比较和交换(Compareand Swap,简称CAS)操作,以及SpinWait来保证线程安全。
2024-07-25 14:45:46
1021
原创 MySQL 事务底层原理
了解MySQL事务底层原理,我们需要知道的是MySQL是支持事务并发执行的。「并发安全性问题」。在数据库事务中并发问题是这样子的:A 事务来写某条记录的数据,B 事务也在写该条记录的数据。那如果啥也不做,势必会造成数据的错乱,MySQL 在设计之初就考虑到了这个问题。那么 MySQL 到底是如何解决这样的问题的呢?其实是使用了MVCC 多版本控制机制事务隔离机制锁机制等办法来解决事务并发问题。在数据库中如果并发事务不做控制和处理,会有什么样的危害呢?带着这样的疑问,请继续往下看。脏数据。
2024-07-08 14:59:47
764
原创 c#知识总结-任务并行库(Task async await)
在c#中,‘async’和‘await’是用于异步编程的关键字,它们允许你编写异步、非阻塞的代码。异步编程是为了避免在执行耗时操作主线程,从而提高程序的响应性和性能。‘async’关键字用于声明一个方法时异步的,而‘await’关键字则用于只是编译器在等待异步操作完成时暂停方法的执行。使用‘await’关键字时,编译器会生成代码来等待异步操作的完成,并在操作完成后恢复方法的执行。一个简单的示例ReadLine();//使用TPL,不会阻塞主程序try。
2024-07-06 14:34:58
1178
原创 c#知识总结-任务并行库(Task)
在之前的几个章节中,就线程的使用和多线程相关的内容进行了介绍。因为线程涉及到异步、同步、异常传递问题,所以在项目中使用多线程的代价是比较高昂的,需要编写大量的代码来达正确性和健壮性。为了解决这样一些的问题,在中引入了一个关于一步操作的API。它叫做任务并行库(Task Parallel Library)。然后在中对它进行了轻微的改进,本文的案例都是用最新版本的TPL库,而且我们还可以使用C# 5.0的新特性来简化TAP编程,当然这是之后才介绍的。TPL内部使用了线程池,但是效率更高。
2024-07-06 14:34:31
2147
原创 c#知识总结-线程池
本章节中,主要介绍线程池(ThreadPool)的使用,在使用线程池之前首先我们得明白一个问题,那就是为什么要使用线程池。其主要原因是创建一个线程的代价是昂贵的,创建一个线程会消耗很多的系统资源。那么线程池是如何解决这个问题的呢?线程池在初始时会自动创建一定量的线程供程序调用,使用时,开发人员并不直接分配线程,而是将需要做的工作放入线程池工作队列中,由线程池分配已有的线程进行处理,等处理完毕后线程不是被销毁,而是重新回到线程池中,这样节省了创建线程的开销。
2024-07-06 14:33:57
2269
1
原创 c#知识总结-线程同步
本章介绍c#中实现线程同步的几种方法。因为多个线程同时访问共享数据时,可能会造成共享数据的损坏,从而导致与预期的结果不相符。为了解决这个问题,所以需要用到线程同步,也被俗称为“加锁”。但是加锁绝对不对提高性能,最多也就是不增不减,要实现性能不增不减还得靠高质量的同步源语但是因为正确永远比速度更重要,所以线程同步在某些场景下是必须的。用户模式(user - mode)和内核模式(kernel - mode),当资源可用时间短的情况下,用户模式要优于。
2024-07-06 14:33:01
772
原创 基础知识总结3(c#)
死锁是指由于两个或多个线程互相持有对方所需的资源,并且互相等待对方释放资源,导致这些线程都处于等待状态,无法继续执行。如果线程都不主动释放资源,将产生死锁。
2024-07-06 14:31:44
1125
原创 常见的单例模式实现
单例模式是一种常见的软件设计模式。通过单例模式实现在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个获得其对象实例的方法(静态方法)。
2024-07-06 14:31:11
135
原创 c#知识总结-反射
反射是指在运行时动态的检查、探索和修改程序集中的类型信息和成员信息的能力。反射允许程序在运行时获取程序集的元数据,包括类型、属性、方法,并可以动态的创建对象,调用方法、获取或设置属性等操作,而无需在编译时知道这些类型的具体信息。反射经常用于判断程序集定义了哪些类型。FCL提供了许多API来获取这方面的信息。目前最常用的API是Assembly的ExportedTypes属性。//显示的将程序集加载到AppDoain中//在一个循环汇总显示已加载程序集中每个开导出Type的全名//显示全名。
2024-07-06 14:30:41
797
原创 基础知识总结2(c#)
1.类(class)类是面向对象编程的基本组成单元,用于描述属性和行为的对象集合类可以包含属性(也成字段或成员变量)和方法(也称函数或成员函数)类可以被实例化为对象,每个对象都有自己的状态(属性值)和行为(方法)类可以被继承,也可以继承其他类,但不能继承多个类(父类只能有一个)。2.抽象类(Abstract Class)抽象类是不能被实例化的类,他存在的意义在于作为其他类的基类,用于继承和重用抽象类可以包含抽象方法,这些放大只有声明而没有具体的实现。
2024-07-06 14:28:56
1091
转载 知识总结-值类型 & 引用类型深入解析
我们最后通过一个简单的类比来做一个总结。变量的目的在于传递信息,假设我们现在利用一个“盒子”来传递一幅世界名画,这个盒子就是变量,对于非引用性质的传递(作为方法参数,或者赋值给另一个变量),传递的都是盒子承载内容的拷贝。如果是值类型,我们相当于我们将这幅画作“真迹”放到盒子中,所以传递的是这幅画作的复制品,我们在复制品上所作的任何涂鸦自然不会对真迹造成影响。
2024-07-06 14:28:14
59
转载 c#知识总结5-泛型、泛型约束、类型安全、逆变和协变
说明都有很详细的介绍。然后我们来为AnimalHouse添加泛型约束为:必须包含公共无参构造函数和基类必须是Animal。
2024-07-06 14:27:28
116
图书租借管理系统 c# .net
2011-05-01
vs2008与sql2005开发工资管理系统
2010-12-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人