go内存泄漏
内存泄漏go自带gc但不意味着不会发生内存泄漏问题, go的坑很多, 内存泄漏问题很容易碰到
cgo在使用cgo时发生的内存泄漏, pprof无法排查
Referencesgo程序内存泄露问题快速定位
go pprof
简介Go pprof是官方工具,可以用来查找内存泄漏
安装方法:
1go install github.com/google/pprof@latest
内存泄漏分析在项目中穿插一点点代码
1import _ "net/http/pprof"
123go func() { http.ListenAndServe(":6060", nil)}()
重新编译启动后即可打开web界面查看各项数据(web界面略)
可以先记录下初始的内存情况:
1curl -s http://ip:6060/debug/pprof/heap\?debug\=1 > base.heap
运行一段时间后,再次记录当前内存情况:
1curl -s http://ip:6060/debug/pprof/heap\?debug\=1 > current.heap
此时可以拿两份文进行对比
1go tool pprof --base base.heap current.heap
在里面输入:
1top
即可查看内存差异,效 ...
Hyperledger Fabric简介
Hyperledger Fabric
区块链(分布式账本)
联盟链(多中心化)
智能合约
区块链是由众多参与者(节点)组成的P2P 网络, 每个节点都拥有一个账本的拷贝, 每当有新的交易进来,所有节点的账本都会更新,并且最终保持一致。
Model
Chaincode: 链码就是智能合约(Smart Contract), 一旦某个事件触发合约中的条款, 代码即自动执行。把约定通过代码的形式,录入区块链中,一旦触发约定时的条件,就会有程序来自动执行,这就是智能合约, 就是业务逻辑
Consensus: 各个参与者交易信息同步的过程. 共识确保所以参与者都会将同样的信息按同样的顺序更新
Security & Membership Services: 提供成员身份认证服务, 区块链网络内所有交易都可以被追溯
Ledger: 账本是一个有序、防篡改的结构, 是一个个存储着不可修改的数据的区块组成的链表, 每个频道维护一个帐单. 参与者调用链码实现状态转变
Privacy: 通过频道来隔离帐单, 只有在频道中的参与者才能获取频道内的帐单
Consortium B ...
Mutual TLS
WHATMutual TLS(mTLS) is a method for mutual authentication. mTLS ensures that the parties at each end of a network connection are who they claim to be by verifying that they both have the correct private key. The information within their respective TLS certificates provides additional verification.
mTLS is often used in a Zero Trust security framework* to verify users, devices, and servers within an organization. It can also help keep APIs secure.
Zero Trust means that no user, device, or ne ...
golang中的context
golang中的context位于src/context
包含文件
用途
benchmark_test.go
名字以Benchmark开头的函数,用于性能测试
context.go
context源码,golang1.17中共567行
context_test.go
context.go的测试用例函数
example_test.go
context的使用示例
net_test.go
与net包配合测试
x_test.go
用于执行context_test.go的测试用例
简单示例12345678910111213141516171819202122232425262728import ( "context" "fmt" "time")func main() { handleTime := 500 * time.Millisecond // handle函数执行时间 timeLimit := 1 * time.Second // context设置超时时 ...
Format verbs in golang's printf
Golang has formatted I/O functions about printf where in package fmt.They support the format ‘verbs’ which are derived from C’ but are simpler. Example123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960package mainimport ( "fmt" "os")type point struct { x, y int}func main() { p := point{1, 2} fmt.Printf("%v\n", p) // {1 2} fmt.P ...
Arch Linux安装&配置(2021)
开始折腾0. 下载官方ISO1. 制作启动盘推荐使用Rufus, 插上U盘,写入方式为DD, MBR改成GPT后写入
2. 硬盘分区开始菜单右键->磁盘管理, 为Linux分出一块空闲的区域注意EFI分区大小要在300MB左右
3. 设置BIOS进入BIOS禁用secure boot, 将U盘启动顺序移到第一位, 保存设置后重启, 进入Arch ISO
4. 联网查看网卡名称
1ip a
依次输入命令:
12345678910iwctldevice list#如无线网卡名称为wlan0,输入station wlan0 scan#检查扫描网络,输入station wlan0 get-networks#连接名为not-found的WiFi,输入station wlan0 connect not-found#输入密码后退出exit
成功后尝试刷新pacman源
123pacman -Syyy#切换为国内镜像源reflector -c China -a 6 --sort rate --save /etc/pacman.d/mirrorlist
5. 分区1. 查看 ...
正则表达式快速上手
基本规则
\d 匹配一个数字字符。等价于[0-9]\D 匹配一个非数字字符。等价于[^0-9]
\w 匹配包括下划线的任何单词数字字符。等价于 [A-Za-z0-9_]\W 匹配任何非单词数字字符。等价于 [^A-Za-z0-9_]
\f 匹配一个换页符\n 匹配一个换行符\r 匹配一个回车符\t 匹配一个制表符\v 匹配一个垂直制表符\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v][\u4E00-\u9FA5] 匹配中文字符
\b 匹配单词边界(单词等于数字,字母),比如 \b4\b 匹配4,不匹配”34”,”45”,”345”,” 4 “ \B 匹配非单词边界。er\B 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
^开始位置$结束位置*任意匹配次数(无所谓有没有出现)+匹配至少一次(至少要出现个一次)?匹配最多一次(出现个1次或者别出现)
修饰符
g:全局匹配
i:忽略大小写
特殊查 ...
MongoDB入门
概念
MongoDB官网
属于nosql
上手快
相对与RDBMS的table,MongoDB采用了collection
document相对于RDBMS的row,与json比较相似,比如
{name:"aaa",age:14}
field相对于RDBMS的column
基本命令介绍
启动命令:mongo默认为mongo 127.0.0.1:27017
查看有哪些数据库
1234> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GB
默认会使用test数据库,但一开始没数据所以看不到
在test中的user集合(自动会创建)中插入一条数据,结果返回WriteResult对象,”nInserted“表示影响的记录数
123456789101112> use testswitched to db test> dbtest> db.user.insertOne({name:"aaa",age:14 ...