Go面试看这里了~(二)

原文地址:Go面试看这里了~(二)

1、Go同步锁(Mutex)的特点、作用?

当goroutine(协程)获得Mutex后,其它goroutine只能等待,除非该goroutine释放该Mutex,RWMutex在读锁占用时会阻止写,但不阻止读,RWMutex在写锁占用时会阻止其它任何goroutine读写,整个锁相当于由该goroutine独占。

同步锁的作用是保证资源在使用时的独有性,不会因为并发导致数据错乱,保证系统稳定性。

2、channel(通道)的特点?

  1. 给nil的channel发送数据会造成永久阻塞。

  2. 从nil的channel中接受数据会造成永久阻塞。

  3. 给已close的channel发送数据会导致程序panic。

  4. 从已close的channel接收数据,如缓冲区为空,则返回零值。

3、channel缓冲有什么特点?

无缓冲的channel是同步的,有缓冲的channel则是非同步的。

4、cap可作用于哪些数据类型?

  1. Array(数组)。

  2. Slice(切片)。

  3. Channel(管道)。

5、Go convey是什么?

  1. 支持Go的单元测试框架。

  2. 能自动监控文件修改并启动测试,可将测试结果实时输出到Web页面。

6、new和make的区别?

下来看下它们的定义:

func new(Type) *Typefunc make(t Type, size ...IntegerType) Type

上述定义中的Type代表某一数据类型。

可看出new返回是指向Type的指针,make直接返回Type类型值或者说实例。

再来从入参这方面看的话,new只有一个Type参数,Type可以是任意类型数据,而 make可有多个参数,其中第一个参数与new的参数相同,但是只能是slice,map,chan三者之一。

make的size参数根据前面参数的数据类型的不同而产生不同的含义,如下:

  1. 对于slice,第一个size表示长度,第二个size表示容量,且容量不能小于长度,如果省略第二个size,则默认容量等于长度。

  2. 对于map,会根据size大小分配资源,以足够存储size个元素,如果size,会默认分配一个小的起始size。

  3. 对于chan,size为缓冲区容量,如省略size,则channel为无缓冲channel。

7、Printf(),Sprintf(),FprintF()都是格式化输出,有什么不同?

  1. Printf是标准输出,一般是屏幕,也可以重定向。

  2. Sprintf是将格式化字符串输出到指定字符串中。

  3. FprintF是将格式化字符串输出到文件中。

总结一句话就是:虽然三种函数都是格式化输出,但是输出目标不一致。

至此,本次分享就结束了,后期会慢慢补充。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

以上均为个人认知,如有侵权,请联系删除。

  

猜你喜欢

转载自blog.csdn.net/luyaran/article/details/121327790
今日推荐