颜林林的“左耳听风ARTS”打卡记录

ARTS第二十五周(2020年3月9日~15日)

2020-03-13

Algorithm

LeetCode题库

编号 难度 题目 我的解答 执行用时 内存消耗 排名
192 中等 统计词频 200313-1.sh 4 ms 3.3 MB 70.77%
193 简单 有效电话号码 200313-1.sh 0 ms 3.1 MB 100.00%
194 中等 转置文件 200313-1.sh 8 ms 3.6 MB 87.10%
195 简单 第十行 200313-1.sh 0 ms 3.8 MB 100.00%
196 简单 删除重复的电子邮箱 200313-1.sql 731 ms 0 MB 58.97%
197 简单 上升的温度 200313-1.sql 490 ms 0 MB 18.44%
198 简单 打家劫舍 200313-1.cpp 4 ms 9.6 MB 67.73%
199 中等 二叉树的右视图 200313-1.cpp 8 ms 13.6 MB 43.99%
200 中等 岛屿数量 200314-2.cpp 48 ms 17 MB 5.54%
201 中等 数字范围按位与 200314-1.cpp 16 ms 7.3 MB 57.75%
202 简单 快乐数 200314-1.cpp 8 ms 7.8 MB 25.35%

Review

1. 企业内部开源

分享链接:https://github.blog/2020-03-11-why-organizations-should-commit-to-innersource-in-2020/

这是GitHub的一篇博文,提到一个概念“innersource”,我不确定中文应该怎么说,姑且称之为“内部开源”吧。

这个概念其实早在2000年就已经提出(参见wikipedia),指的是在企业内部采取或借鉴开源社区的方式,对软件开发项目进行管理。开源社区的成功项目,在全球合作、软件质量控制、激励等诸多方面,经过这么多年的发展,形成了一系列行之有效的做法。这些做法,通过“内部开源”的方式,也同样有利于企业的软件开发项目。

Tip

1. 设置bash history的上限

在bash中,可以通过命令history查看过去使用过的命令行。这个历史记录是有上限数量的:

1
2
3
4
$ history | wc -l
500
$ echo $HISTSIZE
500

可以通过修改这个环境变量(将如下命令加入~/.bashrc中),来调整该上限:

1
export HISTSIZE=999999

参考:https://www.linuxquestions.org/questions/linux-newbie-8/bash-history-limit-775909/

2. 设置可移植的脚本解释器定义行

分享链接:Make Linux/Unix Script Portable With #!/usr/bin/env As a Shebang

对于经常编写和使用脚本的人而言,每次都带着脚本解释器运行,是个烦人的工作:

1
$ perl foo.pl arg1 arg2  # 使用perl对foo.pl进行解释执行,带着参数arg1 arg2

于是,一个常见的做法是,把解释器写到脚本的第一行,并以“#!”开头,例如:

1
2
3
4
$ head -n1 foo.pl  # 查看脚本的第一行
#!/usr/bin/perl
$ chmod +x foo.pl  # 设置脚本属性,允许执行
$ ./foo.pl         # 直接运行该脚本

这个脚本首行的解释器定义,有个名称叫做“shebang”(读音为:US [ʃə’bæŋ] 或 UK [ʃɪ’bæŋ]),目前有“释伴”的中文译法,兼具音译和意译,可惜尚未得到广泛共识。

然而,这种写法要求给出perl程序的全路径,这在不同的系统环境中,由于perl可能安装到其他自定义路径,因而造成脚本的移植性/适应性的降低。

针对此问题,一个改进的做法是,通过/usr/bin/env进行调用。env程序被认为是所有系统都会自带的,且位于固定的/usr/bin/目录中,通过它,就能自动搜索PATH路径,找到正确的解释程序(如perl,或其他程序):

#!/usr/bin/env perl

这篇文章给出的题图中,其定义为:

#!/usr/bin/env perl -w

增加了-w参数,是为了让perl针对各类不规范用法提出警告。这是很好的习惯。可惜这种写法会造成错误提示:

1
2
$ ./foo.pl
/usr/bin/env: ‘perl -w’: No such file or directory

经过阅读man env使用帮助说明,找到env命令需要指定参数-S,才能允许后续追加其他参数。最终的解决方案是:

#!/usr/bin/env -S perl -T -w

其他参考链接:

Share

1. 前端:圣杯布局与双飞翼布局

这是我第一次听说这两个名词:“圣杯布局”和“双飞翼布局”。前端的世界果然日益复杂了!

通过搜索,找到如下文章,仔细进行了学习:

这两种布局,都是实现网页的三栏分割布局,其中左右两栏固定宽度,而中间栏宽度自适应。

圣杯布局的原创,来自英文网页:In Search of the Holy Grail。而双飞翼布局则来自淘宝UED。这两种布局,都利用了“负边距布局”的特性进行实现。