概述

该专栏记录了我学习.NET (C#)的笔记

参考

目录

有关 .NET / C# 介绍

数据结构

线性表

线性表是由若干个数据元素/节点组成的有限序列

线性表 数组 链表
逻辑结构 连续 连续
内存空间 连续 非连续
内存占用
访问操作 O(1) O(n)
添加操作 O(n) O(1)
删除操作 O(n) O(1)

列表最显著的特征就是大小可变,作为一种更抽象的数据结构,列表可以用数组或链表实现。因此,在使用列表的时候,通常不需要考虑容量的限制问题。

但列表的缺点也很明显:如果是数组的实现,则会出现内存浪费的问题;如果是链表的实现,则在访问元素时会有一定的性能损耗。

现代的高级语言中,通常都会提供列表的实现,比如 C# 中的List<T>

  • 数组 即 System.Array
  • 链表 即 System.Collections.Generic.LinkedList
  • 列表 即 System.Collections.Generic.List

相关文档

栈和队列

栈是先入后出的,队列是先入先出的,仅此而已。

  • 即 System.Collections.Generic.Stack
  • 队列 即 System.Collections.Generic.Queue

相关文档

哈希表

哈希表(散列表)存储了许多键值对以实现极快的数据查询操作。

大杂烩

本节会介绍 C# 迭代以来出现的很多数据结构变种,以用于不同的场景。

  • 键值对
  • 线性表
  • 集合

面向对象

基本概念

  • 封装&继承&多态
  • 接口

设计原则

  • SOLID
  • 依赖关系注入
  • 整洁架构 VS 垂直切片

设计模式

设计模式只是一种软件设计中的经验之谈,死记硬背是行不通也用不上的。

当遇到对应场景(如DI/IoC)时,才会领会到它的好处。

创建型模式
  • 工厂方法 Factory Method
  • 抽象工厂 Abstract Factory
  • 生成器 Builder
  • 原型 Prototype
  • 单例 Singleton
结构型模式
  • 适配器 Adapter
  • 桥接 Bridge
  • 组合 Composite
  • 装饰 Decorator
  • 外观 Facade
  • 享元 Flyweight
  • 代理 Proxy
行为模式
  • 责任链 Chain of Responsibility
  • 命令 Command
  • 迭代器 Iterator
  • 中介者 Mediator
  • 备忘录 Memento
  • 观察者 Observer
  • 状态 State
  • 策略 Strategy
  • 模板方法 Template Method
  • 访问者 Visitor
依赖注入
  • 常见依赖注入库使用
  • 生命周期管理

工程实践

  • 单元测试
  • CI/CD
  • Docker 与容器化
  • NuGet 包管理
  • .csproj 文件结构与配置
  • 配置系统
  • 日志系统
  • 性能分析

高级 .NET

概念补充

  • 异常处理
  • 模式匹配
  • 空安全
  • 逆变与协变
  • 迭代器

类型

  • 有关 .NET 的六个重要概念 值类型,引用类型,装箱和拆箱等
  • ref, outparams 传参
  • 浅复制与深复制
  • 泛型约束
  • 使用 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

动态编程与可视化树

  • 表达式树
  • 编译时与运行时的动态行为

平台调用

  • 平台调用介绍
  • DllImport
  • LibraryImport
  • 本机库加载
  • 平台调用安全性

底层与性能

  • 指针
  • fixed 关键字
  • Span
  • Memory
  • ArrayPool 与 MemoryPool
  • SIMD 与向量化

前沿

  • .NET Aspire
  • .NET 与 AI