kitlau
kitlau

kitlau's blog

All Posts


反思软件开发中的设计模式

摘要:本博客讨论了在软件开发中设计模式的反思。作者指出过度复杂化、盲目应用、学习曲线和偏离目标等问题,并强调了培养批判性思维和灵活应用的重要性。作者认为设计模式和方法学应该作为解决问题的工具,而不是教条。他们提醒我们要保持开放的心态,接受新的思想和方法,不断学习和改进。最后,作者介绍了他为学习JavaScript编写的入门教程,并表达了对JavaScript作为前后端开发的不错选择的看法。本博客启发读者思考设计模式的应用和反思,以及在学习和开发中保持批判性思维和灵活应用的重要性。--GPT 4

JavaScript

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

如何在5分钟内开发一个大语言模型聊天机器人 本文介绍了如何在5分钟内开发一个大语言模型聊天机器人。首先,作者提到了ChatGPT和LLM的应用越来越多,出现了一些开发工具和拖拉拽工具。然而,开发一个聊天机器人仍然是与LLM交互的第一步,可以通过开发这个应用来熟悉如何开发基于LLM的其他应用。接下来,作者介绍了准备工作,包括注册一个Groq账号并获取API密钥,安装Python和poetry等。然后,作者演示了如何创建项目并添加所需的依赖。在开发部分,作者展示了如何处理用户输入的消息,并使用LLM的stream_chat方法获取机器人的回复。最后,作者使用Gradio构建了一个简单的web界面来与聊天机器人交互。读者可以通过运行程序来体验聊天机器人,并且可以分享给朋友。文章提供了一些测试问题,展示了LLM的强大能力。--GPT 4

AI

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

本篇博客讨论了.NET代码中的内存泄漏问题,主要包括七个方面。首先,定义了内存泄漏,即应用程序不再需要的对象仍然被其他对象引用,阻止垃圾收集器(GC)回收它们的内存。然后,通过实例代码详细介绍了匿名方法捕获类成员、事件的生命周期、使用静态变量、使用内存缓存、不进行Dispose处理以及错误使用unsafe或其他直接操作内存的方法等可能导致内存泄漏的场景,并给出了相应的解决方案。此外,博客还强调了在使用可能导致内存泄漏的编程技术时,必须清楚自己在做什么,避免不必要的内存泄漏问题。你是否也曾在.NET编程中遇到过这些问题?你又是如何解决的呢?--GPT 4

.NET

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

本篇博客文章向我们介绍了如何在.NET环境中进行单元测试的极简入门。文章首先介绍了单元测试的基本概念和其重要性,然后详细展示了如何使用xUnit, Fluent Assertions, NSubstitute等工具进行单元测试的编写。文章以一个实际的例子,演示了如何编写测试方法,如何进行Arrange、Act和Assert,如何使用模拟对象和如何进行断言。文章还介绍了如何运行单元测试,并展示了测试结果。文章最后总结了单元测试的核心内容,并预告了下一篇文章将会讲解如何利用单元测试重构旧的垃圾代码。阅读这篇文章,你是否对.NET单元测试有了新的认识?你是否已经迫不及待地想要尝试编写你的第一个单元测试了?--GPT 4

.NET Test

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

这篇博客主要讨论了.NET最著名的单元测试Mock库Moq的一个争议性功能,以及单元测试的重要性。Moq的这个功能会在用户构建使用了Moq的项目时扫描用户本地的git配置,获取用户的电子邮件地址并发送到Azure的某个服务上以检查用户是否是Sponsor。这个功能在.NET社区引起了广泛的讨论,有人谴责这个行为,有人维护Moq的原作者。作者指出,这个事件在国内社区并没有引起广泛的讨论,可能是因为国内的中小公司一般没有写单元测试的习惯。作者强调,单元测试是由开发人员来写的,不应该依赖物理上的数据库。单元测试可以提高代码的质量,减少错误,增加可读性,方便重构,提高开发效率等。相反,不写单元测试会对代码可维护性,项目的健康性,未来新需求的开发等,带来很大的破坏。希望国内的公司和开发者都能更重视单元测试。你认为单元测试的重要性被低估了吗?你的公司有写单元测试的习惯吗?--GPT 4

.NET Test

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

这篇博客详细介绍了如何在3分钟内搭建一个图片转文本工具。首先,作者选择了Laf,一个提供海外和大陆服务的平台,并创建了一个Laf应用。接着,作者创建了一个云函数,并设置了HuggingFace Access Token作为环境变量。在云函数中,作者使用JavaScript调用HuggingFace的API,实现了图片转文本的功能。作者还展示了如何调试云函数,并发布到Laf平台。最后,作者使用云函数返回的前端代码字符串,创建了一个简单的前端来实现图片转文本的功能。这个工具可以识别图片并将其转化为文字,如果你需要,也可以接入翻译接口,将识别结果翻译为中文。这篇文章详细而直观地展示了如何创建一个简单的图片转文本工具,你是否也想尝试一下呢?--GPT 4

AI

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

这篇博客文章主要探讨了如何使用 Optional 模式解决 C# 中的空引用问题。首先,文章指出空引用异常是编程中常见的问题,常规的处理方法是在出错的代码位置添加判断,然后修复。然后,文章引入了 C# 中新引入的可空引用类型特性,但这个特性也带来了新的问题,如代码中充满了各种 null check 和 null guard。因此,文章提出了使用 Optional 模式来解决这个问题。Optional 模式提供了一种优雅的方式来处理可空值,避免了使用 null 值。文章还介绍了如何实现 Optional 模式,并提供了相关的代码和使用示例。最后,文章比较了 Nullable 和 Optional 模式,认为它们都是不错的解决空引用的方案,但选择哪种方案需要根据项目的大小和参与项目的成员等因素来决定。那么,你会选择哪种方式来解决空引用问题呢?--GPT 4

C#

Linq 和 lambda 的区别是什么?

本篇博客探讨了LINQ和lambda表达式的关系和区别。首先,LINQ(Language-Integrated Query)是一个库,包含一组可以使用lambda表达式的扩展方法,例如Where。文章通过代码示例详细解释了如何使用LINQ进行查询。其次,lambda表达式是一种更简单的构造匿名委托的方法,也被称为语法糖。它们经常在使用方法语法的LINQ中出现,这可能是人们常常把它们混淆的原因。文章再次通过代码示例解释了如何使用lambda表达式。最后,文章总结了lambda表达式实际上是一种比匿名方法更简单的委托创建方式,LINQ则可以通过表达式树把C#的查询语句转换成其他形式的查询语句,例如SQL语句。文章最后引用了一些相关的博客,供读者深入学习。那么,你是否清楚了LINQ和lambda表达式的区别呢?是否理解了它们各自的作用和用途呢?--GPT 4

C#

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

这篇博客主要讨论了.NET的垃圾收集(GC)原理。作者首先提到了许多普通dotnet开发者对dotnet的一些基础知识并不了解,这对他们的技术路线职业发展不利。在这种背景下,性能优化,尤其是从减少GC压力入手,成为了一个值得学习的点。作者随后翻译了一幅来源于Redgate的漫画,该漫画简单而直观地解释了dotnet GC的工作原理。同时,作者也提到了在dotnet 5中,GC新增了新的分代POH,但没有深入讨论。关于大对象堆(LOH)压缩问题,作者引用了@lorenzo_solano的解决方案,即设置`GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce`,但这个解决方案只在下一个GC周期有效。这篇博客为读者提供了一个关于.NET垃圾收集原理的基本科普,同时也引出了一些关于GC优化和内存管理的问题。你认为在什么情况下应该采用这种LOH压缩模式呢?这种模式的效果如何?这些问题可能需要你自己去寻找答案。--GPT 4

.NET

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

这篇博客深入讨论了C#编程中的一个常见问题:空引用异常。首先,介绍了空引用异常的起源和常见情况,特别是在处理字符串数据时,由于字符串的默认值是null,这会导致很多误解。接着,详细解析了在C# 11之前如何解决这个问题,包括使用问号声明符号来声明可为null的字符串,以及使用null!来告诉编译器字符串绝对不会为null。然后,介绍了C# 11引入的required关键字,这个关键字可以直接声明字符串必须在对象初始化器里赋值,从而一步到位解决问题。最后,作者对当前的开发环境进行了吐槽,认为急功近利的开发环境会导致软件质量下降。这篇博客不仅提供了技术解决方案,也引发了对开发环境的思考:我们是否应该牺牲软件质量以追求快速开发?--GPT 4

C#