ARTS 02 - Google 如何做 Code Review

Posted by Calvin on 2020-05-31

前言:什么是ARTS?

ARTS 源于耗子叔在极客时间的专栏《左耳听风》打卡活动。

Algorithm:每周至少做一个 Leetcode 的算法题。主要是为了编程训练和学习。

Review:阅读并点评至少一篇英文技术文章。主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。

Tip:学习至少一个技术技巧。主要是为了总结和归纳你在日常工作中所遇到的知识点。

Share:分享一篇有观点和思考的技术文章。主要是为了建立你的影响力,能够输出价值观。

Algorithm

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

1
/ \
2 2
/ \ / \
3 4 4 3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

1
/ \
2 2
\ \
3 3

Python 递归代码:

class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
def check(node1, node2):
if not node1 and not node2:
return True
elif not node1 or not node2:
return False
if node1.val != node2.val:
return False
return check(node1.left, node2.right) and check(node1.right, node2.left)
return check(root, root)

C++ 代码:

class Solution {
public:
bool check(TreeNode *p, TreeNode *q) {
if (!p && !q) return true;
if (!p || !q) return false;
return p->val == q->val && check(p->left, q->right) && check(p->right, q->left);
}
bool isSymmetric(TreeNode* root) {
return check(root, root);
}
};

Leetcode 对称二叉树题解视频

Review

How To Use Utm Parameters To Grow Your Audience

文章链接:How To Use Utm Parameters To Grow Your Audience

很多网址包含 utm 参数,比如utm_source和utm_campaign,这主要是为了让统计引擎确定访问的来源。本文解释这些参数的含义。

The Future of Swift on the Server

文章链接:The Future of Swift on the Server

自从 IBM 在 Swift 上打了退堂鼓后,Server-side Swift 社区受到了不小的打击。大家纷纷猜测会不会这个命题已经不再成立。

这篇文章带来了不少的好消息,甚至认为 2020 将会是 Server-side Swift 的利好年,其中最主要就是 Swift6 的 feature 中绝大多数都直接或间接的和 Server-side 有关或者利好。

还有 Swift 的核心团队迎来了 Tom Doron 和 Saleem Abdulrasool, 一个是 SwiftNIO 的负责人,一个在尝试把 Swift 移植到 Windows,这些迹象都说明 Swift 的核心团队对于让 Swift 跳出 Apple 生态的决心。

Tip

Linux 进程

ps -ef | grep httpd

TERM 信号 给父进程发送一个 TERM 信号,试图杀死它和它的子进程。

kill -TERM PPID

killall 命令 killall 命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非 PID

killall httpd

停止和重启进程 有时候只想简单的停止和重启进程。如下: # kill -HUP PID 该命令让 Linux 和缓的执行进程关闭,然后立即重启。在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启进程时就可以执行此命令。


强杀 kill -9 PID 同样 kill -s SIGKILL 这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。 当使用此命令时,一定要通过 ps -ef 确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被 init 收养,问题就比较严重了。杀死 init 进程意味着关闭系统。 如果系统中有僵尸进程,并且其父进程是 init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。

Share

How to do a code review

这是谷歌开发实践的一篇文章,如何做 Code Review,这里是中文版链接:谷歌工程实践文档

Google 有许多通用工程实践,几乎涵盖所有语言和项目。此文档为长期积累的最佳实践,是集体经验的结晶。我们尽可能地将其公之于众,您的组织和开源项目也会从中受益。

Google 代码审查指南,实则两套指南:代码审查者指南代码开发者指南,通过文章我们可以学习 Google 在工程化中如何保证质量,比如代码的功能是否与作者的意图相同?代码能够更精简吗?代码是否具有正确且设计良好的自动化测试?开发人员是否为变量、类、方法等选择了明确的名称?

通过这篇文章,你能找到这些问题的所有答案,推荐每个技术人/技术团队阅读。