最近看了不少球友们的简历,除了工作党外,学生党的简历上基本上离不开外卖、点评和商城。差不多 200 份简历中,170 份简历都会写这三个,一点都不夸张(😁)。
外卖、点评和商城如何写简历上:https://paicoding.com/article/detail/2533200012845057
这也是没办法的事,一来学校不会给你提供实战的机会;二来不是每个人都有实习经历。随着求职门槛的不断提高,很多球友不得不自己去找项目做,但网上能找到文档很全,手把手教的项目实在寥寥无几。
这可能也是为什么技术派一上线就广受好评的原因之一。之前也给大家推荐过一些实战项目,比如说:
两个网盘项目:https://t.zsxq.com/07ih93r30
后面也会给大家推荐一些精品项目,比如说今天这个:手写数据库 MYDB,一个 Java 实现的简单数据库,部分原理参照了 MySQL、PostgreSQL 和 SQLite。目前实现的功能有:
- 数据可靠性和数据恢复
- MVCC(多版本并发控制)
- 两种事务隔离级别(读提交和可重复读)
- 死锁处理
- 简单的表和字段管理
- 简单的 SQL 解析
- 基于 socket 的 Server 和 Client
mydb 的一些资源
- 仓库地址如下:https://github.com/CN-GuoZiyang/MYDB
- 教程地址如下:https://shinya.click/projects/mydb/mydb0
- 球友提供的一份 MYDB 学习心得:https://t.zsxq.com/feuhh
- 另外一位球友的学习心得:https://t.zsxq.com/7n66O
- Go 版 Mydb 的教程:https://www.xuyifei.site/column/3/1
- 一位球友实现的 go 版本:https://github.com/XuYi-fei/SimpleDB
- 面试题1:https://t.zsxq.com/NlZeM
- 面试的时候被问参考了哪些开源项目时,怎么回复:https://t.zsxq.com/FpT7b
- 球友分享的 mydb 部署教程:https://t.zsxq.com/MKmP4
大部分答案只要被面渣逆袭 MySQL 篇,就都能回答上来:https://javabetter.cn/sidebar/sanfene/mysql.html
mydb 介绍+启动部署
我看了一下,差不多 2021 年 11 月份开始写的,写到 12 月份,一共 10 篇,阅读次数最高的一篇是 10329。
- 0 项目结构
- 1 从最简单的 TM 开始
- 2 引用计数缓存框架和共享内存数组
- 3 数据页的缓存与管理
- 4 日志文件和恢复策略
- 5 页面索引和 DM 实现
- 6 记录的版本和事务隔离
- 7 死锁检测和 VM 的实现
- 8 索引管理
- 9 字段与表管理
- 10 服务端客户端的实现和通信规则
教程所在的博客也非常漂亮,强烈推荐给球友们。如果你能在简历上写下这个项目,我想是非常吃香的。
我在本地已经跑通了,兼容 JDK 8,跑起来的方法在仓库的 readme 里写的很清楚。
先启动 Server
再启动 client。
记得要修改这两次的参数,改成你本地的路径。
MYDB 分为前端和后端,前后端通过 socket 进行通信,前端读取用户输入,发送到后端,输出返回结果,并等待下一次输入;后端则负责解析 SQL,如果是合法的 SQL 就执行并返回结果。
之前帮一个球友远程看问题,他莫名其妙地在 pom.xml 文件中加了一个 build 插件,一直编译不通过,mydb 这个项目只管导入就好了,Windows 的话注意用 Windows 的盘符。
1. mvn exec:java "-Dexec.mainClass=top.guoziyang.mydb.backend.Launcher" "-Dexec.args=-create D:\\java_project\\MYDB\\tmp\\mydb"
2.mvn exec:java "-Dexec.mainClass=top.guoziyang.mydb.backend.Launcher" "-Dexec.args=-open D:\\java_project\\MYDB\\tmp\\mydb"
3.mvn exec:java "-Dexec.mainClass=top.guoziyang.mydb.client.Launcher"
JDK 的话,我这边是 1.8 是确认 ok 的。别的什么都不要动。
Windows 下如果出现这个错误
尝试把命令换成这样的:
mvn exec:java -D"exec.mainClass"="top.guoziyang.mydb.backend.Launcher" -D"exec.args"="-create C:\temp\mydb"
不包括解析器的话,MYDB 分了五个模块:
- transaction manager(TM),通过维护 XID 文件来维护事务状态,并提供接口供其他模块来查询某个事务的状态。
- data manager(DM),管理数据库 DB 文件和日志文件。
- version manager(VM),基于两段锁协议实现调度序列的可串行化
回复