自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 记录windiwos系统安装homestead环境的一次报错

php虚拟机环境搭建

2024-03-17 17:17:04 362

原创 MySQL产生死锁的根本原因及解决方法

优化后该语句执行计划如下:优化后的执行计划使用了索引查找,将大幅提升该查询语句的性能,降低了锁定资源的时间,同时也减少了锁定资源的范围,这样就降低了锁资源循环等待事件发生的概率,对于预防死锁的发生会有一定的作用。一个进程被杀死,它的事务被取消,它的锁被释放,死锁中涉及到的另一个进程就可以完成它的工作并释放锁,所以就不具备产生另一个死锁的条件了。而语句1则获取了1686247页上的更新锁在等待1689766页上的更新锁,两个语句等待的资源形成了一个环路,造成死锁。2. 对语句更新的相关字段建立包含索引。

2024-03-08 09:34:00 1063

原创 mysql中select、from、where、group by、having、order by 、limit执行顺序

【代码】mysql中select、from、where、group by、having、order by 、limit执行顺序。

2024-03-07 11:13:46 590

原创 关于php原生开发与主流php框架使用心得

本人是主要做php项目的,以前是从来不屑于用框架的,由于项目原因,这几年对比较流行的框架,都涉猎了一下,毕竟甲方是老大,人家制定让用什么,你必须要用,有时候你可以劝他们改变初衷,但有时候你只能遵从或者放弃,…至于因为这点原因放弃,那是不可能的,不过好在硬着头皮用了一遍之后,发现在开发效率方面确是大大提高。现在就谈一下我的一点感受。

2024-03-04 17:50:31 1133

原创 mysql锁机制详解

mysql锁机制

2024-02-29 14:45:01 369

原创 mysql优化

1.找到项目中的慢查询sql,设置一条sql语句查询超时多少秒就属于慢查询,然后将其记录到日志系统2. 使用explain分析每一条慢查询语句的性能:查询的序列号:查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询。

2024-02-27 12:09:16 793

原创 Go的CSP并发模型实现M, P, G简介

G: goroutine(协程,也叫用户态线程)M: 工作线程(内核态线程)P: 上下文(也可以认为是cpu,逻辑cpu数量,可以在程序启动的时候设置这个数量,gomaxprocs函数设置)

2024-02-26 10:44:39 984 1

原创 http https socket rpc grpc有啥区别联系

网络通讯

2024-02-25 15:35:48 784

原创 Go Module常用命令

go module是go官方自带的go依赖管理库,在1.13版本正式推荐使用go module可以将某个项目(文件夹)下的所有依赖整理成一个 go.mod 文件,里面写入了依赖的版本等使用go module之后我们可不用将代码放置在src下了。

2024-02-24 23:32:35 958

原创 virtualBOX网络配置

virtualbox 网络配置

2022-12-06 10:57:23 402 1

原创 Google为什么要开发 Go 这门新语言

go这门语言的创建历史

2022-04-25 16:48:00 607

原创 常用的分布式事务解决方案有哪些?

分布式事务,数据一致性

2022-04-24 09:57:52 354

原创 RPC核心概念理解

rpc

2022-04-23 16:12:34 2616 1

原创 Makefile文件是什么?

mak makefile

2022-04-22 18:19:36 1077

原创 面试官:简单聊聊 Go 逃逸分析?

golang 逃逸分析

2022-04-21 17:38:15 539

原创 五分钟带你了解啥是JWT

1. JSON Web Token是什么JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。2. 什么时候你应该用JSON Web Token下列场景中使用JSON Web Token是很有用的:2.1: Authorization (授权) : 这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资

2022-04-20 17:38:31 155

原创 redis 缓存穿透,缓存击穿,缓存雪崩

缓存穿透,缓存击穿,缓存雪崩

2022-04-19 16:06:37 11466

原创 Golang 的 “omitempty” 关键字略解

golang omitempty

2022-04-18 21:27:30 489

原创 golang 第三方包的选择方式

当开发一个项目的某一个功能的时候,需要使用到当三方的package,在GitHub上面找的时候相同功能的package有很多个,这个时候以什么方式来帮助我们选择使用那个包呢?star 数越多越好issue 数越低越好项目维护活跃,最后更新日期越接近越好有清楚的版本区分(查看项目的 Releases 标签)...

2021-02-03 21:35:34 212

原创 Go Modules 日常使用

1.初始化go mod init2. Go Proxy因国内访问外网受限,一般我们都会配合 Go Proxy 使用,以防止使用 go get 获取源码包时花费时间过长或无法下载:go env -w GOPROXY=https://goproxy.cn3.go.mod每一次的 go get 都会同时修改 go.mod 和 go.sum 文件。这两个文件是下载依赖包的主要依据。go.mod 类似于 PHP 中的 composer.json ,而 go.sum 则是 composer.lock。

2021-02-02 11:17:27 102

原创 golang 导入包的下划线和点的区别

在golang进行导入包时,我们有时会遇到包的前面需要加下划线或者点,一直不明白是什么意思,随即进行了搜索:包前是下划线_:当导入一个包时,该包下的文件里所有init函数都会被执行,但是有时我们仅仅需要使用init函数而已并不希望把整个包导入(不使用包里的其他函数)包前是点.:import(.“fmt”)这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的fmt.Println(“hello world”)可以省略的写成Println(“hello wo

2021-02-01 22:11:21 354

原创 Go和PHP之间的主要区别

Go基本上是一种可用于快速机器代码编译的编程语言,而PHP基本上是服务器端脚本,也是一种用于Web开发的通用编程语言。Go是一种静态类型的语言,而PHP是一种动态类型的语言PHP将核心PHP语言用于模板目的,因此浏览器通过发送的HTML代码处理PHP代码,并将输出发送到浏览器,而对于GO,通常使用简单的模板系统。Go语言得到了社区的广泛支持,并且由于它也得到了Google的支持,因此其社区支持比PHP有所增加。PHP是动态类型的,而Go为采用类似于动态语言的模式的环境提供了支持。Go具有在PHP.

2021-01-31 20:37:36 2559

原创 Rpc和Http的区别

一.远程调用方式无论是微服务还是分布式服务(都是SOA,都是面向服务编程),都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?常见的远程调用方式有以下几种:RPC:Remote Produce Call远程过程调用,类似的还有RMI(Remote Methods Invoke 远程方法调用,是JAVA中的概念,是JAVA十三大技术之一)。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型RPC的框架:webservie(c

2021-01-30 21:39:03 808

原创 怎么用go代码使用protoc编译器编译proto文件生成的pb.go文件

package mainimport ( "fmt" "ProtocDemo/example" "github.com/golang/protobuf/proto" "os")func main() { fmt.Println("Hello World. \n") msg_test := &example.Person{ Name: proto.String("Davie"), Age: proto.Int(18), From: proto.String("Chi

2021-01-29 21:48:29 594

原创 热加载调试 Hot Reload

Python 的 Flask框架,有 debug 模式,启动时传入 debug=True 就可以热加载(Hot Reload, Live Reload)了。即更改源码,保存后,自动触发更新,浏览器上刷新即可。免去了杀进程、重新启动之苦。Gin 原生不支持,但有很多额外的库可以支持。例如github.com/codegangsta/gingithub.com/pilu/fresh这次,我们采用 github.com/pilu/fresh 。go get -v -u github.com/pilu/

2021-01-28 22:08:49 647

原创 Golang timer定时器

timer 计时器用于在指定的Duration类型时间后调用函数或计算表达式。如果只是想指定时间之后执行,使用time.Sleep()使用NewTimer(),可以返回的Timer类型在计时器到期之前,取消该计时器直到使用<-timer.C发送一个值,该计时器才会过期定义计数器timer := time.NewTimer(time.Second * 2)停止定时器timer.Stop()强制的修改timer中规定的时间timer.Reset(0) ticker 周期性的ti

2021-01-27 22:03:04 533

原创 slice的用法以及和数组的区别

slice是go的一个语言特性,其实有点类似于cpp的vector,可变长度,可以扩展空间。今天详细看了下,做下总结。slice本质上是一个区间,原型是[]T,大致的实现是这样的:type slice struct { first *T len int cap int}可以看到的是是一个指向数组的指针,那么在修改slice的时候会改变数组的值。和数组的用法差别不是太大。基于数组的创建:var myArrary [3]int = [3]int{1,2,3}var

2021-01-26 21:19:03 1081

原创 goroutine

原始版本:func add(a int) int { //假设处理业务逻辑需要100ms time.Sleep(time.Millisecond * 100) return a}func main() { sum := 0 start := time.Now().UnixNano() / 1e6 for i := 0; i < 100; i++ { sum += add(i) } end := time.Now().UnixNano() / 1e6 fmt.Printf("

2021-01-25 22:29:44 58

原创 go递归循环遍历文件夹

/**dirname 目录名称level 层级关系 */func listFiles(dirName string,level int) { //level用来记录当前递归的层次,生成带有层次感的空格 s :="|--" for i:=0;i<level;i++ { s = "| "+s } fileInfos,err := ioutil.ReadDir(dirName) if err != nil { log.Fatal(err) } for _,fi := ran

2021-01-24 12:09:12 411

原创 go复制文件的三种方式

方法一:io包下的Read()和Write()方法实现我们可以通过io包下的Read()和Write()方法,边读边写,就能够实现文件的复制。这个方法是按块读取文件,块的大小也会影响到程序的性能该函数的功能:实现文件的拷贝,返回值是拷贝的总数量(字节),错误func copyFile1(srcFile,destFile string)(int,error){ file1,err:=os.Open(srcFile) if err != nil{ return 0,err } file2,er

2021-01-23 19:04:34 636

原创 time包的使用

package mainimport ( "fmt" "math/rand" "time")func main() { //1.获取当前时间 t1 := time.Now()//time.Time//结构体类型 fmt.Printf("%T\n",t1)// fmt.Println(t1) //2.获取指定时间 //调用的只是time包下的函数Date(),返回一个结构体对象 t2 := time.Date(2009,7,15,16,30,28,0,time.Local)//

2021-01-22 15:56:24 135

原创 go Panic & Recover

PanicGo 的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、空指针引用等。这些运行时错误会引起painc异常。一般而言,当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer 机制)。随后,程序崩溃并输出日志信息。日志信息包括panic value和函数调用的堆栈跟踪信息。通常,我们不需要再次运行程序去定位问题,日志信息已经提供了足够的诊断依据。因此,在我们填写问题报告时,一般会将panic异常和日志信息一并记录。由于pan

2021-01-21 18:23:17 148

原创 使用golang errors包自定义错误

发现Golang很多开源的package都是使用Error来定义错误,其实我自己更加的习惯利用返回的值进行判断。 虽然这么说,但Golang的error定义还是有意思的,合理就返回nil,不合理就返回Error的错误下面说说Golang的自定义错误的用法。在go里定义错误的方式有这么两种,但都需要你的返回值是error类型的1. 第一种方式是使用golang标准库包errors 来定义错误。使用方法很是简单,只需要 return errors.New(“string”) 。 这样就是一个最简单的错误返

2021-01-20 17:20:02 394

原创 go中make和new的区别

make和new都是golang用来分配内存的內建函数,且在堆上分配内存,make 即分配内存,也初始化内存。new只是将内存清零,并没有初始化内存。make返回的还是引用类型本身;而new返回的是指向类型的指针。make只能用来分配及初始化类型为slice,map,channel的数据;new可以分配任意类型的数据...

2021-01-19 20:35:20 351

原创 float32和float64的本质区别

首先我们需要知道何为bits和bytes?1. bits:名为位数2. bytes:为字节3. 简单的数就是MB和G的关系!那么8bits=1bytes,下面是各个单位的相互转化!那么float32和float64有什么区别呢?1. 数位的区别2. 一个在内存中占分别32和64个bits,也就是4bytes或8bytes3. 数位越高浮点数的精度越高它会影响深度学习计算效率?float64占用的内存是float32的两倍,是float16的4倍;比如对于CIFAR10数据集,如果采用fl

2021-01-18 19:27:36 6601

原创 Int8,Int16,Int32,Int64 有啥不同呢?看了立马就懂!

大家有没有写了很久代码,还不知道这个Int8,Int16, Int32, Int64有什么区别呢?或者是为什么后面的数字不一样呢?初步了解了一下,才清楚这个东西。先来扫盲一下计算机存储单元,在计算机内部,信息都是釆用二进制的形式进行存储、运算、处理和传输的。信息存储单位有位、字节和字等几种。各种存储设备存储容量单位有KB、MB、GB和TB等几种计算机的基本的存储单元有:位(bit):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。二进制的一个“0”或一个“1”叫一位。字节(Byt

2021-01-18 19:23:59 1845

原创 回调函数和闭包

回调函数和闭包当函数具备以下两种特性的时候,就可以称之为高阶函数(high order functions):函数可以作为另一个函数的参数(典型用法是回调函数)函数可以返回另一个函数,即让另一个函数作为这个函数的返回值(典型用法是闭包)一般来说,附带的还具备一个特性:函数可以作为一个值赋值给变量。f := func(){...}f()由于Go中函数不能嵌套命名函数,所以函数返回函数的时候,只能返回匿名函数。先简单介绍下高阶函数,然后介绍闭包。高阶函数示例例如,将函数作为另一个函数的

2021-01-17 17:24:22 454

原创 字符串和编码

字符编码我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。由于计算机是美国人发明的,因此,最早只有127个字符被

2021-01-17 13:42:50 90

原创 strconv函数

func main() { /* strconv包:字符串和基本类型之间的转换 string convert */ //1.bool类型 s1 := "true" b1,err := strconv.ParseBool(s1)//将字符串转换为bool类型 if err != nil { fmt.Println(err) return } fmt.Printf("%T,%t\n",b1,b1) ss1 := strconv.FormatBool(b1)//将bool类型转

2021-01-16 21:51:48 292

原创 字符串函数

s1 := "helloworld" //1.是否包含指定的内容--》bool fmt.Println(strings.Contains(s1, "woc"))//false //2.是否包含chars中任意的一个字符即可 fmt.Println(strings.ContainsAny(s1, "abcd"))//true //3.统计substr在s中出现的次数 fmt.Println(strings.Count(s1, "llo"))//1 s2 := "20190525课堂笔记.tx

2021-01-16 21:26:49 62

【SASE目录文件11111】

【SASE目录文件11111】

2024-03-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除