Golang开发工程师笔试题

一、选择题

1、下面属于关键字的是:(A、C)
A、func
B、def
C、struct
D、class

2、定义一个包内全局字符串变量,下面语法正确的是:(A、B)
A、var str string
B、str := “”
C、str = “”
D、var str = “”

3、通过指针变量 p 访问其成员变量 name,下面语法正确的是:(A、B)
A、p.name
B、(*p).name
C、(&p).name
D、p->name

4、关于接口和类的说法,下面说法正确的是:(A、C)
A、一个类只需要实现了接口要求的所有函数,我们就说这个类实现了该接口
B、实现类的时候,只需要关心自己应该提供哪些方法,不用再纠结接口需要拆得多细才合理
C、类实现接口时,需要导入接口所在的包
D、接口由使用方按自身需求来定义,使用方无需关心是否有其他模块定义过类似的接口

5、关于字符串连接,下面语法正确的是:(B、C)
A、str := ‘abc’ + ‘123’
B、str := “abc” + “123”
C、str := ‘123’ + “abc”
D、fmt.Sprintf(“abc%d”, 123)

6、关于协程,下面说法正确是:(A、D)
A、协程和线程都可以实现程序的并发执行
B、线程比协程更轻量级
C、协程不存在死锁问题
D、通过 channel 来进行协程间的通信

7、关于 init 函数,下面说法正确的是:(A、B)
A、一个包中,可以包含多个 init 函数
B、程序编译时,先执行导入包的 init 函数,再执行本包内的 init 函数
C、main 包中,不能有 init 函数
D、init 函数可以被其他函数调用

8、关于循环语句,下面说法正确的有:(C、D)
A、循环语句既支持 for 关键字,也支持 while 和 do-while
B、关键字 for 的基本使用方法与 C/C++ 中没有任何差异
C、for 循环支持 continue 和 break 来控制循环,但是它提供了一个更高级的 break,可以选择中断哪一个循环
D、for 循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量

9、对于函数定义:

func add(args ...int) int {
   
   
 	sum := 0
 	for _, arg := range args {
   
   
 		sum += arg
 	}
 	return sum
}

下面对 add 函数调用正确的是:(A、B、D)
A、add(1, 2)
B、add(1, 3, 7)
C、add([]int{1, 2})
D、add([]int{1, 3, 7}…)

10、关于类型转化,下面语法正确的是:(C)
A、

type MyInt int
var i int = 1
var jMyInt = i

B、

type MyIntint
var i int= 1
var jMyInt = (MyInt)i

C、

type MyIntint
var i int= 1
var jMyInt = MyInt(i)

D、

type MyIntint
var i int= 1
var jMyInt = i.(MyInt)

11、关于局部变量的初始化,下面正确的使用方式是:(A、B、C)
A、var i int = 10
B、var i = 10
C、i := 10
D、i = 10

12、关于 const 常量定义,下面正确的使用方式是:(A、B、D)
A、

const Pi float64 = 3.14159265358979323846
const zero = 0.0

B、

const (
size int64 = 1024
eof = -1
)

C、

const (
ERR_ELEM_EXISTerror = errors.New("element already exists")
ERR_ELEM_NT_EXISTerror = errors.New("element not exists")
)

D、

const u, vfloat32 = 0, 3
const a, b, c = 3, 4, "foo"

13、关于布尔变量 b 的赋值,下面错误的用法是:(A、D)
A、b = true
B、b = 1
C、b = bool(1)
D、b = (1 == 2)

14、下面的程序可能的运行结果是:(A)

func main() {
   
   
	if true {
   
   
		defer fmt.Printf("1")
	} else {
   
   
		defer fmt.Printf("2")
	}
	fmt.Printf("3")
}

A、321
B、32
C、31
D、13

15、关于 switch 语句,下面说法正确的有:(B、D)
A、条件表达式必须为常量或者整数
B、单个 case 中,可以出现多个结果选项
C、需要用 break 来明确退出一个 case
D、只有在 case 中明确添加 fallthrough 关键字,才会继续执行紧跟的下一个 case

16、golang 中没有隐藏的 this 指针,这句话的含义是:(A)
A、方法施加的对象显式传递,没有被隐藏起来
B、golang 沿袭了传统面向对象编程中的诸多概念,比如继承、虚函数和构造函数
C、golang 的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达
D、方法施加的对象不需要非得是指针,也不用非得叫 this

17、golang 中的引用类型包括:(A、B、C、D)
A、数组切片
B、map
C、channel
D、interface

18、golang 中的指针运算包括:(B、C)
A、可以对指针进行自增或自减运算
B、可以通过 & 取指针的地址
C、可以通过 * 取指针指向的数据
D、可以对指针进行下标运算

19、关于 main 函数(可执行程序的执行起点),下面说法正确的是:(A、B、C、D)
A、main 函数不能带参数
B、main 函数不能定义返回值
C、main 函数所在的包必须为 main 包
D、main 函数中可以使用 flag 包来获取和解析命令行参数

20、下面赋值正确的是:(B、D)
A、var x = nil
B、var x interface{} = nil
C、var x string = nil
D、var x error = nil

21、关于整型切片的初始化,下面正确的是:(B、C、D)
A、s := make([]int)
B、s := make([]int, 0)
C、s := make([]int, 5, 10)
D、s := []int{1, 2, 3, 4, 5}

22、从切片中删除一个元素,下面的算法实现正确的是:(D)
A、

func (s *Slice) Remove(value interface{
   
   }) error {
   
   
	for i, v := range *s {
   
   
		if isEqual(value, v) {
   
   
			if i == len(*s) - 1 {
   
   
				*s = (*s)[:i]
			} else {
   
   
				*s = append((*s)[:i], (*s)[i + 2:]...)
			}
			return nil
		}
	}
	return ERR_ELEM_NT_EXIST
}

B、

func (s *Slice) Remove(value interface{
   
   }) error {
   
   
	for i, v := range *s {
   
   
		if isEqual(value, v) {
   
   
			*s = append((*s)[:i], (*s)[i + 1:])
			return nil
		}
	}
	return ERR_ELEM_NT_EXIST
}

C、

func (s *Slice) Remove(value interface{
   
   }) error {
   
   
	for i, v := range *s {
   
   
		if isEqual(value, v) {
   
   
			delete(*s, v)
			return nil
		}
	}
	return ERR_ELEM_NT_EXIST
}

D、

func (s *Slice) Remove(value interface{
   
   }) error {
   
   
	for i, v := range *s {
   
   
		if isEqual(value, v) {
   
   
			*s = append((*s)[:i], (*s)[i + 1:]...)
			return nil
		}
	}
	return ERR_ELEM_NT_EXIST
}

23、对于局部变量整型切片 x 的赋值,下面定义正确的是:(A、C)
A、

x := []int{
   
   
	1, 2, 3,
	4, 5, 6,
}

B、

x := []int{
   
   
	1, 2, 3,
	4, 5, 6
}

C、

x := []int{
   
   
	1, 2, 3,
	4, 5, 6}

D、

x := []int{
   
   1, 2, 3, 4, 5, 6,}

24、关于变量的自增和自减操作,下面语句正确的是:(A、D)
A、

i := 1
i++

B、

i := 1
j = i++

C、

i := 1
++i

D、

i := 1
i--

25、关于函数声明,下面语法错误的是:(C)
A、func f(a, b int) (value int, err error)
B、func f(a int, b int) (value int, err error)
C、func f(a, b int) (value int, error)
D、func f(a int, b int) (int, int, error)

26、如果 Add 函数的调用代码为:

func main() {
   
   
	var a Integer = 1
	var b Integer = 2
	var i interface{
   
   } = &a
	sum := i.(*Integer).Add(b)
	fmt.Println(sum)
}

则 Add 函数定义正确的是:(C)
A、

type Integer int
func (a Integer) Add(b Integer) Integer {
   
   
	return a + b
}

B、

type Integer int
func (a Integer) Add(b *Integer) Integer {
   
   
	return a + *b
}

C、

type Integer int
func (a *Integer) Add(b Integer) Integer {
   
   
	return *a + b
}

D、

type Integer int
func (a *Integer) Add
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值