map的底层实现

map 示例:

先来看一个demo, 打印maps的指针地址:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import "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实现

单例模式

单例模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

Read More

TCP Fast Open

传统的tcp三次握手

传统的 TCP 握手是一个三步过程,执行如下:

  1. 发送方向接收方发送SYN数据包以发起连接
  2. 接收方向发送方发送一个 SYN-ACK 数据包,让其知道它已准备好开始传输数据
  3. 发送方向接收方发送一个ACK包
Read More

设计模式-抽象工厂模式golang实现

抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

Read More

设计模式-工厂模式golang实现

工厂模式

工厂模式(Factory Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

Read More

kafka数据丢失和重复消费解决方案

在使用消息中间间的过程中,经常面对的问题就是消息丢失和重复消费,本文主要记录kafka消息丢失和重复消费的解决思想,不做具体实现。

生产者

消息丢失

丢失场景

Read More

透视http协议 (二)

键入网址再按下回车,发生了什么?

使用 IP 地址访问 Web 服务器

  1. 浏览器从地址栏的输入中获得服务器的IP 地址和端口号;
  2. 浏览器用 TCP 的三次握手与服务器建立连接;
Read More

预测性负载均衡

Steve Gury 的“预测性负载均衡:不公平但更快、更健壮”

客户端负载均衡方法

  • 许多可用的服务器,选择哪一个

随机选择

Read More

grpc版本控制

grpc服务更改时,应考虑一下内容:

  • 更改会对客户端造成如何影响
  • 应实现支持更改对版本控制策略

向后兼容性

Read More

redis分布式琐的正确姿势

redis锁使用的正确姿势

可靠的分布式锁,要具备以下几个特性

  1. 互斥性。(在任意时刻,只有一个客户端能持有锁)
  2. 不会发生死锁。(即使有一个客户端在持有琐的期间崩溃而没有主动释放锁,也能保证后续其他客户端能加锁)
  3. 具有容错性。(只要大部分的Redis正常运行,客户端就可以加锁和解锁)
Read More
Search by:GoogleBingBaidu