0%

2020 全球的关键字应该是「疫情」,我的关键字是「搞钱」,「买房」和「换工作」。

年初在家办公,加入了「生财有术」社群,豁然开朗,眼界大开,终于走上了搞钱的正路上。尝试了很多方向,收益还不错,财富自由有了正确方向。

年中换工作,做基础架构方向,终于不用跟业务撕逼扯皮了,专心写代码,有了更多时间思考。

下半年房子摇到了,开始了每月还房贷的生活。下个目标是大平层啦。

2021 的目标依旧是财务自由。 🤣

最近入了台联想小新PRO 13 2020 锐龙R7 笔记本。性能非常好。
装的是Windows 10, 从MacOS 切换过来还真有点不习惯。
总体上开发效率比MacOS 会低些,使用体验也差些。可是MacBook Pro 又贵性能又差。 嗯,AMD Yes!

这里列出我用到的软件和配置,供参考

Read more »

一. 10个goroutinue顺序打印0-9

常规的做法是用10个channel来挨个控制,其实可以用原子包实现,相当于加锁

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func printInOrder() {
wg := sync.WaitGroup{}
var curr int32
for i := int32(0); i < 10; i++ {
wg.Add(1)
go func(num int32) {
defer wg.Done()
for {
if n := atomic.LoadInt32(&curr); n == num {
fmt.Println(num)
atomic.AddInt32(&curr, 1)
break
}
time.Sleep(time.Nanosecond)
}
}(i)
}

wg.Wait()
}

二. 两个goroutinue分别打印奇偶数

同上,还是用原子包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
func printMix() {
wg := sync.WaitGroup{}
var curr int32
wg.Add(2)
go func() {
defer wg.Done()
for curr < 10 {
if n := atomic.LoadInt32(&curr); n%2 == 1 {
fmt.Println("A:", n)
atomic.AddInt32(&curr, 1)
} else {
time.Sleep(time.Nanosecond)
}
}
}()
go func() {
defer wg.Done()
for curr < 10 {
if n := atomic.LoadInt32(&curr); n%2 == 0 {
fmt.Println("B:", n)
atomic.AddInt32(&curr, 1)
} else {
time.Sleep(time.Nanosecond)
}
}
}()

wg.Wait()
}