PROJECT #4: CONCURRENCY CONTROL
撰写本文的目的:记录本人在不参考其他任何形式的解决方法(思路/源码)、仅靠课程提供的资源(课本/参考资料)和Discord中high level的讨论的情况下,独立完成该课程的过程。
欢迎大家和我讨论学习中所遇到的问题。
ZiHao’s Blog
在gradescope获得80分,后续有时间再完成
实际完成时间:5.1-5.7
Task #1 - Timestamps- [✅] 1.1 Timestamp Allocation
When a transaction begins, the read timestamp will be the timestamp of the latest committed transaction, so that the transaction will be able to see everything committed before the transaction begins.
即,该事务能够读到,每个对象的指定版本:时间戳小于等于read stamp中最大的那个版本
Commit timestamp is the time th ...
Project #3: Query Execution
撰写本文的目的:记录本人在不参考其他任何形式的解决方法(思路/源码)、仅靠课程提供的资源(课本/参考资料)和Discord中high level的讨论的情况下,独立完成该课程的过程。
欢迎大家和我讨论学习中所遇到的问题。
ZiHao’s Blog
已在grade scope获得100分,但是性能仍有待提升
实际完成时间:4.6、4.24-4.30
If you are using CLion to run the BusTub shell, please add a –disable-tty parameter to the shell, so that it works correctly in the CLion terminal.
Task #1 - Access Method Executors- [✅] SeqScan给SeqScanExecutor增加了一个iterator_字段,不知道是不是多此一举哈
- [✅] Insert
called_字段
- [✅] Update
called_字段
- [✅] Delete- [✅] IndexScan- [✅] ...
rustlings
说来惭愧,大三寒假的时候学过一次Rust,但是只是过了一遍语法,并且没有真正有项目实践,所以很快就遗忘了。
这次开始尝试实践/项目驱动学习,正好最近需要写一个Web项目,尝试使用Rust来编写,以巩固对Rust的学习。
首先用rustlings对Rust的基本语法体系进行最小化学习
后续会根据需要来拓展对相关概念深入的学习(the book/async/rustdoc)
rustlings:需要完整做一遍,并把相关概念汇总到此页面,后续作为复习/字典查阅
the book:根据需要对Rust中的概念进行复习,作为字典查看
Asynchronous Programming:web编程中涉及到异步时再深入学习
[toc]
Book Chapter Mapping
Exercise
Book Chapter
variables
§3.1
functions
§3.3
if
§3.5
primitive_types
§3.2, §4.3
vecs
§8.1
move_semantics
§4.1-2
structs
§5.1, §5.3
e ...
基于Actix-Web(Rust)和Vue的Web开发记录
后端(基于actix-web)login
登录后,使用session存储用户的相关信息用于导出功能
登录后,生成token返回给前端作为信息认证
register
注册后转到登录界面
Homeexport & export_in_db
用户使用该功能时,需要在请求header中传回token来认证
bug:
1GET http://localhost:8080/export/x x x 401 (Unauthorized)
分析:授权问题
solution:logger + debug
发现是 actix-session中设置的内容并没有在后续操作被访问,
因为在postman中,actix-session返回的set-cookie会默认填充到cookie中
而浏览器并没有这个功能,需要前端实现。
这波是postman的锅
bug:为了actix-session能够正常使用(需要将actix-session放置于响应头中的set-cookie,置于其他请求头中),需要使用axios的axios.defaults.withCredentials = ...
Project#2: Extendible Hash Index
撰写本文的目的:记录本人在不参考其他任何形式的解决方法(思路/源码)、仅靠课程提供的资源(课本/参考资料)和Discord中high level的讨论的情况下,独立完成该课程的过程。
欢迎大家和我讨论学习中所遇到的问题。
ZiHao’s Blog
Project #2: Extendible Hash Index
先记录完成的过程,然后再总结和思考
准备Due:四个星期左右(通过本地测试-4天左右+通过线上测试-一周左右,但由于中途有其他事情,时间跨度很大)
在开始完成该项目之前,首先确保两件事
确保Project#1的代码实现是正确的,最好多提交几次,因为测试用例可能会有不同
一定要先从原bustub仓库pull最新的代码,不然可能会缺少一些给定的实现
实验环境:
MacOS
CLion/VSCode
Task #1-Read/Write Page Guards
数据成员:存储指针
指向BPM
指向Page对象
析构函数:确保当BasicPageGuard对象离开作用域的时候:自动调用UnpinPage
方法成员:除此之外,需要提供 ...
Extendible Hash Table
Extendible Hash Table
hash function
对于给定key生成32bit的值
bucket address table
对于每个32bit的hash value,都有一个table entry相对应
但在某一时刻该table的实际使用大小由global prefix控制
global prefix:用于生成global mask
在实际使用时,global prefix用于控制当前bucket address table实际使用的大小
具体为2^(global prefix)个条目
local prefix:用于生成local mask
不会为所有hash value都生成一个bucket,而是按需生成
用于判断当前table entry指向的bucket
如果local prefix == glocal prefix:
则说明只有该entry拥有指向的bucket
按需体现在local prefix < global prefix:
拥有相同local prefix的entry指向同一个bucket
...
Project#1: Buffer Pool
撰写本文的目的:记录本人在不参考其他任何形式的解决方法(思路/源码)、仅靠课程提供的资源(课本/参考资料)和Discord中high level的讨论的情况下,独立完成该课程的过程。
欢迎大家和我讨论学习中所遇到的问题。
ZiHao’s Blog
由于gradescope中对non-cmu students仅开放了Project#0,本文方法仅通过了本地测试,极有可能有错误(并发访问)
目前通过了GradeScope所有测试并且拿到了100.0/100.0,但是性能较差(与Leaderboard上第一名有十倍的性能差距),打算在下一篇文章记录一下对BPM的性能进行优化,例如本文中提到的DiskScheduler创建的对Request的处理Thread实际上是串行的,后续再保证顺序正确的情况下对其进行适当的并行处理。
Task#1 - LRU-K Replacement Policy思路:
基本可以参考源码中给出的注释,一步一步实现
每次RecordAccess一个Frame时,都会使得leu_replacer的current_timestamp_自增1,方便挑选被evict的fr ...
Project#0: C++ Primer
撰写本文的目的:记录本人在不参考其他任何形式的解决方法(思路/源码)、仅靠课程提供的资源(课本/参考资料)和Discord中high level的讨论的情况下,独立完成该课程的过程。
欢迎大家和我讨论学习中所遇到的问题。
ZiHao’s Blog
Task#1 - Copy-On-Write Trie按照源码中给的提示即可完成
总体思路:use std::shared_ptr to traverse, then reuse nodes that do not need to be modified and use std::shared_ptr with Clone to build and modify memebers from the bottom up on nodes that need to be modified.
GetGet函数实现较为简单
Put
遍历trie,在vector中存储每个遍历过的TrieNode,判断key对应的node是否存在
若存在:
则直接创建一个新的TrieNodeWithValue(可能有孩子节点)
并且利用vector来自底向上依次对 ...
Paper Reading: TECCD: A Tree Embedding Approach for Code Clone Detection
摘要 & 引言“Abstract” (Gao 等, 2019, p. 145) (pdf) [摘要——background:
Code Clone Detection Techniques:自动化的检测源码中重复或者高度相似的代码片段,提高代码的维护性、可读性等。
过去的技术:基于字符串匹配、语法分析以及机器学习技术。
what:
解决代码克隆检测
how:
引入tree embedding技术: 1. 获得AST每个intermediate node的node vector 2. 从所相关的node vectors集合组合出tree vector 3. 计算出tree vector之间的欧式几何距离,作为code clones的衡量标准
novelty:
首次引入tree embedding到代码克隆检测中]
embeddingterm-embedding“term-embedding” (Gao 等, 2019, p. 145) (pdf) 「embedding:
将一组离散的文本特征(例如单词或字符)映射到一个实 ...
Git
记录一下因为各种需求而对Git缝缝补补的学习
比较本地仓库分支 和 远程仓库分支commit的不同
git fetch local_repo
git log local_branch..remote_repo/remote_branch
..作差集