【刷题日记】nowcode 笔试题 chan,fallthrough,闭包

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

【刷题日记】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 函数,也是同样的道理

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是小魔童哪吒,欢迎点赞关注收藏,下次见~

おすすめ

転載: juejin.im/post/7076755076227792933