Golang 中 WaitGroup 和 ErrGroup 相关整理

sync.WaitGroupsync.WaitGroup 和 sync.ErrGroup 是 Go 语言中用于处理并发任务的两个重要工具。它们都可以帮助我们管理多个 goroutine 的执行和同步,但它们的使用场景和功能略有不同。其中 sync.ErrGroup 主要用于处理并发任务中的错误。且其是基于 syn...

Go 并发控制:singleflight 详解

在之前的 缓存击穿和缓存雪崩 中提到了 singleflight 的概念,singleflight 是 Go 官方扩展库 x 中提供的扩展并发原语,能够将多个并发请求合并为一个,降低服务端压力。本文记录深入理解 singleflight 源码的过程,帮助自己更好地掌握其用法和实现原理。 singleflight ...

缓存击穿和缓存雪崩

在开发中为了提升性能,减轻数据库压力,一般会给热点数据设置缓存,如 Redis,用户请求过来后先查询 Redis,有则直接返回,没有就会去查询数据库,然后再写入缓存。而在分布式、高并发场景下,缓存系统常会遇到如下两类问题: 缓存击穿(Cache Penetration) 缓存雪崩(Cache Avalanche...

Go String 总结(LCR 182. 动态口令)

字符串的定义在 Go 语言中,字符串是一个不可变的字节序列。字符串可以用双引号 " 包裹起来,也可以用反引号 ` 包裹起来。反引号包裹的字符串可以跨多行,并且不会对其中的内容进行转义。 12s1 := "Hello, World!"s2 := `Hello, World!` 在 G...

287. 寻找重复数

题目给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。 你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。 示例 1:输入:nums ...

15. 三数之和 & 18. 四数之和

题目给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0...

19. 删除链表的倒数第 N 个结点

题目给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5] 示例 2:输入:head = [1], n = 1输出:[] 示例 3:输入:head = [1,2...

Golang 中 Array 和 Slice 相关整理

Golang 中有两种数据结构可以用来存储一组数据:Array 和 Slice。它们之间有一些重要的区别和使用场景。因为切片(slice)是更好用、安全,所以在实际开发中更常用切片(slice)。而其实切片(slice)是基于数组(array)实现的。之前开发的过程中也只注重了使用,这次整理一下它们之间的区别和使...

Go Map 分析与总结

什么是 MapMap 是一种无序的键值对集合,类似于其他编程语言中的字典或哈希表。它允许通过键快速访问对应的值。Map 的键必须是唯一的,而值可以重复。Map 的键可以是任何类型,但通常使用字符串或整数作为键。Map 的值可以是任何类型,包括其他 Map、切片或结构体。 最主要的数据结构有两种:哈希表和搜索树(红...

59. 螺旋矩阵 II

59. 螺旋矩阵 II给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]] 示例 2:输入:n = 1输出:[[1]] 提示: 1...