Go 面试每天一篇(第 105 天)

点击上方蓝色“Golang来啦”关注我哟

加个“星标”,天天 15 分钟,一起学 Go

你好哇,欢迎来答题,一起来看下昨天题目的解析:

1.关于同步锁,下面说法正确的是?

  • A. 当一个 goroutine 获得了 Mutex 后,其他 goroutine 就只能乖乖的等待,除非该 goroutine 释放这个 Mutex;

  • B. RWMutex 在读锁占用的情况下,会阻止写,但不阻止读;

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

  • D. Lock() 操作需要保证有 Unlock() 或 RUnlock() 调用与之对应;

参考答案及解析:ABC。

2.下面代码输出什么?请简要说明。

 1func main() {
 2    var wg sync.WaitGroup
 3    wg.Add(1)
 4    go func() {
 5        time.Sleep(time.Millisecond)
 6        wg.Done()
 7        wg.Add(1)
 8    }()
 9    wg.Wait()
10}
  • A. 不能编译;

  • B. 无输出,正常退出;

  • C. 程序 hang 住;

  • D. panic;

参考答案及解析:D。WaitGroup 在调用 Wait() 之后不能再调用 Add() 方法的。

解析若有不妥之处,欢迎在留言区交流、指正!

看下今天的题目:

1.下面代码输出什么?请简要说明。

 1var c = make(chan int)
 2var a int
 3
 4func f() {
 5    a = 1
 6    <-c
 7}
 8func main() {
 9    go f()
10    c <- 0
11    print(a)
12}
  • A. 不能编译;

  • B. 输出 1;

  • C. 输出 0;

  • D. panic;

2.下面代码输出什么?请简要说明。

 1type MyMutex struct {
 2    count int
 3    sync.Mutex
 4}
 5
 6func main() {
 7    var mu MyMutex
 8    mu.Lock()
 9    var mu1 = mu
10    mu.count++
11    mu.Unlock()
12    mu1.Lock()
13    mu1.count++
14    mu1.Unlock()
15    fmt.Println(mu.count, mu1.count)
16}
  • A. 不能编译;

  • B. 输出 1, 1;

  • C. 输出 1, 2;

  • D. fatal error;

引自博客《鸟窝》 https://colobu.com/

答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!

ps:看完文章如果有收获,顺手花 1s 时间帮点下文末右下方的「在看」,感激!

所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!

推荐阅读:

教女朋友写方法(续)

Go 面向对象编程(译)

如果我的文章对你有所帮助,点赞、转发都是一种支持!

给个[在看],是对四哥最大的支持
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Seekload

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值