自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 资源 (1)
  • 收藏
  • 关注

原创 Mac安装wget流程及异常解决(亲测有效)

Mac安装wget

2024-03-28 15:49:10 1427

原创 go debug console _cgo_export.c:6: warning: ignoring #pragma GCC diagnostic

【代码】go debug console _cgo_export.c:6: warning: ignoring #pragma GCC diagnostic。

2023-08-24 13:26:14 238

原创 golang sm2加解密

golang sm2加解密

2023-08-01 14:25:08 634

原创 linux环境下常用的网络命令ping、telnet、traceroute、tcpdump

设备一旦接入网络很难“独善其身”ping命令可以测试目的IP是否可达telnet命令可以测试指定的tcp端口是否可达nc命令可以测试指定udp端口是否可达tracerout命令可以探测网络路径tcpdump命令可以收集所有经过网卡的数据包。

2023-03-06 15:40:13 2115

原创 mysql中利用sql语句修改字段名称,字段长度等操作(亲测)

在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿。这些操作可以在phpmyadmin或者别的mysql管理工具中完成,但是我们有时为了更方便的管理,会选择写sql语句来实现。

2023-02-21 16:30:36 7380

原创 go mod使用

https://www.jianshu.com/p/760c97ff644c

2023-02-15 10:11:46 159

原创 go语言环境配置 & 项目启动

go语言各个版本之间兼容性比较差。所以可能你需要安装固定的版本1 安装最新版的go2 查看go可以安装的版本3 安装指定版本的go4 查看安装的go语言的版本go version5 查看go的安装路径6 查看go的环境变量go env主要关注go语言的GOROOTGOPATH这三个环境变量7 如果go version不管用 检查下环境变量是否配置了go语言的环境变量。

2023-02-15 10:05:09 1229

原创 Golang 并发 - 信道

信道是协程之间通信的管道,从一端发送数据,另一端接收数据。

2022-10-13 15:23:10 194 1

原创 Golang 并发 - 协程

并行其实很好理解,就是同时执行的意思,在某一时间点能够执行多个任务。想达到并行效果,最简单的方式就是借助多线程或多进程,这样才可在同一时刻执行多个任务。单线程是永远无法达到并行状态的。

2022-10-13 15:10:22 544

原创 Golang 并发 - Select

select 的用法有点类似 switch 语句,但 select 不会有输入值而且只用于信道操作。select 用于从多个发送或接收信道操作中进行选择,语句会阻塞直到其中有信道可以操作,如果有多个信道可以操作,会随机选择其中一个 case 执行。

2022-10-13 10:57:07 394

原创 golang截取字符串并拼接

golang截取数据并拼接。

2022-08-08 17:22:45 5

原创 【Redis】 大key和大value的危害

所以基本上来说,大key和大value带来的内存不均和网络IO压力都是一致的,只是key相较于value还多一个做hashcode和比较的过程(链表中进行遍历比较key),会有更多的内存相关开销。而哈希表本质上是一个DictEntry(哈希表节点)的数组,并且使用链表法解决哈希冲突问题(关于哈希冲突的解决方法可以参考大佬的文章解决哈希冲突的常用方法分析)。虽说答的是挺好的,但是我又随之产生了另一个疑惑,如果redis的key较长时,会产生什么样的影响呢?查了很多文章,说的都不是特别清楚。......

2022-07-22 16:43:53 6

原创 Golang Context 实战与源码分析

如果父节点context的deadline早于本次创建子节点的deadline,那就没必要给子节点创建一个timerCtx了,因为根据deadline来看,父节点肯定会早与这个子节点取消,而父节点取消后,子节点也会跟着被取消,所以没必要给子节点创建timer,直接创建一个cancelCtx将子节点挂到父节点上就行了,效果是一样的,还剩下一个timer。注这里的数据传递主要指全局数据,如链路追踪里的traceId之类的数据,并不是普通的参数传递(也非常不推荐用来传递参数)。...

2022-07-22 15:34:18 6

原创 golang 独立打包(不依赖系统动态链接库)

为了减少golang部署对操作系统动态链接库的依赖,我决定对自己的两个golang项目进行独立打包。在独立打包的过程中,出现上述错误,经过查找资料发现操作系统少了。然后继续使用ldd命令检查,发现已经没有动态链接库依赖。环境Centos6.7amd64。安装后再次执行上述命令已经不报错了。...

2022-07-21 16:58:19 26

原创 go语言中的&和*

放到一个变量前使用就会返回相应变量的。Go 语言的 取地址符是 &Go语言的 指针变量是 *,放在一个变量前使用就代表。

2022-07-04 14:52:39 53

原创 为什么redis不适合存储大数据量数据和存储敏感数据?

看法:查阅后总结:redis更多的是作为一个缓存来使用,既然是缓存来使用那必然存储的时候热点、经常变动的数据,是用来减少关系型数据库的压力,用来快速响应一些经常修改使用的数据的,如果大数量都存入,势必会增加redis的压力,会在持久化方面频繁尔大量的同步,非常占用资源。...

2022-06-29 16:23:28 19

原创 Golang协程循环打印字符

需求: 模拟两个协程,分别循环打印字母A和B。分析: 要实现两个协程之间的交替协作,就必须用到channel通信机制,而channel正好是同步阻塞的。半开方式结果发现打印出了的效果。也就是我们控制了开始的次序,但没有控制结束的次序,发生了并发不安全的情况。其实半开模式也可以用于某些场景下,如: 两个,在条件控制下,交替打印奇偶数:封闭方式我们在循环体首尾都使用了阻塞独占模式,两个交替释放控制权,达到了安全的协程交互控制。再看看下面的Demo,同样的原理:缓冲模式...

2022-06-29 16:03:55 9

原创 Redis持久化

Redis的持久化有两种方式:RDB和AOF,redis默认采用的是RDB的方式。RDB在默认配置中,Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中。可以配置持久化策略:,让redis在“秒内至少有个改动”才会触发一次rdb持久化操作。例如redis的默认策略有:还可以手动执行命令生成RDB快照,进入redis客户端执行命令或可以生成文件,每次命令执行都会将所有redis内存快照到一个新的文件里,并覆盖原有快照文件。bgsave写时复制的(COW)机制借助了系统的写时.

2022-06-28 10:17:28 4

原创 Redis的持久化方式

Redis支持两种方式的持久化,一种是RDB方式、另一种是AOF(append-only-file)方式,两种持久化方式可以单独使用其中一种,也可以将这两种方式结合使用。RDB:根据指定的规则“定时”将内存中的数据存储在硬盘上,生成的快照AOF:每次执行命令后将命令本身记录下来,每次执行命令都会将命令写入到aof文件中RDB模式的持久化方式是通过快照(snapshotting)完成的,它是Redis默认的持久化方式,Redis允许用户自定义快照条件,当符合快照条件时,Redis会自动执行快照操作。快照的条件

2022-06-27 16:25:35 7

原创 什么是 MySQL 的“回表”?

1.索引结构要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构。这个其实很多小伙伴可能也都听说过,B+Tree 嘛!B+Tree 是什么?那你得先明白什么是 B-Tree,来看如下一张图:前面是 B-Tree,后面是 B+Tree,两者的区别在于:B-Tree 中,所有节点都会带有指向具体记录的指针;B+Tree 中只有叶子结点会带有指向具体记录的指针。B-Tree 中不同的叶子之间没有连在一起;B+Tree 中所有的叶子结点通过指针连接在一起。B-Tree 中可能在非叶子结

2022-05-14 18:25:20 72

原创 TCP握手/挥手协议过程(三次握手四次挥手)

TCP连接建立在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。服务器必须准备好接受外来的连接。这通过调用socket、 bind和listen函数来完成,称为被动打开(passive open)。第一次握手:客户通过调用connect进行主动打开(active open)。这引起客户TCP发送一个SYN(表示同步)分节(SYN=J),它告诉服务器客户将在连接中发送到数据的初始序列号。并进入SYN_SEND状态,等待服务器的确认。第二次握手:服务器必须确认客户的SYN,同

2022-03-08 18:33:10 151

原创 golang 面试题(从基础到高级)

Golang面试问题汇总:1.Golang中除了加Mutex锁以外还有哪些方式安全读写共享变量?Golang中Goroutine 可以通过 Channel 进行安全读写共享变量。2.无缓冲 Chan 的发送和接收是否同步?ch := make(chan int)     无缓冲的channel由于没有缓冲发送和接收需要同步。ch := make(chan int, 2) 有缓冲channel不要求发送和接收操作同步。channel无缓冲时,发送阻塞直到数据被接收

2022-03-08 15:51:16 17535

原创 go 进程 线程 协程的区别

进程、线程、协程对比通俗描述有一个老板想要开个工厂进行生产某件商品(例如剪子)他需要花一些财力物力制作一条生产线,这个生产线上有很多的器件以及材料这些所有的 为了能够生产剪子而准备的资源称之为:进程只有生产线是不能够进行生产的,所以老板的找个工人来进行生产,这个工人能够利用这些材料最终一步步的将剪子做出来,这个来做事情的工人称之为:线程这个老板为了提高生产率,想到3种办法:方式 1在这条生产线上多招些工人,一起来做剪子,这样效率是成倍増长,即单进程 多线程方式 2老板发现这条

2022-03-08 10:34:24 851

原创 golang 互斥锁和读写锁(Mutex和RWMutex)

虽然Golang提供channel来保证协程的通信,但是某些场景用锁来显示保证协程的安全更清晰易懂。Golang中主要有两种锁,互斥锁Mutex和读写锁RWMutex,下面分别介绍一下使用方法,以及出现死锁的常见场景。一、Mutex(互斥锁)Mutex是互斥锁的意思,也叫排他锁,同一时刻一段代码只能被一个线程运行,使用只需要关注方法Lock(加锁)和Unlock(解锁)即可。在Lock()和Unlock()之间的代码段称为资源的临界区(critical section),是线程安全的,任何一个时.

2022-03-07 11:45:03 1016

原创 golang 内置函数new()和make()的区别

Go语言中的内建函数new和make是两个用于内存分配的原语(allocation primitives),其功能相似,却有本质区别。new和make的定义// The new built-in function allocates memory. The first argument is a type,// not a value, and the value returned is a pointer to a newly// allocated zero value of that type

2022-03-03 09:55:04 111

原创 Go基础知识

go的编译为什么比c快https://blog.csdn.net/qq_34417408/article/details/109716015gc的频率slice容量扩容ctx withvaluego内存逃逸mysql gbk 拼音编码b+树为什么方便存储mysql为什么不用外键k8s service做什么deployment limit request排序算法 时间复杂度对比容器间的隔离 namespacedockerfile cmd agentpoint镜像压缩GMP 和c

2022-02-25 18:31:27 413

原创 基于Redis实现分布式锁

什么是分布式锁分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。我们先来看下,一把靠谱的分布式锁应该有哪些特征:「互斥性」: 任意时刻,只有一个客户端能持有锁。「锁超时释放」:持有锁超时,可以释放,防止不必要的资源浪费,也可以防止死锁。「可重入性」:一个线程如果获取了锁之后,可以再次对其请求加锁。「高性能和高可用」:加锁和解锁需要开销尽可

2022-02-25 16:32:49 238

原创 Go sync.WaitGroup的用法

介绍经常会看到以下的代码:package mainimport ( "fmt" "time")func main(){ for i := 0; i < 100 ; i++{ go fmt.Println(i) } time.Sleep(time.Second)}主线程为了等待goroutine都运行完毕,不得不在程序的末尾使用time.Sleep() 来睡眠一段时间,等待其他线程充分运行。对于简单的代码,100个for循环可以

2022-02-25 09:20:29 98

原创 Go面试题:channel的无缓存和有缓存区别

1.channel的无缓存:无缓存channel的创建//括号中要定义channel中数据的类型ch := make(chan string)无缓存表示发送者必须等待数据被接收者接收才会继续发送到channel中。func main() { var channel = make(chan int, 0) go func() { for i := 0; i <= 2; i++ { channel <- i fmt.Pri

2022-02-24 19:00:53 918

原创 Go语言面试题:交替打印数字和字母

问题描述使⽤两个goroutine交替打印序列,⼀个goroutine打印数字, 另外⼀个goroutine打印字⺟, 最终效果如下:12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728解题思路就像我们在操作系统中学到的用信号量来控制进程协作一样,我们可以用两个无缓冲的channel来控制goroutine的协作。一个叫做number的channel用来通知打印数字的goroutine。另一个叫做l

2022-02-24 18:38:15 1389

原创 chrome 允许不安全脚本限制解决方案

背景:今天线上有个问题就是。chrome加载不安全脚本的提示,组织了页面的显示。原因:是请求跨域导致的。跨域的集中方式:Windows:(该操作可能会被安全软件阻止)右键Chrome快捷方式,然后点击“属性”,将命令行参数添加在“目标”栏的最后面即可,注意与主程序(Chrome.exe)之间有一个空格,命令行参数如下:(红字参数需手动修改)–unsafely-treat-insecure-origin-as-secure="http://ip:port" --user-data-dir=D:

2022-01-27 14:42:50 5030

原创 HTTP1.0和HTTP1.1和HTTP2.0的区别

HTTP1.0和HTTP1.1和HTTP2.0的区别1 HTTP1.0和HTTP1.1的区别1.1 长连接(Persistent Connection)        HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启长连接keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。HTTP1.0需要

2021-11-29 10:49:42 459

原创 Golang模拟post接口请求

代码:package main import ( "fmt" gojsonq "github.com/thedevsaddam/gojsonq/v2" "io/ioutil" "log" "net/http" // "reflect" "strings")func main() { req, err := http.NewRequest("POST",

2021-09-27 10:29:58 550

原创 golang语言中map的初始化及使用

// 先声明mapvar m1 map[string]string// 再使用make函数创建一个非nil的map,nil map不能赋值m1 = make(map[string]string)// 最后给已声明的map赋值m1["a"] = "aa"m1["b"] = "bb"// 直接创建m2 := make(map[string]string)// 然后赋值m2["a"] = "aa"m2["b"] = "bb"// 初始化 + 赋值一体化m3 := map[string

2021-09-15 10:45:22 2459

原创 Golang简单写文件操作的四种方法

package mainimport ( "bufio" //缓存IO "fmt" "io" "io/ioutil" //io 工具包 "os")func check(e error) { if e != nil { panic(e) }}/** * 判断文件是否存在 存在返回 true 不存在返回false */func checkFileIsExist(filename string) bool { var exist = true if _, err :=

2021-09-10 17:12:12 635

原创 Golang框架选型比较: goframe, beego, iris和gin

由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web"框架"为主。这里稍微打了个引号,因为大部分"框架"从设计和功能定位上来讲,充其量都只能算是一个组件,需要项目使用的话得自己四处再去找找其他的组件,或者自己造轮子。如果用于Web开发,这些"框架"的Web开发能力均已完备,无太大差别,且均是自标准库net/http.Server的二次封装。由于框架众多,这里笔者只选择了几个曾做过技术选型评估、较为熟悉,且目前比较流行和典型的Golang"框架",从适用于业务项目开.

2021-08-06 16:27:26 3591

原创 Golang的range

go for range循环实例// setReqBodyLog 请求的body数据落日志func setReqBodyLog(ctx context.Context, req *http.Request) { formMap := map[string]string{} for k, v := range req.PostForm { for _, formV := range v { if formMap[k] == "" { formMap[k] = desensitizat

2021-08-06 11:03:39 4042

原创 go 解析身份证

package cardimport ( "encoding/json" "errors" "strconv" "strings" "time")//包括1980-2020年的所有行政区划代码var zone = `{"110000":"北京市","110101":"东城区","110102":"西城区","110103":"崇文区","110104":"宣武区","110105":"朝阳区","110106":"丰台区","110107":"石景山区","1101

2021-08-02 09:58:56 2569

原创 Golang中删除字符串的最后一个字符

package mainimport ( "fmt" "strings")func TrimSuffix(s, suffix string) string { if strings.HasSuffix(s, suffix) { s = s[:len(s)-len(suffix)] } return s}func main() { s := "a string ++" fmt.Println("s: ", s)

2021-07-29 14:59:19 1257

原创 Golang 字符串分割,替换和截取

package mainimport ( "fmt" "strings")func main() { str := "赵,钱,孙,李,赵" //字符串分割, 使用字符分割 str1 := strings.Split(str, ",") fmt.Println(str1[0]) //赵 fmt.Println(str1[1]) //钱 fmt.Println(str1[2]) //孙 fmt.Println(str1[3])

2021-07-29 14:37:58 2760

道德经以哲学意义之“道德”为纲宗.pdf

《道德经》文本以哲学意义之“道德”为纲宗,论述修身、治国、用兵、养生之道,而多以政治为旨归,乃所谓“内圣外王”之学,文意深奥,包涵广博,被誉为万经之王。

2020-06-23

空空如也

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

TA关注的人

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