<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Quintin的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_16204521</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_16204521]]></copyright><item><title><![CDATA[Postgres 内核：从入门到“入土” (四) —— MVCC：时光倒流，我能看到你前任的样子]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/160507091</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/160507091</guid><author>qq_16204521</author><pubDate>Sat, 25 Apr 2026 19:35:37 +0800</pubDate><description><![CDATA[PostgreSQL的MVCC实现堪称&quot;时光机&quot;：通过保留旧数据版本实现读写并行。其核心机制是利用xmin/xmax标记行的生死状态，UPDATE操作实质是创建新版本而非原地修改。查询时结合事务快照判断版本可见性，通过Hint Bits优化性能。但这种&quot;盖新房不拆旧房&quot;的设计会导致存储膨胀，依赖Vacuum清理死亡元组。源码中的HeapTupleSatisfiesMVCC函数实现了精妙的版本可见性判断逻辑，展现了MVCC在并发控制与存储效率间的精妙平衡。]]></description><category></category></item><item><title><![CDATA[Postgres 内核：从入门到“入土” (三) —— Page 结构：数据是如何在磁盘上“躺平”的]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/159931337</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/159931337</guid><author>qq_16204521</author><pubDate>Tue, 07 Apr 2026 22:11:41 +0800</pubDate><description><![CDATA[这篇文章深入解析了PostgreSQL磁盘数据页（Page）的结构设计。数据页采用8KB固定大小，通过精妙的布局实现高效存储：页头管理元信息，行指针从上往下排列，数据行从底部往上填充，中间空闲区域随写入动态收缩。文章详细剖析了pd_lower和pd_upper指针的协同机制、4字节行指针的位域压缩技巧，以及索引页的特殊空间设计。特别揭示了Page结构的&quot;两头挤压&quot;特性：行指针和数据行相向生长，直至占满空间。这种设计既保证了CPU缓存友好性，又实现了灵活的空间管理，为后续MVCC机制奠定了]]></description><category></category></item><item><title><![CDATA[Postgres 内核：从入门到“入土” (二) —— Postmaster：那个整天蹲在大门口的保镖]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/159669472</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/159669472</guid><author>qq_16204521</author><pubDate>Tue, 31 Mar 2026 07:56:04 +0800</pubDate><description><![CDATA[摘要：PostgreSQL的核心进程Postmaster是数据库系统的&quot;主心骨&quot;，负责管理所有后台进程和客户端连接。作为多进程架构的核心，Postmaster通过fork()创建子进程处理客户端请求，确保进程隔离性，防止单个连接崩溃影响整个系统。它还管理着日志、检查点、WAL写入等关键后台进程，并通过信号机制实现进程间通信。文章剖析了Postmaster在Unix和Windows上的实现差异，以及其主循环的工作机制，展现了PostgreSQL&quot;宁可停产也要保证数据安全&quot]]></description><category></category></item><item><title><![CDATA[Postgres 内核：从入门到“入土” (一) —— MemoryContext：数据库里的“分赃”艺术]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/159629179</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/159629179</guid><author>qq_16204521</author><pubDate>Mon, 30 Mar 2026 07:58:25 +0800</pubDate><description><![CDATA[本文深入解析了PostgreSQL数据库内核的内存管理机制。核心采用MemoryContext（内存上下文）的树状结构实现批量内存管理，通过AllocSet分配策略将内存划分为大块(Block)和小块(Chunk)，并建立回收机制。相比直接使用malloc/free，这种设计通过&quot;餐巾纸策略&quot;实现查询级内存自动回收，避免了频繁手动释放。文章详细剖析了palloc实现原理、内存组织结构以及C语言实现的OOP多态机制，并警示开发者注意CurrentMemoryContext切换以避免OOM。]]></description><category></category></item><item><title><![CDATA[Postgres内核: 从入门到“入土“(序言) -----程序员的终极浪漫与源码生存指南]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/159394188</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/159394188</guid><author>qq_16204521</author><pubDate>Mon, 23 Mar 2026 20:02:46 +0800</pubDate><description><![CDATA[有人问：为什么不去读 MySQL？或者更时髦的各种分布式数据库？PostgreSQL 是 C 语言编写的艺术品。它的代码风格严谨得像个老学究，注释多到让你怀疑这是不是在写小说。它没有那种为了炫技而写的晦涩逻辑，更多的是一种工程上的优雅。读 PG 源码，你不仅是在学数据库，你是在学如何构建一个能跑几十年的大型系统。]]></description><category></category></item><item><title><![CDATA[Neovim 生态中的全能利器：telescope.nvim 深度配置与架构分析]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/156952103</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/156952103</guid><author>qq_16204521</author><pubDate>Wed, 14 Jan 2026 20:01:57 +0800</pubDate><description><![CDATA[摘要： telescope.nvim 是 Neovim 生态中的高效模糊检索工具，基于 Lua 原生支持，通过模块化设计（Picker、Sorter、Previewer）实现深度扩展性。它依赖 ripgrep 和 fd 提升性能，并支持 lazy.nvim 延迟加载优化启动速度。用户可通过全局配置定制布局与主题，并借助扩展（如 fzf-native、ui-select）增强功能，实现项目切换、文件浏览等高级操作，成为现代文本编辑的核心枢纽。]]></description><category></category></item><item><title><![CDATA[打造你的私人 AI 编程助手：CodeCompanion.nvim 全方位配置指南]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/156929855</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/156929855</guid><author>qq_16204521</author><pubDate>Wed, 14 Jan 2026 07:54:38 +0800</pubDate><description><![CDATA[打造高效AI编程助手：CodeCompanion.nvim配置指南 CodeCompanion.nvim是一款深度集成的Neovim AI插件，提供三种工作模式（Chat/Inline/Cmd）和多重适配器支持（OpenAI/Gemini/Ollama等）。其核心优势在于： 高度可定制：通过策略(Strategies)系统定义AI交互行为 极速响应：ACP模式配合本地CLI工具实现毫秒级补全 智能上下文：变量系统让AI读取LSP诊断/Git状态等环境信息 配置要点包括： 适配器设置（支持OAuth认证） 策]]></description><category></category></item><item><title><![CDATA[现代 Neovim 插件全景图：从底层基建到 AI 驱动]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/156913840</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/156913840</guid><author>qq_16204521</author><pubDate>Tue, 13 Jan 2026 21:49:58 +0800</pubDate><description><![CDATA[现代 Neovim 插件全景图：从底层基建到 AI 驱动]]></description><category></category></item><item><title><![CDATA[GDB 调试命令详解：高效掌握常用调试技巧]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/147197134</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/147197134</guid><author>qq_16204521</author><pubDate>Sun, 13 Apr 2025 21:12:48 +0800</pubDate><description><![CDATA[熟练掌握缩写命令（如rnsp）能显著提升调试效率。合理使用断点与监视点，可以大大简化定位 bug 的过程。多线程、多进程调试技巧适用于复杂项目环境。]]></description><category></category></item><item><title><![CDATA[[特殊字符] 终端效率提升指南：zsh + tmux]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/147196941</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/147196941</guid><author>qq_16204521</author><pubDate>Sun, 13 Apr 2025 20:52:09 +0800</pubDate><description><![CDATA[通过配置 oh-my-zsh 和 tmux，我们可以打造一个高效、美观且稳定的终端环境。这不仅能提升开发效率，也能让你在日常命令行操作中事半功倍。如果你还在用默认终端，不妨试试这套组合，享受丝滑操作的快感吧！]]></description><category></category></item><item><title><![CDATA[PostgreSQL的内存结构]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/144006734</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/144006734</guid><author>qq_16204521</author><pubDate>Sun, 24 Nov 2024 13:36:37 +0800</pubDate><description><![CDATA[PostgreSQL的内存结构对于数据库的性能和稳定性至关重要。它主要分为两大类：本地内存区域（Local memory area）和共享内存区域（Shared memory area）。]]></description><category></category></item><item><title><![CDATA[PostgreSQL中的内存上下文管理]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/144006691</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/144006691</guid><author>qq_16204521</author><pubDate>Sun, 24 Nov 2024 13:33:50 +0800</pubDate><description><![CDATA[在数据库的世界里，内存管理是性能优化的关键。PostgreSQL，作为一个高级的开源对象关系数据库系统，拥有一套精细的内存上下文管理系统，它不仅提高了数据库的性能，还增强了系统的稳定性。本文将深入探讨PostgreSQL中的内存上下文是如何工作的，以及它为什么如此重要。]]></description><category></category></item><item><title><![CDATA[C 语言中的模板编程]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/143403313</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/143403313</guid><author>qq_16204521</author><pubDate>Thu, 31 Oct 2024 15:49:50 +0800</pubDate><description><![CDATA[在 C 语言中，模板编程通常用预处理器进行，以避免代码冗余并提高可维护性。本文将介绍几种常见的 C 语言模板实现方法，并通过示例代码进行说明。]]></description><category></category></item><item><title><![CDATA[10个C语言(C99)编程技巧：提高效率与可读性]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/143399146</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/143399146</guid><author>qq_16204521</author><pubDate>Thu, 31 Oct 2024 14:49:37 +0800</pubDate><description><![CDATA[在C语言编程中，我们经常会遇到一些可以提高代码效率和可读性的技巧。以下是我在编写C代码时常用的十个模式和技巧，它们涵盖了从基础的代码简化到复杂的宏定义和状态管理。]]></description><category></category></item><item><title><![CDATA[C语言中的高级元编程]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/142398933</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/142398933</guid><author>qq_16204521</author><pubDate>Fri, 20 Sep 2024 20:40:43 +0800</pubDate><description><![CDATA[人们的自然反应是用典型的C方式实现：首先创建一个条件数组，然后进行轮询，最后根据轮询的返回值执行特定的代码。对于C程序员来说，或许可以容忍，但如果你来自其他背景，可能会觉得简直不可接受。实现一个类似于C语言的switch语句的控制结构，具有可变数量的条件。实际上，这是可以做到的。注意，我们不得不将宏拆分成两个，以便可以在多个地方重用同一个__COUNTER__的值。）与触发它们的条件更紧密地结合在一起，而不是先列出所有条件，然后再列出所有动作。C语言中的元编程是创造新语言结构的一种艺术，通常通过宏来实现。]]></description><category></category></item><item><title><![CDATA[深入理解 PostgreSQL 的 MVCC：确保数据一致性的幕后技术]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/140948500</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/140948500</guid><author>qq_16204521</author><pubDate>Tue, 06 Aug 2024 10:26:47 +0800</pubDate><description><![CDATA[MVCC 是一种通过维护数据的多个版本来实现并发控制的机制。在 MVCC 系统中，数据库可以同时支持多个事务进行读写操作，而不会互相阻塞。每个事务在执行时看到的是某一时间点的数据快照，而不会被其他事务的操作所干扰。这种机制的核心思想是“数据不锁定，操作创建快照”。MVCC 是 PostgreSQL 处理并发控制的核心技术，通过维护多个数据版本和使用快照隔离，确保了数据的一致性和系统的高并发性能。它允许读写操作并行进行，而无需加锁，大大提高了系统的效率。]]></description><category></category></item><item><title><![CDATA[深入了解 PostgreSQL 的优化器：提升查询性能的幕后英雄]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/140948081</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/140948081</guid><author>qq_16204521</author><pubDate>Tue, 06 Aug 2024 10:20:38 +0800</pubDate><description><![CDATA[查询优化器是数据库管理系统的一个组件，负责决定 SQL 查询的最佳执行计划。一个查询可以有多种执行方式，而优化器的任务是选择其中代价最小的一个执行计划。执行计划的代价通常取决于执行该查询所需的资源（如 CPU、I/O、内存等）和时间。PostgreSQL 的优化器在查询性能的优化中起到了关键作用。通过理解其工作机制和常见的优化技术，数据库管理员和开发者可以更好地利用优化器的能力，提升数据库系统的性能。同时，合理的数据库设计、索引使用、统计信息维护，以及查询优化实践，也是确保优化器发挥最大作用的重要因素。]]></description><category></category></item><item><title><![CDATA[深入理解 Linux 内核之module_init]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/140919938</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/140919938</guid><author>qq_16204521</author><pubDate>Mon, 05 Aug 2024 10:23:42 +0800</pubDate><description><![CDATA[initfn是模块的初始化函数，通常由开发者定义。这个宏主要做了两件事：定义一个静态内联函数__inittest：这个函数返回initfn，即开发者定义的初始化函数。调用__initcall：将__inittest注册为一个初始化调用。__initcall宏__initcall。]]></description><category></category></item><item><title><![CDATA[C 语言之泛型编程]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/139724364</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/139724364</guid><author>qq_16204521</author><pubDate>Sun, 16 Jun 2024 18:49:02 +0800</pubDate><description><![CDATA[泛型编程是一种编程范式，旨在编写与特定数据类型无关的代码，从而提高代码的复用性和灵活性。在 C++ 中，模板提供了直接支持泛型编程的语法。而在 C 中，C11 标准的新特性使我们能够实现类似的功能。C11 标准的新特性，特别是 _Generic 关键字，使得在 C 语言中实现泛型编程变得更加容易。通过结合使用宏定义、void* 和 _Generic，我们可以编写出与特定数据类型无关的代码，从而提高代码的复用性和灵活性。希望这篇博客能帮助您理解如何在 C11 中实现泛型编程。]]></description><category></category></item><item><title><![CDATA[C 语言之面向对象编程]]></title><link>https://blog.youkuaiyun.com/qq_16204521/article/details/139724199</link><guid>https://blog.youkuaiyun.com/qq_16204521/article/details/139724199</guid><author>qq_16204521</author><pubDate>Sun, 16 Jun 2024 18:34:02 +0800</pubDate><description><![CDATA[面向对象编程是一种编程范式，它通过“类”和“对象”来组织代码。类（Class）：一种数据结构，用于定义对象的属性和行为。对象（Object）：类的实例。继承（Inheritance）：一个类可以继承另一个类的属性和行为。多态（Polymorphism）：不同类的对象可以通过相同的接口调用不同的方法。虽然 C 语言不是面向对象的编程语言，但通过使用结构体、函数指针和一些编程技巧，我们可以在 C 中实现面向对象编程的概念。通过以上示例，我们展示了如何在 C 中模拟类、对象、继承和多态性。]]></description><category></category></item></channel></rss>