/images/avator.png

xingliuhua

不见其增,日有所长。

mysql优化

分析效率 show status like “xxx” 查询一些msyql性能参数 connections: 连接数据库服务端的次数 slow_queries:慢查询次数 com_select:查询次数 com_

defer语句

defer语句 defer及defer函数的执行顺序分2步: 执行defer语句,计算函数的入参的值,并传递给函数,但不执行函数,而是将函数压入

认证鉴权

认证鉴权 HTTP协议是无状态的和Connection: keep-alive的区别: 无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端

godoc

生成文档 生成文档是很简单的,主要在package,方法等想要注释的地方写上注释即可。可以使用//或者/**/ 举例: // this is model comment package model import "fmt" // user struct comment

go fmt

布尔 %t 单词true或false 整型 %b 表示为二进制 %c 该值对应的unicode码值 %d 表示为十进制 %o 表示为八进制 %q 该值对应的单引号括起来的go语法

golang 单例和once详解

饿汉式 type singleton struct { } var instance = new(singleton) func GetInstance() *singleton{ return instance } 或者 type singleton struct { } var instance *singleton func init() { instance = new(singleton) } func GetInstance() *singleton{ return instance } 这两种方法都可以,第一种我们采用创建一个全局变量的方式来实

sync包

锁 共享内存的并发问题 在很多语言中并发编程都有对一个内存进行读写的情况,比如下面的测试: func test() { count++ println(count) } var count int func main() { for i := 0; i < 30; i++ { go test() } time.Sleep(3 * time.Second)

排序算法

排序 我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlog

go channel

底层结构 type hchan struct { qcount uint // total data in the queue dataqsiz uint // size of the circular queue buf unsafe.Pointer // points to an array of dataqsiz elements elemsize uint16 closed uint32 elemtype *_type // element type sendx uint // send index recvx uint // receive index recvq waitq // list of recv waiters sendq waitq // list of send waiters // lock protects

go map

hash冲突 哈希查找表一般会存在“碰撞”的问题,就是说不同的 key 被哈希到了同一个 bucket。一般有两种应对方法:链表法和开放地址法。链表法将

golang slice

slice slice是一个数组某个部分的引用,非协程安全的。 创建 通过数组创建 切片的初始化格式是:var slice1 []type = arr1[start:end],star

range语句

range slice func main() { s := []int{1, 2, 3} for i := 0; i < len(s); i++ { if i == 1 { s = append(s, 4) } fmt.Println(i, s[i]) } } 上面的代码,遍历中新增元素是没有问题的。 但是下面的range遍历,结果是不