栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Go基础面试题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go基础面试题

1.内建函数make和new的区别

首先make和new均是Go语言的内置的用来分配内存的函数。但是适用的类型不同:前者适用于slice ,map,channel 等引用类型,后者用于int型,数组,结构体等值类型。

其次,两者的函数形式及调用形式不同,函数形式如下:

func make(t Type,size ...IntegerType)Type

func new(Type)*Type

前者返回一个值,后者返回一个指针。

使用上,make返回初始化之后的类型的引用,new会为类型的新值分配已置零的内存空间,并返回指针。例如:

s:=make([]int,0,10)//使用make创建一个长度为0,容量为10的切片

a:=new(int)//使用new分配一个零值的int型

*a=5

思考?类似于make函数的声明里参数类型前的三个点:“…”有什么作用呢?

“…”表示可以传一个或多个实参,这使得函数调用更加灵活。例如:

func append(slice []Type, elems ...Type)[]Type

2.Go语言中进程,协程,线程之间的关系

进程(process):程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。

线程(thread):操作系统基于进程开启的轻量级进程,是操作系统调度执行的最小单位。

协程(coroutine):非操作系统提供而是由用户自行创建和控制的用户态“线程”,比线程更轻量级。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q6PFdQ20-1655300285963)(C:UsershpDesktop20210620190659457.png)]

进程、线程和协程的联系:

线程是进程的子集,也称为轻量级进程。进程包含线程,一个进程可以有一个或者多个线程,一个进程内的所有线程都是相互关联的。进程和线程都是为了解决并发编程。线程的效率要高于进程,因为多个线程可以共享一份资源,而进程与进程之间是独立的。协程既不是进程也不是线程,协程仅是一个特殊的函数。协程、进程和线程不是一个维度的。一个进程可以包含多个线程,一个线程可以有多个协程,一个进程也可以单独拥有多个协程。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kNdygE5T-1655300285965)(C:UsershpDesktopIMG_20220615_210617.jpg)]

进程和线程的区别:

进程是操作系统分配资源的最小单位,线程是操作系统调度(程序执行)的最小单位。进程具有独立性,进程A的崩溃不会影响到进程B的崩溃;在一个进程中的多个线程是共享一份资源的,一个线程的崩溃可能会影响到该进程中其他线程的崩溃,进而导致整个进程崩溃。进程间的通信需要在内核中进行,而线程因为共享一份资源可以直接进行通信。

协程和线程的区别:

1、线程进程都是同步机制,而协程则是异步。

2、协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力。

3、进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。

4、线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。

3.go语⾔中指针的运算; 定义一个结构体,其中的元素大小写区别

1、可以通过“&”取指针的地址 ;可以通过“*”取指针指向的数据 。

2、大写表示对此作用域外的地方也可见(公开访问) ,小写只对此作用域可见(私有,仅在定义当前结构体的包中可访问)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/974921.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号