自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

碳基喵

专注于分享个人学习工作沉淀内容,不做网络搬运工

  • 博客(49)
  • 收藏
  • 关注

原创 [特殊字符] 放弃 Oh-My-Posh,转而手搓 FastPrompt,打造快速高效的命令提示

够用、够快、够自由」才是我心目中的终端提示符。

2025-04-21 09:20:09 239

原创 做个小实验,帮你理解 Git 工作区与暂存区

工作区:这是你在本地仓库中实际看到的文件和目录。你可以在工作区中进行文件的新增、修改和删除操作。暂存区:Git 用来准备下一次提交的区域。通过git add命令,你可以将工作区中的变更添加到暂存区,暂存区中的内容会作为下一次提交的内容。git status:查看工作区和暂存区的状态。git add:将工作区的变更添加到暂存区。:将已添加到暂存区的文件移出暂存区。此外,我们还可以通过定义别名简化操作。掌握这些基础知识后,你可以更高效地使用 Git 进行版本控制。下面是定义别名的汇总脚本。

2025-02-28 17:52:25 403

原创 强烈推荐!终于找到了一个查看 dotnet 源码的便捷方法

​​

2024-11-30 19:01:03 358

原创 20241111,LeetCode 每日一题,用 Go 实现旋转链表

个节点断开,将链表末尾连接到头部形成一个环,再在新的断点处截断形成新的链表。这样通过一次遍历获取长度,再一次遍历找到断点,时间复杂度为。小于等于 1,则无需旋转,直接返回原链表。,因为链表的旋转其实是循环移动,所以将。,旋转链表,将链表每个节点向右移动。:旋转后的链表可以看作是从倒数第。,这样可以减少不必要的旋转次数。:遍历链表来获取链表的长度。:此时新链表的头节点是第。给你一个链表的头节点。

2024-11-11 23:44:04 228

原创 20241110,LeetCode 每日一题,用 Go 使用反转整数

如果反转后整数超过 32 位的有符号整数的范围,就返回 0。给你一个 32 位的有符号整数。中的数字部分反转后的结果。

2024-11-11 23:43:04 418

原创 20241109,LeetCode 每日一题,用 Go 将罗马数字转整数

通常情况下,罗马数字中小的数字在大的数字的右边。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。例如, 罗马数字 2 写做 II ,即为两个并列的 1。:注意到罗马数字的特殊规则——如果某个字符比它右边的字符小,则需将该字符的值从结果中减去。:逐位读取罗马数字字符串中的每个字符,并将其对应的数值累加到结果中。罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。:遍历完成后,得到最终的整数值,即为罗马数字的对应整数。,便于快速查找字符对应的数值。

2024-11-09 23:32:51 501

原创 20241108,LeetCode 每日一题,用 Go 计算字符串中最长无重复字符

请你找出其中不含有重复字符的。因为无重复字符的最长子串是。使用滑动窗口算法,遍历字符串。因为无重复字符的最长子串是。因为无重复字符的最长子串是。请注意,你的答案必须是。,所以其长度为 3。,所以其长度为 1。,所以其长度为 3。

2024-11-09 23:31:53 320

原创 20241107,LeetCode 每日一题,使用 Go 计算两数相加

链表存储的是逆序数位,因此从头节点开始,逐位相加可以模拟正常的加法。每两个节点的值相加,并记录进位。:若链表长度不一,则将缺少的部分视为0;同时确保最后若存在进位,将其单独处理。:若最终计算完链表后进位不为0,则在结果链表末尾增加一个新节点表示进位。

2024-11-06 20:21:05 349

原创 20241106,LeetCode 每日一题,用 Go 实现整数回文数判断

一开始排除一些特殊数字,比如负数肯定不是回文,另外如果一个不是0的整数的个位是0,它也不是回文(因为开头肯定不是0)。解释:从左向右读, 为 -121。从右向左读, 为 121-。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。如果是奇数个数,则 x 就等于。当原始整数剩余部分小于新的整数,说明已经反转了一半数字了。解释:从右向左读, 为 01。​),然后把这个数字从原整数中剔除(​ 是一个回文整数,返回。​)开始提取,放到新的整数。输入:x = -121。​,忽略中间的数字。

2024-11-05 17:27:09 694

原创 20241105,LeetCode 每日一题,用 Go 实现两数之和的非暴力解法

引用:https://leetcode.cn/problems/two-sum/solutions/2976507/goyu-yan-liang-shu-zhi-he-ti-jie-by-deng-pp8x。1、使用 Hash 表(Go 语言中是 map 类型)存储遍历过程中的数组元素和下标,从而避免使用 for for 两层循环的暴力解法,将时间复杂度从O(N^2)降低到O(N)。如果存在,说明找到了一对数字,它们的和等于目标值,返回它们的索引。计算 target-v,得到与当前元素配对的目标数字。

2024-11-04 11:40:11 538

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

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

2024-10-31 17:04:50 421

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

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

2024-10-25 19:05:21 570

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

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

2024-10-24 16:20:45 465

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

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

2024-10-23 20:33:53 451

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

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

2024-10-22 21:03:33 329

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

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

2024-10-22 17:51:59 461

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

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

2024-10-17 20:57:22 799

原创 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 497

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

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

2024-10-12 13:56:52 425

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

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

2024-10-10 09:29:38 514

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

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

2024-08-26 18:01:14 357

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

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

2024-07-31 23:11:57 396

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

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

2024-07-13 23:31:17 505

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

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

2024-07-10 22:55:22 686

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

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

2024-06-29 23:52:31 961

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

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

2024-06-27 23:09:16 622

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

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

2024-06-26 23:29:38 691

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

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

2024-06-23 22:31:45 1527

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

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

2024-06-22 23:58:07 1231

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

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

2024-06-22 19:02:56 898

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

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

2024-06-21 16:02:57 1216

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

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

2024-06-20 23:08:00 1563

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

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

2024-06-19 07:52:07 1341

原创 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 703

原创 MyBatis的Mapper是如何工作的

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

2024-05-21 17:25:27 517

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

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

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

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

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

2024-05-15 17:03:22 802

原创 Java按值传递参数

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

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

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

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

2024-05-07 18:01:52 1312

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

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

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

空空如也

空空如也

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

TA关注的人

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