ARTS 第十一周
每周完成一个ARTS(也就是 Algorithm、Review、Tip、Share 简称ARTS):
- 每周至少做一个 leetcode 的算法题
- 阅读并点评至少一篇英文技术文章
- 学习至少一个技术技巧
- 分享一篇有观点和思考的技术文章。
Algorithm
返回所有长度为 N
且满足其每两个连续位上的数字之间的差的绝对值为 K
的非负整数。
请注意,除了数字 0
本身之外,答案中的每个数字都不能有前导零。例如,01
因为有一个前导零,所以是无效的;但 0
是有效的。
你可以按任何顺序返回答案。
示例 1:
1 | 输入:N = 3, K = 7 |
示例 2:
1 | 输入:N = 2, K = 1 |
思路:DFS 搜索的方式,然后使用 set 去重
1 |
|
Review
本周分享一篇介绍”蓝绿部署”和”金丝雀发行”(直男配直译)的文章:Serverless blue green deployments and canary releases with traffic shifting
知识背景:AWS Lambda 是亚马逊提供的云计算平台,用户将代码上传到平台上,然后可以供用户从 aws、web 或者 app等多种渠道触发计算得出结果。
AWS 的 S3 是亚马逊提供的存储服务。
文章解读如下:
- Blue Green Deployments,我翻译成蓝绿部署,其实就是一种代码版本更替的方式。在现有 blue 版本的基础上,发布了 green 版本,用户是通过一个 load balancer 才能访问到这些代码。所以 load balancer 在用户不可知的前提下,将访问代码的 access 切换到 green 版本,而一旦 green 版本的代码 bug 甚至失效时,又能及时切换回 blue 版本,这就是所谓的蓝绿部署。
- Canary Releases,我翻译成金丝雀发行,其实就是一种灰度发布的方式。将最近的版本仅发布到少量的用户那里,经过使用验证有效后,再逐步扩大到更多的用户那里。
- AWS 的 Lambda 又是如何做的呢?
- 新建一个 method,zip 打包,上传到AWS 的 S3,此方法属于为
lambda funciton
,此时版本号是 1; - 再次发布时版本号是 2,以后是 3、4… 依此类推,即使 2 被删除,其版本号也不会被重用;
- 调用 method 时,可以指定方法名和版本号调用不同版本的方法。
- 也可以为方法设置别名,那么版本信息就对用户透明了,这时 AWS 通常会触发
Prod
权限的方法。 - 在 prod 里的多种版本,就会涉及上文提到的”蓝绿部署”和”金丝雀发行”用法了。
- 新建一个 method,zip 打包,上传到AWS 的 S3,此方法属于为
- 完。
Tip
分析一个 linux 命令行查看文件夹大小的命令:
1 | # 查看根目录下各个文件夹的大小,max-depth=n 表示只深入到第 n 层目录 |
Share
1 | // 分享一个 scala 的快排代码,十分精简也很有意思: |