工具

Git

// --- 回退 merge
// 查看 操作记录,找到要回退的版本号
$ git reflog
3973c178 (HEAD -> test, origin/test) HEAD@{0}: merge feature-34: Merge made by the 'recursive' strategy.
58ed7d9b HEAD@{1}: checkout: moving from feature-34 to test
09140632 (origin/feature-34, feature-34) HEAD@{2}: commit:
....

// 执行 git reset
$ git reset --hard HEAD^
// or
$ git reset --hard HEAD@{2}
// or
$ git reset --hard 09140632

//// 另外还可以使用 git revert

// ---
git merge
git rebase

// The error is resolved by toggling the allow-unrelated-histories switch.
// https://www.educative.io/edpresso/the-fatal-refusing-to-merge-unrelated-histories-git-error
git pull origin master --allow-unrelated-histories

Gradle

使用 Gradle 构建 Spring 的项目,关于 Spring 的配置依赖

// https://www.jianshu.com/p/01588c396a29
// buildscript
buildscript {
    repositories {
        maven {
            // url 'https://repo.spring.io/libs-milestone'
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath("io.spring.gradle:dependency-management-plugin:1.0.9.RELEASE")
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("gradle.plugin.com.gorylenko.gradle-git-properties:gradle-git-properties:1.4.17")
        classpath("gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.13.0")
    }
}
apply plugin: 'org.springframework.boot'
// 会提供 bootJar task
apply plugin: 'java'
apply plugin: 'groovy'
// 当使用了该插件,Spring Boot的插件会自动地从你使用的Spring Boot
// 版本里导入spring-boot-dependencies bom
// 在声明依赖时,不需要带版本号
apply plugin: 'io.spring.dependency-management'

// ---
// ext 可以用来扩展属性
ext['slf4j.version'] = '1.7.20'
// or
ext {
    slf4jVersion = '1.7.20'
}

// bootJar
// springBoot
// maven 插件发布
// maven-publish 发布
  • 更新 gradle 的版本

$ ./gradlew wrapper --gradle-version=6.2.1 --distribution-type=all

OpenAPI Site

Maven

Shell

# 判断文件目录是否存在
dir="/tmp/workspace"
if [ ! -d "$dir" ]; then
  # mkdir /myfolder
  # ...
fi

# 判断文件是否存在并具备可执行权限
folder="/bin/bash"
if [ ! -x "$folder" ]; then
  # exec ...
fi

# -f 参数判断 $file 是否存在
file="/tmp/lock"
if [ ! -f "$file" ]; then
  touch "$file"
fi

# -n 判断一个变量是否有值
var=""
if [ ! -n "$var" ]; then
  echo "$var is empty"
  exit 0
fi

# 判断两个变量是否相等
if [ "$var1" = "$var2" ]; then
  echo '$var1 eq $var2'
else
  echo '$var1 not eq $var2'
fi
# 更多参考 https://www.cnblogs.com/jjzd/p/6397495.html

awk and sed

# 删除最后一个字段
$ minikube kubectl -- get pods -l app=redis-cluster -o jsonpath='{range.items[*]}{.status.podIP}:6379 ' | awk '{$NF="";print}'


# File Content as below, file.txt:
$ cat file.txt
Mike Harrington:[510] 548-1278:250:100 :25
Christian Dobbins:[408] 538-2358:155:90 :78
Susan Dalsass:[206] 654-6279:250:60 :49
Archie McNichol:[206] 548-1348:250:100 :200

$ awk -F: 'OFS=":"{$NF="";print}' file.txt
Mike Harrington:[510] 548-1278:250:100 :
Christian Dobbins:[408] 538-2358:155:90 :
Susan Dalsass:[206] 654-6279:250:60 :
Archie McNichol:[206] 548-1348:250:100 :

# 删除最后一个分隔符
$ awk -F: 'OFS=":"{$NF="";print}' file.txt | sed 's/:$//g'
Mike Harrington:[510] 548-1278:250:100
Christian Dobbins:[408] 538-2358:155:90
Susan Dalsass:[206] 654-6279:250:60
Archie McNichol:[206] 548-1348:250:100
  • shell map

# https://stackoverflow.com/questions/6047648/associative-arrays-error-declare-a-invalid-option
# 查看 bash 的版本
bash --version

# 使用 array 实现 hashmap 的功能
# 在 bash v3 版本中不支持 hashmap 的声明
array=(
    'hello::world.'
    'nice::to meet you'
)

for index in "${array[@]}" ; do
    KEY="${index%%::*}"
    VALUE="${index##*::}"
    echo "$KEY - $VALUE"
done

# 在 bash v4 中支持 map
declare -A hashmap
hashmap["key"]="value"
hashmap["key2"]="value2"
echo -e "${hashmap[\"key\"]}"
for key in ${!hashmap[@]}; do echo $key; done
for value in ${hashmap[@]}; do echo $value; done

Java Libs

Lombok

开发工具

阿里巴巴程序员常用的开发工具

  • Arthas: Java 线上诊断工具

  • Java 代码规约,alibaba/p3c

  • 应用实时监控工具 ARMS,提供前端、应用、自定义监控,可快速构建实时的应用性能和业务监控能力;应用端监控接入

  • Docsite , 中文版文档,一款集官网、文档、博客和社区为一体的静态开源站点的解决方案,具有简单易上手、上手不撒手的特质,同时支持 react 和静态渲染、PC端和移动端、支持中英文国际化、SEO、markdown文档、全局站点搜索、站点风格自定义、页面自定义等功能。

  • 性能测试工具 PTS

  • 云效开发者工具 KT,简化在 Kubernetes 下进行联调测试的复杂度,提高基于Kubernetes的研发效率;教程,这是一款好工具

  • 架构可视化 AHAS,为 K8s 等容器环境提供了架构可视化的功能,同时,具有故障注入式高可用能力评测和一键流控降级等功能,可以快速低成本的提升应用可用性

  • 数据处理工具 EasyExcel

  • 数据库连接池 Druid,Java 语言下的数据库连接池,它能够提供强大的监控和扩展功能

项目模版

关于项目模版,有一个 cookiecutter 的项目。

比较有用的项目模版: 1. cookiecutter golang 2. cookiecutter-data-science

实践

UML

Vagrant

HashiCorp Vagrant provides the same, easy workflow regardless of your role as a developer, operator, or designer. It leverages a declarative configuration file which describes all your software requirements, packages, operating system configuration, users, and more.

Vagrant 是一个非常好用的工具,仅仅声明一个定义文件就可以获得一个相同的环境;在开发阶段利用 Vagrant 可以获得相同的开发环境,屏蔽不同环境带来的差异;Vagrant 底层是依赖于 VM 虚拟机的能力

使用 Vagrant 时,如何自动映射以及同步宿主机和虚拟机之间的目录和文件?

在 Vagrantfile 中声明 config.vm.synced_folder ".", "/vagrant", type: "rsync", rsync__exclude: ".git/" ,rsync 默认开启了 rsync__auto=true ,但是如果需要自动双向同步修改后的内容,需要在宿主机上运行 vagrant rsync-auto

Makefile

KanBan 看板

kanban 的本质是一个朴素的思想:在制品(work in progress, WIP)必须被限制;

最后更新于