- 博客(647)
- 收藏
- 关注
原创 【Linux】·C++缺陷和思考
本文深入探讨了C++语言在继承C语言特性时遗留的历史包袱和设计缺陷,从数组复制、类型说明符、指针偏移、隐式类型转换等基础语法,到移动语义、模板特化、构造析构函数调用虚函数等高级特性,全面剖析了C++中容易踩坑的语言陷阱。
2025-07-09 16:05:24
202
原创 C++ 20/23 模块的介绍和使用
C++20模块功能解析:现代化编译单元的革命 摘要:C++20引入的模块功能是继C++11后的重大革新,旨在解决传统头文件系统的固有缺陷。模块通过编译模块接口(CMI)机制,显著提升编译效率,避免头文件递归展开的开销。文章详细解析了模块的核心优势:1) 替代头文件机制,减少90%的编译时间;2) 消除宏污染问题;3) 提供精细的访问控制。通过GCC 15.1.0的实际案例,展示了标准库模块(std)、自定义模块及多模块协同的开发模式,包括单文件模块、分区模块等典型用法。
2025-07-09 13:41:38
308
原创 加锁与令牌桶算法-限流设计对比
摘要:令牌桶和加锁限流算法是两种常见的限流方案。令牌桶算法通过恒定速率补充令牌实现平滑限流,适合突发流量场景;加锁算法基于时间窗口计数器,严格限制请求数量,适合硬性QPS控制。令牌桶实现采用带缓冲通道存储令牌,后台协程定时补充;加锁实现通过互斥锁保护计数器,窗口超期时重置。令牌桶提供更平滑的流量控制,而加锁算法实现简单且能严格保证限流效果。选择方案需根据具体场景对流量平滑性和实现复杂度的要求。
2025-07-08 14:14:10
122
原创 基于Redis实现生产级消息队列
本文提出了一种基于Redis实现的生产级消息队列方案,采用多队列协同架构(主队列、处理中队列、死信队列)确保消息可靠性。通过LPUSH/RPOPLPUSH实现原子操作,配合处理标记和自动恢复机制防止消息丢失。关键技术包括:消息序列化、Lua脚本保证操作原子性、Pipeline批量处理、重试机制和死信队列处理。方案提供完善监控指标(入队/出队计数、处理耗时等),并支持批量消费模式。该设计在保证高可靠性的同时,实现了轻量级部署和高效处理,适用于需要Redis消息队列的生产环境。
2025-07-08 14:07:09
95
原创 golang的各种原生类型之间赋值是原子的吗
文章摘要: 通过汇编代码分析验证了Go语言中不同数据类型的赋值原子性。实验表明,map赋值是原子操作(单条MOV指令完成指针赋值),而slice需要3次内存写入(cap、len、pointer),interface和string各需2次内存写入。int、bool等基本类型确认是原子操作。作者未验证数组的原子性,但推测其非原子操作。该研究为Go并发编程中是否需要加锁提供了重要参考依据,特别是确认了map赋值操作的安全性。
2025-07-08 13:26:44
342
原创 【MySQL】DTS机制对触发器时间的影响
摘要:某案例中,DTS将源库A的表同步到目标库B的表B1,同时B1的触发器会将数据写入B2(含两个datetime字段)。由于DTS将会话时区设为UTC+0,导致触发器NOW()生成的时间比预期少8小时。问题根源在于datetime类型在不同时区下值会变化,而timestamp类型则会自动转换。解决方案:1)在触发器内临时设置时区为+8;2)将字段类型改为timestamp。测试验证了timestamp类型在不同时区下能正确转换。
2025-07-06 14:55:25
262
原创 Linux·踩内存问题定位利器
2、指定的回调函数的调用时机:对X86,如果监视的是数据地址,则是在访问该数据的指令执行完成后,通过exception触发回调,如果监视的是指令地址,则是在该指令被执行前通过exception触发回调。在新的内核版本中引入了一个新工具hardware breakpoint,其能够监视对指定的地址的特定类型(读/写)的数据访问,有利于该类问题的定位;所以对于随机的内存踩踏(频繁的申请、使用、释放)是很难处理的,比较适合固定的地址踩踏。1、获取per_cpu变量的地址。
2025-03-18 14:58:53
432
1
原创 Linux·数据库INSERT优化
,写入磁盘本身就是一个耗时的操作,每次插入一点数据就同步一点数据,对于磁盘而言更是雪上加霜。到这里其实我们想到的第一个优化点,应该就是对于要插入的数据,一次性同步到磁盘,这样可以减少多次同步磁盘带来的时间消耗。插入的话时间消耗是很大的,具体而言单次插入600+时,就需要十几秒,显然这个时间是用户无法忍受的,那么有没有什么办法优化数据插入时间呢?在业务中,我们经常会要对数据进行存储,对于少量数据插入时,我们可以直接使用。插入数据,但是当我们需要插入的数据比较多时,使用。具体的,可以使用事务。
2025-03-04 17:01:38
485
原创 Linux·IP报文重组
其中rhashtable为分片队列(inet_frag_queue)所在的hash表,IP分片包在内核中根据IP报头的4个字段计算得到一个hash值(key值),每个hash值对应一个分片队列,在实现分片包重组功能时,IP层需要先缓存收到的所有分片包,等待同一个IP报文的所有分片包都到达后,把它们重组成一个大包再提交给L4(TCP/UDP... ...)协议。同时,处理与分片包相关的数据结构,譬如更新当前分片包占用的内存(frag_mem_limit),停止与分片包相关的定时器等。
2025-02-22 15:11:49
534
原创 Linux·spin_lock的使用
在使用spin_lock_irq和spin_unlock_irq的情况下,完全可以用spin_lock_irqsave和spin_unlock_irqrestore取代,那具体应该使用哪一个也需要依情况而定,如果可以确信在对共享资源访问前中断是使能的,那么使用spin_lock_irq更好一些。喔,我们在normal级别下获得了一个spinlock,正当我们想做什么的时候,我们被interrupt打断了,CPU转而执行interrupt level的代码,它也想获得这个lock,于是“死锁”发生了!
2025-02-21 17:36:15
1109
gec6818- 车载娱乐系统-满分毕设
2025-07-04
gec6818- 基于Arm和Qt的智能车载系统-满分毕设
2025-07-04
gec6818-智能家居环境监控系统-开盒即用
2025-07-04
为什么会存在不等于20000
2023-05-08
qt中动态库有什么作用
2023-03-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人