- 博客(21)
- 收藏
- 关注
原创 Go 语言的 Mutex 底层实现详解:状态位、CAS、自旋、饥饿模式与信号量
Go 语言的 sync.Mutex 并不是一个简单的互斥锁实现。本文从源码与设计动机两方面,系统分析 Go Mutex 的底层工作机制。
2025-12-28 08:53:02
1009
1
原创 从一次「登录阻塞」说起:我终于理解了 goroutine
最近再写一个Go TCP 网络聊天室,服务端有登录、注册功能。一开始写得很顺,功能也都能跑,但很快我发现了一个致命问题:当一个客户端在登录/注册时,其他客户端居然完全没法操作了。
2025-12-21 11:34:01
863
原创 让MySQL和Redis数据保持一致的几种策略
本文围绕“MySQL 与 Redis 数据一致”这一经典难题,用一条主线串起 4 种缓存更新策略:先删缓存再写库、先写库再删缓存、缓存同步回写、缓存异步回写。通过并发时序图把每种方案“什么时候会脏、脏多久、会不会丢数据”一次讲透,并给出可直接落地的取舍建议——读多写少选旁路缓存,强一致用同步回写,高并发可接受秒级延迟则走异步回写。读完即可按业务场景快速选型,避开“缓存不一致”大坑。
2025-12-15 09:38:28
861
1
原创 单线程的 Redis,背后隐藏了哪些高并发秘诀?
我们都知道Redis很快,我们还总是听别人说Redis是单线程的,那么单线程的Redis为什么那么快呢?
2025-12-07 14:56:30
607
1
原创 Redis学习之数据结构
字符串是 Redis 最基本的数据类型,键为字符串,值可存储字符串、数字(支持自增自减)或二进制数据(如图片、序列化对象),最大存储容量为 512MB。底层实现:默认使用简单动态字符串(SDS)实现,而非 C 语言原生字符串,支持动态扩容,避免缓冲区溢出,同时优化字符串拼接、长度计算等操作的性能。哈希是键值对的集合(field-value 映射),适合存储对象的多个属性,可单独操作对象的某个字段,无需修改整个对象,节省内存与带宽。底层实现:数据量较小时使用压缩列表(ziplist)存储,节省内存;
2025-11-29 14:54:03
643
原创 掌握MySQL学习之函数,约束,事务
本文介绍了MySQL中常用的函数类型和约束概念。主要包括: 函数部分: 字符串函数:如CONCAT拼接、大小写转换、填充/截取等 数值函数:包括取整、取模、随机数和四舍五入 日期函数:获取当前日期时间、日期运算和差值计算 流程函数:条件判断和分支选择函数 约束部分: 约束的分类:非空、唯一、主键、默认值、检查和外键约束 主键与唯一约束的区别对比 外键约束的作用和要求,包括从表设置、类型匹配等规则 通过员工信息表示例演示多种约束的应用
2025-11-20 16:59:09
630
原创 掌握MySQL之三范式学习
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
2025-11-14 19:41:46
273
原创 数据库(mysql)必背单词
本文整理了数据库领域常用的英文术语及其中文解释,分为八大类:1)基础概念类(表、字段、事务等);2)SQL操作关键字(SELECT、JOIN等);3)数据类型;4)约束与规则;5)数据库设计;6)常用函数;7)数据库管理;8)三范式相关概念。每个单词均配简明中文释义,涵盖数据库操作、设计、优化等核心知识点的专业术语,可作为数据库学习者的基础英语词汇速查表。(143字)
2025-11-10 21:06:18
888
原创 掌握MySQL之SQL语句学习
这是一篇我在学习 SQL 语句过程中的系统笔记,主要记录了 MySQL 中常见语法与使用方法,涵盖了从数据库与表的创建,到数据的增删改查,再到用户与权限管理的完整流程。
2025-11-05 20:30:03
921
2
原创 别再混淆了!带你一次搞懂 MySQL 的 COUNT
在SQL中,COUNT函数用于统计满足特定条件的行数,它有几种不同的用法,分别是 COUNT(1)、COUNT(*) 和 COUNT(字段),下面给大家列出来每一种的含义和区别。
2025-11-01 11:50:57
428
2
原创 一行代码的魔法:你真的懂 defer 吗?
本文从设计初衷到语法用法,从底层数据结构 _defer 到 Go 1.13 引入的性能优化(栈 defer、开放编码 defer),作者层层剖析了 defer 的运行原理、执行时机与性能差异。不仅涵盖了常见应用场景与三条官方行为准则,还结合源码与基准测试,直观展示了不同实现方式下的性能对比。如果你想从“会用 defer”进阶到“真正懂 defer”,这篇文章能帮你从语法到底层实现全面掌握。
2025-11-01 08:30:07
737
原创 Docker学习分享
我们写的代码经历三个环境:开发环境,测试环境,生产环境;三个环境使用的人不同,为了确保开发,测试,生产一致,我们引入了DockerDocker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。镜像和容器的关系。
2025-10-18 15:49:53
760
原创 Centos Docker安装--2025年最新版教程!
安装成功以后,执行命令,配置Docker的yum源。如果系统中已经存在旧的Docker,则先卸载。最后,执行命令,安装Docker。首先需要安装一个yum工具。
2025-10-18 11:21:25
356
原创 Go语言简易TCP聊天室
本文介绍了一个基于Go语言实现的简易TCP聊天室系统,包含服务端和客户端代码。项目采用模块化设计,分为服务端、客户端和工具包三部分。服务端主要功能包括监听端口、处理用户连接、消息分发(广播/私聊)和管理在线用户列表;客户端负责用户界面、消息发送和接收。系统实现了用户注册、群聊、私聊、在线用户查询等基本功能,通过互斥锁保证线程安全,并处理了TCP粘包问题。代码结构清晰,展示了Go语言网络编程的基本模式,适合作为学习Go语言网络通信的入门项目。
2025-10-12 16:15:25
394
原创 linux命令
命令无需选项,只有参数,表示要切换到哪个目录下,cd命令直接执行,不写参数,表示回到用户的HOME目录。1. 没有选项只有必填参数,参数表示:被查看的文件路径,相对,绝对,特殊路径符都可以使用。2. 参数必填,表示Linux路径,即要创建的文件夹的路径,相对路径和绝对路径都可以。将默认的块大小(KB)转换为更易理解的单位(KB,MB,GB,TB)–>人类可读。以易于阅读的形式,列出文件大小,如K,M,G用于表示内存的单位,,可以使用more命令查看,查看过程中,空格翻页,q退出。
2025-10-09 17:06:15
304
原创 Go垃圾回收机制
Go语言采用并发三色标记-清除算法实现垃圾回收,通过混合写屏障减少STW时间,平衡吞吐量和延迟。其GC机制经历了多次优化,STW时间从秒级降至微秒级。文章详细解析了Go GC的工作原理、演变历程和触发条件,并提供了优化案例和调优建议,如使用sync.Pool减少分配、避免长生命周期引用等。通过合理控制堆分配和调整GOGC参数,可进一步提升程序性能。
2025-09-27 10:55:35
1015
原创 协程与管道
Go语言并发编程的核心机制包括goroutine和channel。goroutine是轻量级线程,拥有独立栈空间,通过GMP模型实现高效调度,适合处理高并发任务。channel是goroutine间的通信机制,分为无缓冲和有缓冲两种类型,支持生产者-消费者等工作模式。同步原语如Mutex、RWMutex和WaitGroup可解决资源竞争问题。这些机制共同构成了Go语言强大的并发处理能力,其特点是高效、易用且内存占用低,特别适合构建高并发分布式系统。
2025-09-13 11:48:23
407
原创 Go进阶复习之文件操作和协程
对于结构体的序列化,如果我们希望序列化后的 key 的名字,让我们自己重新制定,那么可以给 struct 定义的时候指定一个 tag 标签, 比如说我后面在 web 端希望他是小写的字段,如果我在结构体定义时直接定义为小写,那么下面进行序列化的时候需要跨包使用 encoding/json 包下的 json.Marshal () 函数就不可以访问了。:包含 : 1) 全局变量加锁同步 2) channel (这里的通讯指的是,同时往一个map中写内容时,用一个信号告诉其他的协程这个已被占用)
2025-09-06 11:18:07
922
原创 Go基础语法学习
动态数组,长度可变,声明: s := []int{1, 2, 3} 或 s := make([]int, 2, 5) (长度2,容量5)- 键值对集合,声明: m := map[string]int{"id": 1} 或 m := make(map[string]int)- 短声明(函数内): name := "Go" (等价于 var name string = "Go" )- 必须显式转换,格式: 目标类型(变量) ,例: int(3.14) // 结果为 3。
2025-08-18 19:57:00
366
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅