自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 go mutex.go 中 lock unlock 源码解析

go mutex.go 中 lock unlock 源码解析mutex 主要是根据锁状态已经信号量来做锁的优化以及锁的升级// 加锁的逻辑type Mutex struct { state int32 sema uint32}const ( mutexLocked = 1 << iota // mutex is locked mutexWoken mutexStarving mutexWaiterShift = iota // 3)

2020-12-22 16:42:06 400 2

原创 spring-security 以及 spring security oauth2 结合jwt 做 token验证 新手入门到深入

**推荐入门系列之spring-security**要了解 spring security oauth2 必须先弄懂 spring security ,spring security oauth2 是基于spring security做的更上一层的封装,而spring security oauth2 ,更像是一种第三方授权的协议规范,学习spring security可以阅读源码,这里推荐一个源码系列 https://blog.csdn.net/fengyilin_henu/article/de

2020-06-03 16:26:45 411

原创 一个刚刚配置好的虚拟机使用桥接模式(直接复制网络)来自定义网络ip地址

首先关闭虚拟机防火墙若主机地址为1~50则需要更改网络 ip地址vi /etc/sysconfig/network-scripts/ifcfg-ens33将以下内容写入该文件(IPADDR需选择设置主机地址为51~255之间,若不确定主机地址是否未被使用可以用ping 命令尝试,连接不上代表未被使用),如例IPADDR="192.168.1.233"NETMASK="2...

2019-09-09 15:09:35 647

原创 k8s自动补全命令

【代码】k8s自动补全命令。

2024-06-03 00:01:38 521

原创 raft 协议和etcd实战

防止某个节点因为出现分区后,恢复后,再次发起leader选举,此处因为他会先进入prevote阶段,因为此时该阶段回去判断是否日志索引记录多少,因此该节点不能进入leader选举流程。集群成员变更的时候,下线C-old节点的时候,可能会因为暂时失联再发起leader选举。如果出现网络分区(注意分区后节点数还是和分区前是一样的)因为此时其他节点大概率还是保持和leader通信的。如果新分区的节点需要经过preVote。

2024-05-23 18:08:46 259

原创 cpu缓存一致性

volatile指令的作用cpp的volatile和java的特性不一致c++ volatile 的特性禁止编译器的优化禁止编译器的代码的重排序强制从缓存中读取,失效寄存器java volatile 的特性:是基于 LOCK 指令 实现的在cpp的特性的基础之上1、实现了一个全屏障(越过cpu的乱序执行、指令重排序等,保证了数据的顺序一致性)缓存的一致性保证是通过 MESI 协议(总线嗅探机制)+ 内存屏障 实现的,因此为什么说。

2024-01-08 19:31:04 1348

原创 item2使用expect 自动ssh登录并且使用rzsz下载问题记录

登录脚本login.sh (和expect 脚本放在同一个目录)expect 脚本item2配置如下图所示。

2023-06-28 19:50:13 321

原创 vue 中同步等待的提交

【代码】vue 中同步等待的提交。

2023-04-28 14:41:22 210

转载 kube-proxy —— iptable模式实现原理实例分析

k8s proxy

2023-04-04 16:22:07 126

原创 vue修改当前路由query参数

【代码】vue修改当前路由query参数。

2023-03-29 17:47:01 1810

原创 gcc 查看支持的环境系统变量

gcc 查看支持的环境系统变量。

2023-02-01 14:15:56 218

原创 go 程序代码覆盖率采集

单元测试覆盖率

2023-01-05 17:46:48 668

原创 动态规划--图的最短路径问题(go实现)

【代码】动态规划--图的最短路径问题(go实现)

2022-12-23 16:05:05 157

原创 Tire 树, go极简实现

Tire

2022-12-19 16:29:12 59

原创 go 中快速查看 包/模块 依赖

要深刻理解 go 中,包和模块关系的不同模块是 module, 是工程包的综合,就是 go mod 文件中的第一句包是 一个module 下的一个一个目录。

2022-09-29 21:03:34 2028

原创 金字塔原理

分类,每一类分为 1-100 项,运用归纳法梳理出事项的共性,运用推理法推理出共性的原因,继续产生新的疑问和共性,以及因果链,最终找出问题或者结论,再寻找解决方案。二. 信息搜集(很重要)

2022-08-15 11:29:35 102

原创 标准实现无锁化队列的例子

以下 V2 版本是 标准版本,CAS 操作根据自身语言特性来实现。

2022-08-12 13:08:06 72

原创 理解 赋值拷贝构造函数,赋值拷贝构造运算符,移动赋值构造运算符,运算符重载 小例子

代码】理解 拷贝构造函数,右值拷贝构造函数,运算符重载 小例子。

2022-08-09 16:25:21 244

原创 GPRC 接口统一返回值处理以及错误处理规范

****公共返回值规范:grpc接口 公共返回值:****

2022-07-07 23:39:05 1723

原创 Mac M1 上面虚拟机 搭建 k8s v 1.19.3 集群 命令参考

Mac M1 搭建k8s

2022-06-11 14:12:41 1380 6

转载 Golang-Map中value是不可寻址可使用指针类型代替

Golang Map元素取址:package mainimport "fmt"type UserInfo struct { Uid string `json:"uid"` UserName string `json:"user_name"` Sex int `json:"sex"`}func main() { var user = make(map[string]UserInfo) uid := "0001" user[u

2022-04-27 16:30:57 618

原创 go老鸟也会经常出现 并发channal问题引起的协程泄漏

go中经常用于并发channal问题引起的协程泄漏例子:package mainimport ( "log" "runtime" "time")func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) go func() { for { log.Printf("当前 goroutine 数量为:%d\n", runtime.NumGoroutine()) time.Sleep(1 * time.Second)

2022-04-24 16:51:03 525

原创 理解 go defer和panic 使用的小例子

一个挺有趣的小例子package mainimport "fmt"func a() { defer b() fmt.Println("a")}func b() { defer c() panic("b")}func c() { defer catchPanic("f") defer f() panic("c")}func f() { [panic("f")](https://mp.weixin.qq.com/s/pxWf762ODDkcYO-xCGMm2g)}

2022-04-23 23:17:41 297

原创 网格服务 grpc 客户端封装-利用接口指针反射设置grpc客户端

// authsvr_grpc.pd.gopackage authsvrtype AuthClient interface {}// package handlerfunc TestInitRpcClient(t *testing.T) { var authclent authsvr.AuthClient // grpc serve 端口, grpc 客户端new 函数, grpc 客户端接口指针 InitMicroRpcClient(":9001", authsvr.NewAuthCl

2022-04-18 16:41:28 513

原创 go中 反射获取结构体变量值,组装cmd命令的小例子

// GocFlag is flag of profile APItype GocFlag struct { RootGocCmd GocCmd Name string `form:"name" json:"name"` Center string `form:"center" json:"center"` Force bool `form:"force" json:"force"` Servi

2022-04-03 13:03:45 634

原创 go中 **byte 转为 []byte 切片示例

const PtrSize = 4 << (^uintptr(0) >> 63)func main() { a := [...]byte{'1', '2', '3'} b := [...]byte{'a', 'b', 'c'} c := [...]byte{'A', 'C', 'D'} aptr := (*byte)(unsafe.Pointer(&a)) bptr := (*byte)(unsafe.Pointer(&b)) cptr := (*by

2022-02-15 10:55:23 675

原创 mysql 常见数据分析,统计数据 工作应用场景

-- 原始数据select c.system as `系统名`,a.srv_name as `服务`, DATE_FORMAT(a.created_at, '%Y %m') as `发布月份`, a.version as `制品版本` , pc.deploy_cluster_name as `发布集群` , b.`project_name` as `coding项目名称`, b.attribute as `发布特性`, a.created_at as `发布时间`, a.updated_at as `

2021-12-02 15:27:17 821

原创 awk 实际小例子的使用

awk 实际小例子的使用Fida Step-in Dog Harness Superior Reflective Puppy Vest60 59 58 57 56 50 49 48 59 47 26 47 50 20 56 59 58 49 50 26上面是原始数据,我会利用awk工具,提供一定的整理和修改将上面的数据为空的部分填充0awk -F'\t' -vOFS='\t' '{

2021-05-11 16:30:10 77

原创 Redis 原理难点

Redis 原理难点1、AOF rewrite 为什么要 写入aof_rewrite_buf、aof_buf两个缓存AOF 重写和 RDB 创建快照一样,都巧妙地利用了写时复制机制。Redis 执行 fork() ,现在同时拥有父进程和子进程。子进程开始将新 AOF 文件的内容写入到临时文件。对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存(aof_rewrite_buf)中,一边将这些改动追加到现有 AOF 文件的末尾(即添加到aof_buf中):这样即使在重写的中途发生停机,

2021-04-08 20:31:28 348

原创 对于新建文件,重命名文件,出来对数据的落盘,还得保证父目录的落盘

对于新建文件,重命名文件,出来对数据的落盘,还得保证父目录的落盘对目录落盘代码(系统:mac M1,语言:go)var path = "./test/"f,err := os.Open(path)err = Fsync(f)if err != nil { log.fatal(err.error())}func Fsync(f *os.File) error { _, err := unix.FcntlInt(f.Fd(), unix.F_FULLFSYNC, 0) return er

2021-03-16 15:05:34 97

原创 slice的几个灵活运用的例子

slice的几个灵活运用的例子slice 的 中间添加 某个值 numbers := []int{1} copy(numbers[1:],numbers[0:]) fmt.Println(numbers) var index = 1 numbers = []int{1,3,6} numbers = append(numbers,0) copy(numbers[index+1:],numbers[index:]) numbers[index]=2 fmt.Println(number

2021-03-05 18:50:41 148

原创 写时复制copyonwrite的demo,示例

阅读etcd源码时候,看到一个写时复制的实现,纪录一下package mainimport "fmt"type pgid uint64type txid uint64type meta struct { magic uint32 version uint32 pageSize uint32 flags uint32 freelist pgid pgid pgid txid txid checksum uint64}func main()

2021-03-03 15:30:47 182 1

原创 作为 int,以及int扩展类型的 潜在类型可以作为 数组的索引

作为 uint64 潜在类型可以作为 数组的索引(骚操作)type pgid uint64arr := []byte{1,2,3,4}fmt.Println(arr[pgid(2)])

2021-03-01 20:00:36 116

原创 go 中 unsafe 操作中 切片参数越界并不会报panic

go 中 unsafe 操作中 切片参数越界并不会报panicfunc main() { var ids []int // 这里报错,panic: runtime error: index out of range [0] with length 0 // fmt.Println(ids[0]) fmt.Println("size of unsafe.Sizeof(ids[0]):", unsafe.Sizeof(ids[0]))}输出 : size of unsafe.Sizeof(id

2021-02-26 19:16:54 376

原创 go 利用 cas 无锁化顺序输出 数字

go 利用 cas 无锁化顺序输出 数字package mainimport ( "fmt" "sync" "sync/atomic")var a int64func main() { ch := make(chan int64,100) wg := sync.WaitGroup{} wg.Add(1) go func() { wg1 := sync.WaitGroup{} defer wg.Done() defer close(ch) for i := 0; i

2020-12-25 11:18:46 146

原创 go,java,c,c++ 当中分别对变量,指针和引用的使用

1、在Java 中 对象的使用2、在Go 中 结构体的使用3、在C 中 结构体的使用4、在C++ 中 结构体的使用1、在Java 中 对象的使用我们知道Java中只有引用,没有指针,Java new 一个对象 的内存空间是分配在堆上,有种说法是对象优先会分配在栈上面,基本类型肯定分配在栈上,而string类型的内存空间是分配在堆上,对string类型的+操作,只会生成新的string字符串。 由于java 对象中只有引用,所以当多个变量引用相同的对象是,可能会影响其他对象的值。

2020-12-17 11:22:33 207

原创 golang 源码中对 interface的灵活运用

interface的灵活运用工作期间阅读了一下 go 一个 mysql driver github.com/go-sql-driver/mysql@v1.5.0/errors.go:9 的 源代码,发现几个 interface 灵活应用的的小例子,特此记录一下1.struct TCPAddr 和 struct sockaddr 之间的灵活转换1. struct TCPAddr 和 struct sockaddr 之间的灵活转换我们先来看一下几个定义(都是定义在/usr/local/go/src/n

2020-12-16 13:58:26 208 1

原创 Kubernetes终止Pod生命周期以及执行流程

Pod 设置为Terminating状态,并从所有服务的Endpoints列表中删除此时,Pod停止,但是Pod中运行的容器不受影响PreStop Hook被执行preStop Hook发送容器特殊命令或者Http请求到Pod中此时,Kubernetes将向Pod中的容器发送SIGTERM信号,这个信号即通知容器他们很快将进行关闭。Kubernetes等待优雅的终止此时,Kubernetes等待指定的时间称为优雅终止宽限期。默认情况下是30秒(可以修改.spec.terminationG..

2020-11-02 12:08:32 697

原创 tcpdump 命令使用

tcpdump 命令使用tcpdump -i any (-s 0 不限制展示包大小,可省略)-n -tttt (-A 以文本形式输出内容,可省略) tcp port 3001

2020-09-03 18:03:57 817

原创 mysql 执行计划 explain 的 应用

mysql> explain select * from user where user_id = (select user_id from acticle where article_id = 33) union select * from user where user_id = (select user_id from acticle where article_id = 14) \G...

2019-11-30 16:55:24 91

空空如也

空空如也

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

TA关注的人

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