【刷题日记】nowcode 笔试题 1
咱们本次来刷一下笔试题
- 犹记得以前在面试前准备的时候,会到 nowcode
- 刷相关的基础知识题,会到 leetcode 上刷算法题
- 关于项目,会让朋友来给我面试项目
本次的几个题会简单的涉及 golang 的 chan,fallthrough,闭包等 等
一、题目描述:
题目一:关于 chan
通过我们看题的描述,这个题应该会输出什么呢?本题考查啥?
- 本题主要考查的是关于通道的使用
我们乍一看编码,主要是想用 for 循环阻塞读取 ch 通道中的数据,有 1 个数据,则 i++ ,该 chan 是一个无缓冲的通道,通道内中的数据类型是 struct{} ,那么这道题应该输出啥呢?
输出 1 , 0 ? 还是 程序会报 panic?
结果是会报 panic
原因如下:
看整个程序,初始化 ch 通道之后,立刻开启了一个协程去关闭 ch 通道,关闭通道后,还立刻向一个关闭的通道中写入数据,这显然是 panic,在 golang 中是不允许这样操作的
在我的历史文章中也分享过关于通道的内容,可以点击链接查看,GO通道和 sync 包的分享
题目二:关于 fallthrough
- 本题主要考查对 fallthrough 和 switch 的应用
fallthrough 和 switch 是 golang 中的关键字 , switch 和我们写 C 语言中的 swith 含义表示一样,但是 golang 中 switch 的 case 后面是默认带上 break 的
那么这个时候,我们期望程序执行完 case 1 之后,继续执行 case 2 的时候,我们就可以使用 fallthrough 关键字,fallthrough 有一点我们需要注意,他会强制执行后面的 case 代码,无论后面的这个 case 是否是 true
那么本题的结果就是:3
本题考查的时候对于 golang 中 switch 和 fallthrough 的理解 ,很多时候,我们可能会认为 fallthrough 会执行后面的 case ,但是需要这个 case 是 true 才会执行,其实并不是,fallthrough 是会强制执行后面的 case
题目三:关于闭包
如下代码会输出什么?
- 本题主要考查闭包的使用
闭包可以这样来理解
在支持函数是一等公民的语言中,一个函数的返回值是另一个函数,被返回的函数可以访问父函数内的变量,当这个被返回的函数在外部执行时,就产生了闭包
此处 app 函数的返回值 是另外一个函数,因此 此处就产生了一个闭包
当然在 golang 里面,匿名函数也是属于闭包的,它们可以引用外层函数定义的变量
那么这里,我们需要注意,闭包所处环境,是可以引用环境里的值的
那本题的结果什么呢?
本题结果:
Hi All Hi go go Hi All All
我们看到源码中,app 函数中,返回了另外一个函数,该 函数可以使用父函数的 变量 t
第一次调用 b 函数的时候,结果是 Hi All
大家不难理解,闭包引用了环境中的值
由于第一次调用 b 函数 的时候, t 变量已经变成 了 Hi All
,因此再次调用 b 函数的时候,结果就是 Hi All All
a 函数,也是同样的道理
今天就到这里,学习所得,若有偏差,还请斧正
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~