<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Kovnt的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Kovnt</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Kovnt]]></copyright><item><title><![CDATA[CMU15-445 (2025 Fall/2026 Spring) Project#4 - Concurrency Control]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/161522153</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/161522153</guid><author>Kovnt</author><pubDate>Sat, 30 May 2026 00:00:00 +0800</pubDate><description><![CDATA[写 task#4 的时候被狠狠坑害了…]]></description><category></category></item><item><title><![CDATA[CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/160774846</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/160774846</guid><author>Kovnt</author><pubDate>Tue, 05 May 2026 00:29:54 +0800</pubDate><description><![CDATA[又要设计算子又要写优化器，特别是还有一个完全要我自己发挥的，搞得差不多全部时间都浪费在思考上，这次 project 真给我写力竭了。虽然感觉写优化比设计算子要简单（]]></description><category></category></item><item><title><![CDATA[Haskell 初探]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/160345503</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/160345503</guid><author>Kovnt</author><pubDate>Mon, 20 Apr 2026 21:12:52 +0800</pubDate><description><![CDATA[阅读《Haskell 趣学指南》有感。]]></description><category></category></item><item><title><![CDATA[CMU15-445 (2025 Fall/2026 Spring) Project#2 - B+ Tree]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/159130647</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/159130647</guid><author>Kovnt</author><pubDate>Mon, 16 Mar 2026 21:29:02 +0800</pubDate><description><![CDATA[难度相当大的一个环节，同时也是自由度相当高的一个 project；在本次 project 中，我们要为数据库编写一个存储在磁盘上、基于 page 结构的 B+ Tree 索引。本次 project 有 4 个 Task：但 Task#4 的并发控制（Concurrency Control）是依靠 project#1 的 page guard 实现的，如果前一个 project 写的好的话，project#2 中其实不需要担心这一个任务。由于任务的自由度相当大（所有辅助函数都要我们自己设计），同时设计的难度也]]></description><category></category></item><item><title><![CDATA[CMU15-445 (2025 Fall/2026 Spring) Project#1 - Buffer Pool Manager]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/158127163</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/158127163</guid><author>Kovnt</author><pubDate>Mon, 16 Feb 2026 15:20:14 +0800</pubDate><description><![CDATA[让我们来实现一个为数据库内核服务的 cache。本次 project 我们要实现 3 个 Task：一般来说适用于 cache 的策略有两种： 和 ，前者淘汰最久未被访问的，后者淘汰访问频次最低的；但是这两种淘汰指标在不同场景下各有优势，而且  的实现难度比  会更高一些（因为要维护频次信息），因此 IBM 提出了兼顾“最近访问”以及“访问频次”的算法，即自适应（Adaptive）置换（Replacement）缓存（Cache）置换策略。标准 ARC 算法维护以下四个变量：我们要实现的  相较于标准 ARC]]></description><category></category></item><item><title><![CDATA[CMU15-445 (2025 Fall/2026 Spring) Project#0 - C++ Primer]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/157450040</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/157450040</guid><author>Kovnt</author><pubDate>Wed, 28 Jan 2026 00:56:26 +0800</pubDate><description><![CDATA[学的数据库知识快忘完了，写一个 15445 回忆一下。虽然手上有一个跑在 U 盘上的 archlinux，但 15445 的 repo README 声称只支持 Ubuntu 24.04 和 MacOS，所以不得不照例用 docker 搭建环境。尽管 README 中还特别提到了不支持 WSL，实际试了一下还是完全没问题的，感觉写这么一句纯纯甩锅。项目从几年前开始一直采用 C++17 标准，现在来看这已经是接近十年的标准了（不过 FAQs 中似乎提及项目用的是 C++20 写的？不太懂）]]></description><category></category></item><item><title><![CDATA[自引用结构中的智能指针]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/148726119</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/148726119</guid><author>Kovnt</author><pubDate>Tue, 17 Jun 2025 23:36:58 +0800</pubDate><description><![CDATA[懒得写摘要]]></description><category></category></item><item><title><![CDATA[将带 capture 的 lambda 转换为函数指针]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/148389950</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/148389950</guid><author>Kovnt</author><pubDate>Tue, 03 Jun 2025 03:36:03 +0800</pubDate><description><![CDATA[我们都知道一个不带捕获的 lambda 天然可以被转换为函数指针，而且对于满足以下特点的实体，任何 lambda 都可以。的模板参数中加一个含默认值的 lambda 非类型参数（代码中已包含），这同样可以保证每次调用。但被构造目标是 C++ 的 lambda 对象，实际返回的函数指针类型依然兼容性地保留了。的可调用对象而言，会存在相同类型的实例化模板需要存储多个不同实例的问题。修饰的变量存储需要被转换为指针的 lambda 是最为可行的方法。因此代码中提供了一个非类型参数作为同种类型、不同实例的标签。]]></description><category></category></item><item><title><![CDATA[C++11 也能用的 std::move_only_function]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/148345314</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/148345314</guid><author>Kovnt</author><pubDate>Fri, 30 May 2025 21:38:21 +0800</pubDate><description><![CDATA[是 C++23 引入的一个只支持移动语义的函数包装器。与  相似， 也提供可调用目标的泛型包装。但这两个类型支持的值语义不同： 只能像使用  一样，可移动、可交换但不可复制； 则允许复制、交换和移动。
因为在 C++ 中，一个只提供了复制构造/复制赋值、并且没有删除对应的移动语义版本的类型，会隐式地可移动（实际上还是复制），但只提供了移动构造/移动赋值的类型就只能被移动；所以可以将“可移动”视作是一个更宽泛地构造与赋值约束。因此  在可存储的类型种类数量上要多于 。除了语义上的差别， 还有一点与  不同： ]]></description><category></category></item><item><title><![CDATA[在 C++ 中对类型进行排序]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/147705279</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/147705279</guid><author>Kovnt</author><pubDate>Sun, 04 May 2025 23:17:49 +0800</pubDate><description><![CDATA[类似的，我也可以为这个TypeList很显然，因为TypeList是一个线性容器，从中查找某个元素时需要从头遍历整个列表。但可以注意到：当我们使用检查某个类型是否是一个类型的基类时，这个操作的结果可以经由类型协变直接返回，所以我们可以据此编写一个TypeSetC++ 不允许在多继承中重复继承多个相同的基类，所以如果TypeSet包含了重复元素就会直接触发一次编译硬错误。不幸的是，这个硬错误无法被运用在 SFINAE 中，以检查多个类型列表是否包含重复元素。]]></description><category></category></item><item><title><![CDATA[遍历 std::tuple 并获取分量的值]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/145602739</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/145602739</guid><author>Kovnt</author><pubDate>Thu, 13 Feb 2025 01:30:31 +0800</pubDate><description><![CDATA[返回的是指针，我们需要二次判空再处理，而且指针显得不太好看也不太安全；，我们需要从中拿走某些特定类型的成员分量的值，并且在这个类型不存在时选中我们指定的默认值。中查找指定类型的成员分量，并在找到时取出该成员的值，否则返回我们指定的一个默认值。因为需求是取出某个分量的值，递归终点处的处理方式就变成了先判断传进来的。无论是哪个版本的函数，在使用类型查找成员分量时，如果这个成员的类型在。找到了我们期待的成员就返回它的引用，找不到时直接触发编译报错；有的 bro 有的，我们自己编写一个访问函数就是。]]></description><category></category></item><item><title><![CDATA[多继承与线性化继承]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/145521277</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/145521277</guid><author>Kovnt</author><pubDate>Sun, 09 Feb 2025 15:14:41 +0800</pubDate><description><![CDATA[介绍一个简单的编译期算法。]]></description><category></category></item><item><title><![CDATA[C++ 中 Unicode 字符串的宽度]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/144937245</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/144937245</guid><author>Kovnt</author><pubDate>Sat, 04 Jan 2025 23:44:14 +0800</pubDate><description><![CDATA[在 C++ 中用 Unicode 整活。]]></description><category></category></item><item><title><![CDATA[带捕获的 lambda 与函数指针]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/143818075</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/143818075</guid><author>Kovnt</author><pubDate>Sat, 16 Nov 2024 19:12:21 +0800</pubDate><description><![CDATA[介绍 lambda 函数和函数指针类型转换的方法。]]></description><category></category></item><item><title><![CDATA[union 的正确食用方法]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/141729061</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/141729061</guid><author>Kovnt</author><pubDate>Fri, 30 Aug 2024 22:43:56 +0800</pubDate><description><![CDATA[介绍一下 cpp 中 union 类型的概念。]]></description><category></category></item><item><title><![CDATA[面向对象程序设计-19-期末模拟]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/140354162</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/140354162</guid><author>Kovnt</author><pubDate>Sun, 21 Jul 2024 00:00:00 +0800</pubDate><description><![CDATA[换句话说就是（相较于其他公开题解）更低的查重率和更高的使用门槛；请酌情使用。]]></description><category></category></item><item><title><![CDATA[面向对象程序设计-18-期末综合练习]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/140354099</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/140354099</guid><author>Kovnt</author><pubDate>Sun, 21 Jul 2024 00:00:00 +0800</pubDate><description><![CDATA[换句话说就是（相较于其他公开题解）更低的查重率和更高的使用门槛；请酌情使用。]]></description><category></category></item><item><title><![CDATA[面向对象程序设计-17-类模板]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/140354070</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/140354070</guid><author>Kovnt</author><pubDate>Sun, 21 Jul 2024 00:00:00 +0800</pubDate><description><![CDATA[换句话说就是（相较于其他公开题解）更低的查重率和更高的使用门槛；请酌情使用。]]></description><category></category></item><item><title><![CDATA[面向对象程序设计-16-函数模板]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/140354032</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/140354032</guid><author>Kovnt</author><pubDate>Sun, 21 Jul 2024 00:00:00 +0800</pubDate><description><![CDATA[换句话说就是（相较于其他公开题解）更低的查重率和更高的使用门槛；请酌情使用。]]></description><category></category></item><item><title><![CDATA[面向对象程序设计-15-运算符重载应用]]></title><link>https://blog.youkuaiyun.com/Kovnt/article/details/140353919</link><guid>https://blog.youkuaiyun.com/Kovnt/article/details/140353919</guid><author>Kovnt</author><pubDate>Sun, 21 Jul 2024 00:00:00 +0800</pubDate><description><![CDATA[换句话说就是（相较于其他公开题解）更低的查重率和更高的使用门槛；请酌情使用。]]></description><category></category></item></channel></rss>