自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Golang-web中间件入门指南

文章摘要:Go语言中的中间件是处理HTTP请求和响应的关键组件。标准库中的中间件是接收并返回http.Handler的函数,通常用于记录请求、权限检查等任务。文章演示了如何创建日志中间件,记录请求方法和耗时,并对比了Gin框架的中间件实现(使用gin.Context和c.Next())。中间件能在核心逻辑前后执行操作,如示例中的请求时间统计。Gin框架通过router.Use()全局应用中间件,并使用c.String()返回状态码和响应内容。

2025-09-04 17:34:46 219

原创 Golang-web参数校验

本文介绍了使用Gin框架进行参数校验的几种方法:1)JSON参数校验,通过定义结构体并使用binding标签实现必填验证;2)URL查询参数校验,使用form标签和gt等规则验证数值范围;3)常用校验规则如字符串长度限制、邮箱格式、数值范围等;4)通过捕获ValidationErrors自定义错误信息;5)创建自定义校验函数实现特殊规则(如密码复杂度)。文章通过登录、搜索、注册等接口示例,展示了如何通过ShouldBindJSON和ShouldBindQuery方法进行数据绑定和验证,并提供了错误处理的最佳

2025-09-03 19:12:24 514

原创 Golang-kafka入门指南

Kafka摘要:分布式消息流平台,核心特性为高吞吐、持久化和解耦。基本组件包括Topic(数据分类)、Broker(分布式存储节点)、Producer(写入数据)和Consumer(读取数据)。通过分区机制实现高性能:每个Topic被拆分为多个Partition,保证单分区有序性并支持并行处理。消费者组内实例分工消费不同分区,实现负载均衡。典型应用场景包括系统解耦(如视频网站各子系统间通信)、流量削峰和实时数据处理。Kafka采用追加写入日志模式,支持消息回溯和故障恢复,是构建高并发分布式系统的关键中间件。

2025-09-02 18:00:04 770

原创 Golang-RPC同步调用

本文介绍了如何使用RabbitMQ实现RPC(远程过程调用)功能。核心思想是通过消息属性和临时队列实现请求-响应模式:客户端创建临时回调队列并发送带有reply_to和correlation_id的请求消息;服务端处理请求后,将结果发送到指定队列并携带相同的correlation_id。文中提供了Go语言实现示例,包括服务端监听RPC队列、计算斐波那契数列并返回结果,以及客户端发送请求并等待响应的完整流程。该方法在异步消息系统上成功模拟了同步调用效果,适用于需要远程函数调用的分布式场景。

2025-09-02 14:49:37 315

原创 Golang-RabbitMQ入门指南

RabbitMQ入门指南:解耦与异步通信的利器 RabbitMQ是一个强大的消息队列系统,解决了传统同步调用模式中的性能瓶颈、脆弱性和扩展性问题。通过将RabbitMQ作为"智能邮局"置于系统中间,实现了服务间的解耦、异步通信、削峰填谷和可靠性保障。RabbitMQ包含生产者、消费者、交换机、队列和绑定等核心组件,支持Fanout(广播)、Direct(精确匹配)和Topic(模式匹配)三种交换机类型,分别适用于不同的消息分发场景。与Redis的Pub/Sub相比,RabbitMQ提供了

2025-09-01 18:27:25 641 1

原创 Golang-内存淘汰策略

本文介绍了两种常见的内存淘汰策略:LRU(最近最少使用)和LFU(最不经常使用)。LRU优先淘汰最久未被访问的数据,而LFU则淘汰访问频率最低的数据。文章还提及Redis在实际应用中的典型使用场景,并通过图片形式展示了相关实例。这些内容为理解缓存机制和Redis应用提供了基础知识。

2025-08-28 15:16:50 153

原创 Golang-分布式锁

Redis分布式锁实现摘要 使用SETNX命令实现互斥锁:key不存在时设置成功(返回1),已存在则失败(返回0)。通过TTL设置过期时间避免死锁,若客户端崩溃,Redis自动释放锁。Go代码示例展示了tryLock(SETNX+TTL)和releaseLock(DEL)的实现,测试模拟100协程抢锁场景,仅一个成功获取锁。这种方案简单高效,适用于秒杀等高并发场景。

2025-08-28 15:03:13 117

原创 Golang-redis发布-订阅模式

文章摘要:本文介绍了Redis的发布/订阅模式实现,通过Go语言示例演示了频道订阅和消息发布机制。订阅者需先监听频道才能接收发布者的消息,多个订阅者可同时监听同一频道。代码中使用context.Context传递上下文信息,包含发布者/订阅者标识。测试结果显示消息传递成功,日志打印顺序受goroutine调度影响,体现了并发执行特性。文章还探讨了协程调度对日志顺序的影响机制,说明发布者协程可能被订阅者协程抢占CPU资源的情况。

2025-08-26 21:40:00 169

原创 Golang-trie树(前缀树)

Trie树是一种高效处理字符串集合的数据结构,适用于前缀匹配、搜索提示、单词查找和字符串统计等场景。它通过树形结构存储字符串,实现快速查询和匹配,在搜索引擎、拼写检查等应用中广泛使用。

2025-08-26 14:28:32 215

原创 Golang-高并发限流算法

电商秒杀场景下,服务器限流是关键防御机制。通过令牌桶等算法对高并发请求进行流量控制,保护系统免受过载影响。该技术能有效平衡服务器处理能力与用户请求,确保系统稳定性,防止因瞬时流量激增导致的崩溃。合理设置限流阈值可兼顾用户体验与系统安全,是电商高并发场景的核心解决方案。

2025-08-25 14:52:11 154

原创 Golang-最小并发度负载均衡算法

负载均衡系统通过合理分配请求到多台后端服务器(节点)来提高整体性能。负载均衡器作为核心组件,负责将访问流量动态分发至各服务器节点,确保资源利用均衡,避免单点过载。图示展示了负载均衡器与后端节点的架构关系,以及请求分配的过程。这种机制有效提升了系统吞吐量和可靠性,适用于高并发场景。

2025-08-25 14:42:25 65

原创 Golang-负载均衡(Alias采样)

摘要:本文介绍了负载均衡技术及其在分布式系统中的重要性,通过分摊请求到多台服务器避免单点过载,提高系统性能。重点展示了一个基于Alias方法的负载均衡采样算法Go语言实现,包括归一化权重、构建采样表等核心步骤。代码提供了完整的测试用例,验证了算法在百万次采样中的准确性(误差<0.01)。文中强调实现时需注意切片传参问题,避免原始数据被修改影响判断逻辑。该算法适用于需要按概率分布进行高效请求分发的场景。

2025-08-25 14:07:38 153

原创 Golang-布隆过滤器Bloom Filter

布隆过滤器是一种空间效率高的概率型数据结构,用于快速判断元素是否不在集合中。它由位数组和多个哈希函数组成。添加元素时,通过哈希函数在位数组对应位置置1;查询时,若任一哈希位置为0则确定不存在,全为1则可能存在(可能存在误判)。布隆过滤器保证"不存在"结果绝对准确,但"存在"结果可能有假阳性。适用于海量数据去重、缓存穿透防护等场景,具有空间占用小、查询效率高的特点。

2025-08-24 14:35:57 174

原创 Golang-超时缓存

本文实现了一个基于堆的超时缓存系统TimeoutCache,包含以下核心功能:1) 使用最小堆按过期时间排序管理缓存项;2) 独立的淘汰协程定期检查并移除过期项;3) 支持容量限制和缓存替换策略。系统通过map存储业务数据,堆结构维护过期顺序,当缓存满时优先淘汰最早过期的项。测试用例验证了基本操作、容量限制、自动过期等功能,同时发现了一个潜在问题:当同一key被多次添加时可能出现误删情况,解决方案建议在删除前校验deadline一致性。该实现结合了Go标准库的heap.Interface接口,展示了高效的数

2025-08-23 23:48:06 140

原创 Golang-LRU缓存

本文介绍了LRU(最近最少使用)缓存算法的Go语言实现。代码包含一个LRUCache结构体,使用map存储数据,双向链表维护访问顺序。当缓存满时,淘汰链表尾部元素。提供了Add添加数据、Get获取数据等方法,其中Get操作会调整元素到链表头部。测试代码验证了基本功能、淘汰逻辑和边界情况。当前实现Get时间复杂度为O(n),文中建议可通过额外map存储链表指针优化至O(1)。该实现展示了LRU核心思想,同时指出了性能优化方向。

2025-08-23 20:01:32 159

原创 Golang-堆

本文介绍了Go语言中实现最小堆(小顶堆)的方法。通过定义IntMinHeap类型并实现heap.Interface接口的五个方法:Len()获取长度、Less()定义比较规则、Swap()交换元素、Push()添加元素和Pop()删除元素。代码示例展示了如何构建一个基于整型数组的最小堆数据结构,其中Less()方法通过h[i]<h[j]的比较确保堆顶元素始终最小。这种实现方式可用于需要高效获取最小值的场景,如优先队列等应用。

2025-08-09 16:04:12 278

原创 Golang-partition操作找topK

摘要: 利用快速排序的partition操作可以在O(n)平均时间复杂度内高效求解Top K问题。通过选取基准值pivot将数组分为两部分,并根据pivot位置与K的关系决定继续处理左半或右半部分,无需完全排序数组。该方法比先排序再取前K个元素更高效,适用于查找最大或最小的K个数。

2025-08-09 15:50:04 128

原创 Golang-快速排序

快速排序原理与实现 快速排序采用分治策略:1)选基准值;2)将数组分为小于基准(左)和大于基准(右)两部分;3)递归处理左右子数组。Go实现通过双指针交换元素,最终将基准放到正确位置。优点:平均O(n log n)时间复杂度,原地排序;缺点:最坏情况O(n²),递归可能栈溢出。核心口诀:选基准→分左右→递归排→合并好。代码使用泛型支持多类型排序,通过左右指针移动和交换完成分区。

2025-08-09 14:59:17 143

原创 Golang-jaccard相似度

本文比较了两种计算集合相似度的方法:1)暴力法通过哈希表存储元素查找交集;2)先排序后使用双指针遍历查找重复元素。两种方法各有优劣,暴力法实现简单但空间复杂度较高,排序法节省空间但需要预处理。文章通过示意图直观展示了这两种算法的实现思路。

2025-08-08 16:46:36 178

原创 Golang-跳表

本文介绍了如何利用Python实现图像处理中的直方图均衡化技术。通过分析图像像素分布特性,使用numpy和matplotlib库计算并绘制直方图,演示了直方图均衡化算法对图像对比度的改善效果。实验结果表明,该技术能有效增强图像细节表现力,特别适用于低对比度图像的质量提升。文中提供了完整的代码实现步骤,包括灰度转换、直方图计算、累积分布函数处理等关键环节,为数字图像处理领域的研究者和开发者提供了实用参考。

2025-08-08 15:28:52 97

原创 Golang-标准库链表

本文展示了Go语言中双向链表的实现与基本操作。通过container/list包,演示了链表的创建、元素插入(前端和后端)及遍历操作:1)使用list.New()创建空链表;2)PushBack()从尾部插入元素;3)PushFront()从头部插入元素;4)通过Front()和Next()方法实现正向遍历。代码示例清晰地体现了Go标准库对链表数据结构的高效封装,适用于需要频繁插入/删除的场景。

2025-08-08 15:22:41 95

原创 Golang-二分查找

【代码】Golang-二分查找。

2025-08-08 10:38:53 97

原创 Golang-泛型

摘要:Go语言中的泛型通过类型参数[T]提高代码通用性,允许函数支持多种数据类型。示例展示了两种定义方式:直接列出类型或使用接口约束。特别指出~符号可支持底层类型相同的新类型(如Age基于int32)。虽然方法不能直接使用泛型,但可通过泛型结构体实现类似功能。典型应用场景包括处理多种请求类型的POST请求。泛型需在编译时指定具体类型,增强了类型安全性和代码复用性。

2025-08-08 09:59:52 165

原创 Golang-指针

摘要:Go语言中指针只能修改自身内容,不支持*p++等运算,确保内存安全。切片在内存中由底层数组指针、长度和容量组成,如arr := make([]int, 3, 5)创建后,通过append生成的brr虽然长度不同,但与arr共享底层数组,修改前三个元素会相互影响。传递切片实际传递的是底层数组指针,因此函数内的修改会影响原始值。

2025-08-07 15:02:31 109

原创 考研数据结构代码:图(邻接表实现)的深度优先搜索DFS,广度优先搜索BFS

【代码】考研数据结构代码:图(邻接表实现)的深度优先搜索DFS,广度优先搜索BFS。

2023-10-20 15:30:32 163 1

原创 考研数据结构代码:图(邻接矩阵实现)的深度优先搜索DFS,广度优先搜索BFS

【代码】考研数据结构代码:图(邻接矩阵实现)的深度优先搜索DFS,广度优先搜索BFS。

2023-10-19 17:35:06 137

原创 考研数据结构代码:链表

【代码】考研数据结构代码:链表。

2023-10-19 15:12:38 70

原创 考研数据结构代码:顺序表

【代码】考研数据结构代码:顺序表。

2023-10-18 16:54:02 68

原创 西南交通大学840专业课2012年代码题

/可用C++字符串实现,无需考虑字符串数组越界问题。

2023-10-07 15:42:57 121 1

原创 计算机系统基础:冯诺依曼结构(现代计算机结构)

**冯·诺依曼结构(现代计算机结构)**(五大部件:运算器,控制器,存储器,输入设备,输出设备)存储器(划分若干个存储单元)即内存条控制器算术逻辑部件ALU:算数逻辑部件里面的操作数可以是通用寄存器组GPRs里面的操作数,也可以是存储器里面的操作数。运算的结果可以放到寄存器GPRs里面,也可以先进入MDR再到存储器里面。(存储器与寄存器之间数据可以相互传递)运算产生的除了结果外,还有一些标志性信息 (如:运算结果得到的符号,进位,溢出),这些信息可以送到控制器里面影响后续指令的执行,每条要执行

2021-03-17 23:12:14 1187

空空如也

空空如也

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

TA关注的人

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