概述
该专栏记录了我学习.NET (C#)
的笔记
参考
- Edison Zhou 笔记结构和学习顺序参考
- Hello Algo 数据结构,图片资源与基础算法部分参考
- Wikipedia 部分术语和专用名词参考
- How Async/Await Really Works in C# 多线程与异步部分参考
- REFACTORING GURU - C# 常用设计模式 设计模式部分参考
- Microsoft Developer Blogs 一些转载和翻译文章
- Microsoft Learn - 语言集成查询 (LINQ) LINQ 部分参考
- Microsoft Learn - .NET 中的 JSON 序列化和反序列化 序列化 部分参考
- Microsoft Learn - .NET 中的反射 反射 部分参考
- Microsoft Learn - 本机互操作性 平台调用 部分参考
目录
有关 .NET / C# 介绍
数据结构
线性表
线性表是由若干个数据元素/节点组成的有限序列
线性表 | 数组 | 链表 |
---|---|---|
逻辑结构 | 连续 | 连续 |
内存空间 | 连续 | 非连续 |
内存占用 | 少 | 多 |
访问操作 | O(1) |
O(n) |
添加操作 | O(n) |
O(1) |
删除操作 | O(n) |
O(1) |
列表最显著的特征就是大小可变,作为一种更抽象的数据结构,列表可以用数组或链表实现。因此,在使用列表的时候,通常不需要考虑容量的限制问题。
但列表的缺点也很明显:如果是数组的实现,则会出现内存浪费的问题;如果是链表的实现,则在访问元素时会有一定的性能损耗。
现代的高级语言中,通常都会提供列表的实现,比如C#
中的List<T>
。
相关文档
栈和队列
栈是先入后出的,队列是先入先出的,仅此而已。
相关文档
哈希表
哈希表(散列表)存储了许多键值对以实现极快的数据查询操作。
二叉树
- 二叉树的概念与基本操作
- 二叉搜索树
- AVL 树
堆
- 堆的实现和基本操作
- 建堆
图
- 图的概念
- 最小生成树
- 图的实现方法
- 图的遍历
基础算法
查找
- 顺序查找与哈希优化
- 二分查找
排序
- 选择、冒泡和插入排序
- 快速排序
- 桶排序
面向对象
基本概念
- 封装&继承&多态
设计原则
- SOLID
- 依赖关系注入
设计模式
设计模式只是一种软件设计中的经验之谈,死记硬背是行不通也用不上的。
当遇到对应场景(如DI/IoC与单例模式)时,才会领会到它的好处。
创建型模式
- 抽象工厂
- 生成器
- 工厂方法
- 原型
- 单例
结构型模式
- 适配器
- 桥接
- 组合
- 装饰
- 外观
- 享元
- 代理
行为模式
- 责任链
- 命令
- 迭代器
- 中介者
- 备忘录
- 观察者
- 状态
- 策略
- 模板方法
- 访问者
依赖注入
- 常见依赖注入库使用
- 生命周期管理
高级 .NET
概念补充
- 逆变与协变
- 迭代器
类型
- 有关 .NET 的六个重要概念 值类型,引用类型,装箱和拆箱等
ref
,out
和params
传参- 浅复制与深复制
- 泛型的约束
- 使用 Lazy 以延迟初始化
- 扩展方法
- 记录
垃圾回收
- GC介绍,代(Generation)和机制
- GC通知机制
- GC配置与调优
using
关键字与对象释放- 常见的内存泄漏
字符串处理
- StringBuilder
- 字符串与字节数组的转换和应用
- 字符串驻留池
LINQ
- 简介
- 类型处理
- 筛选与投影
- 去重、差集、交集与并集
- 排序操作
- 限定符
- 数据分区和分组
- 数据类型转换
- 联接操作
多线程与异步
- C# 的 Async/Await 是如何运作的 施工中
- 异步简介与使用场景
- 同步锁
- Task 并行库
- 并行 LINQ
- 线程安全集合
- CancellationToken
- Background Worker
委托与事件
- 委托介绍与基本使用
- 匿名委托
- 多播委托
- 事件介绍与基础操作
- 接口与事件
安全与加密
- 在 .NET 中如何使用不同的加密方式
- 证书管理与SSL/TLS
特性
- 特性的用途
- 常用内置特性
- 自定义特性
反射
- 反射概述与用途
- 获取运行时类型信息
- 动态加载并使用类型
- 反射的性能问题
序列化
JSON
- JSON 介绍
- 序列化
- 反序列化
- 相关特性与自定义属性
- JSON 安全性
- JSON 与 AOT 支持
XML
- XML 介绍
- 序列化与反序列化
流
- Stream
- FileStream
- MemoryStream
- GZipStream
动态编程与可视化树
- 表达式树
- 编译时与运行时的动态行为
平台调用
- 平台调用介绍
DllImport
LibraryImport
- 本机库加载
- 平台调用安全性
Unsafe 与 Span
- 指针
fixed
关键字- Span
- Memory
- ArrayPool 与 MemoryPool