面试题答案
一键面试-
预分配容量:
- 策略:在创建map时,根据预估的元素数量,使用
make(map[keyType]valueType, initialCapacity)
来预分配容量。例如,预计map中会有100个元素,m := make(map[string]int, 100)
。 - 原理:map的底层实现会根据当前容量动态调整内存。如果不预分配容量,随着元素不断添加,map可能会频繁地进行扩容操作。扩容操作涉及重新分配内存、复制数据,开销较大。预分配合适的容量可以减少这种不必要的扩容,从而减少内存碎片和额外的内存开销。
- 策略:在创建map时,根据预估的元素数量,使用
-
使用小的键值类型:
- 策略:选择占用内存小的数据类型作为map的键和值。比如,能用
int8
就不用int
,能用string
且长度固定时尽量避免使用大的结构体作为值。例如,m := make(map[int8]int8)
。 - 原理:map中每个键值对都会占用一定内存空间,键和值的类型大小直接影响每个元素占用的内存量。使用小的类型,每个元素占用的内存就少,在元素数量较多时,总体内存占用会显著降低。
- 策略:选择占用内存小的数据类型作为map的键和值。比如,能用