MST

星途 面试题库

面试题:Go语言切片slice扩容机制下的边界条件

在Go语言中,已知一个初始容量为5的切片,不断向其追加元素,在什么情况下会触发扩容?扩容后的新容量是多少?请简要说明扩容的一般规则以及该场景下的具体变化过程。
28.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 触发扩容情况: 当切片的容量不足以容纳新追加的元素时,会触发扩容。在Go语言中,当向初始容量为5的切片追加第6个元素时,就会触发扩容。
  2. 扩容后的新容量: 扩容后的新容量一般为原容量的2倍(如果原容量小于1024)。对于初始容量为5的切片,扩容后新容量为10。
  3. 扩容一般规则
    • 如果原切片容量小于1024,新容量会变为原容量的2倍。
    • 如果原切片容量大于或等于1024,新容量会变为原容量的1.25倍。
  4. 该场景具体变化过程
    • 初始切片容量为5,当追加第6个元素时,由于5的容量无法容纳,触发扩容。
    • 按照小于1024时扩容为2倍的规则,新容量变为10,Go语言会分配一个新的底层数组,大小为10,然后将原切片中的5个元素复制到新数组中,再将新追加的元素放入新数组中合适的位置,此时切片的长度变为6,容量变为10。