ARTS 打卡 Week1
Algorithm
分析:这道题采用模拟+贪心算法即可。过程如下:
定义三个变量:f, t, tw 分别表示获得的 5、10、20 美元个数。
for 循环 bills:
bill=5,f 减 1
bill=10, 要找 5,所以 f--,t++
bill=20,需要找 15,两种情况 一种 10+5,另一个种 5+5+5。优先用 10+5,没有 10 再用三个 5,这样可以保留更多的 5.
上面操作只有 f 可能小于 0,所以再判断下 f 是否小于 0,若小于零则无法进行上述操作,返回 false。最终若没有 return false,则 return true
Review
目前正在学习和加强 Go 相关的知识,了解到 1.18 版本支持工作区模式,于是阅读了官网博客的相关内容,下面是学习心得:
首先工作区是从 Go1.18 开始支持的,是为了解决多模块并行开发问题。
然后了解了工作区模式产生的背景。之前开发一个模块,该模块要依赖很多其他正在开发的模块,其他模块修改之后,需要先提交到仓库,然后在改模块更新才能使用依赖模块的新代码。这样开发比较慢,为此一般使用 replace 来将依赖模块替换到本地相对路径。但是如果依赖的模块比较多,在 go.mod 中依次添加所依赖的模块比较麻烦,所以工作区模式就是为了解决这个问题。
接着知道了工作区模式的工作流程。大致是先建一个工作区目录,然后把依赖的模块拷贝或者创建到该目,同时把开发的模块也拷贝到该目录,再运行go work init [path-to-your-module] [path-to-your-module]
如果后续再添加依赖可运行go work use ...
指令。最后开发完先将依赖模块发布,再发布本开发模块。
最后学习了几个 go work 指令:
Technique/Tips
这篇文章相对比较全面地介绍了空结构体。主要包括空结构体的三个特性和使用场景。三个特性包括:零内存占用、地址相同、无状态。零内存很好理解就是不展内存空间,地址相同就是无论创建多少个空结构体都会指向相同地址,而无状态是指根据空结构体不能创建出有差异的对象。无状态很明显是由于前两个特性导致的,那为啥空接口体会零内存和地址相同呢?从源码`/go/src/runtime/malloc.go`分析得出,对于空结构体实例化分配内存时,会返回一个指向 zerobase 的指针。而 zerobase 是一个用于分配零字节对象的基准地址,不占用任何实际的内存空间。从而所有的空结构对象都指向内存中同一个地址。三个使用场景包括:set 集合实现、通道信号和方法接收器。set 集合在 Go 语言中一般通过 map 中 key 的唯一性实现,而 value 就用空接口类型来实现 value 的零内存占用。空接口体也可以用于不关心通道传递何种数据只需触发信号的场景,比如限制 Goroutine 数量、父子协程传递通道信号用于相互控制等。空结构体也可以接收一组方法而不需要存储公共数据的场景。主要收获是明白了为啥空接口体是零内存存储和创建的对象为啥地址都相同,以及三个主要使用场景。
Share
在知乎上看到了一个关于程序员为啥总是加班的话题,有感而发。我的理解大概有三个原因:1.突发情况比较多。以我从事的业务开发为例,总是会有各种各样的问题出现,一会产品问这个卡为啥没出,一会 leader 问你的服务为啥耗时增长了,一会你的服务上游问你的接口为啥没返回数据,等等这类问题层出不穷,很容易造成加班。2.产品提需求成本太低。产品看到别的竞品有个牛逼的功能就觉得咱们也得搞一个,不能落后竞品,于是就来 push 开发,这班能不加吗?3.内卷化。新人不断涌入,在“你不能加班,有的是人能加班”的环境下,这班不加也得加呀。
版权声明: 本文为 InfoQ 作者【WaitBright】的原创文章。
原文链接:【http://xie.infoq.cn/article/1d16397698011592aa58fa97c】。文章转载请联系作者。
评论