首页
学习
活动
专区
圈层
工具
发布

第6期 ARTS 打卡计划

ARTS 起源

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

本周 ARTS

  • A:长度最小的子数组
  • R:Instagram Engineering’s 3 rules to a scalable cloud application architecture
  • T:排查 Linux 网络问题的常用工具
  • S:从 0 开始学大数据之 Hadoop 大数据原理与架构

Algorithm:长度最小的子数组

来源:LeetCode 209. 长度最小的子数组

难度中等359收藏分享切换为英文关注反馈 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。 示例: 输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的连续子数组。 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

思路:双指针法 & 滑动窗口

用一个双指针构成的滑动窗口来计算该子数组,滑动窗口的左边界为 start=0,有边界为 end=0 为起点,先遍历 end,如果发现子数组大于等于 s,那么 start+=1,继续遍历 end,用一个变量 min 记录窗口的大小,当 nums[start,end+1] 的和大于等于 s,的时候,记录 end-start+1 子数组长度。

代码语言:javascript
复制
public class Solution {

    public int minSubArrayLen(int s, int[] nums) {
        int min = Integer.MAX_VALUE;
        if (nums.length == 0) {
            return 0;
        }
        int start = 0, end = 0;
        int sum = 0;
        while (end < nums.length) {
            sum += nums[end++];
            while (sum >= s) {
                min = Math.min(min, end - start);
                sum -= nums[start++];
            }
        }
        return min == Integer.MAX_VALUE ? 0 : min;
    }

}

Review:Instagram Engineering’s 3 rules to a scalable cloud application architecture

主题:架构设计

https://medium.com/@DataStax/instagram-engineerings-3-rules-to-a-scalable-cloud-application-architecture-c44afed31406

评论:如何建立可扩展的云应用架构

文章介绍了图片社群应用软件 Instagram 在自身业务快速成长过程中关于建立可扩展的云应用架构的三个原则:

  • 尽可能使用已经被验证且可靠的技术。
  • 不要重复发明轮子,善于利用已有的资源。
  • 保持简单,解决需求问题的方式尽量简单,并用部分数据迁移 Cassandra 的案例进行了说明。

Tip:排查 Linux 网络问题的常用工具

主题:工具

Linux 网络诊断工具

  • ping:测试当前主机与目标主机之间的网络是否正常。
  • traceroute:追踪访问目标主机网络的路由过程。
  • mtr:结合 ping 和 traceroute 功能的网络诊断工具。
  • nslookup:解析目标域名所对应的 ip。
  • telnet:检查服务的通信端口的是否可以连接。
  • tcpdump:对网络上的数据包进行截获和分析。
  • netstat:检查服务的通信端口的状态,常用命令参数 netstat -ntpl
  • ss:作用和使用参数都跟 netstat 相似,会有进程号显示。
下一篇
举报
领券