Go语言的并发安全和锁

在 Go 语言中,并发编程是一个重要的特性。并发使得程序可以同时执行多个任务,但也带来了线程间共享数据的安全性问题。为了保证数据的一致性和正确性,

Go语言defer关键字的使用场景

defer 是 Go 语言中的一个关键字,用于延迟执行一个函数或方法,直到包含 defer 语句的函数结束后再执行。无论该函数是因为正常的 return 语句退出,还是因为触发了 panic 导

Go语言封装web路由和中间件

Go语言里如何进行路由和封装中间件,进行业务和非业务逻辑的剥离呢? 包和导入 package main import ( "log" "net/http" "time" ) 导入了三个包: log:用于日志记录。 net/htt

Go语言下使用Protobuf搭建RPC框架

Protobuf 安装 安装 protobuf brew install protobuf 确认安装成功 protoc --version 安装代理(可选,先跳过,4超时再执行3) go env -w GOPROXY=https://goproxy.cn 安装代码生成插件 protoc-gen-go go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest 通信协议定义 定义通信协议 syntax =

OOM问题小结

OOM原因 一次性申请的太多内存,导致内存不足 更改申请对象的数量 内存资源耗尽未释放 找到未释放的对象进行释放 本身资源不够 jmap -heap pid 查看堆内存使用情况

JVM调优总结

JVM调优都是有一个目标的,在总结调优之前,我们需要先介绍几个相关概念: 相关概念 串行 单线程:垃圾回收发生的时候,其他线程都暂停 使用于堆内存较

如何优雅的关闭Java服务程序

钩子函数 对于Java服务来说,启动很容易,我们可以通过java -jar命令进行启动,或者开发时候通过IDEA的Run/Debug来启动。 然后

Java热更新方案

线上代码出现问题,我们就要修改问题。面对要求严格的停服计划,对于一些小Bug,我们可以采取不停服热更新,今天就总结一个热更新方案: 利用Art