您需要了解的 8 个基本项目管理文档
项目管理涉及创建大量文档。如果您研究项目管理标准,您会发现至少有十几个不同的计划、多种类型的报告以及许多其他文档。好消息是项目经理不必编写所有内容 - 想法是仅编译对工作流程效率至关重要且利益相关者需要的内容。
项目管理涉及创建大量文档。如果您研究项目管理标准,您会发现至少有十几个不同的计划、多种类型的报告以及许多其他文档。好消息是项目经理不必编写所有内容 - 想法是仅编译对工作流程效率至关重要且利益相关者需要的内容。
gitlab 支持将作业完成时生成的文件或文件夹保存下来,这也产物可以在后续的作业中使用或下载,以实现资源的传递和共享。
他的关键字时 artifacts
使用方式
在上面的示例中,build_job 作业执行构建过程后会生成一个名为 dist/ 的目录作为产物。这个目录中包含了构建后的静态文件。这些产物可以在后续的作业中使用,例如部署到服务器上或者进行测试。
产物路径
paths 关键字用于指定需要保留的产物路径。可以是文件或者目录。在示例中,dist/ 表示保留整个 dist 目录及其下的所有文件。
其他属性
除了 paths
关键字外,还可以通过其他属性对产物进行更详细的配置,如 expire_in
用于设置产物过期时间、name
用于指定产物的名称等。
作用域
产物默认是作业级别的,即只能在同一个作业流程中的后续作业中使用。如果希望跨作业流程共享产物,可以使用 dependencies
关键字将产物传递给其他作业。
通过使用 artifacts
关键字,可以方便地将作业生成的产物保留下来,以供后续作业使用。这种机制实现了作业之间的数据共享和传递,使得 CI/CD 流程更加灵活和高效。
#!/bin/bash
clear
for var in Cloks Alabama Alaska Arizona Arkansas California Colorado
do
echo $var
done | sort
# for var in Cloks Alabama Alaska Arizona Arkansas California Colorado; do echo $var; done | sort
echo $var
sleep 1 && clear
list="Alabama Alaska Arizona Arkansas California Colorado"
# list = append(list, "Connecticut")
list=$list" Connecticut"
for state in $list; do
echo "have you ever visited $state?"
done
sleep 1 && clear
# reading values from a file
file="./states"
cat << EOF > $file
Alabama cloaks
Alaska
Arizona
Arkansas
California
Colorado
EOF
IFS_OLD=$IFS
IFS=$'\n'
for state in $(cat $file); do
echo "Visit beautiful $state"
done
IFS=$IFS_OLD
rm -rf $file
sleep 1 && clear
for file in ./*; do
if [ -d "$file" ];then
echo "$file is a directory"
elif [ -f "$file" ];then
echo "$file is a file"
fi
done
sleep 1 && clear
for (( i = 1; i <= 10; i++ )); do
echo "the number is $i"
done
sleep 1 && clear
var1=10
while [ $var1 -gt 0 ]; do
echo $var1
var1=$[ $var1 - 1 ]
done
sleep 1 && clear
var1=10
while echo $var1
[ $var1 -ge 0 ]; do
echo "this is inside loop"
var1=$[ $var1 - 1 ]
done
sleep 1 && clear
var1=10
until [ $var1 -eq 0 ]; do
echo $var1
var1=$[ $var1 - 1 ]
done
IFS_OLD=$IFS
IFS=$'\n'
for entry in $(cat /etc/passwd); do
echo "Values in $entry -"
IFS=:
for value in $entry; do
echo " $value"
done >> output.txt
done > output-1.txt
IFS=$IFS_OLD
sleep 1 && clear
for (( i = 0; i < 10; i++ )); do
echo "start loop $i"
for (( j = 0; j < i; j++ )); do
if [ $i -gt 5 ]; then
break 2
else
echo $i-$j
fi
done
done
sleep 1 && clear
IFS_OLD=$IFS
IFS=:
for folder in $PATH; do
echo "start folder: $folder"
for file in $folder/*; do
if [ -x $file ]; then
echo " $file"
fi
done
done
IFS=$IFS_OLD
sleep 1 && clear
input="users.csv"
cat << EOF > $input
rich,Richard Blum
christine,Christine Bresnahan
barbara,Barbara Blum
tim,Timothy Bresnahan
EOF
while IFS=',' read -r userid name; do
echo "adding $userid-$name"
# useradd -c "$name " -m $userid
done < "$input"
rm $input
在 Go 中,当你遇到 “build constraints exclude all Go files” 错误时,意味着在某个包中没有符合当前构建条件的文件。
项目中遇到一个服务需要调用 Cplus 开发的库函数实现某些功能,但是仅提供了 Windows 和 Linux 两个平台,导致我们无法在 Darwin 环境运行该服务,算是业务驱动我去更精细化的了解技术了。
我期望的条件编译规则如下:
规则 1, 2 可以使用平台条件编译实现:
规则 3 需要依赖与 -tags 配置进一步控制编译结果
这样配置已经没有问题了,但是仍然提示 “build constraints exclude all Go files” 错误?
我们可以使用 go list
命令来查看哪些文件被包括在内以及哪些被排除:
go list -tags ${TAG_NAME} -json ${PACKAGE_NAME}
示例输出如下:
{
"Dir": "",
"ImportPath": "",
"Name": "bitanswer",
"Files": [],
"GoFiles": [],
"IgnoredGoFiles": [
"file1.go",
"file2.go"
],
"GoFilesExclude": [
"file1.go",
"file2.go"
]
}
golang 文件夹命名也有条件编译的功能,当文件夹命名符合 filename_os 时,文件中的 //go:build
规则会失效。
指标体系=指标+体系,简言之,就是一系列相互关联的用于衡量业务发展状况的指标的集合。
指标:是对业务单元的度量值,使业务可以描述、度量和拆解;
体系:往往由一系列观察和思考业务的角度组成,即一系列的维度构成。
在数据分析领域,维度是不可缺少的一部分,离开维度谈指标可谓耍流氓。
可以朴素的理解为:希望以什么视角(维度)分析什么数据(指标),如果以日常监控或分析为目的,运营一般会选择按日进行监控,如每天注册用户数、日活等;如果是汇报或者宣发场景,可能会有按月、年、历史累计等维度做汇总,如某年度新增注册用户数等。
举个例子:在一个文件转换服务中,核心功能是实现一个类型自动转换的服务,并通过提升文件转换效率和稳定性来提升用户体验。
影响转换效率的主要是任务调度策略,比如分级调度
AARRR 模型就是业界知名的海盗模型,这是一个从获取客户开始到最终形成收益和口碑传播为目的的一个业务运营的思考过程,整个过程一共有五大环节,AARRR就是由这五个环节的英文名首字母组成,基本流程如下:
A(Acquisition)-> A(Activation)-> R(Retention)-> R(Revenue)-> R(Referral)
即获取、激活、留存、挖掘(变现)、传播。总之,AARRR 模型的核心思路就是从获客到获取收益的整个过程上量化数据、分析数据并反哺业务;相对而言,该模型更适用于渴望增长的创业公司的数据指标体系搭建参考,当然了,该模型对业务覆盖面较广,成熟公司若按该思路搭建的指标体系也会比较全面。事实上,AARRR模型是《增长黑客》这本书里抽象出来的概念,感兴趣的同学可以去看看,书中还有大量的产品设计和运营案例讲解,包含facebook,谷歌,微软还有uber等企业曾经走过的或成功或失败的案例,很值得产品、运营和数据分析师们一读!
讲真的,我一直不明白 go 的 context 怎么用,之前在用 Java 开发时就不清楚,所以这次专门花时间把 go 的 context 弄清楚。
我记得第一次接触 context 时,文档上说这个是用来做并发控制的,可以设置超时时间,超时就会快快速返回,可以携带一些信息,在生命周期中共享。生命周期这个概念很重要,我们在开发时需要掌控程序的生命周期。
我们不能简单的认为只要函数中带着 context 参数往下传递就可以做到超时取消,快速返回,其实这是一个错误的思想,其取消机制采用的也是通知机制,但出的透传并不会起作用,比如你这么写代码:
func main() {
ctx,cancel := context.WithTimeout(context.Background(),10 * time.Second)
defer cancel()
go Monitor(ctx)
time.Sleep(20 * time.Second)
}
func Monitor(ctx context.Context) {
for {
fmt.Print("monitor")
}
}
我们需要学会正确的使用 context。
众所周知,Clash for Windows 衫裤跑路了,让我默哀一分钟,For Freedom!!!
所以一个奇怪的想法出现了,我能否扛起大旗走下去!...我瞎说的,第一步就先读懂源码吧。