摘要:
我们知道Go是自带GC的语言,在代码中调用runtime.GC()可以显式触发GC,当内存资源不足时调用可以在该时间点释放内存,但此时,由于STW机制的存在,程序性能可能短暂下降。runtime.SetFinalizer可以在内存中对象被回收前,指定一些操作。 用法介绍 函数定义如下: func S 阅读全文
摘要:
服务端代码 一个简单的rpc server示例如下: package main import ( "log" "net" "net/http" "net/rpc" "github.com/monoxy/rpc/common" ) func main() { server := rpc.NewServ 阅读全文
摘要:
数值越界是需要引起重视的问题,后端服务没有严格检验请求字段的取值范围,则可能引发严重的后果。 事故 例如用户购买礼物,礼物单价为20金币。有用户购买了1073741825个礼物,却只需要花费20金币,这是为何? 原因 原来系统中设定的购买数量和金币均采用了uint32,uint32的取值范围为[0, 阅读全文
摘要:
接口的实现 Go语言中的接口变量存储了两项内容:1.当前值的类型描述,2.存储当前值。 第一部分type是接口的itable,存储接口的类型和一系列函数指针。这里的函数指针列表与接口中的函数定义一致,而不会包括类型自身的其它函数。 第二部分data存储接口的实际数据 接口存储的优化 当声明的接口为空 阅读全文
摘要:
MySQL中的事务四要素 原子性(Atomicity):要么全部完成,要么全部不完成; 一致性(Consistency):事务执行前后都保持数据的完整性约束,数据的中间状态不可见; 隔离性(Isolation):事务之间不能相互影响,可以设置不同的隔离级别; 持久性(Durability):事务提交 阅读全文
摘要:
简介 influxdb是一款流行的时序数据库应用,与prometheus最大的不同在于,influxdb采用推模型,即记录方通过调用influxdb接口,将数据保存到influxdb数据库中。prometheus则是由自身不断抓取记录方的导出数据。influxdb的查询语句与sql类似,简单易上手, 阅读全文
摘要:
一、密码登录 1.客户端提交用户名(以手机号为例)、md5编码后的密码,以及手机号、登录平台,如下所示: { "Phone": 12345678999, "Region": 86, "Password": xfdfewr45sdf "platform": app } 2.服端处理流程伪代码为: // 阅读全文
摘要:
参照《TCP-IP详解》一书,TCP首部格式如下: MSS选项 最常见的选项字段为最大报文段长度MSS(Maximum Segment Size),表示本端所能接受的最大TCP数据段长度。每个TCP连接通常在SYN报文中设置这个选项。由于以太网中数据帧不能超过1518个字节,其中帧头14字节,校验和 阅读全文
摘要:
Linux磁盘标识有sda(系统识别的第一块磁盘)、sdb(第二块磁盘),它们以文件的形式存放于/dev下。sda1和sda2是sda磁盘上的两个分区。 lsblk命令以树形方式显示当前主机的磁盘信息。 blkid命令用来查看磁盘的UUID Linux系统下磁盘分区需要挂载到某个目录下,例如分区sd 阅读全文
摘要:
不同情况下的git 远程跟踪分支 1 远程没有分支,本地也没有分支 git check out -b test //创建并切换到新分支 git push -u origin test //推送到远程分支,并且跟踪远程分支 2 远程已经存在分支,本地不存在对应分支: git checkout --tr 阅读全文