Day17-Go面试题整理基础篇(一) | 青训营笔记

106 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天

青训营活动告一段落,现在准备找工作啦!

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

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

2、Golang 的数据类型?

Golang 使用以下类型:

  • Method
  • Bool
  • String
  • Array
  • Slice
  • Struct
  • Pointer
  • Function
  • Interface
  • Map
  • Channel9

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 程序同时使用数千个 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、 如何在运行时检查变量类型?

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

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

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

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

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

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

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

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

无缓冲的 channel 是同步的,而有缓冲的 channel 是非同步的。参考:juejin.cn/post/720180…