My avatar, a blue cat cartoon picture

Kit Lau's Posts

如何使用 AnduinOS 愉快的开发 .NET

本文介绍了如何使用 AnduinOS 愉快的开发 .NET,重点在于 VSCode 的一些配置。

AnduinOS VSCode

为 AnduinOS 找到属于你的剪贴板助手

本文介绍了如何在 AnduinOS 上安装一个类似 Windows 11 剪贴板的工具。

AnduinOS

如何在 5 分钟内开发一个大语言模型聊天机器人

本文将介绍如何在 5 分钟内开发一个带 Web 页面的大语言模型聊天机器人,使用 Python、llama-index、Groq 和 Gradio。

AI LLM

你可能正在写内存泄漏的 .NET 代码!

本文讨论了常见的 .NET 内存泄漏的代码写法,以提醒自己在编写代码过程中警惕内存泄漏。

dotnet

5 分钟 .NET 单元测试极简入门

本篇文章介绍了为什么要花时间写单元测试,并使用代码示例介绍如何编写单元测试,5 分钟即可入门!

dotnet

借 Moq 事件谈一谈单元测试的重要性

本篇文章借最近发生的 Moq 事件,介绍了什么是单元测试,以及单元测试的重要性,不写单元测试可能导致的后果。

dotnet

JavaScript:从入门到脱线

本教程将带你从 JavaScript 的入门到脱线,探讨 JavaScript 的方方面面,包括变量、操作符、控制流、对象、数组、函数、模块以及异步编程。

JavaScript

如何 3 分钟搭建图片转文本工具

本文介绍如何 3 分钟搭建图片转文本工具。用到了 Salesforce 的 `blip-image-captioning-large` 模型以及 Laf Serverless 云函数。无需自己部署模型和购买服务器!

AI

如何使用 Optional 模式解决 C# 中的烦人的空引用问题

空引用异常是 C# 开发者经常遇到的一个问题,它会导致程序崩溃和数据丢失。本文介绍了一种使用 Optional 模式来避免空引用异常的方法,它可以让开发者更优雅地处理可空值,而不需要使用 null 值。

CSharp

解锁AI的黑暗面:与无约束的 AI 模型交谈

本文讨论了如何使用无约束的 AI 语言模型 Vicuna,并且与它讨论一些你无法与 ChatGPT 讨论的话题,例如“如何摧毁一个国家的经济”,“如何毁灭世界”等

AI

C# 3 年前的 record 你现在用上了吗?

本文介绍了 record 适合在什么场景下使用,record 是不是 class,record 与 class 和 struct 在应用和底层的区别,以及为什么 record 如此被冷落。重视代码质量,让 record 发挥作用!

dotnet

金鱼也能看懂的 Postgres 和 MySQL 选择指南

本文将以幽默风趣、简单易懂的方式为您解析 Postgres 和 MySQL 这两种数据库,帮助您更轻松地在它们之间做出选择。就算您只是一条金鱼,也能轻松看懂!

DB

微服务生产环境故障难调试?OpenTelemetry 了解一下?

本文讨论了 OpenTelemetry 能够解决微服务系统中的业务问题,包括快速定位线上问题的根源、分析系统性能瓶颈和优化点、监控系统运行状态和健康度等。同时,演示了在 .NET 迷你微服务系统中使用 OpenTelemetry 和 Jaeger 实现的分布式追踪,以提高应用程序的可观测性和解决业务问题。

dotnet performance OpenTelemetry

为什么我的接口,慢得跟蜗牛一样啊?系列文章目录与导读

本文是“为什么我的接口,慢得跟蜗牛一样啊?”系列文章目录与导读。

dotnet performance

为什么我的接口,慢得跟蜗牛一样啊?- 3. Seq 中心化结构化日志服务

本篇博客介绍了 ASP.NET Core 程序如何把日志记录到 Seq 这个中心化结构化日志服务器中,然后利用 Seq 做的日志分析,解决“为什么我的接口这么慢”的问题。

dotnet performance

为什么我的接口,慢得跟蜗牛一样啊?- 2. Serilog 记录计时和诊断日志

这篇文章介绍了 Serilog 如何轻松记录时间的度量结果,如何记录 HttpRequest 日志和诊断(diagnostic)日志。您将了解如何为您的应用配置完善的日志、计时、请求追踪和诊断信息了,让您的公司提供的软件服务的水平得到跃升。

dotnet performance

为什么我的接口,慢得跟蜗牛一样啊?- 1. 使用 Serilog 结构化日志

本文讲述了如何在 ASP.NET Core 中使用 Serilog 进行结构化日志记录,为将来记录分布式系统的时间开销和诊断数据做好准备。日志记录可以用于性能分析,帮助提升软件性能。

dotnet performance

.NET 性能技巧:为什么你应该避免使用终结器 Finalizer?

本文介绍了什么是终结器,使用终结器对性能的影响,并做了基准测试(Benchmark)来对比,且给出了优化方案。

dotnet performance

你真的需要 Autofac 吗?Scrutor:更轻量的容器伴侣

这篇文章介绍了什么是 ServiceLocator 反模式,以及如何使用轻量的依赖注入扩展库 Scrutor 来取代 Autofac,并详细介绍了几种使用 Scrutor 的姿势。

dotnet

谁是你的菜?IEnumerable、IQueryable 和 ICollection 选择指南

本文教你如何根据你的需求选择合适的集合类型,并总结了何时该用何种集合类型做参数和返回值类型。

dotnet

Linq 和 lambda 的区别是什么?

本文解释了一个类似应试教育问题:Linq 和 lambda 的区别是什么?

CSharp

一幅漫画解释 .NET 垃圾收集(GC)原理

本文通过一幅漫画,介绍了 dotnet 垃圾收集的原理。

dotnet

C# required:跟 string 的空引用异常说再见

本文讨论了如何使用 C# 11 required 关键字解决 string 的恼人的空引用异常

CSharp

.NET 是如何编译的?如何阅读中间语言?

本文介绍了 dotnet 的编译过程,顺便简单介绍了静态编译后生成的中间语言的阅读方式。

dotnet

【译】.NET SDK 将会内置容器支持,不再需要 Dockerfile

本文介绍了 dotnet 7 的内置容器支持功能。

CSharp dotnet

还在背依赖注入的概念?不如自己写一个依赖注入框架

本文介绍了 dotnet 依赖注入是如何实现的,并手写了一个依赖注入框架 KDI。

CSharp

异步的原理是什么?C# 如何基于状态机实现异步?

本篇博客介绍了什么是 C# 异步的续延(continuation),通过续延简单理解异步的原理,令牌 Task,异步的流程,通过编译后的代码分析 C# 如何使用状态机实现异步。

CSharp

什么是异步?异步就是多线程吗?异步就是 async、await 吗?

本篇博客介绍了什么是异步,异步与多线程的区别,不使用 await 调用异步方法,不使用 async 修饰的异步方法,同时等待多个 Task 完成等初学者可能感兴趣的异步编程知识。

CSharp

EF Core 何时、为何使用 IsUnicode 方法

本篇博客详细介绍了 EF Core 对 string 类型的属性进行配置的的 `IsUnicode()` 方法,使用 MariaDB 和 Microsoft SQL Server 进行实验,并详细举例说明了几个容易踩的坑。

CSharp EntityFrameworkCore

彻底理解 ASCII Unicode UTF-8 UTF-32 是什么以及区别与联系

本篇博客让你彻底理解什么是 ASCII 和 Unicode,以及 Unicode 如何编码为 UTF-8 和 UTF-32,它们所占存储空间大小,以及区别与联系,顺便谈了谈如何理解应试教育中教的 ASCII 与 Unicode 与 UTF-8 等。本文使用图片帮助理解,不止是枯燥的文字。

BasicComputerKnowledge

EF Core 动态构建表达式树简化 DDD 值对象的比较

本篇博客基于 EF Core 介绍了如何通过动态构建表达式树来简化和语义化领域驱动设计(DDD)中值对象的比较。

CSharp EntityFrameworkCore

EF Core 动态构建表达式树为所有实体设置软删除的查询过滤器

本篇博客基于 EF Core 介绍了如何通过动态构建表达式树来为所有实体设置软删除的查询过滤器,还有“茴”字的多种写法。

CSharp EntityFrameworkCore

手把手构建 C# 表达式树

本篇博客展示了如何手把手构建 C# 表达式树,如何使用 C# 表达式树。

CSharp

如何使用 CSharp 表达式树?

本篇博客介绍了什么是表达式树,Func 与 Expression 的区别,以及如何手动构建 Expression。

CSharp

【译】数据是如何存储在 SQL 数据库中

本篇博客讨论了数据在 SQL 数据库中的存储结构。

SQL

【译】SQL 索引是如何工作的

本篇博客讨论了索引究竟是如何工作的,以及它如何帮助提升我们的 SQL 语句的性能。本篇博客讨论了聚集索引(Clustered Index)和非聚集索引(Non-clustered)。

SQL

如何在 CSharp 和 EF Core 中使用 UTC 时间

本篇博客介绍了什么是 UTC 时间(UTC DateTime),在 C# 中如何使用 UTC 时间,如何配合 EF Core 使用 UTC 时间,如何配合 Mapster 自动转换 UTC 时间到 Local 时间。

CSharp EntityFrameworkCore

解决运行 Docker 容器时的端口不可用错误

运行 Docker 容器时报 500 错误,端口不可用:Error invoking remote method 'docker-start-container' Ports are not available

Docker

Hello World

测试 md 翻译到 html 的样式。

Hello World 技术笔记