- 博客(55)
- 收藏
- 关注
原创 [C++] std::string:接口、算法技巧与权衡 (速查)
string 的扩容倍率不是标准规定的,MSVC 与 libstdc++ 不同,且随版本变化。可靠的做法是实测——打印capacity()string s;i < 200;++i) {开新空间 → 拷贝旧数据 → 释放旧空间 → 更新指针容量。所以reserve的价值不在"省几次扩容",而在消掉这条链上的拷贝和迭代器失效。
2026-10-24 23:52:48
297
原创 [C++] std::list:接口、算法技巧与权衡(速查)
带头哨兵的双向循环链表。每个元素独立new一个节点,节点里存。(哨兵本身不存数据)。空表时。:插删只改指针 → O(1) 且不搬家;没有连续存储 → 没有下标、没有 capacity。下面的每一条技巧与取舍,都能回到这一行。
2026-10-16 17:02:05
345
原创 [C++] std::vector:接口、算法技巧与权衡(速查)
堆上连续数组,三个指针描述 ——_start(首)、_finish(尾后)、(容量尾后)。下面的每个接口成本、每个技巧、每个取舍,都能回溯到这两行。
2026-10-16 16:34:36
836
原创 MySQL 库操作详解:建库、字符集与备份恢复
本文深入解析数据库操作的本质:库即目录,创建与删除对应文件系统的增删。核心在于理解字符集(CharacterSet)与校验集(Collation)——前者决定数据存储编码,后者决定字符串比较规则。通过对比utf8_general_ci(不区分大小写)与utf8_bin(区分大小写)的查询差异,揭示校验规则对结果的关键影响。建库时指定编码可统一后续表的默认设置,避免后期混乱。强调必须通过SQL而非直接操作文件系统管理库,且备份恢复应使用mysqldump而非拷贝目录。
2026-10-13 08:37:25
116
原创 MySQL 表的操作:建表、改表、删表,一次讲透
本文系统讲解MySQL表操作,涵盖建表语法、存储引擎差异(MyISAM与InnoDB落盘文件数量不同)、查看表结构(desc、show create table)、修改表结构(add/modfy/drop/rename/change)及删除表。重点揭示modify为覆盖式修改,易丢失comment等属性;强调表结构变更需谨慎,建议需求阶段定型。所有表结构操作属DDL语言,需注意语法规范与备份。
2026-10-13 08:36:53
305
原创 MySQL 表的约束:让数据库替你“ 守住底线 “
本文详解MySQL表约束机制,强调通过建表时定义约束(如NOT NULL、DEFAULT、PRIMARY KEY、UNIQUE、FOREIGN KEY等),用技术手段强制数据合法性,实现数据完整性与可预期性。约束是“声明式”的,由MySQL自动校验,无需代码干预。重点包括:主键唯一非空、自增列需挂键、外键保障表间关联、默认值仅在省略时生效、NULL不等于空且不可比较。最后提醒:约束防重复录入,但无法杜绝录入错误,需结合业务逻辑与人工校验。
2026-10-12 14:39:22
385
原创 MySQL 索引全解(下):建、查、删实战与知识速查表
本文为《MySQL索引全解》下篇,系统讲解索引的创建、查看与删除,涵盖主键、唯一、普通、复合及全文索引五类类型,强调“约束即索引”的核心认知。结合原理剖析,明确索引创建原则:高频查询、高区分度、低更新频率的列才宜建索引,避免在性别、频繁更新字段上滥用。重点提醒删除索引需用drop index而非drop unique,且复合索引删除应以索引名为准。通过show index与explain工具深入分析执行计划,最终回归本质——索引是为减少IO次数而生,其设计皆源于现实约束,理解原理方能用对用好。
2026-10-12 09:54:00
717
原创 MySQL 索引全解(中):亲手推导 B+ 树——从一页数据到索引的两种活法
本文从磁盘页结构出发,推导B+树索引的诞生过程:为解决单页内线性查找低效问题,引入页目录;面对多页遍历带来的高IO,进一步构建页目录层级,最终形成多层B+树。通过对比链表、二叉树、哈希、B树等结构,揭示B+树在减少IO次数、支持范围查询上的优势。最后解析聚簇索引与非聚簇索引的本质差异,阐明回表、覆盖索引、最左匹配等核心概念,完整构建索引高效运行的逻辑闭环。
2026-10-12 09:11:44
272
1
原创 MySQL 索引全解(上):一次查询为什么慢——从磁盘硬件到 16KB 页
本文从一次5.43秒的慢查询切入,层层深入磁盘硬件、操作系统4KB数据块、MySQL 16KB页结构,揭示“慢在IO次数多”这一核心问题。通过剖析数据存储与读取机制,引出索引的本质是减少磁盘访问。最终导向对B+树的推导:它并非凭空设计,而是为应对机械硬盘寻道开销、提升连续读取效率,在局部性原理与层级结构中“逼”出来的最优解。
2026-10-11 21:59:48
347
1
原创 MySQL 事务与 MVCC:把“隔离“这条主线,从 ACID 一路串到 ReadView
本文系统解析MySQL事务机制,从并发场景下的数据一致性需求出发,阐明事务的必要性。以ACID为核心,详解原子性、隔离性、持久性与一致性的内在逻辑,强调一致性是前三个特性的自然结果。通过实验对比四种隔离级别(读未提交、读已提交、可重复读、串行化),揭示其对脏读、不可重复读、幻读的控制差异。重点剖析MVCC多版本并发控制原理,结合隐藏列、undolog、版本链与ReadView机制,解释快照读如何实现无锁并发。最后……
2026-10-09 19:17:40
321
原创 [Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
本文从TCP套接字编程的内核视角出发,系统解析了从字节流到应用层协议的完整链条。核心围绕“如何在无边界字节流中传递有含义的消息”展开:首先揭示内核仅提供字节流的本质,引出粘包/半包问题;继而通过“长度+内容”的定界方案解决消息边界问题;再以序列化与反序列化为手段,实现跨平台、跨语言的数据交换;最终构建分层架构,结合回调机制实现业务与网络解耦。文章强调,用户态的协议设计(如报文格式、缓冲区管理)与内核的实现(如sk_buff、UDP报头)遵循同一思想范式…………
2026-10-09 09:57:32
319
1
原创 [Linux]HTTP 应用层协议全解(下篇)
把两个方案放在一起:原文对方案一的定位说得很公道:地位:Cookie 方案已被淘汰,但它是当前技术的前身,必须了解。以及正确的术语:术语总结:当代 HTTP 用户在线管理采用的做法准确说叫 Session + Cookie 组合技术(会话管理/会话化管理);每次用户登录、获得 Session ID 的过程就叫做登录;此后拿着 Session ID 就能登录服务器。Session → 负责【在服务器端存数据】Cookie → 负责【在客户端存 Session ID】★ 缺一不可。
2026-10-04 20:15:15
614
1
原创 [Linux]HTTP 应用层协议全解(中篇)
本文为HTTP协议解析的中篇,聚焦“服务器如何响应请求”。从HttpRequest中的URI出发,详解路径转换(加wwwroot、处理/→index.html)、文件系统底层(VFS、dentry、inode)的读取机制,构建响应报文的四大结构(状态行、报头、空行、正文),并深入剖析状态码分类、Content-Type的作用、GET/POST参数传递差异,最终揭示HTTPS通过加密整包报文实现安全传输。全篇以“东西在哪”与“怎么答”为核心,完成从请求到响应的完整闭环。
2026-10-04 17:18:57
231
1
原创 [Linux]HTTP 应用层协议全解(上篇)
本文以“按下回车”为切入点,层层拆解网页请求背后的网络机制。从URL解析、DNS查询、TCP连接建立,到HTTP报文格式与反序列化,最终构建出HttpRequest结构体,完整呈现了从地址栏输入到服务器接收请求的全过程。文章分为三篇,分别聚焦“请求如何发出”“服务器如何响应”和“系统如何持续运行”,揭示了看似简单的网络行为背后复杂的协议设计与工程实现。
2026-09-29 22:27:45
352
1
原创 [Linux]线程三部曲(下):让线程排好队——同步、生产者消费者与线程池
本文为“线程三部曲”收官之作,聚焦线程协同机制。在厘清线程本质(共享内存)与封装工具(Thread/Mutex)的基础上,揭示同步的深层意义:从“正确”迈向“高效”。通过条件变量、生产者-消费者模型、阻塞队列与信号量等核心机制,构建起多线程有序协作的完整链条。最终整合为可落地的线程池,并以单例模式实现全局唯一,形成一台真正能上生产环境的并发引擎。全篇贯穿“互斥保对,同步求好”的思想,强调防御性编程与资源管理,完成从“一群线程”到“一支团队”的跃迁。
2026-09-22 08:41:44
422
原创 [Linux]线程三部曲(中):把线程装进盒子里——封装、传参,以及第一场共享事故
本文是“线程三部曲”中篇,聚焦工程实践:如何封装原生pthread为易用的C++类。通过设计Thread类,解决成员函数无法作线程入口(因隐藏this参数)、状态管理、传参等难题,核心技巧为“static入口+this回传”。随后揭示一个真实竞态——10000张票抢成负数,根源在于if(tickets > 0)判断与tickets--之间存在竞争窗口。剖析发现,判断也是运算,需原子保护。最终引入互斥锁(Mutex)与RAII机制(LockGuard),实现临界区自动加锁解锁等……
2026-09-22 08:39:24
207
原创 [Linux]线程三部曲(上):一个执行流的诞生——从操作系统一路拆到 pthread_create
本文深入剖析Linux线程实现的本质:并非引入新概念,而是通过clone系统调用复用进程的task_struct,仅共享地址空间(mm_struct)等资源,保留私有栈与上下文,实现“轻量级进程”(LWP)。线程的“轻”源于共享,代价是依赖进程存活——一损俱损。pthread_t实为线程控制块(TCB)的虚拟地址,非编号。全文从内核视角层层拆解,揭示线程本质是进程资源的共用执行流,为后续封装与并发问题奠定基础。
2026-09-21 23:04:45
332
原创 [Linux]TCP 套接字编程:从文件描述符抽象到并发服务模型的内核视角
本文深入剖析了从C语言socket()调用到网线上传输比特的全过程,揭示了用户态与内核态之间“一行代码,五层内核”的复杂旅程。文章以结构体(struct socket、struct sock)为核心,解析了文件描述符(fd)的编号机制、五个API在内核中的具体行为,并通过“张三接客、李四服务”的比喻阐明TCP服务器需两个套接字的原理。进一步探讨了字节流特性带来的粘包问题、并发模型演进(多进程→多线程→线程池),并结合实战案例实现简易SSH,强调安全设计(白名单)…………
2026-09-17 11:49:52
380
原创 [Linux]一条信息的旅程,网络协议栈与UDP详解
序章 全景:你敲下的一个字,要走多远一 通信的起点——两个陌生人凭什么对话 → 协议 = 结构体二 为什么必须分层——从"距离"说起 → 距离变长引入四个问题三 分层的标准答案——OSI 与 TCP/IP四 协议栈住在哪里——答案在内核里 → 封装/解包/分用五 同一间屋子里——以太网怎么把消息递出去六 走出这间屋子——IP 地址与路由器七 数据到了交给谁——端口号与进程间通信………………
2026-09-16 09:38:46
404
原创 从匿名管道到信号捕捉:一条故事线讲透 Linux 进程间通信与信号
进程独立性困境 → OS 提供公共资源 → 匿名管道 → 命名管道 → 进程池实战 → System V 三兄弟(共享内存/消息队列/信号量)→ 内核统一设计 → 信号:产生 → 保存 → 处理 → 进阶实战,共 16 章、14 个"层",
2026-09-04 22:01:31
368
原创 Linux 文件系统:磁盘结构、软硬链接、库文件与 ELF 格式
本文不按知识点罗列,而是沿着一条完整的故事线——磁盘 → 分区 → 文件系统 → inode → VFS 抽象层 → ELF 文件 → 加载进内存——一层一层往下拆,每一步都回答上一步提出的问题。(新引入承上启下部分使得阅读思维更连贯)(为保证知识完整性和思路连贯性导致字数偏长,望大家见谅)
2026-08-31 20:47:18
300
原创 Linux 缓冲区完全图解:手撕内核缓冲区,大口吃透
printf 不带 \n 为何看不到输出?fork 后为何打印两遍?_exit 为什么丢数据?答案都在缓冲区。本文系统讲解两层缓冲区:语言级缓冲区在 FILE 结构体里,内核级缓冲区在 struct file 里,read 和 write 本质都是拷贝。行缓冲与全缓冲的刷新规则、exit 与 _exit 的刷新差异、fork 复制缓冲区现象、fsync 强制落盘,逐一拆解。最后手写 myfopen 等四个函数复刻 stdio 封装,并详解 2>&1 错误重定向原理。
2026-08-17 16:05:02
349
原创 一篇文章彻底搞懂 Linux 文件描述符与重定向
文件由内容和属性组成,打开文件就是把文件从磁盘加载到内存。本文从这两个问题出发,系统讲解基础 IO 的完整知识链:fopen 六种模式与 fseek 读写位置、open 的 flags 位图传参、文件描述符的本质、0 1 2 三个标准流的由来、FILE 与 fd 的封装关系。在此基础上揭示重定向原理:更改 fd_array 下标中的指向,用 close 加 open 与 dup2 实现输入输出重定向,结合 exec 不动 fd 表的特性解释 Shell 重定向机制,最后引出一切皆文件的多态模型。
2026-08-17 00:26:05
183
原创 手写一个 Linux Shell:从死循环到内建命令,彻底搞懂 Shell 工作原理
Shell 的本质是一个死循环:打印提示符、读取输入、解析命令行、执行命令。本文从零开始,用 C/C++ 逐步构建一个能真正运行的 MiniShell——先搭好 main 函数骨架,然后依次实现环境变量加载(从父进程拷贝 environ 到 genv 表)、命令行提示符组装(用户名@主机名+当前路径)、fgets 获取输入与 strtok 快慢指针拆解字符串、内建命令(cd 执行 chdir+putenv 双操作、echo $? 读取全局 lastcode)与外部命令…………
2026-08-10 20:05:41
284
原创 Linux 进程控制完全指南:fork、wait、exec 三部曲
Linux 进程控制围绕三个核心操作展开:fork 创建子进程(拷贝 PCB 和页表,写入时触发写时拷贝保证独立性),wait/waitpid 等待回收(阻塞或 WNOHANG 非阻塞轮询,通过 status 位图的低 7 位取信号编号、高 8 位取退出码),exec 系列函数实现程序替换(不创建新进程,只覆盖代码和数据段)。
2026-08-10 17:04:33
191
原创 Linux 虚拟地址空间完全指南:从 fork 的“同一地址不同值“到 MMU 硬件原理
为什么 fork 之后父子进程打印 &g_val 是同一个地址,值却不一样?因为用户拿到的永远是虚拟地址,不是物理地址。每个进程都有自己的一套 mm_struct(虚拟地址空间)和页表,fork 时子进程以浅拷贝方式继承父进程的页表,父子共享同一块物理内存。直到任一进程尝试写入,OS 才触发写时拷贝——分配新物理页、修改页表映射,虚拟地址不变但物理地址隔离,既保证独立性又节省内存。本文从一次 fork 实验出发,串联 mm_struct 空间划分、页表四字段(地址/权限/存在位)、MMU 硬件拦截、懒加载与
2026-08-09 15:54:43
177
原创 Linux 环境变量完全指南:从入门到理解底层原理
这篇文章从零拆解Linux环境变量的完整知识体系:以"ls命令为何能直接执行"为切入点,讲解环境变量作为操作系统全局键值对的核心概念,重点解析了PATH等常用变量的作用与正确配置方式。同时梳理了环境变量相关操作命令,深入阐释子进程继承父进程内存环境变量表的底层机制,区分了本地变量与环境变量的差异,说明了通过配置文件实现永久生效的方法,最后结合多版本管理、敏感信息存储等开发场景给出实际应用思路,帮读者从只会照改配置到彻底理解背后原理。
2026-08-09 15:44:35
420
2
原创 Linux O(1) 调度器核心数据结构 prio_array 完全拆解 + 命令行参数原理
Linux 2.6 的 O(1) 调度器为什么叫 O(1)?答案藏在 prio_array 的三个成员里:queue[140] 用数组索引按优先级定位进程,bitmap[5] 配合一条 bsfl 汇编指令在一个 CPU 周期内找到最高非空队列,nr_active 用一次比较就判断是否触发 active/expired 交换。本文从内核源码出发,逐个拆解入队/出队/查找的 O(1) 实现细节,覆盖 btsl/btrl 原子位操作、active 与 expired 双数组如何解决优先级饥饿等
2026-08-09 15:33:38
395
原创 Linux 进程完全指南:从冯·诺依曼到 O(1) 调度,彻底搞懂进程管理
Linux 进程完全指南:从冯·诺依曼到 O(1) 调度,彻底搞懂进程管理
2026-08-09 14:16:32
336
原创 从零开始的 GDB 调试完全指南 —— 找到 Bug 比写出 Bug 更重要
本文是一篇约 9000 字的 GDB(GNU Debugger)完全指南,面向 Linux 下的 C/C++ 程序调试。文章首先强调了调试在开发流程中的核心地位——"找到 Bug 比写出代码更重要"。基础部分介绍了 Debug 与 Release 两种编译模式,指出 GDB 调试的硬性前提是用 -g 选项编译以嵌入调试信息,并简要解释了 ELF 文件格式的结构。随后系统讲解了 GDB 的命令体系:运行控制(run、next、step、continue、finish)、断点管理(条件断点 b 行号 if 条件
2026-08-07 13:13:24
385
原创 从零开始的 Vim 修炼手册 —— 让每个新手都能看懂的 Vim 完全指南
本文是一篇8000字的Vim编辑器全面指南,涵盖从基础操作到高级配置的核心知识。
2026-08-06 15:53:00
336
原创 Linux 权限管理:从「Permission Denied」到「畅行无阻」
Linux权限管理全解析:从基础到高级应用 本文系统讲解了Linux权限机制,主要内容包括: 权限本质:多用户环境下控制资源访问的安全机制 身份切换:su与sudo的区别及使用场景 文件权限三要素:用户/组/其他+读写执行权限 权限修改:chmod的符号法与八进制数字法 特殊权限:目录权限特性、粘滞位原理 默认权限:umask计算规则及设置方法 所有权管理:chown/chgrp命令使用 通过实际命令演示和逻辑串联,帮助读者建立完整的权限知识体系,解决日常工作中遇到的权限问题。文章特别强调目录与文件权限的差
2026-08-04 01:09:12
353
原创 Linux 基础指令入门:从零开始的系统操作指南
本文是一份全面的Linux命令行入门指南,从基础概念到实用命令,帮助读者快速掌握Linux操作。主要内容包括:Linux文件系统结构,路径概念,文件类型;常用目录操作命令(ls、cd、mkdir等);文件操作命令(touch、cat、head/tail等);通用命令(cp、mv、rm等);系统信息查询命令;压缩传输命令;文本搜索工具grep;重定向和管道操作;man手册使用;以及常见避坑指南。文章以实践为导向,每个命令都配有详细说明和实用示例,特别适合Linux初学者系统学习。
2026-08-03 18:25:58
229
原创 【C++】set和map的系统性学习:
本文系统讲解了C++ STL中的有序关联式容器(set/map/multiset/multimap)。这些容器底层采用红黑树实现,具有自动排序特性,时间复杂度为O(logN)。set/map要求元素唯一,multiset/multimap允许重复元素。map作为键值对容器,提供了[]运算符实现快速访问,但需注意查询时应使用find而非[]以避免意外插入。文章详细对比了各类容器的特性差异,包括API用法、迭代器类型和适用场景,并给出了使用建议……
2026-05-07 10:46:50
330
原创 【C++】二叉搜索树简要介绍:
二叉搜索树(BST)核心规则:左子树值 <当前节点,右子树值> 当前节点,支持 / 不支持冗余两种形式,可实现类二分查找效率。原生 BST 易退化为链表,故引入 AVL / 红黑树等平衡 BST,通过调整树高稳定性能。删除操作分四类场景,无 / 单孩子节点可直接删除,双孩子节点需用左树最大值或右树最小值替代。笔记还补充了二分查找原理、C++ default关键字用法,以及 BST 的实际应用场景等……
2026-05-06 18:15:32
48
1
原创 【C++】继承系统性学习
本文系统讲解C++继承机制核心概念与应用,明确仅public继承满足is-a赋值兼容规则。文章剖析派生类六大默认成员函数运行逻辑,阐明构造先初始化基类、析构后释放基类的执行顺序。针对多继承、菱形继承的成员冗余问题,介绍虚继承优化方案,通过共享顶层基类成员解决数据冗余与二义性问题。同时对比继承与组合的特性,指出继承耦合性高、破坏封装,而组合耦合性低、封装性更佳。此外,介绍私有构造、final关键字两种不可继承类的实现方式,归纳继承、组合、聚合、关联、依赖五种类间核心关系,梳理继承体系的设计要点与常见陷阱。
2026-05-04 17:09:26
390
原创 【C++】Stack与queue的系统性学习
本文系统讲解 C++ 中stack、queue、priority_queue三大容器适配器,剖析其底层实现、特性与用法。stack(LIFO)与queue(FIFO)默认以deque为底层,仅支持受限操作;priority_queue默认以vector构建堆,依赖仿函数维护优先级。文中对比了stack::top()与priority_queue::top()的差异,解析仿函数与函数指针的优劣,为数据结构应用与模拟实现提供了完整参考。
2026-04-29 20:31:24
352
原创 【C++】List类的系统性学习
本文系统介绍了C++ STL中的list数据结构。list底层采用链表实现,具有非连续内存、不支持随机访问但支持高效插入删除(O(1))等特点。文章详细讲解了list的构造方法(空构造、n元素构造、拷贝构造等)、元素访问(front/back)、容量管理(size/resize)、修改操作(push/pop/insert/erase)及专属方法(splice/remove/merge等)。重点分析了list迭代器的实现技巧,包括const与非const迭代器的模板合并、正向与反向迭代器的条件编译优化。
2026-04-26 21:26:52
373
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅