
面试
pengpengzhou
主要学习语言Java,Nodejs,Go
展开
-
Go面试:从一道判断题来谈panic和defer的调用机制和执行顺序
网上有一道关于panic和defer的判断题:“【中级】当程序运行时,如果遇到引用空指针、下标越界或显式调用panic函数等情况,则先触发panic函数的执行,然后调用延迟函数。调用者继续传递panic,因此该过程一直在调用栈中重复发生:函数停止执行,调用延迟执行函数。如果一路在延迟函数中没有recover函数的调用,则会到达该携程的起点,该携程结束,然后终止其他所有携程,其他协程的终止过程也是重复发生:函数停止执行,调用延迟执行函数()”这道题的考察点很多,要理解整个panic和defer的实现机制才原创 2020-07-29 14:39:24 · 2164 阅读 · 0 评论 -
Go面试:一道关于错误和异常的有争议题目
题目:下面关于文件操作的代码可能触发异常()file, err := os.Open("test.go")defer file.Close()if err != nil {fmt.Println("open file failed:", err)return}...参考答案:T这道题的异常指的应该是panic,如果指的是一般性错误的话,那么第一句话就明摆的有可能返回错误,这道题就变得毫无意义。而且像文件找不到,权限不够,磁...原创 2020-07-23 17:37:36 · 549 阅读 · 2 评论 -
Go面试:defer语句里究竟哪一个函数或者方法是在父函数结束时调用?
defer语句里只能有一个函数或者方法在父函数结束时调用,其余都是参数立即计算,当存在多个函数或方法时怎么确定哪一个函数/方法是父函数结束时调用呢,下面举例说明:1)函数:只有最外层函数才是在父函数结束时调用,其它函数都是参数需要立即计算。如下列只有print是在main函数结束时计算。package mainimport ( "fmt")func add(i int, j int) int{ fmt.Printf("add %d + %d\n", i, j) return i原创 2020-07-23 15:52:18 · 356 阅读 · 0 评论 -
Go面试:select是随机的还是顺序的?
select语句处于阻塞状态直到其中一个channel的收/发操作准备就绪,如果同时有多个channel的收/发操作准备就绪则随机选择其中一个。验证如下:select.gopackage mainimport ( "fmt")func main() { ch1 := make(chan int) ch2 := make(chan int) var cnt [2]int for i := 0; i < 1000; i++ { go func(c1 chan in..原创 2020-06-30 10:58:01 · 4386 阅读 · 5 评论