cmu15-445 Project #2-Hash Table

该项目涉及实现一个使用线性探测的哈希表,包括哈希表头页和块页的布局,以及哈希表的插入、获取和删除操作。哈希表需要支持持久化和表的动态调整。同时,介绍了并发控制的ReadWriteLatch,用于在多线程环境中管理哈希表的读写访问。

TASK #1 - PAGE LAYOUTS

在lab 2中需要实现一个使用线性探测方案的hash table,这个lab中的hash table的存储空间只能使用BufferPoolManager来获取,不能另外使用new或者malloc来获取存储hash table需要的空间。要实现的hash table必须支持持久化,在内存中写入硬盘后,重启DMBS也能重建该hash table。为了实现hash table的读写,在这个lab中需要实现Hash Table Header Page和Hash Table Block Page这个两种Page。

HASH TABLE HEADER PAGE
  • 关于HASH TABLE HEADER PAGE数据结构的定义:

Variable Name Size Description
page_id_ 4 bytes Self Page Id
size_ 4 bytes Number of Key & Value pairs the hash table can hold
next_ind_ 4 bytes The next index to add a new entry to block_page_ids_
lsn_ 4 bytes Log sequence number (Used in Project 4)
block_page_ids_ 4080 bytes Array of block page_id_t

这个project所要实现的就是在多个page中构建一个linear probe hash table,hash table header page相当于这个hash table的meta data page,负责将所有的block page串联起来。一个header page对应Page中的data_,所以一个header page的大小为4096bytes。在实现时header page的成员变量声明如下:

class HashTableHeaderPage { 
 private:
  __attribute__((unused)) lsn_t lsn_;
  __attribute__((unused)) size_t size_;
  __attribute__((unused)) page_id_t page_id_;
  __attribute__((unused)) size_t next_ind_ = 0;
  __attribute__((unused)) page_id_t block_page_ids_[0];
  }

这个类的声明用到了柔性数组,block_page_ids_声明时数组的大小为0,block_page_ids_可以根据给header的空间大小自适应改变,所以在这个project中block

### 如何在 Kali Linux 上安装和配置 Vulhub 漏洞靶场 #### 准备工作 为了顺利搭建 Vulhub 漏洞靶场,在开始之前需确认已准备好一台运行有最新版 Kali Linux 的机器或虚拟机。确保该系统能够正常访问互联网以便下载必要的软件包。 #### 安装 Docker 和 Docker Compose 由于 Vulhub 是基于 Docker 及其编排工具 Docker Compose 构建而成,因此首要任务是在 Kali 中部署这两个组件[^3]。 更新本地软件源列表并安装依赖项: ```bash sudo apt update && sudo apt upgrade -y ``` 接着执行命令来安装 Docker CE 版本以及 Docker Compose 插件: ```bash sudo apt install docker.io docker-compose -y ``` 验证安装成功与否可以通过查看版本号来进行检查: ```bash docker --version docker-compose --version ``` #### 获取并启动 Vulhub 项目文件 完成上述准备工作之后就可以着手获取官方提供的 Vulhub 资料库了。克隆仓库到本地目录下: ```bash git clone https://github.com/vulhub/vulhub.git ~/vulhub/ cd ~/vulhub/ ``` 浏览 `~/vulhub/` 文件夹内的子文件夹可以发现众多不同类型的漏洞场景模拟环境;每一个特定漏洞都有对应的 README.md 文档说明具体操作指南[^4]。 对于初次使用者来说推荐先尝试一些较为基础且常见的 Web 应用程序安全问题作为入门练习,比如 SQL 注入攻击实验等。进入选定的目标漏洞案例所在路径后依照指示创建容器实例即可开启学习之旅。 例如要启动一个存在 CVE-2017-9841 远程代码执行缺陷的 Apache Struts2 示例应用,则只需切换至相应位置再发出如下指令便可一键搞定整个过程: ```bash cd struts2/s2-057 docker-compose up -d ``` 此时浏览器里输入 http://<Your_Kali_IP>:8080 即可看到正在运行的服务页面[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值