快乐的程序员
架构设计:反向依赖与解耦 架构设计:反向依赖与解耦
写在前面你有没有遇到过,修改db地址需要同时修改上有多个服务的配置?者某个db不可用了导致上有多个服务不可用? 这是架构耦合问题,多个服务之间相互依赖,当某个服务不可用或者做出修改,需要上游服务同时做出修改。这就是你的问题,导致我需要修改(
2024-03-13
引用外部资源最好自己封装一层 引用外部资源最好自己封装一层
写在前面在公司开发业务过程中发现经常需要引用外部资源,包括外部服务rpc、http、rocketmq,还有外部依赖包log、error、common等,在代码各个模块、各个文件里面直接引用,这有什么问题呢? 需要替换某个包的时候需要修改所
2024-03-13
高性能的4个指标 高性能的4个指标
响应时间系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。 吞吐量单位时间内处理的请求数量。 QPS每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。 用户并发数同时承载
2024-03-13
如何解决单点故障问题 如何解决单点故障问题
写在前面虽然目前都是微服务,多机房、多实例部署,但难免还是会存在单点服务。例如写数据服务、登录服务、服务发现等,如何解决单点故障问题呢? 什么是单点故障通常分布式系统采用主从模式,一个主机连接多个处理节点,主节点负责分发任务,而子节点负责处
2024-03-13
谈谈缓存穿透、缓存雪崩、缓存击穿 谈谈缓存穿透、缓存雪崩、缓存击穿
写在前面面试的时候经常被问到缓存失效的问题,今天就来详细谈一下 缓存穿透缓存穿透(cache penetration)是用户访问的数据既不在缓存当中,也不在数据库中 缓存穿透发生的场景一般有两类: 原来数据是存在的,但由于某些原因(误删
2024-03-13
mac 安装 protoc mac 安装 protoc
用brew  安装 protoc brew install grpc brew install protobuf brew install protoc-gen-go brew install protoc-gen-go-g
2024-03-13
GO每日一题(7) GO每日一题(7)
`# 下面代码会输出什么 type People struct { Gender bool Name string } func (p *People) GetName() string { return p.Name } t
2024-03-13
GO结构体的空指针和interface{}类型的区别 GO结构体的空指针和interface{}类型的区别
写在前面直接上代码 type People struct { Gender bool Name string } func main() { var data *People var in interface{} fmt.
2024-03-13
GO json解析遇到的坑 GO json解析遇到的坑
写在前面在写go的时候经常用到序列化、反序列化,记录一下遇到过的坑。 空指针会被解析成字符串”null”type Person struct { Name string Age int } func main() { var p
2024-03-13
GO 关闭http请求的几种方式 GO 关闭http请求的几种方式
写在前面面试的时候问到如何关闭http请求,一般人脱口而出的是关闭response.body,这是错误的。response是返回结果的一个结构体,跟http连接没有关系。 type Response struct { Status
2024-03-13
GO每日一题(6) GO每日一题(6)
下面这段代码会输出什么func test(i int) (ret int) { ret = i * 2 if ret > 10 { ret := 10 return } return } func main() {
2024-03-13
面试:如何设计高并发系统 面试:如何设计高并发系统
写在前面面试的时候经常会被问到如何设计一个高并发系统,很多人都只能说出缓存、读写分离、异步等几个常见方法,今天就系统全面总结一下这个问题,希望能帮助到大家。 什么是高并发系统简单说就是你的系统要能支持瞬间大量的请求。比如淘宝双11、过年抢红
2024-03-13
14 / 22