• 2024-03-24Go数组的扩容规则
    Go数组的扩容规则Go数组的扩容规则技术要点先是双倍扩容,然后是一定的比例扩容,逐渐向1.25进行靠近在目前的实现里面,在小于256的时候会进行double,在大于256的时候,会根据一定的生长因子进行扩容,但是总体来说还是会逐渐的靠近到1.25funcgrowslice(et*_type,olds
  • 2023-11-06Golang面试题从浅入深高频必刷「2023版」
    大家好,我是阳哥。专注Go语言的学习经验分享和就业辅导。Go语言特点Go语言相比C++/Java等语言是优雅且简洁的,是我最喜爱的编程语言之一,它既保留了C++的高性能,又可以像Java,Python优雅的调用三方库和管理项目,同时还有接口,自动垃圾回收和goroutine等让人拍案叫绝的设计。有许多基于
  • 2023-09-16HashMap 的初始化问题
    最近的两次面试被分别被问到了:如果初始化HashMap的容量为100,那么实际容量会是多少?如果初始化HashMap的容量为20,那么实际容量会是多少?会不会发生扩容?自己想当然的会回答:容量会是满足2的幂次*负载因子>=初始化指定容量的值publicstaticvoidmain(String[]arg
  • 2023-07-19golang slice (切片) 扩容机制详解(1.18版本后)
    slice源码定义:typeslicestruct{ arrayunsafe.Pointer//指向底层数组的指针 lenint//切片长度 capint//切片容量}growslice()方法:用于slice的扩容funcgrowslice(et*_type,oldslice,capint)slice{//...... newcap:=old.cap doubleca
  • 2023-07-15切片
    结构体定义runtime/slice.go文件中typeslicestruct{ arrayunsafe.Pointer//数组的指针 lenint capint}扩容通过append方法添加数据,返回一个新的slice对象,地址和之前不一样。但是原来元素地址是不变的,直到扩容。packagemainimport( "fmt")funcmain()
  • 2023-04-09Go 语言切片是如何扩容的?
    原文链接:Go语言切片是如何扩容的?在Go语言中,有一个很常用的数据结构,那就是切片(Slice)。切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一种引用类型,它有三个属性:指针,长度和容量。底层源码定义如下:typeslicest
  • 2023-04-09Go 语言切片是如何扩容的?
    原文链接:Go语言切片是如何扩容的?在Go语言中,有一个很常用的数据结构,那就是切片(Slice)。切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一种引用类型,它有三个属性:指针,长度和容量。底层源码定义如下:typeslices
  • 2022-10-30go 切片长度与容量的区别
    ###切片的声明切片可以看成是数组的引用(实际上切片的底层数据结构确实是数组)。在Go中,每个数组的大小是固定的,不能随意改变大小,切片可以为数组提供动态增长和缩小的需求,但
  • 2022-10-18Golang 中的 字符串,切片,數組
    數組,字符串,切片字符串Golang中的string底層數據類型定義在runtime/string.go中:typestringStructstruct{ strunsafe.Pointer lenint}在反射包中與之對應
  • 2022-10-17HashMap的尾部遍历问题 (Tail Traversing)
    JDK1.7的HashMap在实现resize()时,新table[]的列表采用LIFO方式,即队头插入。这样做的目的是:避免尾部遍历。避免尾部遍历是为了避免在新列表插入数据时,遍历到队尾的位置。因
  • 2022-10-09JDK 1.8 HashMap 扩容源码详解
     作为开发人员,千万不能停留在实现功能上,一定要提升到性能方面上。这需要我们不断的实践,学习源码, 根据底层实现原理,来做出最好的操作。 就HashMap而言,一定是我们常用的
  • 2022-10-02【Golang】关于Golang中Slice扩容策略
    一、概述当切片的容量不足时,我们会调用runtime.growslice函数为切片扩容,扩容是为切片分配新的内存空间并拷贝原切片中元素的过程,我们先来看新切片的容量是如何确定的,使