面试题

Google工程师和Go语言布道者Valentin Deleplace会不定期分享一些Go语言的趣味题目。

我选取了最近的几道题目,给大家春节加加餐。

题目1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// quiz0.go
package main

import "fmt"

func main() 
	s := []string{"a", "b", "c"}

	copy(s[1:], s)

	fmt.Println(s)
}
  • A: [a a a]
  • B: [a a b]
  • C: [a a b c]
  • D: [b c c]
  • E: panic

这道题主要考察Go语言里对切片slice使用copy函数的注意事项。

题目2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// quiz1.go
package main

import "fmt"

func main() {
	a := make([]int, 20)

	b := a[18:]
	b = append(b, 2022)

	fmt.Println(len(b), cap(b))
}
  • A: 1 2
  • B: 3 4
  • C: 3 33
  • D: 3 40

这道题主要考察以下Go语言里对切片slice使用冒号:截取操作的底层机制以及slice的扩容原理。

题目3:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// quiz2.go
package main

import "fmt"

func main() {
	c := make(chan int, 1)
	c <- 1
	close(c)
	close(c)
	fmt.Println("OK")
}
  • A: 死锁
  • B: panic
  • C: 打印"OK"
  • D: 编译报错

这道题主要考察以下Go语言里管道channel的注意事项。

解析

这几道题对于看过我写的Go面试系列文章的同学来说,应该非常简单,可以给本人vx公众号发送消息2022获取答案。

对答案有疑惑的可以看看我之前的2篇Go面试题解析:

春节加餐

开源地址

文章和示例代码开源地址在GitHub: https://github.com/jincheng9/go-tutorial

公众号:coding进阶。关注公众号可以获取最新Go面试题和技术栈。

个人网站:https://jincheng9.github.io/

知乎:https://www.zhihu.com/people/thucuhkwuji

References