自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

会当凌绝顶,一览众山小

主要文章专栏:《C语言》《数据结构与算法》《C++知识分享》《Linux 入门到实践:零基础也能懂》《测试开发实战指南》《算法题闯关指南》--从优选到贪心

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

原创 【Linux网络加餐】深入拆解HTTPS:从密码学基础到协议工作原理全流程

在日常上网的过程中,我们早已习惯了浏览器地址栏前的小锁图标,它代表着当前网站使用了 HTTPS 协议,通信过程是安全的。但如果回到纯 HTTP 时代,所有数据都是明文在网络链路中 “裸奔”—— 你点击一个下载链接,数据经过运营商的路由器、交换机,运营商可以轻松解析出内容,甚至偷偷把你要下载的软件替换成另一个,这就是臭名昭著的 “运营商劫持”。本文顺着 “发现问题→提出方案→暴露缺陷→优化升级” 的思路,一步步拆解 HTTPS 的底层原理。

2026-08-16 17:08:56 23923 45

原创 【Linux网络】从0手写Reactor反应堆(三):代码收尾、连接生命周期管理与多Reactor扩展思路

上一篇我们把Reactor的核心逻辑彻底填实了:ET模式下的非阻塞循环读写、应用层缓冲区解决TCP粘包、IO层/协议层/业务层三层解耦,整个请求从接收、解析到响应的链路已经完整跑通。但框架还剩几块收尾工作没有落地:写事件的动态开关只有调用接口没有底层实现、客户端断开或出错时连接没有真正从反应堆移除、文件描述符资源也没有正确释放。本篇我们先把这些代码细节补完,让单Reactor里的每一条连接,从被accept创建、到数据收发、再到异常/正常断开,形成完整的生命周期闭环;随后汇总所有核心文件的完整代码,方便整体

2026-08-12 13:46:16 4743 53

原创 【Linux网络】Socket 编程筑基:从底层本质到核心 API,一文吃透 Socket 预备知识

做 Linux C/C++ 后端开发的同学,几乎每天都在和 Socket 打交道:写 TCP 服务端、调 HTTP 接口、实现跨主机通信,很多人能熟练调用socket、bind、listen这些 API,但面试被问到这些核心问题时,却常常卡壳:为什么有了能唯一标识主机的 IP 地址,还需要端口号?直接用 PID 标识进程不行吗?常说的 Socket 到底是什么?为什么行业内公认「IP+Port=Socket」?网络字节序为什么强制规定为大端?不做字节序转换会有什么问题?Socket API 为什么要设计通用

2026-05-06 10:55:15 2677 46

原创 Ext 系列文件系统进阶:inode 映射、路径解析、挂载与软硬链接全解析

在上一篇博客中,我们掌握了 Ext 文件系统的核心框架 —— 块组结构,包括超级块、inode 表、数据块等基础组件。但文件系统的完整工作流程还涉及三个关键问题:inode 如何关联文件数据块?系统如何通过路径找到目标文件?多个分区如何协同工作?以及 Linux 中灵活的软硬链接本质是什么?本文深入剖析 inode 与数据块的映射机制、路径解析原理、分区挂载逻辑以及软硬链接的底层差异,帮你彻底打通 Ext 文件系统的全链路工作流程。

2026-02-27 11:24:05 2154 54

原创 Ext 系列文件系统核心:块、分区、inode 与块组结构详解

在上一篇博客中,我们搞懂了磁盘的物理结构、逻辑抽象和寻址方式(CHS/LBA),知道了磁盘的最小存储单位是扇区。但扇区仅 512 字节,直接操作效率极低,且杂乱无章的扇区无法高效管理文件。这就需要 “文件系统” 登场 —— 它就像磁盘的 “管理员”,通过划分块、分区、inode 等结构,将零散的扇区组织成有序的存储体系,让文件的创建、读取、修改、删除变得高效可控。本文从 “块”“分区”“inode” 等基础概念入手,深入剖析 Ext2/3/4 文件系统的核心设计 —— 块组结构,帮你彻底搞懂文件系统是如何管

2026-02-22 10:11:46 3770 66

原创 Linux 磁盘基础:从物理结构到 CHS/LBA 寻址,吃透数据存储底层逻辑

磁盘是 Linux 系统中唯一的机械设备,也是数据持久化存储的核心载体。想要理解文件系统、分区、格式化等上层概念,必须先搞懂磁盘的物理结构,逻辑结构和寻址方式 —— 这是掌握 Linux 存储原理的基础。本文从磁盘硬件结构入手,逐步拆解磁道、柱面、扇区等关键概念,最终讲透 CHS 和 LBA 两种寻址方式的原理与转换逻辑,帮你打通从硬件到系统的存储认知链路。

2026-02-15 10:21:50 3615 58

原创 Linux 程序地址空间深度解析:虚拟地址背后的真相

在 C/C++ 开发中,我们经常会打印变量或函数的地址,但你有没有想过:这些地址真的是物理内存地址吗?为什么父子进程中同一个变量的地址相同,内容却能各自独立?其实,我们看到的所有地址都是虚拟地址,而 Linux 的 “程序地址空间”(准确说是进程地址空间)正是这一切的核心。本文从地址空间布局、虚拟地址与物理地址的映射、内核数据结构三个维度,拆解 Linux 程序地址空间的底层逻辑,帮你搞懂 “为什么虚拟地址能隔离进程”“为什么 malloc 不是真的分配物理内存” 等关键问题。

2026-01-20 16:06:14 3707 112

原创 Linux 2.6 内核 O(1) 调度队列深度解析:为什么它能实现常数时间调度?

在 Linux 2.6 内核之前,进程调度采用的是 O (n) 算法 —— 调度器需要遍历所有就绪进程才能找到优先级最高的那个,进程数量越多,调度效率越低,严重影响多任务场景的性能。而 2.6 内核引入的 O (1) 调度算法,彻底解决了这一痛点,其核心就是设计了高效的调度队列结构,让调度器无论面对多少进程,都能在常数时间内找到最优进程,大幅提升了系统吞吐量。本文从调度队列的核心数据结构、工作流程、优先级管理三个维度,拆解 O (1) 调度队列的设计精髓,帮你理解 “常数时间调度” 的底层逻辑,看透 Lin

2026-01-12 08:09:54 2068 67

原创 Qt 进阶核心:UI 开发 + 项目解析 + 内存管理实战(从 Hello World 到对象树)

Qt 入门后,核心进阶点集中在 “UI 开发实战、项目文件解析、内存管理机制” 三大模块。从 Hello World 程序的两种实现方式,到项目文件的底层逻辑,再到 Qt 独有的对象树内存管理,这些知识点直接决定开发效率和程序稳定性。本文聚焦 Qt UI 开发(纯代码 + 可视化)、项目文件深度解析、对象树机制、坐标体系四大核心,搭配实战代码和避坑指南,帮你从 “会用 Qt” 升级到 “活用 Qt”。

2026-01-06 08:39:31 2932 73

原创 Git 本地操作入门:版本控制基础、跨平台部署与仓库核心流程

在软件开发的日常中,“版本混乱”“修改无法追溯”“协作冲突” 是绕不开的痛点。`Git` 作为**分布式版本控制**的标杆工具,其本地操作是解决这些问题的第一步。它能让你清晰记录代码的每一次改动,像 “时光机” 一样回溯历史版本。本文将从版本控制的必要性讲起,带你完成 Git 的跨平台安装,理解工作区、暂存区、版本库的协同逻辑,并掌握文件添加、提交、历史查看等核心操作,为你筑牢 Git 使用的 “第一块基石”。

2025-11-14 07:55:34 2153 62

原创 C++ 多态详解:从概念本质、语法规则到底层实现,结合实战代码的全方位指南

多态是 C++ 面向对象 **`三大特性(封装、继承、多态)`** 的核心,它让 “同一行为作用于不同对象产生不同结果” 成为可能。本文将从多态的基础概念切入,逐步拆解多态的构成条件、虚函数重写规则及关键细节,帮你彻底掌握运行时多态的实现逻辑。

2025-11-10 10:01:30 1813 124

原创 C++ 继承特殊场景解析:友元、静态成员与菱形继承的底层逻辑

C++ 继承的核心价值在于实现类级别的代码复用,但友元、静态成员、菱形继承这些特殊场景,恰恰是理解继承机制 “深度” 的关键。从友元关系的 “不可继承性”,到静态成员的 “全局共享特性”,再到菱形继承中虚继承对数据冗余与二义性的解决,每一个场景背后都映射着 C++ 对 “封装”“复用” 与 “安全性” 的平衡设计。

2025-11-06 08:09:42 1916 132

原创 Linux 新手避坑指南:7 个高频指令精讲 + 重定向从入门到精通(含完整选项 + 设备文件实操)

本文基于 “一切皆文件” 核心思想,结合 /dev 设备文件实操案例,详细拆解 which、alias、man、echo、cp、mv 6 个指令及重定向用法,附带完整选项说明和场景化案例,帮你从 “会用” 到 “精通”。

2025-10-15 07:34:52 11520 166

原创 《吃透 C++ 类和对象(下):从初始化列表到编译器优化,7 大核心考点让你彻底告别面试卡壳!》

本文深入讲解了C++类和对象的核心概念,包括初始化列表、类型转换、static成员、友元关系和匿名对象等特性。重点分析了初始化列表的使用规则(必须初始化引用、const成员等)、类型转换的隐式规则(explicit禁止隐式转换)、static成员的共享特性(类外初始化)、友元关系的单向性等特点。通过多个代码示例阐释了这些特性的具体应用场景,并介绍了编译器对对象拷贝的优化机制。文章还包含内部类的封装优势、匿名对象的临时生命周期等进阶内容,为深入理解C++面向对象编程提供了全面指导。

2025-09-16 07:11:20 2218 117

原创 《解锁 C++ 基础密码:输入输出、缺省参数,函数重载与引用的精髓》

本文介绍了C++基础知识的四个核心要点:1. 输入输出流(iostream库)的使用方法及效率优化;2. 缺省参数的定义规则和实际应用示例;3. 函数重载的三种实现方式及注意事项;4. 引用的概念、特性及其在参数传递和返回值中的应用。通过代码示例展示了这些特性在数据结构(如顺序表、链表)中的实际应用,并比较了引用与指针的异同。还指出引用底层实现与指针类似,但语法表达层面存在差异,为后续C++学习奠定了基础。

2025-08-10 10:16:49 13138 254

原创 【数据结构初阶】--快速排序进阶

本文介绍了快速排序的三种优化方法:1)三数取中和随机数选择基准法,通过优化基准选择提升划分平衡性;2)三路划分法,有效处理大量重复元素的情况;3)自省排序,结合快排、堆排和插入排序优势,通过监控递归深度自动切换排序策略。文章详细阐述了每种方法的原理、实现代码和适用场景,并提供了在力扣排序数组题目中的实际应用验证。这些优化能显著提升快速排序在特殊数据情况下的性能表现。

2025-08-08 08:35:19 1876 52

原创 【进阶】--函数栈帧的创建和销毁详解

函数调用堆栈是可以反馈函数调用逻辑的,我们可以清晰的观察到,是由invoke_main函数来调用main函数的 ,在此之间的我们就不过多的去考虑了,我们接下来直接从main函数的栈帧创建开始。--当函数每次被调用时,系统都会在栈上为该函数分配一块栈帧空间。--在C语言中,函数栈帧是指在函数调用过程中,在内存栈中为该函数分配的一块空间,用于存储函数的局部变量,参数,返回地址等信息。当我们理解函数栈帧的创建和销毁后,我们就可以更好的去解决这些问题,如同修练自己的内功,也方便在后期能搞懂更多的知识。

2025-05-01 23:58:41 1644 5

原创 C语言常见概念及数据类型和变量的一些重要知识点

1.大写字母A~Z的Ascll码值是65·90 2.小写字母a~z的Ascll码值是97~1203.大写字母和小写字母Ascll码值的差值为32 4.数字0~9的Ascll码值是48~575.\n的Ascll码值是10 6.在这些字符中的Ascll码值从0~31这32个字符不可打印在屏幕上观察二. \0 字符及\ddd \xdd这两个转义字符。

2025-04-03 23:17:46 1897 8

原创 【C++ 基于微服务的即时通讯系统】第三方服务集成与工程化构建:短信验证码、语音识别与CMake实战

做一套完整的即时通讯系统,光有网络通信和业务逻辑还不够,很多能力直接自研成本太高、周期太长,接入成熟的第三方云服务是更高效的选择。比如手机号注册登录需要短信验证码,语音消息需要语音转文字,这些都可以直接对接大厂的开放平台。与此同时,随着项目模块越来越多,手写 Makefile 维护成本会急剧上升,引入 CMake 做跨平台构建管理是工程化的必经之路。本文就顺着项目落地的顺序,依次拆解三个基建组件:阿里云短信验证码服务的接入与封装、百度语音识别服务的接入与封装,以及 CMake 构建系统的基础用法和实战案例。

2026-10-31 08:23:25 8491 7

原创 【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战

到这里,网关层的两个核心网络组件就都跑通了。HTTP 负责处理所有的短连接业务请求,WebSocket 负责维护客户端长连接、做消息主动推送,这就是整个即时通讯系统和客户端交互的入口。接下来我们会基于这两个组件,实现完整的网关服务:协议解析、鉴权、服务转发、消息推送,把前面讲的 etcd、brpc 都串起来,形成完整的微服务调用链路。后续也会继续分享更多 C++ IM 微服务的实战内容,欢迎关注交流。

2026-10-31 08:23:13 7726 48

原创 【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战

到这里,etcd + brpc 的完整微服务通信底座就跑通了。这也是我们整个即时通讯系统的核心基础设施,后面的用户管理、好友管理、消息转发等所有子服务,都可以基于这套模式开发,服务之间完全解耦,动态扩缩容也非常方便。接下来我们会基于这套底座,继续拆分各个业务子服务,一步步把整个聊天系统落地。后续也会分享更多 C++ 微服务、高性能后端的实战内容,欢迎关注交流。

2026-10-18 07:53:10 4006 52

原创 【C++ 基于微服务的即时通讯系统】Elasticsearch 从安装到 C++ 客户端二次封装全落地

到这里,Elasticsearch 从服务端安装到 C++ 客户端二次封装的完整链路就跑通了。在我们的即时通讯系统里,用户搜索、全局消息搜索这两个核心场景,都是基于这套封装实现的,性能和准确性都能满足业务需求。ES 本身的玩法还有很多,比如分页、高亮、聚合分析,后续做消息的多维度统计的时候还会深入。接下来我们会继续把 ES 集成到微服务的各个业务子服务里,完整落地用户搜索和消息搜索功能。后续也会分享更多 C++ 后端、微服务架构的实战内容,欢迎关注交流。

2026-10-18 07:52:45 3522 44

原创 【C++ 基于微服务的即时通讯系统】基建三件套:gflags + gtest + spdlog 源码编译安装与实战入门

做 C++ 高性能后端开发这么多年,我见过太多新人一头扎进业务逻辑里,却忽略了最基础的工程化工具。命令行参数靠手搓、打日志全用 printf、单元测试全靠肉眼跑,不仅开发效率低,出了问题排查起来更是灾难。尤其是做 Redis 二次开发、微服务组件这类底层项目,gflags、gtest、spdlog 这三个基本是行业标配:gflags 搞定灵活的命令行参数管理,gtest 守住单元测试的质量关,spdlog 提供高性能的日志输出。今天就带大家从源码编译开始,从零到一搞定这三个工具的安装和基础使用,路上踩过的坑

2026-10-11 16:15:04 9417 44

原创 【C++ 基于微服务的即时通讯系统】手把手拆解即时聊天后台系统的设计与落地

做过后台开发的朋友都知道,IM 聊天系统看似简单,实则坑点密集:高并发下的消息推送、海量消息的存储查询、好友关系链的管理、群聊场景的复杂度,每一项都能把传统单体架构压得喘不过气。最近带着团队从零落地了一套 C++ 技术栈的聊天后台服务器,全程采用微服务架构拆分业务,既保证了高性能,又具备灵活的横向扩展能力。本文就顺着项目从 0 到 1 的完整路径,从开发流程、功能全景、架构思想到服务拆分,逐层拆解这套设计方案,同时结合我擅长的 Redis 技术,讲讲缓存、注册中心这些组件在其中的落地思路。

2026-10-11 16:14:50 7353 45

原创 【Redis 进阶】分布式锁深度演进:从 SETNX 到 Redlock,一步步写对工业级分布式锁

在分布式系统开发中,并发资源控制是绕不开的核心问题。单机时代,我们用 C++ 的 std::mutex、Java 的 synchronized 就能搞定进程内的线程安全;但当业务部署到多个服务器节点上,每个节点都是独立进程,共享同一份业务资源时,进程内锁就完全失效了。超卖、重复创建、资源竞争,各类并发问题随之而来。Redis 凭借单线程原子性、高性能、接入简单的特点,成了实现分布式锁最主流的方案。但很多开发者实现分布式锁,往往停留在「setnx 加锁、del 解锁」的最简版本,线上要么出现死锁、要么误解锁、

2026-09-25 19:05:48 2091 43

原创 【Redis 进阶】缓存实战:从更新策略到三大经典问题全解析

在后端开发的技术栈里,Redis 最核心的应用场景从来不是纯内存数据库,而是缓存。 我们都知道 MySQL 这类关系型数据库扛不住高并发,于是在前面加一层 Redis 做缓冲,把绝大多数读请求挡在数据库之外,是业界最通用的性能优化手段。但很多开发者用缓存,只停留在「查之前先查 Redis,查到就返回,查不到就查库再写回」的简单逻辑。对缓存怎么更新、满了怎么淘汰、常见的穿透 / 雪崩 / 击穿问题一知半解,线上一出问题就是数据库打挂、服务雪崩。本文就从缓存的基本原理讲起,系统梳理缓存的更新策略、Redis 内

2026-09-25 19:00:16 2074 45

原创 【Redis 进阶】Cluster 深度解析:从哈希槽分片原理到集群运维实战

前面聊完哨兵机制,我们解决了主节点的自动故障转移,实现了主从架构的高可用。但哨兵模式有个本质的天花板:每个节点都要存储全量数据,数据总量始终受限于单台机器的内存上限。当业务数据量突破单节点内存的时候,就需要真正的分布式集群方案了。Redis Cluster(Redis 集群)就是官方给出的分布式解决方案,核心思路是数据分片:把全量数据拆成多份,分散到不同的节点上,每个节点只负责一部分数据,从而实现存储容量的水平扩展。同时每个分片自带主从复制,也保证了高可用。很多开发者用集群只会搭环境、发命令,对底层的分片算

2026-09-20 20:37:24 3932 16

原创 【Redis 进阶】哨兵深度解析:从故障自动转移到分布式共识原理

前面讲主从复制的时候提到过,主从模式能解决读性能扩展和数据多副本,但有一个致命短板:主节点是单点故障。一旦主节点宕机,写服务就完全中断,必须人工介入:选新主、切从节点、改客户端配置,整个过程耗时久、易出错,对于要求 7×24 高可用的业务来说完全不可接受。Redis 从 2.8 版本开始正式提供了 Sentinel(哨兵)机制,专门用来解决主节点的自动故障转移问题。它通过一组独立的哨兵进程持续监控数据节点,主节点故障时自动完成选举与切换,全程无需人工干预,是 Redis 高可用体系的核心组成部分。本文从手动

2026-09-20 20:28:02 3886 42

原创 【Redis 进阶】主从复制深度解析:从配置落地到 PSYNC 同步原理

单机 Redis 虽然性能强劲,但天然存在两个无法回避的短板:一是单点故障,机器宕机则服务完全中断;二是性能上限,单节点能承载的读并发终究有瓶颈。主从复制就是解决这两个问题的基础方案:通过数据多副本实现读写分离,同时为后续的故障转移打下基础。很多开发者配置主从只会在配置文件加一行 slaveof,遇到主从不一致、频繁全量同步、复制延迟等问题时就无从下手。实际上主从复制背后有一套完整的机制:从初次全量同步到网络闪断后的部分续传,从积压缓冲区到心跳保活,每一环都有明确的设计逻辑。本文从基础概念与配置落地讲起,逐

2026-09-15 14:02:24 6265 28

原创 【Redis 进阶】事务深度解析:弱事务模型、WATCH 乐观锁与适用边界

接触过关系型数据库的开发者,对 ACID 事务都不陌生。很多人初学 Redis 事务时,会下意识拿 MySQL 的标准去对标,结果越学越困惑:它既没有回滚机制,也没有隔离级别,甚至业内对 “它到底算不算事务” 都有争议。事实上 Redis 事务走的是完全不同的轻量化路线,它的核心目标不是实现强一致性,而是把一组命令打包串行执行,避免中间被其他客户端的命令插队。纠结 “有没有原子性” 没有太大意义,理解它的设计取舍、执行流程和能力边界,才能在实际业务中用对、用好。本文从 ACID 四大特性的对比切入,完整拆解

2026-09-15 14:02:17 5875 42

原创 【Redis 进阶】持久化深度解析:RDB、AOF 与混合持久化的原理与工程实践

作为内存数据库,Redis 最大的优势就是读写速度极快,但所有内存存储都绕不开同一个核心问题:一旦进程退出或服务器断电,内存中的数据就会全部丢失。对于生产环境而言,这显然是不可接受的。为了解决这个问题,Redis 提供了两套经典持久化机制:RDB 快照与 AOF 追加日志,以及后续演化出的混合持久化方案。很多开发者对持久化的认知停留在「改配置开启」的层面,对 bgsave 的执行流程、写时拷贝的底层原理、AOF 重写的细节、不同刷盘策略的取舍一知半解,遇到持久化引发的性能抖动、数据丢失、启动失败等问题就无从

2026-09-11 08:43:00 6870 44

原创 【Redis 初阶】C++ 客户端实战:从 RESP 协议到 redis-plus-plus 工程化用法

前面我们一直在 redis-cli 中通过命令行理解 Redis 的数据类型与底层原理,但真实业务开发最终都要落到代码层面。很多 C++ 开发者使用 Redis 客户端时只会机械调用 API,遇到网络异常、返回值异常、编译报错就无从下手,本质上是对通信协议、库的设计逻辑缺乏认知。本文顺着「底层协议 → 环境搭建 → 接口设计 → 全类型实战」的完整脉络,先拆解 RESP 序列化协议的核心设计,再系统讲解 redis-plus-plus 这个主流 C++ 客户端的安装、接口范式与五大类型常用操作,配合源码设计

2026-09-11 08:42:52 6698 26

原创 【Redis 初阶】特殊数据类型、渐进式遍历与数据库操作生产指南

前面我们把五大核心数据类型(String、Hash、List、Set、ZSet)从命令用法到底层编码全部拆解完了,这五类覆盖了绝大多数通用业务场景。但 Redis 的能力远不止于此,它还提供了多款面向特定场景的特殊数据类型,能在海量去重、地理查询、事件流等场景下做到极致的空间效率或功能适配。与此同时,生产环境里很多人都知道 keys * 是高危操作,但对替代方案 scan 渐进式遍历的正确用法、底层原理和踩坑点却一知半解;Redis 的数据库概念也经常和关系型数据库混淆。本文就一次性补齐这三块内容:五类特殊

2026-09-03 14:08:58 3944 50

原创 【Redis 初阶】ZSet 类型深度解析:跳表支撑的有序集合与排行榜实战

前面我们讲完了 Set 集合,它的核心能力是去重,但无法处理需要排序的场景。今天我们来看 Redis 最具特色的数据结构 ——ZSet(有序集合)。它在 Set 元素唯一的基础上,为每个元素关联了一个分数 score,实现了按分数自动排序,既能高效单点查询,又能灵活做范围排行,是面试中跳表、排行榜场景的高频考点。很多人用 ZSet 只会写排行榜 Demo,却对 zadd 的众多选项、分数区间的开闭规则、底层跳表的设计逻辑一知半解。本文从基础特性讲起,逐个拆解核心命令与踩坑细节,深入 ziplist 与跳表的

2026-09-03 14:08:53 3806 59

原创 【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景

前面我们依次拆解了 String、Hash、List 三种核心类型,今天我们来看 Set 集合类型。很多开发者对 Set 的印象只停留在 “自动去重”,但它真正的核心价值是原生支持集合交、并、差运算,在标签系统、好友关系、UV 统计这类场景里,比客户端自己写循环去重要高效得多。本文从基础特性讲起,逐个拆解 Set 的核心命令与生产踩坑点,深入 intset 和 hashtable 两种底层编码的设计逻辑,再结合三个经典业务场景讲透实战用法,带你从 “会用命令” 理解到 “为什么这么设计”。

2026-08-31 08:37:29 27567 32

原创 【Redis 初阶】List 类型深度解析:双端队列的设计智慧与实战应用

前面我们依次拆解了 String 和 Hash 两种核心类型,今天我们来看 Redis 里最灵活的数据结构 ——List。很多人对 List 的印象停留在 “可以当数组用”,但它既能做栈、又能做队列,还能实现阻塞消息队列,底层更是从 ziplist + 链表演进到了 quicklist,藏着非常多时空权衡的设计智慧。本文顺着基础特性→核心命令→底层编码→业务场景的完整脉络,逐个拆解 List 的常用命令与踩坑点,深入 quicklist 的实现原理,再结合四个经典业务场景讲透实战用法,带你从 “会用命令”

2026-08-31 08:37:23 27751 34

原创 【Redis 初阶】Hash 类型深度解析:结构化数据存储的最优解

上一篇我们把 String 类型从命令到底层编码再到业务场景彻底讲透了,很多业务用 string + JSON 序列化就能完成缓存。但如果你的数据是结构化对象,比如用户信息、商品详情,经常需要读写单个字段,每次都全量读取、反序列化、修改、再写回,既笨重又浪费性能。这时候 Hash 类型就是更贴合场景的选择。很多初学者对 Hash 的认知停留在 “值里还能嵌套键值对”,但对命令的生产风险、底层编码的切换逻辑、和其他存储方案的优劣对比一知半解。本文从基础概念讲起,逐个拆解 Hash 核心命令的用法与踩坑点,深入

2026-08-23 11:01:34 5564 16

原创 【Redis 初阶】String 类型全解析:命令实战、底层编码与四大经典业务场景

很多人学 Redis,第一个接触的就是 string 类型,觉得不就是存个字符串嘛,太简单了。但实际上,string 是 Redis 最基础也最通用的类型,从缓存、计数到分布式锁,几乎所有业务场景都有它的身影。不少人只会敲 set/get,却不知道 set 的 NX/XX 参数藏着原子性的关键设计,不知道 incr 天然解决并发计数问题,更不知道底层还有三种编码方式在默默做空间优化。本文从 string 的基础特性讲起,逐个拆解 10+ 核心命令的用法、踩坑点与时间复杂度,深入底层三种编码的实现逻辑,再结合

2026-08-23 11:01:14 5251 14

原创 【Redis 初阶】数据结构与单线程模型深度解析:对外接口与底层编码的双重智慧

上一篇我们梳理了 Redis 的通用命令与过期机制,打下了基础操作的底子。而 Redis 之所以能碾压同类内存数据库,核心竞争力有两个:一是丰富且高效的数据结构,二是经典的单线程事件驱动模型。很多人学 Redis 停留在 “会用 set/get、知道有五种数据类型” 的层面,但对底层编码优化、单线程为什么快这些核心原理一知半解,一到面试深挖就卡壳。本文我们从「对外数据类型」与「底层编码实现」的分离设计讲起,逐个拆解五大基础类型的底层实现思路,再深入 Redis 最经典的单线程模型,从工作过程到性能本质,结合

2026-08-21 13:54:40 23824 42

原创 【Linux网络加餐】手动部署:SSH 与 Web 服务实战 + 底层原理全解析

相信很多做开发的朋友都有过这种经历:本地写了个 Web 项目想给朋友演示,或者需要远程连接家里实验室的 Linux 机器,却因为没有公网 IP 一筹莫展。内网穿透就是解决这个问题的核心技术,而 frp 凭借轻量、高性能、配置灵活的优势,成为了绝大多数人的选择。网上一键部署的教程很多,但大多是 “复制粘贴完事”,很少讲清楚背后的原理,出了问题也无从排查。今天我们就从零开始,手动完成 frp 的服务端与客户端部署,实现 SSH 远程登录和 Nginx Web 服务穿透两个经典场景,再从网络编程的角度拆解它的实现

2026-08-21 13:54:18 20907 67

空空如也

空空如也

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

TA关注的人

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