C++后端问题整理 动态多态的实现 在C++中,动态多态性是通过基类的指针或引用来实现的,使用虚拟函数来允许在派生类中重写基类的行为。当你通过基类的指针或引用调用一个虚拟函数时,C++运行时会根据对象的实际类型来决定调用哪个版本的函数,这就是动态绑定(或晚绑定)。 在这个例子中,Base类有一个虚拟成员函数print,而Derived1和Derived2类重写了这个函数。function函数接受一个Base类的引用作 2024-03-11 开发 #C++ #后端 #开发
MIT6.824 rpc 相关知识整理 RPC 基本概念 RPC 全称为 Remote Procedure Call,即 远程过程调用,他可以让用户在不知道底层网络协议的情况下,在本地的计算机就可以调用远端服务器的一些处理方法,然后服务器会把处理的结果返回到用户本地,就像这个方法写在用户本地空间中一样。 Client 端(由上到下): Application:应用层,表示和用户直接交互的部分,用户在该层确定自己想要调用的函数,并且输 2024-03-01 开发 #MIT6.824 #go #分布式系统
MIT6.824 lab4 sharded kv服务 项目记录 这个实验的任务是构建一个分片的键/值存储系统。在这个系统中,键值对被分配到一组 replaca 中的不同子集,这些子集称为“分片”。通过分片,每个raft组只处理一小部分分片的 put 和 get 操作,这样可以提高系统的整体吞吐量(单位时间内的 put 和 get 操作次数)。这个存储系统由两个主要部分组成: raft 副本组(replica group) :每个 raft 副本组负责一部分分 2023-12-09 开发 #MIT6.824 #go #分布式系统
MIT6.824 lab3 容错kv服务 项目记录 本实验使用 lab2 中的 Raft 库构建容错kv存储服务 。 kv服务是一个复制状态机,由多个使用 Raft 进行复制的kv服务器组成。只要大多数服务器处于活动状态并且可以通信,无论存在其他故障或网络分区,该服务都应该继续处理客户端请求。 我们需要基于 Raft 实现一个容灾备份的 Key-Value 存储,并保证其强一致性。 所谓 强一致性,一般指 线性一致性(Linearizable Co 2023-11-09 开发 #MIT6.824 #go #分布式系统
LeetCode刷题整理 今天是2023年10月31号,前段时间由于实习、科研、课业的多重压力和时间占用,刷题已经停滞了许久。目前刷题量是 340 道。在此立下flag,从今天起每天整理一道题。无他,唯手熟尔! 20231031阶段记录 147. 链表的插入排序 2023.11.1 晚 题目 给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是 2023-10-31 开发 #算法 #leetcode
MIT6.824 lab2 raft 项目记录 6.824lab2要求实现raft算法,将 Raft 实现为 Go 对象类型。 Raft通过选举leader、日志复制和安全性三个子问题来解决共识问题。leader负责管理日志,接受客户端的日志条目,并将其复制到其他服务器。Raft通过随机化方法简化了leader选举算法。Raft服务器之间通过RPC进行通信,基本共识算法只需要两种类型的RPC。Raft的日志复制机制保证了线性化语义,即每个操作都 2023-10-07 开发 #MIT6.824 #go #分布式系统
MIT6.824 lab1 mapreduce 项目记录 lab1 mapreduce任务描述 实现一个分布式 MapReduce,由两个程序组成:master 和 worker。只有一个master进程,以及一个或多个并行执行的worker进程。在真实的系统中,worker将在一堆不同的机器上运行,但在本实验中,我们在一台机器上运行它们。Workers 将通过 RPC 与 Master 对话。每个worker进程都会向master进程请求一项任务,从一 2023-10-01 开发 #MIT6.824 #go #分布式系统
CMU15-445 PROJECT4 Concurrency Control 项目记录 Overview 这个项目是关于在BusTub中添加对事务(transaction)的支持。 分为三个部分: Lock Manager:锁管理器,利用 2PL 实现并发控制。支持 REPEATABLE_READ、READ_COMMITTED 和 READ_UNCOMMITTED 三种隔离级别,支持 SHARED、EXCLUSIVE、INTENTION_SHARED、INTENTION_EXCLU 2023-04-06 开发 #C++ #CMU15-445 #数据库
CMU15-445 PROJECT3 Query Executor 项目记录 项目背景 首先讨论查询处理的基本知识。在这个项目中,需要自己构建SQL查询,以测试执行器实现。 下面的图片是BusTub的架构概览: BusTub的架构概览 在前两个实验中,我们实现了缓存池Buffer Pool Manager以及B+树索引。都是为了为SQL语句执行提供支持。 缓存池Buffer Pool Manager:负责将请求的page放到内存供引擎访问。数据库中的缓存称为缓冲池,缓 2023-04-04 开发 #C++ #CMU15-445 #数据库
CMU15-445 PROJECT2 B+TREE INDEX 项目记录 Checkpoint1 Single Thread B+Tree B_PLUS_TREE_PAGE Task1 的实现非常简单,都是一些普通的 Getter 和 Setter。 首先更深入了解以下Page的含义。Page.h中关于Page的成员定义如下: 12345678910/** The actual data that is stored within a page. */char data 2023-03-28 开发 #C++ #CMU15-445 #数据库