概述
该专栏记录了我学习.NET (C#)的笔记
参考
- Edison Zhou 笔记结构和学习顺序参考
- Hello Algo 数据结构,图片资源部分参考
- Wikipedia 部分术语和专用名词参考
- How Async/Await Really Works in C# 多线程与异步部分参考
- REFACTORING GURU - C# 常用设计模式 设计模式部分参考
- Microsoft Developer Blogs 一些转载和翻译文章
- Microsoft Learn 官方文档
目录
有关 .NET / C# 介绍
数据结构
线性表
线性表是由若干个数据元素/节点组成的有限序列
| 线性表 | 数组 | 链表 |
|---|---|---|
| 逻辑结构 | 连续 | 连续 |
| 内存空间 | 连续 | 非连续 |
| 内存占用 | 少 | 多 |
| 访问操作 | O(1) | O(n) |
| 添加操作 | O(n) | O(1) |
| 删除操作 | O(n) | O(1) |
列表最显著的特征就是大小可变,作为一种更抽象的数据结构,列表可以用数组或链表实现。因此,在使用列表的时候,通常不需要考虑容量的限制问题。
但列表的缺点也很明显:如果是数组的实现,则会出现内存浪费的问题;如果是链表的实现,则在访问元素时会有一定的性能损耗。
现代的高级语言中,通常都会提供列表的实现,比如 C# 中的List<T>。
相关文档
栈和队列
栈是先入后出的,队列是先入先出的,仅此而已。
相关文档
哈希表
哈希表(散列表)存储了许多键值对以实现极快的数据查询操作。
大杂烩
本节会介绍 C# 迭代以来出现的主要数据结构变种,以用于不同的场景。
面向对象
基本概念
- 封装&继承&多态
- 接口
设计原则
- SOLID
- 依赖关系注入
- 整洁架构 VS 垂直切片
设计模式
设计模式只是一种软件设计中的经验之谈,死记硬背是行不通也用不上的。
从我的个人经验来看,每当我觉得某段代码结构混乱,或是在构思类等什么东西之间的关系时遇到困难,就可以借助设计模式来梳理思路。
推荐参考:REFACTORING GURU - C# 设计模式
依赖注入
- 常见依赖注入库使用
- 生命周期管理
工程实践
- 单元测试
- CI/CD
- Docker 与容器化
- NuGet 包管理
.csproj文件结构与配置- 配置系统
- 日志系统
- 性能分析
高级 .NET
概念补充
- 异常处理
- 模式匹配
- 空安全
- 逆变与协变
- 迭代器
类型
- 有关 .NET 的六个重要概念 值类型,引用类型,装箱和拆箱等
ref,out和params传参- 浅复制与深复制
- 泛型约束
- 使用 Lazy 以延迟初始化
- 扩展方法
- 记录
垃圾回收
- GC介绍,代(Generation)和机制
- GC通知机制
- GC配置与调优
using关键字与对象释放- 常见的内存泄漏
字符串处理
- StringBuilder
- 字符串与字节数组的转换和应用
- 字符串驻留池
HTTP 编程
- HttpClient 使用与最佳实践
- HttpClientFactory
LINQ
- 简介
- 类型处理
- 筛选与投影
- 去重、差集、交集与并集
- 排序操作
- 限定符
- 数据分区和分组
- 数据类型转换
- 联接操作
多线程与异步
- 异步简介与使用场景
- 同步锁
- Task 并行库
- 并行 LINQ
- 线程安全集合
- Channel
- CancellationToken
- Background Worker
- async void 的陷阱
委托与事件
- 委托介绍与基本使用
- 匿名委托
- 多播委托
- 事件介绍与基础操作
安全与加密
- 在 .NET 中如何使用不同的加密方式
- 证书管理与SSL/TLS
特性
- 特性的用途
- 常用内置特性
- 自定义特性
反射
- 反射概述与用途
- 获取运行时类型信息
- 动态加载并使用类型
- 反射的性能问题
序列化
JSON
- JSON 介绍
- 序列化
- 反序列化
- 相关特性与自定义属性
- JSON 安全性
- JSON 与 AOT 支持
- System.Text.Json 与 Newtonsoft.Json 的比较
XML
- XML 介绍
- 序列化与反序列化
流
- Stream
- FileStream
- MemoryStream
- GZipStream
动态编程与可视化树
- 表达式树
- 编译时与运行时的动态行为
平台调用
- 平台调用介绍
DllImportLibraryImport- 本机库加载
- 平台调用安全性
底层与性能
- 指针
fixed关键字- Span
- Memory
- ArrayPool 与 MemoryPool
- SIMD 与向量化
前沿
- .NET Aspire
- .NET 与 AI