ALOVN

志当存高远

理解原码、反码和补码

Understand the Original code、 Inverse code and Complement code

原码 如果我们在内存中分配4位(bit)来存放无符号的数字,它就是下面这样子的: 十进制 二进制(4位) 0 0000 1 0001 2 0010 3 0011...

解决salt gitfs lock无法正常更新的问题

Solve 'salt gitfs lock'

Salt 支持 gitfs 将pillar配置存储到 Git 远程仓库中进行版本控制, 更易于管理。 当提交更新至远程 Git 仓库后, 需要手动在 Master 执行如下操作: 1 > salt-run fileserver.update 或者等待一段时间,由 Master 进行更新 (默认更新间隔为 60s, 可以通过 Master 配置文件 loop_interval ...

解决git error: invalid path

Solve 'git error: invalid path'

问题 在Windows10上使用git clone代码的时候抛出了异常,重试了几次都是相同的错误: 1 2 3 4 5 6 7 8 9 >git clone [email protected]:alovn/xxx.git Cloning into 'xxx'... Resolving deltas: 100% (7376/7376), done. error: invalid path...

Go语言之类型转换规则

Type Convert in Golang

在Golang中,如果一个值v可以被显式的转换为类型T,可以使用语法(T)(v)来表示,在大多少情况下可以简化为T(v)。 一般类型 如果两个类型表示着同一个类型,则它们的值可以相互隐式转换,如类型byte和uint8、rune和int32、[]byte和[]uint8。 1 2 3 4 5 6 7 8 9 10 11 12 13 //uint8隐式转换为byte var i uint...

解决ESXI磁盘错误无法启动

ESXI Disk Repair

简单记录一下。 问题 由于关闭了一段时间ESXI,今天重新开机时某一虚拟机无法启动并提示错误信息:”失败 - 对象类型需要托管的 I/O”。 点击异常信息可查看到具体原因:无法打开磁盘 “/vmfs/volumes/5d0bce4b-1470c360-bb46-d05099d01 509/openwrt/openwrt-19.07.7-x86-64-combined-ext4.vmdk...

Go语言中的nil

Golang nil

nil是Golang中使用频率较高的标识符,有很多初学者会将Golang中的nil看作其它语言中的null,这在部分是正确的。我们先看下nil在 buildin/buildin.go 中的定义: 1 2 3 // nil is a predeclared identifier representing the zero value for a // pointer, channel, fu...

Go语言之火焰图

Flame Graph

火焰图是将采集到的性能数据生成的图表,使数据显得更直观 火焰图中垂直的数轴即 y 轴,表示调用栈的深度。顶部是正在执行的函数,下方都是它的父函数,在 y 轴上的高度越高,表面调用的层次越深。 火焰图中水平的数轴即 x 轴,表示请求占用CPU资源的情况,在 x 轴上的宽度越宽,则表示请求的次数越多,占用耗时也就越长。 如果最上面是“平顶”的样子,则可能存在性能问题,存在优化空间,正常的火...

Go语言之内存泄露

Memory Leak in Golang

有自动垃圾回收的语言一般来说我们不需要关心内存泄露的问题,因为程序运行时会负责回收不再使用的内存。但是在Golang中有一些特殊的场景可能会存在内存泄露,我们需要了解、使用的时候也需要注意。 字符串 Golang中的一个字符串和它的子字符串共享一个底层字符序列内存块,这样可以节省内存和CPU消耗。但有时也会造成内存泄露。 1 2 3 4 5 6 7 8 9 var s0 string ...

Go语言之sync.Pool

sync.Pool in Golang

sync.Pool对象池是Golang提供的对象重用机制,可以将它看作存放可重用对象值的容器,一般用于存放已经分配但暂时不用的对象,当需要的时候可以直接从pool中取。sync.Pool是可伸缩、并发安全的,它的大小受限于内存大小。 sync.Pool对象获取 sync.Pool获取对象的过程(Get): 尝试从私有对象获取 若私有对象不存在,从当前Processor的共享池...

Go语言之内存垃圾回收

Memory Garbage Collection in Golang

栈 Golang中每个协程的栈将在此协程退出时被整体回收,此栈上开辟的各个内存块没必要一个个单独回收。栈内存池并不由垃圾回收器回收。 堆 对一个开辟在堆上的内存块,当它不再被使用,将在以后某个时刻被垃圾回收器进行回收。垃圾回收过程分为两个阶段:标记阶段和清扫阶段。 标记阶段,垃圾回收器使用三色标记算法分析哪些内存块已经不再使用。 清扫阶段,被标记为白色的内存块将被认为是不再...