MST

星途 面试题库

面试题:Go语言切片在扩容时的策略与数组的关系

当Go语言中的切片需要扩容时,其扩容策略是怎样的?这种策略与底层数组有怎样的关联?如果在频繁扩容的场景下,应该如何优化切片的使用?
49.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. Go语言切片扩容策略
    • 当切片容量不足以容纳新的元素时会触发扩容。
    • 如果新的元素个数小于等于当前容量的2倍,且当前容量小于1024,则新容量会变为当前容量的2倍。
    • 如果当前容量大于等于1024,则新容量会变为当前容量的1.25倍。
    • 如果新的元素个数大于当前容量的2倍,则新容量直接变为新元素个数所需的大小。
  2. 与底层数组的关联
    • 切片是基于底层数组实现的。当切片扩容时,会重新分配一个更大的底层数组,然后将原底层数组的内容复制到新的底层数组中,原底层数组可能会被垃圾回收。
  3. 频繁扩容场景下的优化
    • 预分配容量:在创建切片时,通过make函数预先分配足够的容量,例如make([]T, 0, initialCapacity),这样可以减少扩容的次数。
    • 复用切片:在一些场景下,可以将使用过的切片重置(如slice = slice[:0])后重新使用,避免每次都创建新的切片导致频繁扩容。