Zsh Blog

只想安安静静写代码

Git系列(2)分支策略

分支约定 Git提供了创建分支的功能,但是没有详细说明如何使用 需要有一个基于团队协作的最佳实践去避免错误和混淆 帮助新成员快速理解协作流程 下面来具体说明。 基于主线分支开发,短时分支策略 只有极少数的分支 分支关联很小的提交 高质量的测试和QA 分支用后即删 基于阶段分支开发,长期存活分支策略 存在不同类型的分支 每个类型的分支有...

Git系列(1)完美的提交

如何创建一个完美的提交 添加正确,合适的更改内容到暂存区 编写易读的提交信息 下面来具体说明。 很多时候我们经常有的一个问题是,更改了许多文件,并且文件之间彼此更改的目的不同,最后提交的时候,一股脑git add . && git commit -m "update",这种方式虽然方便快捷,可带来的后果是无法回溯,在未来的时间看到这段提交记录无法得知当时改动...

接口性能优化

背景 最新公司产品上线,对接口性能有一定的要求,因此需要开展一波接口性能治理 准备工作 压测工具:JMeter或者测试平台 预期目标:期望 X QPS下95%响应时间在Y以下,并且不允许出现大于Z的响应时间 监控工具:Grafana,Prometheus, Arthas 步骤 使用压测工具准备好压测用例和数据 开始释放压测流量 ...

MIT 6.830 实现简易数据库 lab

exercise 1 实现对某一字段直方图的构建。估计查询计划的代价首先要获得数据的统计数据,本lab采用直方图对数据进行统计。一个直方图代表着一个字段的统计信息, 直方图将字段的值分为多个相同的区间,并统计落于每个区间的记录数。每个区间的记录数是一个bucket,bucket的宽度是区间的大小,bucket的高度是落于该区间的记录的数量。 然后根据构造的直方图,计算某一谓词下某一字段的选择...

MIT 6.830 实现简易数据库 lab2

exercise 1 实现Filter和Join的操作,对应sql的where和join语法,所有的Operator都需要遍历,因此都需要实现迭代器逻辑,可以参考Project和OrderBy 字段类型,实验1需要实现 src/java/simpledb/execution/Predicate.java src/java/simpledb/execution/JoinPredica...

MIT 6.830 实现简易数据库 lab1

前言 最近在学习CMU-15-445数据库课程,想着能跟着课程实现一个简易数据库。但是CMU课程附带的Project是用c++写的,而我单纯只想学习数据库,不想为了写Project 去学c++。正好发现MIT-6.830内容跟CMU的课程内容很相近,同时附带的Project是用java实现的,于是就决定看CMU-15-445课程,同时实现MIT-6.830,同时 在这里记录一下MIT6.83...

Ubuntu安装Docker教程

最近经常需要在云服务器上安装Docker,在安装过程中出现不少问题,遂记录下来供自己以及有需要的朋友查阅。 本教程适用于Ubuntu 18.04 Ubuntu 20.04 Ubuntu 22.04 安装新版之前卸载旧版本 1 2 sudo apt-get remove docker docker-engine docker.io containerd runc sudo rm...

Gradle7多模块项目配置

最近自己的项目全部使用Gradle构建,但是在使用的过程中踩了不少坑,因此打算把遇到的坑全部记录下来,方便自己回顾的同时,也能帮助其他人。 这篇文章主要记录如何使用Gradle配置多模块项目。因为自己的项目采用微服务架构,因此每个服务除了本身业务逻辑模块,还会有对外提供的api模块,于是我把它们拆成了2个模块 api和service。 在根目录下的build.gradle的内容如下 1 ...

Protobuf结合gradle最佳实践

最近打算实践一下Spring Cloud微服务,完整做一个系统。此次打算全部服务采用Gradle构建,微服务之间通信协议采用Protobuf,因此在系统架构上有2种方案 微服务自己定义message,需要对外提供api的进行单独打包并发布 所有message定义在独立的项目中打包并发布,所有微服务引用该jar包 经过一番考虑后选择了第2种,使用这种方案在每个微服务中可以不需要...

Kotlin实现Rust风格的Result

前段时间看到rust的错误处理方式,觉得十分优雅,于是就想能不能用Kotlin模仿一个版本。先看原版 1 2 3 4 5 6 7 8 9 10 11 12 use std::fs::File; fn main() { let f = File::open("hello.txt"); let f = match f { Ok(file) => file...