查看完整目录 -->《Go 语言面试题 100 讲》 下面这个例子,先定义了一个类型为 *int 的指针类型,可是然后把 10 赋值给指针指向的值 package main import ( "fmt" ) func main() { var i *int *i=10...
Go 语言面试题 100 讲之 022篇:Go 中的 GC 演变是怎样的?
查看完整目录 -->《Go 语言面试题 100 讲》 标记清除法 在 Go v1.3 之前采用的是 标记-清除(mark and sweep)算法。 它的逻辑是,先将整个程序挂起(STW, stop the world),然后遍历程序中的对象,只要是可...
Go 语言面试题 100 讲之 021篇:GMP 为什么要有 P ?
查看完整目录 -->《Go 语言面试题 100 讲》 GM 模型是怎样的? 在 Go v1.1 之前,实际上 GMP确实是没有 P 的,所有的 M 线程都要从 全局队列中获取 G 来执行任务,为了避免冲突,从全局队列中获取 G 的时候,...
Go 语言面试题 100 讲之 020篇:简述一下 Go 栈空间的扩容/缩容过程?
查看完整目录 -->《Go 语言面试题 100 讲》 扩容流程 为啥会有栈空间扩容 由于当前的 Go 的栈结构使用的是连续栈,并且初始值才 2k 比较小,因此随着函数的调用层级加深,Go 的初始栈空间就可能不够用,不够...
Go 语言面试题 100 讲之 019篇:Go 中的分段栈和连续栈的区别?
查看完整目录 -->《Go 语言面试题 100 讲》 分段栈 在 Go 1.3 版本之前 ,使用的栈结构是分段栈,随着goroutine 调用的函数层级的深入或者局部变量需要的越来越多时,运行时会调用 runtime.morestack 和 runt...
Go 语言面试题 100 讲之 018篇:Go 的默认栈大小是多少?最大值多少?
查看完整目录 -->《Go 语言面试题 100 讲》 Go 语言使用用户态线程 Goroutine 作为执行上下文,它的额外开销和默认栈大小都比线程小很多,然而 Goroutine 的栈内存空间和栈结构也在早期几个版本中发生过一些变...
面试官:你如何破解 Python 的 GIL 的?
1. GIL 是什么? 在讲如何破解 GIL 的时候,首先要和你达成一个共识,那就 Python 中由于有 GIL 的存在,使得 Python 中的多线程即使在有多核的机器上,在同一时刻也只有一个线程在跑。 因此有不少人说,Python...
Go 语言面试题 100 讲之 017篇:说一下 GMP 模型的原理
查看完整目录 -->《Go 语言面试题 100 讲》 1. 什么是 GMP ? G:Goroutine,也就是 go 里的协程,是用户态的轻量级线程,具体可以创建多个 goroutine ,取决你的内存有多大,一个 goroutine 大概需要 4k 内...
Go 语言面试题 100 讲之 016篇:说说你对 Go 里的抢占式调度的理解
查看完整目录 -->《Go 语言面试题 100 讲》 Go 从 v1.1 发现展到目前的 v1.16,协程调度策略也在不断的完善优化。 下面我将从 v.1.1 开始讲讲 协程调度策略中抢占式调度的发展历程。 v1.1 的非抢占式调用 ...
Go 语言面试题 100 讲之 015篇:defer 的变量快照什么情况会失效?
查看完整目录 -->《Go 语言面试题 100 讲》 关于 defer 的基本知识点,我在以前的教程中有写过:流程控制:defer 延迟语句 其中有一个知识是 defer 的变量快照,举个简单的例子来说 在下面这段代码中,会先...