Go channel有什么特点?
channel有2种类型:无缓冲、有缓冲channel有3种模式:写操作模式(单向通道)、读操作模式(单向通道)、读写操作模式(双向通道) 写操作...
Go channel的底层实现原理?
概念:Go中的channel 是一个队列,遵循先进先出的原则,负责协程之间的通信(Go 语言提倡不要通过共享内存来通信,而要通过通信来实现内存共享,CSP...
Go map和sync.Map谁的性能好,为什么?
Go 语言的 sync.Map 支持并发读写,采取了 “空间换时间” 的机制,冗余了两个数据结构,分别是:read 和 dirtytype Map str...
Go map 的负载因子为什么是 5?
什么是负载因子?负载因子(load factor),用于衡量当前哈希表中空间占用率的核心指标,也就是每个 bucket 桶存储的平均元素个数。负载因子 =...
Go map冲突的解决方式?
比较常用的Hash冲突解决方案有链地址法和开放寻址法:链地址法当哈希冲突发生时,创建新单元,并将新单元添加到冲突单元所在链表的尾部。开放寻址法当哈希冲突发...
Go map如何查找?
Go 语言中读取 map 有两种语法:带 comma 和 不带 comma。当要查询的 key 不在 map 里,带 comma 的用法会返回一个 boo...
Go map为什么是非线程安全的?
map默认是并发不安全的,同时对map进行并发读写时,程序会panic,原因如下:Go 官方在经过了长时间的讨论后,认为 Go map 更应适配典型使用场...
Go map遍历为什么是无序的?
使用 range 多次遍历 map 时输出的 key 和 value 的顺序可能不同。这是 Go 语言的设计者们有意为之,旨在提示开发者们,Go 底层实现...
Go map的底层实现原理
Go中的map是一个指针,占用8个字节,指向hmap结构体源码包中src/runtime/map.go定义了hmap的数据结构:hmap包含若干个结构为b...
Go slice为什么不是线程安全的?
先看下线程安全的定义:多个线程访问同一个对象时,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的。若有多个线程同时执行写操作,一般都需要...
Go slice扩容机制?
扩容会发生在slice append的时候,当slice的cap不足以容纳新元素,就会进行扩容,扩容规则如下如果新申请容量比两倍原有容量大,那么扩容后容量...
Go slice深拷贝和浅拷贝
深拷贝:拷贝的是数据本身,创造一个新对象,新创建的对象与原对象不共享内存,新创建的对象在内存中开辟一个新的内存地址,新对象值修改时不会影响原对象值实现深拷...
Go array和slice的区别?
1)数组长度不同数组初始化必须指定长度,并且长度就是固定的切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大2)函数传参不同数组是值类型,将...
Go slice的底层实现原理
切片是基于数组实现的,它的底层是数组,可以理解为对 底层数组的抽象。源码包中src/runtime/slice.go 定义了slice的数据结构:type...
Go内置函数make和new的区别?
首先纠正下make和new是内置函数,不是关键字变量初始化,一般包括2步,变量声明 + 变量内存分配,var关键字就是用来声明变量的,new和make函数...
Go defer关键字的实现原理?
定义:defer 能够让我们推迟执行某些函数调用,推迟到当前函数返回前才实际执行。defer与panic和recover结合,形成了Go语言风格的异常与捕...
Go函数参数传递到底是值传递还是引用传递?
先说下结论:Go语言中所有的传参都是值传递(传值),都是一个副本,一个拷贝。参数如果是非引用类型(int、string、struct等这些),这样就在函数...
Go函数返回局部变量的指针是否安全?
一般来说,局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。但这在 Go 中是安全的,Go 编译器将会对每个局部...
Go方法值接收者和指针接收者的区别?
如果方法的接收者是指针类型,无论调用者是对象还是对象指针,修改的都是对象本身,会影响调用者;如果方法的接收者是值类型,无论调用者是对象还是对象指针,修改的...
Go方法与函数的区别?
在Go语言中,函数和方法不太一样,有明确的概念区分。其他语言中,比如Java,一般来说函数就是方法,方法就是函数;但是在Go语言中,函数是指不属于任何结构...
GC 如何调优
通过 go tool pprof 和 go tool trace 等工具 控制内存分配的速度,限制 Goroutine 的数量,从而提高赋值器对 CPU ...
Go 语言中 GC 的流程是什么?
Go1.14 版本以 STW 为界限,可以将 GC 划分为五个阶段:GCMark 标记准备阶段,为并发标记做准备工作,启动写屏障 STWGCMark 扫描...
Go channel有无缓冲的区别?
无缓冲:一个送信人去你家送信,你不在家他不走,你一定要接下信,他才会走。 有缓冲:一个送信人去你家送信,扔到你家的信箱转身就走,除非你的信箱满了,他必须等...
Go 语言内存分配,什么分配在堆上,什么分配在栈上
题目来源:知乎答案:自由Go 语言有两部分内存空间:栈内存和堆内存。栈内存由编译器自动分配和释放,函数调用的参数、返回值以及局部变量大都会被分配到栈上。堆...
简单介绍一下go的内存分配机制?有mcentral为啥要mcache?
题目来源:知乎答案:树枝1.介绍内存分配机制GO语言内存管理子系统主要由两部分组成:内存分配器和垃圾回收器(gc)。内存分配器主要解决小对象的分配管理和多...
runtime
题目来源:一点资讯答案:树枝1.理解goruntimegolang 的 runtime 在 golang 中的地位类似于 Java 的虚拟机,不过 go ...
协程怎么停顿?
题目来源:shopee1.使用for-rangefor-range从channel上接收值,直到channel关闭,该结构在Go并发编程中很常用,这对于从...
golang: pprof使用
题目来源:腾讯答案:树枝首先都介绍什么是pprofpprof是golang自带的性能分析工具,可以查看应用的运行状态,分析程序CPU,内存,gorouti...
性能调优怎么做
题目来源:腾讯答案:树枝1.首先要了解调优的基本思路1.对外接口协议不能改变 2.了解需求和代码演进过程 3.确定资源消耗类型 4.控制运算数据输入量 5...
golang调度能不能不要p
题目来源:腾讯答案:树枝1.介绍golang调度器中P是什么?Processor的简称,处理器,上下文。 2.简述p的功能与为什么必须要P它的主要用途就是...
借助额外的数据结构比如slice等,对key进行排序,遍历slice得到顺序输出
题目来源:BIGO答案:树枝1.解题思路我们现在有一个“有序的切片”根据这个切片将map有序输出2.这里写的是一个模板,根据具体的slice与map来写出...
实现chan struct{}不占用内存空间,实现传递信号的通道
题目来源:BIGO答案:树枝// 空结构体的宽度是0,占用了0字节的内存空间。 // 所以空结构体组成的组合数据类型也不会占用内存空间。 channel ...
如何排查线上程序问题
题目来源:字节跳动答案:树枝线上问题排查思路(如忽然访问变慢)链路追踪(zipkin skywalking等),确认问题在哪条链路上(是否是因为调用别人的...
go语言中结构体指针为空,赋给一个interface{}为什么
题目来源:字节跳动答案:树枝1.空结构体有以下几大特点不占用内存地址。地址不变2. 空接口的内部实现保存了对象的类型和指针
你能介绍一下go的包管理工具吗?除了gomod还知道哪些?
题目序号:(5327)题目来源:美团频次:1答案1:(Kjj)1、GOPATH对于外部依赖的管理,在go 1.5之前go没有像java使用maven来管理...
go的map的底层数据结构,查询复杂度
题目序号:(5328)题目来源:金山频次:1答案1:(Kjj)map底层数据结构:map底层数据结构前文已经整理过了,这里不做赘述。查询复杂度:空间复杂度...
如何实现只开100个协程
题目来源:答案:sunrise// 利用 channel 的缓存区实现 func main() { var wg sync.WaitGroup ...
介绍go语言的gmp协程调度模
答案:sunriseG-M-P分别代表:G: Goroutine,Go协程,是参与调度与执行的最小单位M: Machine,指的是系统级线程P: Proc...
go的GC和Python的GC
题目序号:(4425) 题目来源:知乎频次: 1答案:ZbbxdPython :引用计数式 GC,每个对象自身包含一个被引用的计数器,当计数器归零时自动得...
go的值传递和引用传递
题目序号:(4426,4451) 题目来源:知乎频次: 2答案:Zbbxd值传递只会把参数的值复制⼀份放进对应的函数,两个变量的地址不同,不可相互修改。地...
java 实例放在哪个区,常量放在哪个区
题目来源:字节跳动答案:村雨实例放在哪个区不要掉以轻心的一口回答在堆中!!!一般在java程序中,new的对象是分配在堆空间中的,但是实际的情况是,大部分...
简单介绍一下go的内存分配机制?有mcentral为啥要mcache?
题目来源:知乎答案:flyGo 的内存分配借鉴了 Google 的 TCMalloc 分配算法,其核心思想是内存池 + 多级对象管理。内存池主要是预先分配...
go性能调优怎么做的?
题目来源:度小满答案:fly内存优化A、将小对象合并成结构体一次分配,减少内存分配次数Go runtime底层采用内存池机制,每个span大小为4k,同时...
golang开发用什么框架
题目来源:百度答案:小禾先生golang框架图示Web框架gingin是一个知名且简约的Golang Web应用框架。该框架拥有各种开发所需的库合功能。许...
已加贵站~
name: 技研录
link: https://linmohan.fun/
avatar: https://linmohan.fun/img/favicon.png
descr: 「代码重构世界,逻辑解构真理」