本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

面试题

一、选择题

1.关于异常设计,下面说法正确的是()

A. 在程序开发阶段,坚持速错,让程序异常崩溃 // 开发--测试--准生产--生产
B. 在程序部署后,应恢复异常避免程序终止
C. 一切皆错误,不用进行异常设计
D. 对于不应该出现的分支,使用异常处理

参考答案:ABD

2.关于异常的触发,下面说法正确的是()

A. 空指针解析
B. 下标越界
C. 除数为0
D. 调用panic函数

参考答案:ABCD

3.关于函数返回值的错误设计,下面说法正确的是()

A. 如果失败原因只有一个,则返回bool
B. 如果失败原因超过一个,则返回error
C. 如果没有失败原因,则不返回bool或error
D. 如果重试几次可以避免失败,则不要立即返回bool或error

参考答案:ABCD

4.下面关于recover使用正确的是?

A.recover()
B.defer recover()
C.defer func() {
recover()
}()
D. defer func() {
defer func() {
recover()
}()
}()


答案:C。recover() 必须在 defer() 函数中直接调用才有效。,不能嵌套使用,不能直接使用

5.函数执行时,如果由于 panic 导致了异常,则延迟函数不会执行。这一说法是否正确?

A. 正确
B. 错误
参考答案及解析:B。 defer结合recover可以修复panic

6.错误是业务过程的一部分,而异常不是,这句话是否正确()

A.正确

B.错误

答案:A。异常是要避免的

二、简答题

1.写出下面代码的输出

package main import "fmt" func main() { defer_all() panic("触发异常") } func defer_all() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { fmt.Println("打印后") }() } 这道题主要考察的是对 defer 的理解,defer 主要是延迟函数,延迟到调用者函数执行 return 命令之前

2.写出下面代码的执行结果

package main import ( "fmt" ) func main() { defer_call() } func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { fmt.Println("打印后") }() panic("触发异常") } 打印后 打印中 打印前 panic: 触发异常 参考解析:defer 的执行顺序是先进后出,后进先出 当出现 panic 语句的时候,会先按照 defer 的后进先出的顺序执行,最后才会执行panic

3.下面代码的执行结果为?

package main import "fmt" func main() { a := 1 b := 2 defer Sum( a, b) a = 3 defer Sum( a, b) b = 4 } func Sum(a, b int) { ret := a + b fmt.Println(a, b, ret) } 答案:defer先进后出,后进先出

4.下面代码能正常编译吗?

package main import "fmt" func main() { nil := 1 var map_data map[string]int = nil fmt.Println(map_data) } 答案:不能,此时的nilint类型的变量

1482人已阅读,今天你学习了吗?

添加新回复