• go面试题


    go有哪些数据类型

    简单类型:int int32 int64 string bool

    引用类型:map slice channel function

    复合类型:struct,struct可比较必须每个字段都可以比较大小

    还有interface类型

    new和make的区别

    new返回的是指针,可以用于任何类型,make定义了类型并且初始化了,只用于slice、map、channel类型

    切片和数组有什么区别

    数组是定长的,不能更改,切片是一个结构体,其中包含了指向底层数组的指针,还要len和cap

    切片扩容机制

    当添加的元素超过容量的时候,切片会扩容,会开辟一块新的空间,然后把原来的值复制过去,当容量小于1024的时候,会成倍的扩容,大于1024的时候会是之前的1.25倍来扩容,但是因为有内存对齐,所以会稍大一点

    map是线程安全的吗

    map的源码看过吗,是如何实现的

    sync.Map是如何实现的,和map对比

    map中的key为什么是无序的

    map扩容过程

    函数和方法的区别

    方法接受者值和指针的区别

    哪些情况会panic,panic怎么恢复

    什么是CSP

    MPG调度模型

    G就是goroutine,M代表一个工作线程,P表示处理器,保存着goroutine执行的上下文,还有维护g的本地队列等等,最开始的时候go是MG模型,但是都是从全局队列拿g,会加锁,这样当并发量大的时候性能会变差,所以加了P

    每个M都绑定了一个P,P上维护 g的本地队列,M跟CPU的核数相关,P只有跟M绑定后才会处理G,当本地的处理完之后,有次面试问到 是先从全局队列里拿还是去别的P里拿,其实想想讲道理应该是先拿全局的,应为全局的没人处理,根据《Golang修养之路》中所说,确实是这样:

    全局队列已经没有G,那m就要执行work stealing(偷取):从其他有G的P哪里偷取一半G过来,放到自己的P本地队列。P2从P1的本地队列尾部取一半的G,本例中一半则只有1个G8,放到P2的本地队列并执行。

    下边这个文章可以多次看看:Golang-Scheduler原理解析_惜暮的博客-CSDN博客_scheduler原理

    goroutine什么时候会调度

    channel源码

    channel有哪些应用

    如何关闭channel

    channel为什么会引起资源泄露

    接口类型的定义

    interface底层原理

    什么是反射

    反射的应用

    go是如何实现反射的

    go中的mutex原理

    什么是单例模式,go怎么实现单例

    sync.Once源码

    暂时先这些,答案会一点点补充上,或者后续面试遇到问题也会补充

  • 相关阅读:
    react中受控组件与非受控组件
    hr竟主动给这位测试小姐姐涨工资,她是怎么做到的?
    兔老大的系统设计(一)健康度系统
    LVGL 8.2图片缩放及旋转
    pytorch学习笔记——BCE与CE
    算法训练优化的经验:深入任务与数据的力量
    IP请求工具
    嵌入式开发:硬件工程师的 10 个软件技巧
    Elasticsearch:使用向量搜索来搜索图片及文字
    欧美风商务简约通用PPT模板
  • 原文地址:https://blog.csdn.net/david___/article/details/125890716