lua package 面向对象开发
lua 作为一门简单的语言,在变量是只有 table 和非 table 的区别。
基本
1 | local _M = {} |
在 lua 中 _M:foo() 就是 _M.foo(self) 。在使用时和个人习惯有关。这里我希望能够严格的区分库和对象.当函数为静态方法时,比如一些utils函数,使用点号(.)。当函数需要面向对象时,使用冒号(:)。
lua 作为一门简单的语言,在变量是只有 table 和非 table 的区别。
1 | local _M = {} |
在 lua 中 _M:foo() 就是 _M.foo(self) 。在使用时和个人习惯有关。这里我希望能够严格的区分库和对象.当函数为静态方法时,比如一些utils函数,使用点号(.)。当函数需要面向对象时,使用冒号(:)。
这是计算最大公约数的函数.辗转相除法
1 | function gcd(a, b) |
它的计算其实是使用欧拉定理.
https://zh.wikipedia.org/wiki/欧拉定理_(数论)
对于任何可以整除a和b的整数,那么它也一定能整除a-b
1.
假设 a b 都有公约数 n 且 a>b, 假设 $a=x_1n$, $b=x_2n$
那么$ a-b =(x_1-x_2)n$
a=kb+t 那么 t=a-kb
$\frac{t}{d} = \frac{a}{d} -\frac{kb}{d}$
因为 a、b都能够被d整除
所以 $\frac{a}{d}-\frac{kb}{d}$ 为整数,
即 $\frac{t}{d}$ 为整数,所以 d 也是 t 的公约数.
在均衡负载中,对设置的权重求最大公约数,需要用到 gcd 函数.
当传入的值是非数字时, 比如传入 字符串 “0”, b==0 判断失效
执行 gcd(”0”,nil) ,再次执行 gcd(nil,nil) 导致出现死循环.
1 | golang.org/x/sync/singleflight |
singleflight
是 go 提供的一个扩展并发原语,主要是用来合并请求来降低服务压力。
1 | https://cs.opensource.google/go/x/sync/+/036812b2:singleflight/singleflight.go |
实现了一个 Group 的 struct
1 | type Group struct { |
使用 alpine 构建 Ddockerfile ,导致 docker 打包失败,错误如下:
1 | fetch https://mirrors.aliyun.com/alpine/v3.13/main/x86_64/APKINDEX.tar.gz |
sha256 算法是常用的加密算法,这里有一份 golang 的实现
1 | brew cask install osxfuse |
系统偏好设置-> FUSE
##Goroutine 内存占用
下面是一个创建 goroutine 什么也不干,对内存的占用打印。说明创建 goroutine 的成本非常低。
1 | num:1 mem: 0.062MB average:64.000kb |
以下是创建代码:
Tcp 连接中,Server 监听固定端口,Client 发起主动连接。 经过三次握手后建立 Tcp 连接。
client 每次请求,如果不固定端口,系统会选用一个空闲端口。该端口是独占,不能和其他 Tcp 连接共享。本地端口最大数为 65536 ,0 有特殊含义(预留,系统指定动态生成的端口),其他的全作为 client 情况下 ,最大连接数为65535 。 除去系统服务使用的端口,能够使用的会比这个少一些,1024 一下的端口通常为保留端口。
这是给团队写的 jenkins 会出现问题的说明,简单的描述了 jenkins 使用中会出现的问题,以及应对方法。当然最好的应对方法是没有问题。
jenkins 自动化的命令运行引擎,pipeline (流水线) 是按照既定的逻辑来执行 jenkinsfile 中的代码。
也就是说它只是一个流程执行引擎,所有的命令都需要依赖其它软件包。 比如 npm ,maven, ansiable 等等。当使用 docker 来启动 jenkins 时,需要在 dockerfile 里面加上打包需要的依赖。