前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第7期 ARTS 打卡计划

第7期 ARTS 打卡计划

作者头像
闻人的技术博客
发布2020-07-06 15:39:26
4530
发布2020-07-06 15:39:26
举报
文章被收录于专栏:程序员闻人

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 闻人的技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ARTS 起源
    • 本周 ARTS
    • Algorithm:两数相加
      • 来源:LeetCode 2. 两数相加
        • 思路:预先指针
        • Review:Base: An Acid Alternative
          • 主题:分布式系统设计
            • 评论:在非强 ACID 要求下,可以 Base 理论去设计分布式系统
            • Tip:编程时如何命名
              • 主题:编码规范
              • Share:快速提升页面性能的利器- CDN 缓存
                • 主题:利用 CDN 技术进行性能优化
                相关产品与服务
                内容分发网络 CDN
                内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档