Go区块链面试题

区块链技术已经被广泛应用于金融、物联网、物流、公共服务、数字版权、保险等领域。从技术开发层面,区块链主要以 Go 语言和 C++ 语言为主,比如 Eth、Fabric 都是使用 Go 语言开发。目前国内大部分区块链开发也以 Go 语言开发为主,因此如果想找一个区块链相关的工作,需要掌握好 Go 语言的基础知识,下面为大家分享一些Go语言常见基础面试题。

以下是区块链开发工程师求职的基础面试题。

 

一、基本用法

1. 说说 Go 语言中的 for 循环

for 循环支持 continue 和 break 来控制循环;for 循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量。

2. 说说 Go 语言中的 switch 语句

单个case中,可以出现多个结果选项;只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case。

 

3. Go 语言中没有隐藏的 this 指针,这句话是什么意思

Go 语言中方法施加的对象显式传递,没有被隐藏起来;

Go 语言的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达;

Go 语言方法施加的对象不需要非得是指针,也不用非得叫 this。

4. 说说 Go 语言的 main 函数

main 函数不能带参数;

main 函数不能定义返回值;

main 函数所在的包必须为 main 包;

main 函数中可以使用 flag 包来获取和解析命令行参数。

5. 说说 Go 语言的同步锁

(1) 当一个 Goroutine 获得了 Mutex 后,其他 Goroutine 就只能乖乖的等待,除非该 Goroutine 释放这个 Mutex。

(2) RWMutex 在读锁占用的情况下,会阻止写,但不阻止读。

(3) RWMutex 在写锁占用情况下,会阻止任何其他 Goroutine(无论读和写)进来,整个锁相当于由该 Goroutine 独占。

6. 说说 Go 语言的 channel 特性

A. 给一个 nil channel 发送数据,造成永远阻塞;

B. 从一个 nil channel 接收数据,造成永远阻塞;

C. 给一个已经关闭的 channel 发送数据,引起 panic;

D. 从一个已经关闭的 channel 接收数据,如果缓冲区中为空,则返回一个零值;

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

7. Go 语言触发异常的场景有哪些?

A. 空指针解析;

B. 下标越界;

C. 除数为0;

D. 调用 panic 函数。

8. 说说 Go 语言的 beeGo 框架

A. beeGo是一个Golang实现的轻量级HTTP框架;

B. beeGo可以通过注释路由、正则路由等多种方式完成url路由注入;

C. 可以使用bee new工具生成空工程,然后使用bee run命令自动热编译。

9. 说说 Go 语言的 Goconvey 框架

A. Goconvey 是一个支持Golang的单元测试框架;

B. Goconvey 能够自动监控文件修改并启动测试,并可以将测试结果实时输出到web界面;

C. Goconvey 提供了丰富的断言简化测试用例的编写。

10. Go语言中,GoStub 的作用是什么

A. GoStub可以对全局变量打桩;

B. GoStub可以对函数打桩;

C. GoStub不可以对类的成员方法打桩;

D. GoStub可以打动态桩,比如对一个函数打桩后,多次调用该函数会有不同的行为。

  

11. 说说Go语言的select机制

A. select机制用来处理异步IO问题;

B. select机制最大的一条限制就是每个case语句里必须是一个IO操作;

C. Golang在语言级别支持select关键字。