map的底层实现Created2021-08-01Updated2021-08-01 map 示例: 先来看一个demo, 打印maps的指针地址: 1234567891011121314151617181920package mainimport "fmt"var maps = map[string]string{ "name": "golang",}func init() { fmt.Printf("maps init p(%p)\n", &maps)}func main() { fmt.Printf("maps main p(%p)\n", &maps) printMaps(maps)}func printMaps(maps map[string]string) { fmt.Printf("maps printMaps p(%p)\n", &maps)}Read More
设计模式-单例模式golang实现Created2021-07-25Updated2021-07-25 单例模式 单例模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。Read More
TCP Fast OpenCreated2021-07-19Updated2021-07-19 传统的tcp三次握手 传统的 TCP 握手是一个三步过程,执行如下: 发送方向接收方发送SYN数据包以发起连接 接收方向发送方发送一个 SYN-ACK 数据包,让其知道它已准备好开始传输数据 发送方向接收方发送一个ACK包 Read More
设计模式-抽象工厂模式golang实现Created2021-07-18Updated2021-07-18 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。Read More
设计模式-工厂模式golang实现Created2021-07-11Updated2021-07-11 工厂模式 工厂模式(Factory Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。Read More
kafka数据丢失和重复消费解决方案Created2021-07-08Updated2021-07-08在使用消息中间间的过程中,经常面对的问题就是消息丢失和重复消费,本文主要记录kafka消息丢失和重复消费的解决思想,不做具体实现。 生产者 消息丢失 丢失场景Read More
透视http协议 (二)Created2021-07-04Updated2021-07-08 键入网址再按下回车,发生了什么? 使用 IP 地址访问 Web 服务器 浏览器从地址栏的输入中获得服务器的IP 地址和端口号; 浏览器用 TCP 的三次握手与服务器建立连接;Read More
预测性负载均衡Created2021-07-03Updated2021-07-03Steve Gury 的“预测性负载均衡:不公平但更快、更健壮” 客户端负载均衡方法 许多可用的服务器,选择哪一个 随机选择Read More
grpc版本控制Created2021-07-02Updated2021-07-02grpc服务更改时,应考虑一下内容: 更改会对客户端造成如何影响 应实现支持更改对版本控制策略 向后兼容性Read More
redis分布式琐的正确姿势Created2021-06-26Updated2021-06-26 redis锁使用的正确姿势 可靠的分布式锁,要具备以下几个特性 互斥性。(在任意时刻,只有一个客户端能持有锁) 不会发生死锁。(即使有一个客户端在持有琐的期间崩溃而没有主动释放锁,也能保证后续其他客户端能加锁) 具有容错性。(只要大部分的Redis正常运行,客户端就可以加锁和解锁)Read More