- 博客(439)
- 收藏
- 关注
原创 Python中使用matplotlib.pyplot.show报错: FigureCanvasInterAgg‘ object has no attribute ‘tostring_rgb‘解决办法
在使用matplotlib.pyplot绘图时遇到AttributeError:'FigureCanvasInterAgg' object has no attribute 'tostring_rgb'错误,这是由于PyCharm的特殊后端导致的。解决方案包括:1)在PyCharm设置中禁用科学模式(推荐);2)明确设置标准后端如matplotlib.use('TkAgg');3)使用try-except捕获异常并改为保存图片;4)更新PyCharm和matplotlib版本。最简单的临时解决方案是将plt
2026-04-18 11:06:11
180
原创 mysql 中如果条件where中有or,则要求or两边的字段都必须有索引,否则不能用到索引, 为什么?
摘要: MySQL中OR条件要求所有字段都有索引,主要原因在于B+Tree索引的有序存储和范围查询特性。当OR条件中部分字段无索引时,优化器会放弃索引而选择全表扫描,因为部分索引查找加全表扫描的成本高于直接全表扫描。解决方案包括:为所有OR字段创建索引、使用UNION重写查询或使用覆盖索引。最佳实践是避免随意使用OR,分析查询模式并创建合适索引,用EXPLAIN验证执行计划。索引合并功能仅在所有OR条件都有索引时才能生效。
2026-03-23 17:43:09
370
原创 跨行转账系统:基于 MVCC 的高并发分布式银行转账架构
本文详细解析了基于MVCC和分布式事务技术的跨行转账系统架构设计。系统通过分层设计实现发起行、接收行和清算中心的高效协同,采用MVCC机制优化高并发场景下的读写性能,同时保证金融级数据一致性。关键实现包括:全局唯一ID生成、消息队列异步处理、幂等性设计、补偿机制以及全面的监控告警体系。测试验证表明,该架构能够在保证ACID特性的前提下,实现高性能的跨行资金转移,满足金融系统对安全性、可靠性和高并发的严格要求。
2026-03-20 16:26:54
617
原创 mysql MVCC理解以及银行同行转账架构实现
MVCC(多版本并发控制)是一种非阻塞的并发控制机制,通过维护数据的多个版本实现高并发访问。本文详细介绍了MVCC的工作原理及在PostgreSQL、MySQL等数据库中的实现方式,重点分析了其在银行转账系统中的应用。系统采用Golang+MySQL实现,通过MVCC的快照读优化余额查询性能,使用FOR UPDATE确保转账操作的原子性,并选择REPEATABLE READ隔离级别保证数据一致性。文章还提供了完整的代码实现、性能优化建议和测试方案,展示了MVCC在金融系统中兼顾高并发和数据一致性的优势。
2026-03-20 15:29:03
344
原创 gorm 中的Updates Update, Save,Create , UpdateColumn 区别与联系
GORM数据操作方法对比摘要: GORM提供了多种数据操作方法,各具特点:Create用于插入新记录,触发Before/AfterCreate钩子;Save智能判断插入或更新,但会忽略零值且性能较差;Update更新单字段不触发钩子;Updates最常用,map参数不触发钩子且更新零值,struct参数触发钩子但跳过零值;UpdateColumn强制更新字段包括零值,不触发钩子。最佳实践推荐:批量更新用Updates(map),避免使用Save,更新零值用map或UpdateColumn,需触发钩子时用Up
2026-03-20 11:37:54
316
原创 goroutine协程泄露情况以及解决办法详解
Go协程泄露问题分析与解决方案 摘要:Go语言中的协程泄露(Goroutine Leak)是指协程无法正常退出导致资源无法回收的问题。常见泄露场景包括:通道操作无限阻塞、WaitGroup未完成、Ticker未停止、锁未释放等。泄露会导致内存耗尽、性能下降和文件描述符耗尽等严重后果。解决方案包括:使用context.Context传递取消信号、明确通道所有权、设置操作超时、defer释放资源等。可通过runtime.NumGoroutine()、pprof工具和集成测试检测泄露。关键预防原则是:为每个协程设
2026-03-19 09:33:29
332
原创 golang中常用的设计模式举例
本文展示了Go语言实现常见设计模式的典型方法。工厂模式通过函数封装对象创建,单例模式使用sync.Once保证线程安全,装饰器模式采用函数包装增强功能。观察者模式借助通道实现事件通知,策略模式通过接口替换算法。文章还介绍了适配器模式连接不兼容接口,责任链模式构建链表式处理流程,并重点演示了Go特有的Worker Pool和Fan-Out/Fan-In并发模式。这些实现充分利用了Go的接口组合、闭包、通道等特性,体现了"用通信共享内存"的并发哲学。
2026-03-12 15:56:41
98
原创 golang 锁实现原理与解析&锁机制(sync)种类与举例说明以及其使用场景
Go语言sync包提供了并发编程的基本同步原语,包括Mutex、RWMutex、WaitGroup、Once、Cond、Pool和Map等。Mutex通过复合状态位和信号量实现高效互斥锁,支持正常和饥饿两种模式;RWMutex实现读写分离;WaitGroup用于协程同步;Once确保单次执行;Cond实现条件变量通知;Pool管理对象复用;Map提供线程安全键值存储。这些组件通过原子操作、自旋优化和内存屏障等技术,有效解决了数据竞争、死锁等问题,适用于计数器、缓存系统、生产者-消费者模型等多种并发场景。开发
2026-03-11 14:58:02
459
原创 Mysql乐观锁与悲观锁详解
本文对比分析了乐观锁与悲观锁两种并发控制机制。悲观锁通过SELECT...FOR UPDATE实现,适用于写操作频繁场景,保证强一致性但性能较差;乐观锁通过版本号字段实现,适用于读多写少场景,性能高但需处理冲突。文章结合Gin+GORM框架提供了两种锁的具体实现示例,并给出选型建议:资金类业务用悲观锁,高并发场景用乐观锁或Redis+MQ方案。最后详细介绍了Redis预减库存+消息队列的秒杀系统架构,通过Lua脚本原子操作、异步落库和对账机制解决高并发下的库存一致性问题。
2026-02-28 09:54:32
1077
原创 Mysql 几种主从复制方式以及使用docker搭建主从复制架构&gin框架项目实践
本文介绍了MySQL主从复制的几种方式及在Go Gin框架中的实践应用。主要内容包括: MySQL主从复制方式: 异步复制(默认):性能好但可能丢失数据 半同步复制:提高数据安全性但性能略降 同步复制:金融级强一致性 GTID复制:推荐方式,简化管理 基于位点的传统复制 Gin框架实践: 实现读写分离中间件 基于HTTP方法自动路由(写操作走主库,读操作走从库) 数据库连接池配置和健康检查 分层架构设计(Repository-Service-Handler) 提供强制主库查询功能 完整实现: Docker搭
2026-02-26 16:18:20
728
原创 多个项目功能代码大部分相同,合并代码使用一个代码仓库,实现“一次开发、多项目复用”,同时保留各自特有的功能 架构设计
本文提出了一种基于Go语言build tags机制的后台系统代码合并方案,旨在统一柬埔寨和泰国两个高度相似项目的后台代码。通过分析两个项目的目录结构差异,采用单仓库+多服务+Build Tags的架构设计,将公共代码放在无tag文件中,特有功能通过//go:build标签隔离。方案详细说明了控制器、模型、路由注册、服务配置等模块的具体实现方法,包括配置文件的层级覆盖策略和本地开发调试的自动化脚本。该方案实现了 一次开发、多项目复用 的目标,同时保留项目特有功能,为未来新增国家支持提供了扩展性
2026-01-06 10:25:11
964
原创 项目访问接口时报“MISCONF Redis is configured to save RDB snapshots, ...“错误的解决方案
项目访问接口时报"MISCONF Redis is configured to save RDB snapshots, ..."错误的解决方案: Redis 的持久化机制触发了保护机制, redis磁盘满了
2025-12-25 14:26:44
631
原创 ClickHouse版从22升级到24, 跨库表关联出现Compound identifier ‘xx.xx‘ cannot be resolved as table expression解决方案详解
ClickHouse版从22升级到24, 跨库表关联出现Compound identifier ‘xx.xx‘ cannot be resolved as table expression解决方案详解
2025-08-15 16:23:26
570
原创 ClickHouse从22版本升级到24版本,通过%Y-%m-%d %H:%M:%S进行时间转换查询时, 返回时间格式差异中分钟数为英文月份(2025-05-01 01:May:00)的解决方案详解
ClickHouse从22版本升级到24版本,通过%Y-%m-%d %H:%M:%S进行时间转换查询时, 返回时间格式差异中分钟数为英文月份(2025-05-01 01:May:00)的解决方案详解
2025-08-11 17:04:23
1222
原创 golang实现支持100万个并发连接(例如,HTTP长连接或WebSocket连接)系统架构设计详解
golang实现支持100万个并发连接(例如,HTTP长连接或WebSocket连接)系统架构设计详解
2025-08-05 22:57:52
1184
原创 结合Golang语言说明对多线程编程以及 select/epoll等网络模型的使用
首先介绍select和epoll这两个I/O多路复用的网络模型,然后介绍多线程编程,最后结合Go语言项目举例说明如何应用
2025-07-27 19:54:23
951
原创 mysql 以及clickhouse 的sql语句where条件中 SpinType IN (‘Normal‘) 与SpinType = ‘Normal‘ 哪个查询效率高些讲解
mysql 以及clickhouse 的sql语句where条件中 SpinType IN ('Normal') 与SpinType = 'Normal' 哪个查询效率高些讲解
2025-07-27 19:15:42
592
原创 golang怎么实现每秒100万个请求(QPS),相关系统架构设计详解
golang怎么实现每秒100万个请求(QPS),相关系统架构设计详解使用Golang,以Gin框架为基础,设计一个能够处理每秒100万请求(QPS 1M)的系统架构注意:100万QPS是一个很高的数字,单机通常难以处理,所以必须采用分布式架构,并且需要多层次的架构设计和优化
2025-07-25 22:50:07
1248
5
原创 Mysql大数据架构设计:当表中数据超过800万时,对数据表进行分表操作,以及分页查询优化详解
Mysql大数据架构设计:当表中数据超过800万时,对数据表进行分表操作,以及分页查询优化详解
2025-07-24 22:56:09
1422
原创 关于SaaS业务模式及其系统架构构建的详细解析
关于SaaS业务模式及其系统架构构建的详细解析:通过互联网(通常是云平台)以订阅方式向客户提供软件应用服务
2025-07-16 21:58:18
1485
原创 Http1,Http2与Https区别和联系
本文详细解析了HTTP协议及其演进版本的核心特性。HTTP1作为基础协议具有无连接、无状态特性,通过Cookie/Session/Token等应用层方案实现状态管理,但存在明文传输缺陷。HTTP2通过二进制分帧、多路复用、头部压缩等技术大幅提升性能,保持语义不变。HTTPS则在HTTP基础上加入TLS/SSL加密层,实现数据加密、身份验证和完整性保护。三者形成技术演进链条:HTTP1奠定基础架构,HTTP2优化性能,HTTPS保障安全。实际应用中需根据场景选择协议组合,如敏感数据必须采用HTTPS,状态管理
2025-07-13 23:01:22
2777
4
原创 ClickHouse进行LEFT JOIN 关联查询时, 关联键的数据类型不一致,导致报错 的解决方案详解
ClickHouse进行LEFT JOIN 关联查询时, 关联键的数据类型不一致,导致报错 的解决方案详解common type for joined columns: UserId: UInt64 at left, bupb.UserId: Int64 at right. There is no supertype for types UInt64, Int64
2025-04-22 09:46:35
1346
原创 golang操作ClickHouse在使用Select关键字进行查询时,并使用toString, round函数计算百分比并将结果转换为字符串并附加百分号时,出现NAN%的解决方案详解
golang操作ClickHouse在使用Select关键字进行查询时,并使用toString, round函数计算百分比并将结果转换为字符串并附加百分号时,出现NAN%的解决方案详解
2025-04-15 10:20:57
1302
原创 golang通过STMP协议发送邮件功能详细操作
在 Go 语言中接入 IMAP 和 SMTP 服务来进行邮件的发送和接收操作,可以通过使用一些现有的第三方库来简化操作,常见的库有 go-imap 和 gomail,它们可以帮助我们连接和操作 IMAP 邮箱(读取邮件)以及通过 SMTP 发送邮件
2025-04-11 18:23:19
1025
原创 golang中使用ClickHouse查询,报错:Column goods_name is not under aggregate function and not in GROUP BY 解决办法
golang中使用ClickHouse查询,报错:Column goods_name is not under aggregate function and not in GROUP BY 解决办法
2025-04-11 18:06:09
721
原创 golang通过飞书邮件服务API发送邮件功能详解
需要实现通过飞书邮件服务API发送邮件验证码功能:用户输入邮箱, 点击发送邮件,然后发送邮件验证码, 这里验证码有过期时间, 保存到redis缓存中
2025-04-08 17:53:34
920
原创 ClickHouse查询涉及到多个分布式表,出现错误:DB::Exception: Double-distributed IN/JOIN subqueries is denied分析以及解决办法
ClickHouse查询涉及到多个分布式表,出现错误:DB::Exception: Double-distributed IN/JOIN subqueries is denied分析以及解决办法
2025-02-28 17:56:51
858
原创 Apifox 关于自动设置授权Authorization 的操作步骤详解
在现代软件开发中,API(应用程序编程接口)已成为不同系统、服务和应用程序之间交互的基本构建块。随着互联网应用的普及,安全性逐渐成为开发者和用户关注的重点。为了确保数据的安全和用户的隐私,许多 API 采用了 Authorization 头进行身份验证。这一机制允许服务器验证客户端请求的来源,确保只有经过授权的用户才能访问敏感数据和操作
2025-02-25 15:05:06
2584
原创 golang时间相关函数总结
golang时间相关函数总结: 获取近x日的开始结束时间戳, 获取起止日期时间戳,计算当前时间到24点的秒数,获取当前时间戳,日期转换成时间戳,时间戳转换成日期函数
2025-02-20 14:44:27
510
原创 当使用go mod tidy更新pkg包时,某个包却不是最新的 解决办法
当使用go mod tidy更新pkg包时,某个包却不是最新的 解决办法
2025-02-06 14:14:56
782
原创 linux环境自动化golang项目启动脚本解析
当在本地创建了golang项目,修改了代码功能,怎么在远程测试服务器上更新该功能呢,可以使用下面的步骤来解决该问题(这只是其中一种方法):(1).推送最新代码到远程仓库(2).在测试服务器上创建该项目并拉取最新代码(3).创建deploy.sh脚本(4).运行deploy.sh脚本
2025-02-05 13:55:08
1224
原创 golang通过AutoMigrate方法自动创建table详解
在 Go 语言中,GORM支持Migration特性,支持根据Go Struct结构自动生成对应的表结构,使用 GORM ORM 库的 AutoMigrate 方法可以自动创建数据库表,确保数据库结构与定义的模型结构一致。AutoMigrate 方法非常方便,特别适合在开发阶段进行快速迭代注意: AutoMigrate 会创建表、缺失的外键、约束、列和索引出于保护数据的目的,它 不会 删除未使用的列AutoMigrate 会自动创建数据库外键约束,可以在初始化时禁用此功能
2025-01-27 16:46:47
2356
1
原创 通过protoc工具生成proto的pb.go文件以及使用protoc-go-inject-tag工具注入自定义标签
通过protoc工具生成proto的pb.go文件以及使用protoc-go-inject-tag工具注入自定义标签
2025-01-27 14:46:56
1628
原创 golang请求云数据库ClickHouse数据库报错:err code: 202, message: Too many simultaneous queries. Maximum: 100
开发环境:语言: golang1.22数据库引擎: GORM数据库: ClickHouse场景:当使用sync.WaitGroup并发执行多个gorm相关的goroutine时,报错:err code: 202, message: Too many simultaneous queries. Maximum: 100
2025-01-17 16:14:02
673
原创 DBeaver Ultimate24.0数据库图形化管理工具工具连接各类数据库
DBeaver Ultimate 是一款强大的数据库管理工具,支持多种数据库的连接与管理,包括但不限于 MySQL、PostgreSQL、Oracle、SQL Server、SQLite 、Redis、ClickHouse、MongoDB、ODBC、CouchBase、Kafka、ElasticSearch、Neo4j等。以下是 DBeaver Ultimate 24.0 的一些主要特点和功能
2025-01-13 09:58:36
953
1
原创 github.com/samber/lo 库使用案例讲解
samber/lo是一个 Go 语言的库,提供了一组函数式编程风格的工具函数,旨在简化集合(如切片、映射等)的操作。这个库的灵感来自于 JavaScript 的 Lodash 库,因此它的 API 和使用方式与 Lodash 类似。以下是对samber/lo包的一些详细介绍,包括其功能、常用函数和示例。
2025-01-08 16:05:40
998
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅