<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on DogDu's blog</title><link>https://dog-du.github.io/posts/</link><description>Recent content in Posts on DogDu's blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>© 2026 DogDu</copyright><lastBuildDate>Sat, 09 May 2026 21:05:57 +0800</lastBuildDate><atom:link href="https://dog-du.github.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>RocksDB 学习笔记 Day 013：Compaction 基础机制与主流程</title><link>https://dog-du.github.io/posts/learning-rocksdb-day013-compaction-basics-and-flow/</link><pubDate>Mon, 04 May 2026 19:43:43 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day013-compaction-basics-and-flow/</guid><description>从 VersionStorageInfo 的 compaction score、ColumnFamilyData 的 picker、DBImpl 的后台调度、CompactionJob 的输出 SST 构建、以及 VersionEdit/LogAndApply 的提交链路出发，建立 RocksDB compaction 的基础机制与主流程。</description></item><item><title>RocksDB 学习笔记 Day 012：MANIFEST、VersionEdit 与 VersionSet</title><link>https://dog-du.github.io/posts/learning-rocksdb-day012-manifest-versionedit-versionset/</link><pubDate>Sun, 03 May 2026 13:41:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day012-manifest-versionedit-versionset/</guid><description>从 CURRENT 指向 MANIFEST、VersionEdit 增量记录、VersionBuilder/VersionEditHandler 的应用与回放、以及 VersionSet::LogAndApply/Recover 的主链出发，讲清 RocksDB 如何持久化 SST 元数据、切换 current Version，并在 DB 打开时恢复回来。</description></item><item><title>RocksDB 学习笔记 Day 011：磁盘 I/O、TableReader 与 Block 读取</title><link>https://dog-du.github.io/posts/learning-rocksdb-day011-disk-io-table-reader-block-read/</link><pubDate>Fri, 01 May 2026 11:05:22 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day011-disk-io-table-reader-block-read/</guid><description>从 FileSystem/Env 文件抽象、TableCache、TableReader、BlockBasedTableReader、BlockFetcher、RandomAccessFileReader 和 ReadOptions 出发，梳理 RocksDB 点查 SST 时如何从逻辑查找落到物理 block 读取，并区分 table cache、block cache、prefetch buffer 与 OS page cache 的职责边界。</description></item><item><title>RocksDB 学习笔记 Day 010：Snapshot / Sequence Number / 可见性语义</title><link>https://dog-du.github.io/posts/learning-rocksdb-day010-snapshot-sequence-number-visibility/</link><pubDate>Thu, 30 Apr 2026 11:05:16 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day010-snapshot-sequence-number-visibility/</guid><description>从 WriteBatch sequence 分配、SnapshotImpl、DBImpl::GetImpl、LookupKey、GetContext、DBIter 和 ReadCallback 源码出发，梳理 RocksDB 如何用 sequence number 表达版本顺序，用 snapshot 固定读可见性上界，并在 Get 与 Iterator 路径中过滤不可见版本。</description></item><item><title>数据库行业学习 Day 002：传统 OLTP 与存储基础预览</title><link>https://dog-du.github.io/posts/learning-database-industry-day002-traditional-oltp-foundations-preview/</link><pubDate>Thu, 30 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-database-industry-day002-traditional-oltp-foundations-preview/</guid><description>预览传统 OLTP 与存储基础专题，说明为什么 PostgreSQL、MySQL/InnoDB、SQLite 仍然是理解现代数据库的比较基线，并建立后续系统文章要追问的 storage-first 框架。</description></item><item><title>数据库行业调研报告模板</title><link>https://dog-du.github.io/posts/learning-database-industry-report-template/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-database-industry-report-template/</guid><description>数据库行业专题调研报告模板，用于按 storage-first 视角拆解现代数据库系统。</description></item><item><title>数据库行业学习 Day 001：现代数据库行业全景</title><link>https://dog-du.github.io/posts/learning-database-industry-day001-modern-database-overview/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-database-industry-day001-modern-database-overview/</guid><description>从 storage-first 视角建立现代数据库行业全景，先把传统单机数据库、嵌入式存储引擎、分布式 SQL、云原生数仓、实时 OLAP、搜索与向量数据库放到同一张地图里，再沉淀后续源码阅读和系统调研的问题框架。</description></item><item><title>数据库行业学习索引</title><link>https://dog-du.github.io/posts/learning-database-industry-index/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-database-industry-index/</guid><description>数据库行业长期学习索引与轻量状态文件，用于恢复专题进度、导航调研报告，并记录问题、来源和工程启发。</description></item><item><title>RocksDB 学习笔记 Day 009：Read Path / Get / MultiGet / Iterator</title><link>https://dog-du.github.io/posts/learning-rocksdb-day009-read-path-get-multiget-iterator/</link><pubDate>Sun, 26 Apr 2026 15:23:14 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day009-read-path-get-multiget-iterator/</guid><description>从 DBImpl::GetImpl、MultiGetImpl、NewInternalIterator、Version::Get、TableCache 和 BlockBasedTableReader 源码出发，梳理 RocksDB 读路径如何在 SuperVersion 稳定视图上先查 memtable，再查 immutable memtable，最后查 SST，并说明 Get、MultiGet 与 Iterator 的职责边界。</description></item><item><title>个人多设备分布式文件系统/NAS 项目调研</title><link>https://dog-du.github.io/posts/personal-distributed-file-system-research/</link><pubDate>Thu, 23 Apr 2026 23:50:00 +0800</pubDate><guid>https://dog-du.github.io/posts/personal-distributed-file-system-research/</guid><description>调研面向个人电脑、手机再利用的多节点文件服务方案，比较 GlusterFS、RetroShare、D-LAN、Tahoe-LAFS、SeaweedFS、Syncthing、Peergos、Spacedrive、IPFS/Kubo、JuiceFS 等项目与“多节点提供服务、内网可用、最好去中心化、最好有安卓端、不追求容灾”的匹配程度。</description></item><item><title>RocksDB 学习笔记 Day 008：SSTable / BlockBasedTable / 各类 Block</title><link>https://dog-du.github.io/posts/learning-rocksdb-day008-sstable-blockbasedtable-and-blocks/</link><pubDate>Wed, 22 Apr 2026 10:47:30 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day008-sstable-blockbasedtable-and-blocks/</guid><description>结合 BuildTable、TableBuilder、BlockBasedTableBuilder、BlockBuilder、BlockHandle 和 Footer 的源码，从写侧视角梳理 RocksDB 如何把 flush/compaction 输入流编码成 block-based SST，以及 data/index/filter/properties/metaindex/footer 各自的职责与字节边界。</description></item><item><title>RocksDB 学习笔记 Day 007：Flush</title><link>https://dog-du.github.io/posts/learning-rocksdb-day007-flush/</link><pubDate>Mon, 20 Apr 2026 15:50:30 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day007-flush/</guid><description>结合 ScheduleFlushes、SwitchMemtable、BackgroundFlush、FlushJob、MemTableList::TryInstallMemtableFlushResults 与 GetDBRecoveryEditForObsoletingMemTables 的源码，梳理 RocksDB 如何把 mutable memtable 切成 immutable、刷成 L0 SST，并推进 MANIFEST 与 WAL 保留边界。</description></item><item><title>Vim 学习笔记 Day 014：回顾、巩固与高频扩展，把 14 天主线压成一个真正可用的编辑选择器</title><link>https://dog-du.github.io/posts/learning-vim-day014-review-consolidation-and-high-frequency-extensions/</link><pubDate>Mon, 20 Apr 2026 11:30:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day014-review-consolidation-and-high-frequency-extensions/</guid><description>Day 014 对前 14 天主线做回顾、巩固与高频扩展，把 motion、text objects、search、Ex、quickfix、LSP、diagnostics、health 压成一套“先判断问题，再选工具”的统一编辑模型，并给出后续项目驱动复训路径。</description></item><item><title>Vim 学习笔记 Day 013：LazyVim 日常编辑闭环，把“会找、会跳”推进到“能顺手完成一整轮修改”</title><link>https://dog-du.github.io/posts/learning-vim-day013-lazyvim-daily-editing-loop/</link><pubDate>Mon, 20 Apr 2026 09:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day013-lazyvim-daily-editing-loop/</guid><description>Day 013 聚焦 LazyVim 的日常编辑闭环，把 files / grep / buffers、LSP 跳转与 rename、diagnostics、quickfix、jumplist、format 串成一条能反复执行的默认工作流。</description></item><item><title>Vim 学习笔记 Day 012：LazyVim 代码导航与 LSP 基础操作，把“会搜文本”推进到“会按语义跳转”</title><link>https://dog-du.github.io/posts/learning-vim-day012-lazyvim-code-navigation-and-lsp-basics/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day012-lazyvim-code-navigation-and-lsp-basics/</guid><description>Day 012 聚焦 LazyVim 默认的代码导航与 LSP 基础操作，围绕 definition、references、hover、rename、code action、symbols 建立“语义导航”心智，并把 Day 11 的文件 / 搜索工作流接到真实代码跳转上。</description></item><item><title>RocksDB 学习笔记 Day 006：MemTable 深入：可见性、删除、范围删除与读语义</title><link>https://dog-du.github.io/posts/learning-rocksdb-day006-memtable-visibility-delete-range-tombstone/</link><pubDate>Sat, 18 Apr 2026 20:30:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day006-memtable-visibility-delete-range-tombstone/</guid><description>结合 LookupKey、InternalKeyComparator、MemTable::Get、SaveValue、range_del_table_ 与 WriteBatch::InsertInto 的源码，梳理 RocksDB 如何在 memtable 中实现删除、多版本可见性、范围删除覆盖以及 seq_per_batch 语义。</description></item><item><title>Vim 学习笔记 Day 011：LazyVim 文件 / 搜索 / buffer 工作流，把“会看 leader 分组”推进到“会在项目里快速找、切、回”</title><link>https://dog-du.github.io/posts/learning-vim-day011-lazyvim-file-search-and-buffer-workflow/</link><pubDate>Sat, 18 Apr 2026 12:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day011-lazyvim-file-search-and-buffer-workflow/</guid><description>Day 011 聚焦 LazyVim 默认的文件、搜索和 buffer 工作流，围绕 Snacks picker 与 buffer 切换建立 root dir / cwd / files / recent / buffers 的判断，让“找文件、搜内容、切上下文”真正形成默认动作。</description></item><item><title>Vim 学习笔记 Day 010：LazyVim 总览与 leader 思维，把“会用 Neovim”推进到“会走默认工作流”</title><link>https://dog-du.github.io/posts/learning-vim-day010-lazyvim-overview-and-leader-thinking/</link><pubDate>Sat, 18 Apr 2026 09:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day010-lazyvim-overview-and-leader-thinking/</guid><description>Day 010 聚焦 LazyVim 的定位、leader 思维和 starter 配置结构，先建立“LazyVim 是一套默认工作流而不是一堆快捷键”的判断，并学会从哪些入口开始看、从哪些文件开始改。</description></item><item><title>Vim 学习笔记 Day 009：Neovim 的定位 + 终端 / 剪贴板 / 配置 / health，把 Vim 语法接到现代宿主环境</title><link>https://dog-du.github.io/posts/learning-vim-day009-neovim-positioning-terminal-clipboard-config-and-health/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day009-neovim-positioning-terminal-clipboard-config-and-health/</guid><description>Day 009 聚焦 Neovim 的定位，以及终端、剪贴板、配置入口和 :checkhealth 这四个最值得先接进日常工作流的入口，让前 8 天学过的 Vim 语法自然过渡到现代宿主环境。</description></item><item><title>Vim 学习笔记 Day 008：Vim 高频进阶整合，把“会基础编辑”推进到“能稳定日常用”</title><link>https://dog-du.github.io/posts/learning-vim-day008-vim-high-frequency-advanced-integration/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day008-vim-high-frequency-advanced-integration/</guid><description>Day 008 聚焦 Vim 高频进阶整合，补齐插入模式高频入口、点命令、撤销、寄存器、宏、:global 和多文件批处理，把前 7 天的基础动作串成更稳定的日常编辑闭环。</description></item><item><title>RocksDB 学习笔记 Day 005：MemTable / SkipList / Arena</title><link>https://dog-du.github.io/posts/learning-rocksdb-day005-memtable-skiplist-arena/</link><pubDate>Wed, 15 Apr 2026 20:20:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day005-memtable-skiplist-arena/</guid><description>结合 MemTable::Add、MemTable::Get、SkipListRep、InlineSkipList 与 ConcurrentArena 的源码，梳理 RocksDB 如何把带 sequence 的更新编码进内存表，并用跳表与分块分配器组织读写与内存生命周期。</description></item><item><title>Vim 学习笔记 Day 007：命令行模式与常用 Ex 操作，把“会切换上下文”推进到“会对编辑器下指令”</title><link>https://dog-du.github.io/posts/learning-vim-day007-command-line-mode-and-common-ex-operations/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day007-command-line-mode-and-common-ex-operations/</guid><description>Day 007 聚焦命令行模式与常用 Ex 操作，先掌握 :w、:q、:e、范围、命令拼接、命令行窗口，把“在文本里改”推进到“对编辑器发出明确指令”。</description></item><item><title>RocksDB 学习笔记 Day 004：WAL</title><link>https://dog-du.github.io/posts/learning-rocksdb-day004-wal/</link><pubDate>Mon, 13 Apr 2026 10:30:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day004-wal/</guid><description>结合 DBImpl::WriteToWAL、log::Writer::AddRecord、log::Reader::ReadRecord 与 RecoverLogFiles 源码，梳理 RocksDB 的 WAL 如何承载 WriteBatch、如何做物理分片写入，以及恢复时如何重新还原为 memtable 更新。</description></item><item><title>Vim 学习笔记 Day 006：buffer / window / split，把“会编辑”推进到“会切换上下文”</title><link>https://dog-du.github.io/posts/learning-vim-day006-buffers-windows-and-splits/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day006-buffers-windows-and-splits/</guid><description>Day 006 聚焦 buffer、window、split 的日常工作流，先掌握同一会话里多个文件怎么切、同屏怎么并排看、什么时候该切 buffer，什么时候该开 split。</description></item><item><title>RocksDB 学习笔记 Day 003：Write Path / WriteBatch / Sequence Number</title><link>https://dog-du.github.io/posts/learning-rocksdb-day003-write-path-writebatch-sequence-number/</link><pubDate>Sun, 12 Apr 2026 14:30:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day003-write-path-writebatch-sequence-number/</guid><description>结合 DBImpl::WriteImpl、WriteThread、WriteBatchInternal 等源码，梳理 RocksDB 写路径里写线程分组、sequence number 分配、WAL 写入与 memtable 插入的主流程。</description></item><item><title>Vim 学习笔记 Day 005：搜索 / 替换 / 可视模式，把“找到并改掉”做顺</title><link>https://dog-du.github.io/posts/learning-vim-day005-search-replace-and-visual-mode/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day005-search-replace-and-visual-mode/</guid><description>Day 005 聚焦搜索、替换和可视模式，先掌握最常用的查找、逐个确认替换和三种 Visual 选择方式，让“找到目标并改掉”形成稳定闭环。</description></item><item><title>Vim 学习笔记 Day 004：文本对象，把“操作范围”从移动升级成结构</title><link>https://dog-du.github.io/posts/learning-vim-day004-text-objects/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day004-text-objects/</guid><description>Day 004 把 operator + motion 继续推进到文本对象，先掌握最常用的词、引号、括号和方括号对象，让编辑范围更贴近真实结构，而不是只靠光标硬找边界。</description></item><item><title>RocksDB 学习笔记 Day 002：DB 打开流程与核心对象关系</title><link>https://dog-du.github.io/posts/learning-rocksdb-day002-db-open-and-core-object-relationships/</link><pubDate>Thu, 09 Apr 2026 16:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day002-db-open-and-core-object-relationships/</guid><description>结合 DBImpl::Open、Recover、VersionSet::Recover、WAL 回放与 InstallSuperVersion 的源码，梳理 RocksDB 在启动阶段如何从磁盘元数据和 WAL 重建可服务的运行时对象图。</description></item><item><title>Vim 学习笔记 Day 003：operator + motion，把“到位”变成“直接改掉”</title><link>https://dog-du.github.io/posts/learning-vim-day003-operator-plus-motion/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day003-operator-plus-motion/</guid><description>Day 003 把前一天学的 motion 真正接到编辑动作上，建立“先选操作，再给范围”的 Vim 编辑节奏，先掌握 d / c / y 和最常用的 motion 组合。</description></item><item><title>Vim 学习笔记 Day 002：移动，从“硬挪”到“直接到位”</title><link>https://dog-du.github.io/posts/learning-vim-day002-motions-from-drifting-to-direct-navigation/</link><pubDate>Tue, 07 Apr 2026 00:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day002-motions-from-drifting-to-direct-navigation/</guid><description>Day 002 不追求背更多导航命令，而是把移动从“按字符硬挪”升级成“按词、按行、按文件位置直接到位”，为后续 operator + motion 打底。</description></item><item><title>Vim 学习笔记 Day 001：编辑心智模型与模式，不再一写就乱</title><link>https://dog-du.github.io/posts/learning-vim-day001-editing-mindset-and-modes/</link><pubDate>Thu, 02 Apr 2026 10:15:21 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day001-editing-mindset-and-modes/</guid><description>先不追求更多命令，先把 Vim 最关键的编辑心智模型打稳：普通模式不是过渡状态，而是主工作模式；插入模式只是短暂停留的输入状态。</description></item><item><title>Vim 学习笔记 Day 000：总览与环境准备</title><link>https://dog-du.github.io/posts/learning-vim-day000-overview-and-roadmap/</link><pubDate>Thu, 02 Apr 2026 09:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-day000-overview-and-roadmap/</guid><description>在正式进入 Vim 学习主线之前，先明确目标、边界、14 天路线以及从 Vim 过渡到 Neovim 和 LazyVim 的整体策略。</description></item><item><title>Vim 学习索引</title><link>https://dog-du.github.io/posts/learning-vim-index/</link><pubDate>Thu, 02 Apr 2026 08:00:00 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-vim-index/</guid><description>Vim / Neovim / LazyVim 长期学习索引与轻量状态文件，用于恢复学习进度、导航每日文章以及记录薄弱点。</description></item><item><title>RocksDB 学习笔记 Day 001：整体架构与 LSM-Tree</title><link>https://dog-du.github.io/posts/learning-rocksdb-day001-architecture-and-lsm-tree/</link><pubDate>Wed, 01 Apr 2026 19:24:44 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-day001-architecture-and-lsm-tree/</guid><description>先用更清晰的概念分层讲清 DB、CF、MemTable、WAL、SuperVersion、VersionSet、MANIFEST 分别负责什么，再从 DBImpl、ColumnFamilyData、SuperVersion、MemTable、VersionSet 的源码关系出发，建立 RocksDB 的整体架构与 LSM-Tree 心智模型。</description></item><item><title>RocksDB 学习索引</title><link>https://dog-du.github.io/posts/learning-rocksdb-index/</link><pubDate>Wed, 01 Apr 2026 19:11:02 +0800</pubDate><guid>https://dog-du.github.io/posts/learning-rocksdb-index/</guid><description>RocksDB 长期学习索引与轻量状态文件，用于恢复学习进度、导航每日文章，并记录掌握度与最近一天复习问答闸门状态。</description></item><item><title>Rocksdb：skiplist</title><link>https://dog-du.github.io/posts/db-rocksdb-skiplist/</link><pubDate>Sun, 05 Oct 2025 11:14:11 +0000</pubDate><guid>https://dog-du.github.io/posts/db-rocksdb-skiplist/</guid><description>&lt;p>面试时被问到 &lt;code>skiplist&lt;/code> 怎么做并发控制，当时回答得不够扎实，所以回来专门看了一遍 RocksDB 的实现，顺手把结构和设计思路记下来。&lt;/p></description></item><item><title>TinyKV：构建一个基于 Raft、分布式事务支持的、水平可扩展的键值存储服务</title><link>https://dog-du.github.io/posts/dist-tinykv-raft/</link><pubDate>Tue, 24 Jun 2025 13:29:11 +0000</pubDate><guid>https://dog-du.github.io/posts/dist-tinykv-raft/</guid><description>记录 TinyKV 项目各阶段的实现与踩坑，聚焦 Raft、Region、事务层和分布式存储核心机制。</description></item><item><title>Rust学习</title><link>https://dog-du.github.io/posts/lang-rust-learn/</link><pubDate>Sun, 18 May 2025 10:44:22 +0000</pubDate><guid>https://dog-du.github.io/posts/lang-rust-learn/</guid><description>&lt;p>这篇文章是跟着《Rust 程序设计语言》做的一份学习笔记，主要记录我在入门阶段觉得最需要反复确认的语法和概念。&lt;/p>
&lt;p>参考资料：&lt;a href="https://kaisery.github.io/trpl-zh-cn/title-page.html" target="_blank" rel="noreferrer">Rust 程序设计语言（简体中文版）&lt;/a>&lt;/p></description></item><item><title>读论文-Learning to Optimize Join Queries With Deep Reinforcement Learning</title><link>https://dog-du.github.io/posts/paper-rl-join-opt/</link><pubDate>Fri, 16 May 2025 02:17:35 +0000</pubDate><guid>https://dog-du.github.io/posts/paper-rl-join-opt/</guid><description>&lt;p>这篇论文讨论的是：能不能把连接顺序优化建模成强化学习问题，让模型在代价模型的指导下学出比传统启发式更好的决策。&lt;/p>
&lt;p>下面先按“初读时最关心的问题”做一轮摘记，再逐步补齐具体细节。&lt;/p></description></item><item><title>Go学习</title><link>https://dog-du.github.io/posts/lang-go-learn/</link><pubDate>Sun, 11 May 2025 03:36:44 +0000</pubDate><guid>https://dog-du.github.io/posts/lang-go-learn/</guid><description>&lt;p>这篇文章是我的 Go 入门整理，先记录环境配置和模块管理，再逐步补充语法与常用写法，方便之后做后端或刷题时快速回看。&lt;/p></description></item><item><title>读论文-Architecture of a Database System</title><link>https://dog-du.github.io/posts/paper-db-architecture/</link><pubDate>Thu, 27 Mar 2025 08:37:49 +0000</pubDate><guid>https://dog-du.github.io/posts/paper-db-architecture/</guid><description>阅读并翻译《Architecture of a Database System》，梳理数据库系统在进程模型、查询处理、存储与事务上的整体架构。</description></item><item><title>复习操作系统</title><link>https://dog-du.github.io/posts/sys-os-review/</link><pubDate>Fri, 14 Mar 2025 02:43:15 +0000</pubDate><guid>https://dog-du.github.io/posts/sys-os-review/</guid><description>&lt;p>这篇文章是一份操作系统复习提纲，主要面向课程回顾和面试快速查漏补缺，内容以知识点整理和图示记录为主。&lt;/p>
&lt;p>参考视频：&lt;a href="https://www.bilibili.com/video/BV1Tz421Q7LU" target="_blank" rel="noreferrer">中山大学 OS&lt;/a>&lt;/p>
&lt;figure>&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="image-20250314110302993"
 src="https://dog-du.github.io/img/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%8E%9F%E7%90%86/image-20250314110302993.webp"
 >&lt;/figure></description></item><item><title>计网复习</title><link>https://dog-du.github.io/posts/net-cn-review/</link><pubDate>Mon, 10 Mar 2025 00:54:15 +0000</pubDate><guid>https://dog-du.github.io/posts/net-cn-review/</guid><description>&lt;p>这篇文章是一份偏面试视角的计算机网络复习笔记，按照常见提问点把 TCP/IP、HTTP、缓存、拥塞控制和 Linux 网络栈收发流程串起来。&lt;/p>
&lt;p>主要参考：&lt;a href="https://xiaolincoding.com/network/" target="_blank" rel="noreferrer">图解网络 | 小林coding&lt;/a>&lt;/p></description></item><item><title>听课，学effective-modern-cpp</title><link>https://dog-du.github.io/posts/lang-cpp-effective/</link><pubDate>Sun, 09 Mar 2025 13:54:15 +0000</pubDate><guid>https://dog-du.github.io/posts/lang-cpp-effective/</guid><description>&lt;p>这篇文章是跟着视频重新梳理《Effective Modern C++》时留下的笔记，重点放在自己最容易混淆的概念和例子上。&lt;/p>
&lt;p>参考视频：&lt;a href="https://www.bilibili.com/video/BV1Gg4y1p71w" target="_blank" rel="noreferrer">effective-modern-cpp&lt;/a>&lt;/p></description></item><item><title>CSAPP学习记录（已完结）</title><link>https://dog-du.github.io/posts/sys-csapp-notes/</link><pubDate>Mon, 03 Mar 2025 12:44:15 +0000</pubDate><guid>https://dog-du.github.io/posts/sys-csapp-notes/</guid><description>按实验顺序记录 CSAPP 各 Lab 的学习过程，涵盖位运算、汇编、缓存、Shell、Malloc 与代理等核心系统主题。</description></item><item><title>CMU15445学习笔记（已完结）</title><link>https://dog-du.github.io/posts/db-cmu15445-notes/</link><pubDate>Mon, 05 Feb 2024 14:36:15 +0000</pubDate><guid>https://dog-du.github.io/posts/db-cmu15445-notes/</guid><description>&lt;p>&lt;strong>如果你还没有开始写 BusTub / CMU 15-445，我更推荐直接写较新的年份。&lt;/strong>&lt;/p>
&lt;p>CMU 15-445 是入门数据库内核的一扇很好的窗口。即使未来不专门做数据库方向，完整做完一轮 Project，也能系统锻炼 C++、系统编程、调试能力，以及对存储引擎核心组件的整体理解。&lt;/p>
&lt;p>这篇文章按时间顺序记录我完成各阶段任务时的学习过程、踩坑点和一些实现取舍，内容偏实践复盘，不是标准题解。&lt;/p></description></item><item><title>跳表代码实现与平衡树检验</title><link>https://dog-du.github.io/posts/algo-skiplist-full-impl/</link><pubDate>Mon, 22 Jan 2024 18:49:43 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-skiplist-full-impl/</guid><description>基于带注释的完整代码介绍跳表的层高生成、跨度维护与有序集合操作，并用洛谷 P3369 作为正确性检验。</description></item><item><title>跳表（skip list）的简单实现</title><link>https://dog-du.github.io/posts/algo-skiplist-impl/</link><pubDate>Mon, 22 Jan 2024 11:18:53 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-skiplist-impl/</guid><description>&lt;p>参考文章：&lt;a href="https://www.luogu.com.cn/blog/tibrella/pu-tong-ping-heng-shu-tiao-biao" target="_blank" rel="noreferrer">普通平衡树 - 跳表 - Tibrella 的隙间&lt;/a>&lt;/p></description></item><item><title>树的剖分</title><link>https://dog-du.github.io/posts/algo-tree-decomp/</link><pubDate>Mon, 22 Jan 2024 10:52:53 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-tree-decomp/</guid><description>&lt;p>参考视频：&lt;a href="https://www.bilibili.com/video/BV1Qt411u77f/?spm_id_from=333.999.0.0" target="_blank" rel="noreferrer">【AgOHの算法胡扯】dfs 序与树链剖分&lt;/a>&lt;/p></description></item><item><title>树上启发式合并（dsu on tree）</title><link>https://dog-du.github.io/posts/algo-dsu-on-tree/</link><pubDate>Mon, 22 Jan 2024 10:44:53 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-dsu-on-tree/</guid><description>&lt;p>参考视频：&lt;a href="https://www.bilibili.com/video/BV1JE411d7tD/?spm_id_from=333.999.0.0" target="_blank" rel="noreferrer">【AgOHの算法胡扯】树上启发式合并（dsu on tree）&lt;/a>&lt;/p></description></item><item><title>稳定排序与MergeSortWithoutBuffer</title><link>https://dog-du.github.io/posts/algo-stable-sort-without-buffer/</link><pubDate>Sun, 14 Jan 2024 20:09:54 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-stable-sort-without-buffer/</guid><description>围绕稳定排序需求，介绍 MergeSortWithoutBuffer 的核心思想、rotate 技巧以及小 buffer 优化，讨论如何在更低额外空间下完成归并。</description></item><item><title>无向图关节点问题课设总结</title><link>https://dog-du.github.io/posts/algo-articulation-points-course-project/</link><pubDate>Sun, 14 Jan 2024 15:55:36 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-articulation-points-course-project/</guid><description>以课程设计为背景，梳理无向图关节点问题的需求、Tarjan 求解思路，以及如何把关节点改造成非关节点的实现细节。</description></item><item><title>红黑树课设总结与应用实现</title><link>https://dog-du.github.io/posts/algo-rbtree-course-project/</link><pubDate>Sun, 14 Jan 2024 15:35:11 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-rbtree-course-project/</guid><description>从课程设计角度回顾红黑树的性质、实现框架与迭代器设计，再延伸到顺序统计等应用，适合作为手写 STL 风格 map 的实践记录。</description></item><item><title>std::sort的底层实现</title><link>https://dog-du.github.io/posts/algo-std-sort/</link><pubDate>Sun, 14 Jan 2024 08:18:53 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-std-sort/</guid><description>&lt;p>想真正理解 &lt;code>std::sort&lt;/code>，最直接的方法就是顺着源码往下看。它并不是单纯的一套快速排序，而是把快排、堆排和插排组合起来，形成一套兼顾平均性能和最坏情况上界的 introsort 策略。&lt;/p>
&lt;p>下面先从源码片段切入，再看这三种排序是如何被拼接到一起的。&lt;/p>








&lt;div class="codeblock-wrapper codeblock-fold" style="--code-fold-lines: 30;">

 
 &lt;input id="codeblock-231ef1e6466f864052416c6b64742c6f" class="codeblock-fold__checkbox" type="checkbox" >
 
 
 &lt;div class="codeblock-fold__header">
 &lt;span class="codeblock-fold__meta">CPP 代码 · 共 49 行&lt;/span>
 &lt;label for="codeblock-231ef1e6466f864052416c6b64742c6f" class="codeblock-fold__toggle">
 
 &lt;span class="codeblock-fold__hint" data-open-label="收起代码" data-closed-label="展开剩余 19 行">&lt;/span>
 &lt;/label>&lt;/div>

 
 &lt;div class="codeblock-fold__content">
 &lt;div class="highlight-wrapper">&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">template&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="k">typename&lt;/span> &lt;span class="n">_RandomAccessIterator&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">typename&lt;/span> &lt;span class="n">_Compare&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">_GLIBCXX20_CONSTEXPR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">inline&lt;/span> &lt;span class="kt">void&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">__partial_sort&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_RandomAccessIterator&lt;/span> &lt;span class="n">__first&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">		 &lt;span class="n">_RandomAccessIterator&lt;/span> &lt;span class="n">__middle&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">		 &lt;span class="n">_RandomAccessIterator&lt;/span> &lt;span class="n">__last&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">		 &lt;span class="n">_Compare&lt;/span> &lt;span class="n">__comp&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">__heap_select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">__first&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__middle&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__last&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__comp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">__sort_heap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">__first&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__middle&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__comp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">/// This is a helper function for the sort routine.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">template&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="k">typename&lt;/span> &lt;span class="n">_RandomAccessIterator&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">typename&lt;/span> &lt;span class="n">_Size&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">typename&lt;/span> &lt;span class="n">_Compare&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">_GLIBCXX20_CONSTEXPR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">__introsort_loop&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_RandomAccessIterator&lt;/span> &lt;span class="n">__first&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">		 &lt;span class="n">_RandomAccessIterator&lt;/span> &lt;span class="n">__last&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">		 &lt;span class="n">_Size&lt;/span> &lt;span class="n">__depth_limit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_Compare&lt;/span> &lt;span class="n">__comp&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">__last&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">__first&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="kt">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_S_threshold&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">__depth_limit&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">__partial_sort&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">__first&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__last&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__last&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__comp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="k">return&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="o">--&lt;/span>&lt;span class="n">__depth_limit&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="n">_RandomAccessIterator&lt;/span> &lt;span class="n">__cut&lt;/span> &lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">__unguarded_partition_pivot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">__first&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__last&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__comp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">__introsort_loop&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">__cut&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__last&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__depth_limit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__comp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="n">__last&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">__cut&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">template&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="k">typename&lt;/span> &lt;span class="n">_RandomAccessIterator&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">typename&lt;/span> &lt;span class="n">_Compare&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">_GLIBCXX20_CONSTEXPR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">inline&lt;/span> &lt;span class="kt">void&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">__sort&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_RandomAccessIterator&lt;/span> &lt;span class="n">__first&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_RandomAccessIterator&lt;/span> &lt;span class="n">__last&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="n">_Compare&lt;/span> &lt;span class="n">__comp&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">__first&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="n">__last&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">__introsort_loop&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">__first&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__last&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">				&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">__lg&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">__last&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">__first&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">				&lt;span class="n">__comp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	 &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">__final_insertion_sort&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">__first&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__last&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">__comp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
 &lt;/div>
&lt;/div></description></item><item><title>手写平衡树专题总览</title><link>https://dog-du.github.io/posts/algo-balanced-tree-overview/</link><pubDate>Thu, 30 Nov 2023 12:56:29 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-balanced-tree-overview/</guid><description>站在实现难度、扩展性和基础操作效率三个维度，对 B 树、AVL、红黑树、Splay、Treap 与 Trie 方案做一次总览式复盘。</description></item><item><title>01Trie树与m进制Trie解决平衡树问题</title><link>https://dog-du.github.io/posts/algo-trie-balanced-tree/</link><pubDate>Wed, 29 Nov 2023 22:03:08 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-trie-balanced-tree/</guid><description>从 01Trie 与 m 进制 Trie 两种建模方式出发，讨论它们如何模拟平衡树题目的有序集合操作，并给出基于洛谷 P3369 与 P1177 的实现与验证。</description></item><item><title>二叉树广义表表示和二叉树的转换</title><link>https://dog-du.github.io/posts/algo-btree-general/</link><pubDate>Thu, 23 Nov 2023 10:48:54 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-btree-general/</guid><description>&lt;p>数据结构课上老师提到“二叉树怎么创建”时，我突然意识到：如果靠手动一个节点一个节点去连，不仅慢，而且很不适合表达结构复杂的样例。相比之下，广义表更像是一种适合输入、输出和调试的树结构描述方式。&lt;/p>
&lt;p>这篇文章就围绕这个问题展开，记录广义表表示法，以及它和常见二叉链表表示之间的转换实现。&lt;/p></description></item><item><title>Splay树伸展树入门与实现</title><link>https://dog-du.github.io/posts/algo-splay-tree/</link><pubDate>Wed, 22 Nov 2023 22:21:30 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-splay-tree/</guid><description>围绕伸展操作的直觉、旋转策略与删除流程，整理 Splay 树的核心实现，并结合洛谷 P3369 给出完整代码与实战记录。</description></item><item><title>无旋fhq-Treap实现</title><link>https://dog-du.github.io/posts/algo-fhq-treap/</link><pubDate>Wed, 22 Nov 2023 21:50:14 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-fhq-treap/</guid><description>用 split / merge 视角整理无旋 fhq-Treap 的代码实现，展示它为何在模板竞赛题里兼具简洁度与扩展性。</description></item><item><title>Treap树堆带旋版本实现</title><link>https://dog-du.github.io/posts/algo-treap-rotating/</link><pubDate>Wed, 22 Nov 2023 21:42:35 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-treap-rotating/</guid><description>介绍带旋 Treap 的定义、插入删除策略与旋转维护方式，并用洛谷 P3369 的完整实现说明这类随机平衡树为何写起来足够直接。</description></item><item><title>手写红黑树全代码实现</title><link>https://dog-du.github.io/posts/algo-rbtree-full-impl/</link><pubDate>Wed, 22 Nov 2023 21:29:13 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-rbtree-full-impl/</guid><description>从双红插入、双黑删除到旋转染色策略，系统整理手写红黑树时最容易混乱的环节，并附上洛谷 P3369 的完整代码。</description></item><item><title>手写B树全代码实现</title><link>https://dog-du.github.io/posts/algo-b-tree-full-impl/</link><pubDate>Wed, 15 Nov 2023 21:35:06 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-b-tree-full-impl/</guid><description>围绕 B 树的查找、分裂、删除与调试经验展开，记录一次从概念到完整实现的手写过程，并用桶排场景做验证。</description></item><item><title>AVL树全代码实现与验证</title><link>https://dog-du.github.io/posts/algo-avl-tree-full-impl/</link><pubDate>Wed, 15 Nov 2023 20:10:02 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-avl-tree-full-impl/</guid><description>按定义、旋转、插入删除三个层次整理 AVL 树手写过程，并通过洛谷 P3369 与 P1177 的代码记录验证实现正确性。</description></item><item><title>蓝桥杯2019国B-第八大奇迹</title><link>https://dog-du.github.io/posts/algo-lanqiao-8th/</link><pubDate>Mon, 23 Oct 2023 11:28:08 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-lanqiao-8th/</guid><description>&lt;p>题目传送：&lt;a href="https://www.luogu.com.cn/problem/P8701" target="_blank" rel="noreferrer">P8701 [蓝桥杯 2019 国 B] 第八大奇迹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)&lt;/a>&lt;/p></description></item><item><title>LeetCode接雨水i 两种思想四种解法</title><link>https://dog-du.github.io/posts/algo-trapping-rain/</link><pubDate>Mon, 23 Oct 2023 11:18:53 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-trapping-rain/</guid><description>&lt;p>这道题非常适合拿来对比不同解法的思维差异。核心视角主要有两类：一类是“以区间凹槽为中心”去找左右边界，另一类是“以单个柱子的贡献为中心”去算每个位置能接多少水。&lt;/p>
&lt;p>下面按这个思路整理四种常见写法。&lt;/p></description></item><item><title>链表/单链表 O(nlogn)排序</title><link>https://dog-du.github.io/posts/algo-list-sort/</link><pubDate>Thu, 19 Oct 2023 11:40:45 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-list-sort/</guid><description>&lt;p>写单链表的时候我突然想到一个问题：数组有 &lt;code>sort&lt;/code>，那链表自己的 &lt;code>O(n log n)&lt;/code> 排序范式到底是什么？&lt;/p>
&lt;p>顺着这个问题往下查，很自然就会走到 &lt;code>std::list::sort()&lt;/code>，也就能看到链表为什么天然适合归并排序。&lt;/p></description></item><item><title>洛谷 U264950 3D打印 一道折磨我很久的题目</title><link>https://dog-du.github.io/posts/algo-luogu-3dprint/</link><pubDate>Thu, 19 Oct 2023 11:20:53 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-luogu-3dprint/</guid><description>&lt;p>刷 LeetCode 的时候看到有人求助这道题，又在洛谷上找到了同题，本来以为是一个不算太难的构造/数据结构题，结果一路做成了长时间拉扯战。&lt;/p>
&lt;p>链接：&lt;a href="https://www.luogu.com.cn/problem/U264950" target="_blank" rel="noreferrer">U264950 3D打印 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)&lt;/a>&lt;/p>
&lt;p>这篇文章主要记录完整的思考过程，包括一开始那些看起来合理、但最后被复杂度或常数卡掉的方案。&lt;/p></description></item><item><title>蓝桥杯2023-网络稳定性</title><link>https://dog-du.github.io/posts/algo-lanqiao-net-stable/</link><pubDate>Fri, 13 Oct 2023 11:23:37 +0000</pubDate><guid>https://dog-du.github.io/posts/algo-lanqiao-net-stable/</guid><description>&lt;p>这道题是一个很典型的“路径最小边最大化”模型。抓住这一点之后，就会自然联想到先建&lt;strong>最大生成树&lt;/strong>，再在树上做查询。&lt;/p>

&lt;h2 class="relative group">思路
 &lt;div id="思路" class="anchor">&lt;/div>
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%80%9d%e8%b7%af" aria-label="锚点">#&lt;/a>
 &lt;/span>
 
&lt;/h2>
&lt;p>做法是：先用 Kruskal 建最大生成树，再利用 LCA 维护两点路径上的最小边权。这样每次查询都能在 &lt;code>O(log n)&lt;/code> 内完成。&lt;/p></description></item></channel></rss>