- 博客(43)
- 收藏
- 关注
原创 CMU15-445 (2026 Spring) Project#2 - B+ Tree
难度相当大的一个环节,同时也是自由度相当高的一个 project;在本次 project 中,我们要为数据库编写一个存储在磁盘上、基于 page 结构的 B+ Tree 索引。本次 project 有 4 个 Task:但 Task#4 的并发控制(Concurrency Control)是依靠 project#1 的 page guard 实现的,如果前一个 project 写的好的话,project#2 中其实不需要担心这一个任务。由于任务的自由度相当大(所有辅助函数都要我们自己设计),同时设计的难度也
2026-03-16 21:29:02
249
原创 CMU15-445 (2026 Spring) Project#1 - Buffer Pool Manager
让我们来实现一个为数据库内核服务的 cache。本次 project 我们要实现 3 个 Task:一般来说适用于 cache 的策略有两种: 和 ,前者淘汰最久未被访问的,后者淘汰访问频次最低的;但是这两种淘汰指标在不同场景下各有优势,而且 的实现难度比 会更高一些(因为要维护频次信息),因此 IBM 提出了兼顾“最近访问”以及“访问频次”的算法,即自适应(Adaptive)置换(Replacement)缓存(Cache)置换策略。标准 ARC 算法维护以下四个变量:我们要实现的 相较于标准 ARC
2026-02-16 15:20:14
660
原创 CMU15-445 (2026 Spring) Project#0 - C++ Primer
学的数据库知识快忘完了,写一个 15445 回忆一下。虽然手上有一个跑在 U 盘上的 archlinux,但 15445 的 repo README 声称只支持 Ubuntu 24.04 和 MacOS,所以不得不照例用 docker 搭建环境。尽管 README 中还特别提到了不支持 WSL,实际试了一下还是完全没问题的,感觉写这么一句纯纯甩锅。项目从几年前开始一直采用 C++17 标准,现在来看这已经是接近十年的标准了(不过 FAQs 中似乎提及项目用的是 C++20 写的?不太懂)
2026-01-28 00:56:26
328
1
原创 将带 capture 的 lambda 转换为函数指针
我们都知道一个不带捕获的 lambda 天然可以被转换为函数指针,而且对于满足以下特点的实体,任何 lambda 都可以。的模板参数中加一个含默认值的 lambda 非类型参数(代码中已包含),这同样可以保证每次调用。但被构造目标是 C++ 的 lambda 对象,实际返回的函数指针类型依然兼容性地保留了。的可调用对象而言,会存在相同类型的实例化模板需要存储多个不同实例的问题。修饰的变量存储需要被转换为指针的 lambda 是最为可行的方法。因此代码中提供了一个非类型参数作为同种类型、不同实例的标签。
2025-06-03 03:36:03
949
原创 C++11 也能用的 std::move_only_function
是 C++23 引入的一个只支持移动语义的函数包装器。与 相似, 也提供可调用目标的泛型包装。但这两个类型支持的值语义不同: 只能像使用 一样,可移动、可交换但不可复制; 则允许复制、交换和移动。因为在 C++ 中,一个只提供了复制构造/复制赋值、并且没有删除对应的移动语义版本的类型,会隐式地可移动(实际上还是复制),但只提供了移动构造/移动赋值的类型就只能被移动;所以可以将“可移动”视作是一个更宽泛地构造与赋值约束。因此 在可存储的类型种类数量上要多于 。除了语义上的差别, 还有一点与 不同:
2025-05-30 21:38:21
944
原创 在 C++ 中对类型进行排序
类似的,我也可以为这个TypeList很显然,因为TypeList是一个线性容器,从中查找某个元素时需要从头遍历整个列表。但可以注意到:当我们使用检查某个类型是否是一个类型的基类时,这个操作的结果可以经由类型协变直接返回,所以我们可以据此编写一个TypeSetC++ 不允许在多继承中重复继承多个相同的基类,所以如果TypeSet包含了重复元素就会直接触发一次编译硬错误。不幸的是,这个硬错误无法被运用在 SFINAE 中,以检查多个类型列表是否包含重复元素。
2025-05-04 23:17:49
849
原创 遍历 std::tuple 并获取分量的值
返回的是指针,我们需要二次判空再处理,而且指针显得不太好看也不太安全;,我们需要从中拿走某些特定类型的成员分量的值,并且在这个类型不存在时选中我们指定的默认值。中查找指定类型的成员分量,并在找到时取出该成员的值,否则返回我们指定的一个默认值。因为需求是取出某个分量的值,递归终点处的处理方式就变成了先判断传进来的。无论是哪个版本的函数,在使用类型查找成员分量时,如果这个成员的类型在。找到了我们期待的成员就返回它的引用,找不到时直接触发编译报错;有的 bro 有的,我们自己编写一个访问函数就是。
2025-02-13 01:30:31
588
原创 面向对象程序设计-05-类与对象
定义一个存折类CAccount,存折类具有帐号(account, long)、姓名(name,char[10])、余额(balance,float)等数据成员,可以实现存款(deposit,操作成功提示“saving ok!”)、取款(withdraw,操作成功提示“withdraw ok!”)和查询余额(check)的操作,取款金额必须在余额范围内,否则提示“sorry!over limit!
2024-07-21 00:00:00
862
原创 面向对象程序设计-10-期中综合练习
/ 姓名// n个成绩(1)添加构造函数,用虚参name1、n1、数组a1初始化CStudent类对象。(2)添加输出函数,按样例格式输出CStudent对象值。主函数输入数据,测试CStudent对象。
2024-07-21 00:00:00
734
原创 CS144(2024 Winter)Lab Checkpoint 6: building an IP router
介绍了 Lab6 实现路由器的思路。
2024-03-03 02:09:14
1428
2
原创 CS144(2024 Winter)Lab Checkpoint 5: down the stack (the network interface)
介绍 Lab5。
2024-02-24 10:30:00
1640
7
原创 CS144(2024 Winter)Lab Checkpoint 4: interoperating in the world
介绍了 Lab4 的文档。
2024-02-10 17:07:33
2130
4
原创 CS144(2024 Winter)Lab Checkpoint 3: the TCP sender
分析如何实现 Lab3 中的 TCPSender。
2024-02-05 17:56:53
2445
13
原创 CS144(2024 Winter)Lab Checkpoint 2: the TCP receiver
介绍了 Lab2 中实现 TCP receiver 的思路。
2024-01-25 00:34:04
2466
15
原创 CS144(2024 Winter)Lab Checkpoint 1: stitching substrings into a byte stream
实现了 TCP 字节重组器的 Lab。
2024-01-20 00:30:29
2601
1
原创 CS144(2024 Winter)Lab Checkpoint 0: networking warmup
使用 WSL2+Docker 的方式搭建 CS144 的实验环境。
2024-01-12 21:09:50
5046
55
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅