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

5e20bd0cad5d5d4fa18beabd95cff4cc.png

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 源文件都属于一个包,该包在文 件顶部使用以下命令声明:

package <packagename>
您可以使用以下方法导入和导出包以重用导出的函数或类型:
import <packagename>

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

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

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

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 在函数声明之前添加关键字。

go f(x, y, z)

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

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 函数是内建函数,函数定义:

func new(Type) *Type
  • 使用new函数来分配空间

  • 传递给new函数的是一个类型,而不是一个值

  • 返回值是指向这个新非配的地址的指针

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

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

func make(Type, size IntegerType) Type

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

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

  • 与其他作为学术实验开始的语言不同,Go 代码的设计是务实的。每个功能 和语法决策都旨在让程序员的生活更轻松。

  • Golang 针对并发进行了优化,并且在规模上运行良好。

  • 由于单一的标准代码格式,Golang 通常被认为比其他语言更具可读性。

  • 自动垃圾收集明显比 Java 或 Python 更有效,因为它与程序同时执行。

据说喜欢分享的,后来都成了大神!

往期推荐

Golang数据库编程之GORM库入门

golang实现RPC的几种方式

Gin框架源码解析【建议收藏】

Golang并发编程——Goroutine底层实现详解

腾讯PHP/GO工程师面试经历

go面试题:第一天

posted @ 2022-10-20 23:42  码农编程进阶笔记  阅读(170)  评论(0编辑  收藏  举报
返回顶部 有事您Q我