【精选】2022年全新GO工程师面试题

2022-04-08 14:22:26 浏览数 (1)

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

虽然这三个函数,都是格式化输出,但是输出的目标不一样

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

Sprintf()是把格式化字符串输出到指定的字符串中。

Fprintf()是吧格式化字符串输出到文件中。

2、Golang 使用什么数据类型?

Golang 使用以下类型:

  • Method
  • Boolean
  • Numeric
  • String
  • Array
  • Slice
  • Struct
  • Pointer
  • Function
  • nterface
  • Map
  • Channel

3、Go 程序中的包是什么?

包 (pkg) 是 Go 工作区中包含 Go 源文件或其他包的目录。源文件中的每个函 数、变量和类型都存储在链接包中。每个 Go 源文件都属于一个包,该包在文 件顶部使用以下命令声明:

代码语言:javascript复制
 package <packagename>
代码语言:javascript复制
您可以使用以下方法导入和导出包以重用导出的函数或类型:
代码语言:javascript复制
 import <packagename>

Golang 的标准包是 fmt,其中包含格式化和打印功能,如 Println().

4、Go 支持什么形式的类型转换?将整数转换为浮点数。

Go 支持显式类型转换以满足其严格的类型要求。

代码语言:javascript复制
i := 55 //int
j := 67.8 //float64
sum := i   int(j) //j is converted to int

5、什么是 Goroutine?你如何停止它?

一个 Goroutine 是一个函数或方法执行同时旁边其他任何够程采用了特殊的Goroutine 线程。Goroutine 线程比标准线程更轻量级,大多数 Golang 程序 同时使用数千个 g、Goroutine。

要创建 Goroutine,请 go 在函数声明之前添加关键字。

代码语言:javascript复制
go f(x, y, z)

您可以通过向 Goroutine 发送一个信号通道来停止它。Goroutines 只能在被 告知检查时响应信号,因此您需要在逻辑位置(例如 for 循环顶部)包含检 查。

代码语言:javascript复制
package main
func main() {
  quit := make(chan bool)
  go func() {
     for {
        select {
        case <-quit:
            return
        default:// ...
        } 
    }
}()
// ...
quit <- true }

6、 如何在运行时检查变量类型?

类型开关是在运行时检查变量类型的最佳方式。类型开关按类型而不是值来评 估变量。每个 Switch 至少包含一个 case,用作条件语句,和一个defaultcase,如果没有一个 case 为真,则执行。

7、Go 两个接口之间可以存在什么关系?

如果两个接口有相同的方法列表,那么他们就是等价的,可以相互赋值。如果 接口 A 的方法列表是接口 B 的方法列表的自己,那么接口 B 可以赋值给接口A。接口查询是否成功,要在运行期才能够确定。

8、Go 当中同步锁有什么特点?作用是什么

当一个 Goroutine(协程)获得了 Mutex 后,其他 Gorouline(协程)就只能乖 乖的等待,除非该 gorouline 释放了该 MutexRWMutex 在 读锁 占用的情况下, 会阻止写,但不阻止读 RWMutex 在 写锁 占用情况下,会阻止任何其他goroutine(无论读和写)进来,整个锁相当于由该 goroutine 独占 同步锁的作用是保证资源在使用时的独有性,不会因为并发而导致数据错乱, 保证系统的稳定性。

9、Go 语言当中 Channel(通道)有什么特点,需要注意什么?

如果给一个 nil 的 channel 发送数据,会造成永远阻塞如果从一个 nil 的channel 中接收数据,也会造成永久爱阻塞给一个已经关闭的 channel 发送数 据, 会引起 pannic 从一个已经关闭的 channel 接收数据, 如果缓冲区中为 空,则返回一个零值。

10、Go 语言当中 Channel 缓冲有什么特点?

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

11、Go 语言中 cap 函数可以作用于那些内容?

cap 函数在讲引用的问题中已经提到,可以作用于的类型有:

  • array(数组)
  • slice(切片)
  • channel(通道)

12、go convey 是什么?一般用来做什么?

  • go convey 是一个支持 golang 的单元测试框架
  • go convey 能够自动监控文件修改并启动测试,并可以将测试结果实时输出到Web界面
  • go convey 提供了丰富的断言简化测试用例的编写

13、Go 语言当中 new 和 make 有什么区别吗?

new 的作用是初始化一个纸箱类型的指针 new 函数是内建函数,函数定义:

代码语言:javascript复制
 func new(Type) *Type
  • 使用new函数来分配空间
  • 传递给new函数的是一个类型,而不是一个值
  • 返回值是指向这个新非配的地址的指针

14、Go 语言中 make 的作用是什么?

make 的作用是为 slice, map or chan 的初始化 然后返回引用 make 函数是内 建函数,函数定义:

代码语言:javascript复制
 func make(Type, size IntegerType) Type

make(T, args)函数的目的和 new(T)不同 仅仅用于创建 slice, map, channel 而且返回类西行是实例

15、与其他语言相比,使用 Go 有什么好处?

  • 与其他作为学术实验开始的语言不同,Go 代码的设计是务实的。每个功能 和语法决策都旨在让程序员的生活更轻松。
  • Golang 针对并发进行了优化,并且在规模上运行良好。
  • 由于单一的标准代码格式,Golang 通常被认为比其他语言更具可读性。
  • 自动垃圾收集明显比 Java 或 Python 更有效,因为它与程序同时执行。

0 人点赞