/images/avatar.jpg

Kiosk Studio (2022)

Golang Map怎么并发访问

Map 是每门编程语言的最基础的数据结构,这种数据结构的实现就是 key-value之间的映射关系,每个key都有一个唯一的索引值,通过索引值可以很快的找到对应的值。 Map 也是程序中最常见的数据结构,我们的项目中有大量的数据需要加载到内存中,而且需要高频访问,无疑 map 就是最好的选择,但是众所周知,Map是不支持并发访问的。 如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 func main() { var m = make(map[string]int,10) // 初始化一个map go func() { for { m["abc"] = 1 //设置key } }() go func() { for { _ = m["def"] //访问这个map } }() select {} } 虽然这段代码的不同goroutine 是各自在操作不同的元素,但是运行时检测到同时对 map 对象有并发访问,就会直接 panic。 如何实现一个线程安全的 map 类型 最简单的方式必然是加锁访问这里不再赘述了。

消息队列基础

随着业务的快速发展,各层业务之间调用关系越来越复杂,对系统的可用性以及扩展性要求也越来越高。消息队列作为分布式架构中的重要一环,提供了消息传递和消息排队的模型,被应用在系统解耦、异步处理、流量削峰 等多个场景,有着举足轻重的地位。

Golang的Map长啥样

Map 是每个编程语言必备的数据结构,就连 lua 这种胶水语言都支持其功能,map 的底层是一个 HashTable,Go 语言的map使用十分简易,但其内部实现不是简单的一个 HashTable。

算法 - (深度优先搜索)

Depth-First Search,也就是DFS算法,一般可以用来遍历或者搜索树或图。基本思想是假设走一条只有一个出口,但是路上可能会有很多分叉口的路,从头开始,每次遇到一个分叉口就随机选择一条路,当该条路走不通时,就回到上个分叉口重新选择。直到遍历到正确的路线。