教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang经典面试问题汇总

golang经典面试问题汇总

发布时间:2021-05-02   编辑:jiaochengji.com
教程集为您提供golang经典面试问题汇总等资源,欢迎您收藏本站,我们将为您提供最新的golang经典面试问题汇总资源

golang内存模型

  • Go的内存模型描述的是"在一个groutine中对变量进行读操作能够侦测到在其他goroutine中对该变量的写操作"的条件,简单地说是“对多个协程中共享的变量,一个协程中怎样可以看到其它协程的写入。”
  • 当多个协程同时操作一个数据时,可以通过管道、同步原语 (sync 包中的 Mutex 以及 RWMutex)、原子操作 (sync/atomic 包中)。
  • happens-before概念:
    happencs-before有两个易混淆的点:一个对变量v的读事件r可以 感知到另一个对变量v的写事件w
    (1)A happens-before B并不意味着A在B之前发生;
    (2)A在B之前发生并不意味着A happens-before B
    happens-before就是多线程(协程)之间同步数据的一个要求:也就是在对变量读之前可以感知到对这个变量的写事件。为了保证这种规则,在golang当中使用到了一下同步原语:
    1. channel(buffered、not buffered之间也会有不同,buffered是非阻塞的有可能不会保证happens-before,not buffered一定会保证happens-before)
    2. locks(sync.0Mutex)
    3. sync.Once:可以在多个协程中调用,不过最终只会在某个协程中执行,而其它协程会阻塞并直到该函数执行完成

Goroutine 调度器

MPG模型:

  • G是goroutine的缩写,相当于操作系统中的进程控制块,在这里就是goroutine的控制结构,是对goroutine的抽象。
  • M是machine的缩写,是对机器的抽象,每个m都是对应到一条操作系统的物理线程。M必须关联了P才可以执行Go代码,但是当它处理阻塞或者系统调用中时,可以不需要关联P
  • Go1.1中新加入的一个数据结构,它是Processor(逻辑处理器)的缩写。结构体P的加入是为了提高Go程序的并发度,实现更好的调度。M代表OS线程。P代表Go代码执行时需要的资源。当M执行Go代码时,它需要关联一个P,当M为idle或者在系统调用中时,它也需要P。有刚好GOMAXPROCS个P。所有的P被组织为一个数组,在P上实现了工作流窃取的调度器。
  • Sched是调度实现中使用的数据结构,其包含了MPG

内存管理

  • golang采用标记清扫算法作为垃圾回收。 标记清扫算法是一个很基础的垃圾回收算法,该算法中有一个标记初始的root区域,以及一个受控堆区。root区域主要是程序运行到当前时刻的栈和全局数据区域。在受控堆区中,很多数据是程序以后不需要用到的,这类数据就可以被当作垃圾回收了。判断一个对象是否为垃圾,就是看从root区域的对象是否有直接或间接的引用到这个对象。如果没有任何对象引用到它,则说明它没有被使用,因此可以安全地当作垃圾回收掉。

标记清扫算法分为两阶段:标记阶段和清扫阶段。标记阶段,从root区域出发,扫描所有root区域的对象直接或间接引用到的对象,将这些对上全部加上标记。在回收阶段,扫描整个堆区,对所有无标记的对象进行回收。

在当前1.3版本中,实现了精确的垃圾回收和并行的垃圾回收,大大地提高了垃圾回收的速度,进行垃圾回收时系统并不会长时间卡住。

到此这篇关于“golang经典面试问题汇总”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang经典面试问题汇总
:first-child和:last-child学习笔记
c 中const变量问题的简单分析
Golang笔记:语法,并发思想,web开发,Go微服务相关
golang key map 所有_Golang面试知识点总结
golang面试官:for select时,如果通道已经关闭会怎么样?如果select中只有一个case呢?
go golang 笔试题 面试题 笔试 面试
Golang 在 VSCode 中的调试配置
golang for循环_golang面试官:for select时,如果通道已经关闭会怎么样?如果select中只有一个case呢?...
不要等离职了,才知道for select时,如果通道已经关闭会怎么样?

[关闭]
~ ~