老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

Go语言有哪些必须要掌握的知识点?Golang培训班

老男孩IT教育

行业新闻

2022年1月6日 14:19

现如今,编程语言已经非常多,常见的有Java、Python、PHP、C、C++、C#、GO等,对于想要入门GO语言的小伙伴来说,了解其关键知识点无疑是学习这么语言最快的方法,本篇文章整理了GO语言必须要掌握的一些知识点,请看下文:

       现如今,编程语言已经非常多,常见的有Java、Python、PHP、C、C++、C#、GO等,对于想要入门GO语言的小伙伴来说,了解其关键知识点无疑是学习这么语言最快的方法,本篇文章整理了GO语言必须要掌握的一些知识点,请看下文:

Go语言培训班

       1、slice和数组的区别?

       slice是数组的快照,底层数据是一个结构体,包含三个元素(长度、容量、数组指针),所以slice的赋值如同结构体的赋值一样,slice的应用其实都是对数组指针的操作,注意:对slice的操作会影响到所有引用到底层数组的slice。

       2、slice扩容

       如果切片的容量小于1024个元素,那么扩容时slice的cap则乘以2,一旦元素个数超过1024个元素,增长因子就会变成1.25,即每次增加原来容量的四分之一,如果扩容后,还没有触及原数组的容量,那切片中的指针指向的位置,就还是原数组,如果扩容后,超过了原数组的容量,那Go语言就就会开辟一块新的内存,把原来的值拷贝过来,这种情况丝毫不会影响到原数组。

       3、append方法

       在slice末尾添加元素,且长度加1,如果长度没有超过原数组的容量,则返回的还是指向原数组的slice,否则就是指向新数组的slice。

       4、简述map的结构

       map由桶数组成,会把key通过hash得到的字符串分成两部分,桶外通过数组映射,桶内通过遍历数组元素总数为8的hash数组。map除此之外还有B扩容次数,溢出桶、及哈希种子等比较重要的结构。

       5、为什么桶内的元素要用遍历而不用映射呢?

       在数量较小的情况下,遍历的效率比映射快,所以go的map采用了这个设计。

       6、map如果遇到hash冲突,怎么处理?

       map查找元素,除了要匹配桶中高八位hash外,还会通过指针位移找到存储的原始key,如果再次匹配key才会取value,当hash冲突,桶内还有位置,只会把冲突hash放到空位上,虽然桶内有两个一模一样的hash,但因为要进行key的比较才会取value,所以不会有任何问题。当桶内位置不够时,会再取一个溢出桶,放到当前桶的后面,就像链表的结构。遍历完当前桶,再遍历溢出桶。

       7、GMP模型和进程、线程之间的关系?

       进程和线程在操作系统层面是同样的调度单位,线程只是概念与进程不同,其实就是父进程fork出来的子进程,只是父子进程共享同样的内存空间,包括堆,全局变量常量,代码区等等。由同一个进程通过共享内存空间fork出来的进程称为同一进程下的线程,父进程被称为主线程。这样fork的好处是当线程切换成同一进程的其他线程,是不需要切换页表的。

       协程还有一个特点就是栈特别轻量级,开始是2k,扩容x2,最大是1G,相比于线程固定2M(32位)灵活得多。

       关于"Go语言有哪些必须要掌握的知识点?"的话题到这里就结束了,老男孩教育在教授学员技能和技巧的同时,提供多重就业服务。实行1对1就业服务,直至转正的就业跟踪,建立全面的、完备的就业服务体系。全企业真实案例结合理论实战、1对1的模拟面试,帮助学员从学校过渡到社会、从学员过渡到员工,无缝对接企业的工作岗位。

  推荐阅读:

  超真实的Go语言面试题总结!Golang培训班

  Go语言中拼接字符串都有哪些方法?老男孩Go语言培训

  Go语言中init函数和main函数有什么不同?老男孩Go语言培训

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。