自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 Go 语言解析 yaml 文件的方法

Go 语言没有内置解析 yaml 文件的功能,实现 yaml 的解析可以使用第三方库。的配置,包含了连接、数据库名称和存储集合名。以上,就是 go 解析 yaml 文件的方法。在 config 目录下,新增文件。文件为例,演示解析代码的过程。获取当前工作目录,然后使用。接着,对照上面的配置,定义。方法,读取文件并解析。

2024-10-31 17:04:50 213

原创 没错,Go 语言的函数参数没有引用传递方式

这篇文章想浅浅地讲解 Go 语言函数参数传递的值拷贝。

2024-10-25 19:05:21 530

原创 在 Go 中,如何实现一个带过期时间的字典映射

有些时候,应用系统用不上 redis,我们也可以用锁和 goroutine 实现一个带有过期时间的线程安全的字典。函数用来初始化字典,然后使用 goroutine 开启新的轻量级线程,按照一定的频率从字典里删除项。函数用来获取字典的值,然后这里也判断一下过期时间,如果已经过期了,就不再返回了。每秒读取一次,由于过期时间是 5 秒,因此,5 秒之后就读取不到值了。这种字典的应用场景,比较倾向于数据规模较小,没有分布式要求。字典的值是一个可以接收任何类型的。

2024-10-24 16:20:45 437

原创 在 Go 语言中,构造一个并发安全的 map 集合

Map 集合是 Go 中提供的一个 KV 结构的数据类型,对它的操作在实际的开发中应该是非常多的,不过它不是一个线程安全的。

2024-10-23 20:33:53 428

原创 Go 切片的扩容规则是怎么样的

那么,就用简单的方法来推算规则。编写下面的单测代码,循环 100 次,每次追加 1个元素,看看切片的长度和容量的变化规律是什么。本来想看看源码怎么写的,发现切片追加元素的方法是内置的,看起来还挺麻烦。这里没有都粘贴过来,容量的规则是每次是原来的 2 倍。切片是动态数组,容量是根据元素动态增加的。

2024-10-22 21:03:33 295

原创 Go 语言的数据类型转换有哪些?

数据类型转换包含显式和隐式两类,隐式的一般是大的数据类型到小的类型进行转换,不会有精度丢失的问题。否则就需要进行显式转换。转换的场景包括:有数学计算、赋值、函数调用、数据库交互、JSON 编解码和接口类型转换。当不同的数据类型相互操作的时候,就需要类型转换,Go 的数据类型转换还是比较简单的。5、JSON 编码和解码。将自定义类型转换为接口。

2024-10-22 17:51:59 416

原创 使用 Go 构建一个最小的 API 应用

最近有项目要使用 Go 开发,作为一个. NET Core 选手,准备先撸一个包含 CRUD 的最小 MVP 项目练手。我觉得,做这样一个 API 应用,不管是 Go 还是其他语言,思路是一样的,无外乎:SDK 版本、开发工具、服务容器、HTTP 请求和响应处理、数据库对应的语言驱动、实体定义和映射、JSON 处理等等。因此,其他语言怎么做,换成 Go 之后,找对应的工具和实现方案就可以了。

2024-10-17 20:57:22 655

原创 EF Core 中避免 SQL 注入的三种写法

SQL 注入攻击可能会对我们的应用程序产生严重影响,导致敏感数据泄露、未经授权的访问和应用程序受损。对于一些复杂的查询,需要直接使用 SQL 查询脚本的,如果是 EF Core 7.0 以上版本可以使用 FromSql。这就是 EF Core 中避免 SQL 注入的三种方式,希望对你有帮助。1、利用 LINQ 查询语法和参数化查询,这是比较推荐的做法。FromSqlRaw 也可以执行 SQL,但是需要特别注意。上面的结果是安全的。这样的字符,用参数替换掉。2、使用 FromSql。它会自动识别字符串中的。

2024-10-15 16:27:32 344

原创 在 .NET 中的 ConvertAll 和 Select 方法哪个性能好

稍好一些,但都比 Select 方法慢得多,且分配的内存较多,垃圾回收次数也较高。方法的性能最好,因为它的执行时间最短,分配的内存最少,并且几乎不需要垃圾回收。因此,对于开头的问题,我的结论是两个方法的性能差不多,都可以使用。两个方法,在开发中实际上应该使用哪一个?.NET 的 List 中提供了。接下来通过基准测试脚本来对比性能。方法进行如下调整,重新测试。方法的执行时间非常接近,经过两次测试可以发现,

2024-10-12 13:56:52 337

原创 在 ASP.NET Core 中编写高性能 Web API 的4个小技巧

这里有两个接口,第一个接口返回了所有的服务 id,第二个接口返回包含具有这些 id 的记录的日志。在上面的示例中,需要进行两次调用,这是不建议的。在后续的请求中,如果数据存在于缓存中,则会立即返回给请求者,而不需要查询数据库。缓存最适合数据不经常更改的场景,ASP.NET Core 支持两种主要类型的缓存:内存缓存和分布式缓存。实现缓存的另一种方式是使用分布式缓存,它可以在多个服务器之间共享,并且通常作为外部服务部署维护。要使用分布式缓存,你需要有一个运行的缓存服务实例。3、使用 Task 等待任务完成。

2024-10-10 09:29:38 404

原创 Hangfire启动的时候默认开启20个线程

Hangfire服务启动时默认会启动20个工作线程来处理后台任务。

2024-08-26 18:01:14 224

原创 在MySQL中COUNT(*)、COUNT(列)和COUNT(DISTINCT 列)有什么区别

也许你知道它们都是计算结果行数的,那么在使用的时候如何选择呢。这篇文章让我们看看MySQL中。我在MySQL库中创建了一个。往表里插入了6条数据,如下。

2024-07-31 23:11:57 343

原创 网络编程:什么是阻塞IO

阻塞IO适用于简单的网络应用,但在高并发场景下效率较低,因为每个连接会占用一个线程,可能导致线程资源耗尽。为了解决高并发问题,可以使用非阻塞IO(如NIO)或异步IO技术。

2024-07-13 23:31:17 460

原创 昇思25天学习打卡营第2天 | 通过 MindSpore实现简单的深度学习模型的操作步骤

本节通过MindSpore的API来快速实现一个简单的深度学习模型。

2024-07-10 22:55:22 648

原创 RocketMQ实战:一键在docker中搭建rocketmq和doshboard环境

该项目提供了一套 Docker Compose 配置,用于快速部署 RocketMQ 及其 Dashboard。项目包含必要的配置文件和目录结构,以确保数据持久化和服务的正常运行。通过以上步骤,您可以快速部署并运行 RocketMQ 及其 Dashboard。该项目的 Docker Compose 配置简化了部署过程,使得开发和测试变得更加高效。

2024-06-29 23:52:31 854

原创 RocketMQ:日常开发中有哪些使用MQ的场景

消息队列是一种通信方法,允许应用程序通过发送和接收消息来互相通信。这些消息/任务/指令存储在一个中间介质中(即队列),并由生产者发送,消费者接收。消息队列是一种强大的工具,可以用于任务异步处理、系统解耦和负载均衡等场景。它能够提高系统的性能和可扩展性,在复杂的软件系统中会经常使用到,也是要掌握的重要技能之一。

2024-06-27 23:09:16 563

原创 昇思25天学习打卡营第1天 | 什么是昇思MindSpore

MindSpore 是华为为了帮助开发者降低开发难度和运营成本,同时承载端、边、云全场景 AI 计算需求,发布的全场景 AI 计算框架,源码公布在Gitee和Github上。MindSpore 统一训练和推理框架,旨在实现易开发、高效执行、全场景统一部署三大目标。其中,易开发表现为API友好、调试难度低;高效执行包括计算效率、数据预处理效率和分布式训练效率;全场景则指框架同时支持云、边缘以及端侧场景。ModelZoo(模型库):ModelZoo提供可用的深度学习算法网络。

2024-06-26 23:29:38 651

原创 Redis源码学习:Redis对象和5种数据类型的工作原理

在server.h文件中,zsetdict *dict;} zset;本文讲解了什么Redis对象,已经面向用户的5种常用数据类型的底层逻辑,希望对你有帮助。

2024-06-23 22:31:45 1490

原创 Redis源码学习:quicklist的设计与实现

quicklist是一个双端链表结构,链表的每一个节点都是ziplist。本文主要讲解了为了解决ziplist的缺陷,quicklist通过对ziplist进行“分片”存储,限制每个节点的大小或数量来提供性能的方法,希望对你有帮助。

2024-06-22 23:58:07 1204

原创 Redis源码学习:ziplist的数据结构和连锁更新问题

虽然ziplist对头尾的操作可以很快,但是,当要查找列表中间的元素时,ziplist 就得从列表头或列表尾遍历才行。由于ziplist 必须使用一块连续的内存空间来保存数据,所以当新插入一个元素时,ziplist 就需要计算其所需的空间大小,并申请相应的内存空间,假设有N个小于255字节的Entry,每一个Entry的。ziplist 是 Redis 中一种紧凑型的列表结构,专门用来存储元素数量少且每个元素较小的数据。都可以用1个字节存储,现在要在中间插入新的Entry,长度大于254,此时。

2024-06-22 19:02:56 840

原创 Redis源码学习:跳表(Skip List)的工作原理详解

跳表(Skip List),首先它是链表,是一种随机化的数据结构,Redis 使用跳表作为有序集合(Sorted Set)的底层实现之一。跳表能够提供高效的插入、删除、查找操作。本文通过阅读源码来分析跳表的工作原理。Redis 的跳表通过多级索引结构,实现了高效的插入、删除和查找操作。希望这篇文章能够帮助你更好地理解跳表的工作原理和实现细节。

2024-06-21 16:02:57 1069

原创 Redis源码学习:高性能Hash表的设计与实现

哈希表是一种通过哈希函数将键映射到值的数据结构。简单来说,就是通过一个计算公式(哈希函数)把一个键(比如一个名字)转换成一个数组的索引,数组中的每一个元素就是一个哈希桶(也叫bucket),然后在这个索引位置存储对应的值(比如电话号码)。这样我们就能以O(1)的时间复杂度通过键快速找到对应的值。通过链式哈希,Redis有效地解决了哈希冲突的问题;通过渐进式rehash,Redis确保了哈希表扩展时的高效性和稳定性。这些机制让Redis哈希表在处理大量数据时仍然保持高效。

2024-06-20 23:08:00 1432

原创 Redis源码学习:SDS设计与内存管理

Redis使用简单动态字符串SDS来代替传统C字符串,解决了获取长度低效、缓冲区溢出和二进制不安全等问题。SDS在结构体中维护长度,支持二进制存储,自动扩容防止溢出,性能和灵活性均有提升。文中详细分析了SDS的内存分配、扩容和释放过程。

2024-06-19 07:52:07 1287

原创 Redis源码学习:从头开始掌握Redis核心设计

具体实现代码在相应的 .c 文件和 .h 文件中,如 dict.c 和 dict.h(实现哈希表)。Redis 的辅助功能包括操作延迟监控(latency.h、latency.c)、慢命令记录(slowlog.h、slowlog.c)以及性能评测(redis-benchmark.c)。内存管理是 Redis 的重要优化点,包括内存分配(zmalloc.h/zmalloc.c)、内存回收(expire.c 和 lazyfree.c)以及数据替换策略(evict.c)。通过了解目录结构的作用可以快速认知系统。

2024-06-18 08:24:46 631

原创 MyBatis的Mapper是如何工作的

本文将介绍MyBatis的Mapper接口如何跟映射文件关联起来。本文介绍了MyBatis中Mapper从定义到使用的过程,从源码角度演示了Mapper的定义、加载、注册、查找和执行操作的一系列过程,希望对你有帮助。

2024-05-21 17:25:27 488

原创 在Python中,使用Azure OpenAI和LangChain完成一次对话

这篇文章将介绍如何配置Azure OpenAI,以及如何在Python中如何使用LangChain完成一次对话。使用ipynb notebook虚拟环境python版本 3.11.3在这篇文章里,介绍了 Azure OpenAI 的配置,以及在Python中使用LangChain完成一次简单的对话,希望对你有帮助。

2024-05-20 16:58:33 1080 1

原创 MyBatis是如何进行数据库连接配置的

读取配置文件:通过Resources类读取 XML 文件。解析配置文件:使用解析 XML,生成对象。创建 SqlSessionFactory:使用和创建。建立数据库连接创建SqlSession,使用DataSource获取数据库连接。

2024-05-15 17:03:22 684

原创 Java按值传递参数

这篇文章主要通过示例解释Java中的对象是按值传递的,没有按引用传递的说法。

2024-05-09 18:07:26 521 1

原创 使用 jstat 命令查看内存使用,监控 Java 应用性能

在 Java 开发和调优中,了解应用程序的内存使用情况、垃圾回收频率等信息至关重要。jstat 是 JDK 中提供的一个命令行工具,用于实时监控 Java 虚拟机的各项统计信息。本文将介绍 jstat 的基本使用方法以及常用选项和输出项的含义。

2024-05-07 18:01:52 1120

原创 使用 jps 命令查看Java进程

jps非常简单,但是对于日常开发和运维却是非常重要,是必须要掌握的。

2024-05-06 23:31:06 601 1

原创 2024年了,还找不到 docker volume 存储在哪里吗?

环境信息:我的 volume 存储在这里来源:https://stackoverflow.com/questions/61083772/where-are-docker-volumes-located-when-running-wsl-using-docker-desktop/63407443#63407443

2024-05-06 11:19:02 306 2

原创 MySQL存储引擎的差异与选择

在选择MySQL的存储引擎时,需要根据应用的具体需求来决定。如果需要事务支持、数据完整性和高并发写入能力,InnoDB是首选。如果应用主要是读操作且不需要事务支持,MyISAM可能更适合。而MEMORY引擎则适用于需要快速访问临时数据的场景。在选择时,还需要考虑数据的存储量、访问频率以及磁盘I/O等因素。

2024-05-03 04:26:21 644

原创 Rust 的所有权系统:你应该知道的几件事

像 C/C++ 这样的编程语言为开发人员提供了对内存管理的大量控制。但这带来了很大的风险——很容易犯错误,导致崩溃、安全漏洞或错误!释放内存后使用内存。这会导致崩溃或奇怪的错误。用完后忘记释放内存。这会导致内存泄漏。同时访问同一内存的两部分代码。这可能会导致争用条件。为了避免这些问题,Rust 使用了所有权系统,通过添加一些编译器检查规则以确保内存安全。所有权的关键思想是:Rust 中的每个值都有一个所有者。所有者负责该值——管理其生命周期、释放它、允许访问它等。

2024-04-29 18:40:09 681

原创 Semantic Kernel开发实践:Planner 规划器

Semantic Kernel Planner 是一款动态工具,可以将用户的请求转换为可执行的计划。换句话说,当它接收到用户请求(目标)后,根据Kernel对象具有的能力(提供的Plugin和Function),自动组合。由于Planner的自动规划,很可能产生不可预期的执行顺序、不适合的Function的调用,因此这很大的决定因素是编写的Prompt和Function上定义的描述是否准备合理。

2024-04-25 23:24:56 475

原创 Semantic Kernel开发实践:Semantic Kernel 初体验

作为一个开发者,在使用ChatGPT、文心一言、星火这些大模型的时候,是不是想要把这些大模型和自己的应用集成,做出一款赚钱的产品呢?那么,如何在不需要很多AI专业知识背景的情况下,更轻松地集成大模型呢?这就是本篇文章要介绍给大家的一个微软的开源框架——Semantic Kernel,中文翻译为语义内核。这篇文章讲解了开源框架语义内核通过隐藏了LLM内部细节,提供高效抽象层,让开发者轻松使用LLM的能力来开发应用,并编写了一个多轮对话的示例来体验语义内核。希望对你在学习AI编程方面有一些帮助。

2024-04-24 00:01:21 853

原创 Semantic Kernel开发实践:如何创建并使用语义函数(Semantic Function)(2)

在前一篇里有一个思考:如何创建复用性更好的语义函数?本篇文章,将回答这个问题,是通过结构化处理语义函数(Semantic Function,下文直接称语义函数)的各个部分,来达到复用的效果。演示案例是C#编写的控制台应用,使用的是.net8.0版本。LLM服务使用的是Azure OpenAI本文说明了如何通过对语义函数的配置和提示词模板结构化处理后,可以方便的在不同的应用中使用,以达到复用的目标。

2024-04-22 22:43:39 486

原创 Semantic Kernel开发实践:如何创建并使用语义函数(Semantic Function)

语义函数不像本机函数那样需要我们使用编程语言编写代码实现特定的功能,它是自然语义编程,通过定制提示词模板,让LLM做它本来就可以做的事情。有了Semantic Kernel,在这个定制化的提示词模板中,可以动态的传入一些参数。本篇以C#编写的控制台程序为例,使用.Net8.0。LLM服务使用的是Azure OpenAI这里的提示词模板,可以用你知道的各种提示词技巧来写。如果想在提示词里传入参数,可以使用{{$参数}}来定义。

2024-04-21 17:32:09 629

原创 Semantic Kernel开发实践:Native Function

作为SK(Semantic Kernel)核心组件之一,Plugins是一组为了实现功能而定义的函数的集合,可以达到增强LLM(大语言模型)的能力。LLM的训练数据都是截止到过去的某一个时间,所以如果问它现在发生的事情,那么生成的内容,基本上是它在一本正经的胡说八道。LLM也不能进行调用API、发送邮件、发布文章等等操作,如果想让LLM获取新的知识和能力,就需要为它开发一些插件。这里有一张从微软官方网站上找到了这篇图。演示示例使用的控制台应用程序,编程语言是C#,.net版本是8.0。

2024-04-20 00:13:38 300

原创 Semantic Kernel开发实践:使用Embedding和语义内存检索增强生成

最近在捣鼓研究Semantic Kernel,对如何在AI对话中引用私有的知识库比较感兴趣。目前比较常见的做法是fine-tuning或embedding。这篇文章就来看看我是如何使用semantic kernel搭配embeddings模型的。示例采用控制台应用,编程语言是C#,使用的是.net 8.0。GPT模型使用的是Azure OpenAI GPT-3.5-turbo。embeddings简单来说,是将非结构化的文本通过embedding转换为数值向量的方法。这些向量反映了文本的语义和关系。

2024-04-19 08:28:07 673

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除