第7期 ARTS 打卡计划

2020-07-06 15:39:26 浏览数 (1)

ARTS 起源

关于 ARTS:一个需要持续地坚持的高效学习项目,每周写一个ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。

本周 ARTS
  • A: 两数相加
  • R: Base: An Acid Alternative
  • T: 编程时如何命名
  • S: 快速提升页面性能的利器-CDN 缓存

Algorithm:两数相加

来源:LeetCode 2. 两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 465 = 807 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:预先指针

从低位到高位依次相加,过程中要考虑进位。并且当两个链表长度不一样时,把较短的链表后面补 0 表示。 对于需要返回头结点的问题,可以先初始化一个预先指针 pre,该指针的下一个节点指向真正的头结点,保证链表构造过程中就需要指针移动了,仍能找到头指针。

代码语言:javascript复制
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode pre = new ListNode(0);
        ListNode current = pre;
        int carry = 0;
        while (l1 != null || l2 != null) {
            int x = l1 == null ? 0 : l1.val;
            int y = l2 == null ? 0 : l2.val;
            int sum = x   y   carry;

            carry = sum / 10;
            sum = sum % 10;
            current.next = new ListNode(sum);

            current = current.next;
            if (l1 != null) {
                l1 = l1.next;
            }
            if (l2 != null) {
                l2 = l2.next;
            }
        }
        if (carry == 1) {
            current.next = new ListNode(1);
        }
        return pre.next;
    }
}

Review:Base: An Acid Alternative

主题:分布式系统设计

来源:https://queue.acm.org/detail.cfm?id=1394128 译文:https://www.cnblogs.com/savorboard/p/base-an-acid-alternative.html

评论:在非强 ACID 要求下,可以 Base 理论去设计分布式系统

对应水平扩展存在多个子系统的系统架构,基于 CAP 理论,传统的 ACID 保证多系统间的强一致性,但这个是以降低系统的整体可用为代价的;而在某种场景下,系统对一致性的要求并不是那么严格,只要能保证最终一致性即可,这是可以利用 Base 理论去设计一个允许局部不可用,但保证整体可用,且数据行为过程中可能不一致,但始终保持一致的架构,更有利于系统整体的可扩展性。

Tip:编程时如何命名

主题:编码规范

使用在线命名工具:https://unbug.github.io/codelf/,利用一些技术开源平台,如 Github, Bitbucket, Google Code, Codeplex, Sourceforge, Fedora Project, GitLab 的代码片段搜索匹配出跟关键字相关性高的变量命名,用于开发者参考和选用在自己工作编程需要进行命名的时候。同时也支持多个编辑器插件,详见:https://github.com/unbug/codelf

Share:快速提升页面性能的利器- CDN 缓存

主题:利用 CDN 技术进行性能优化

https://www.yuque.com/docs/share/d0de42ee-d05c-424c-a822-5f94c2b6ca7f

0 人点赞