写点什么

ARTS 打卡第二周

作者:请务必优秀
  • 2023-08-27
    湖北
  • 本文字数:2321 字

    阅读完需:约 8 分钟

1. Algorithm

求达标子数组的数量

给定一个整型数组arr,和一个整数num


某个arr中的子数组sub,如果想达标,必须满足:


sub中最大值 – sub中最小值 <= num


返回arr中达标子数组的数量


  public static int subArrayNum(int[] arr, int num) {          if(arr == null || num < 0 || arr.length == 0) {        return 0;      }            LinkedList<Integer> qmin = new LinkedList<Integer>();      LinkedList<Integer> qmax = new LinkedList<Integer>();            int l = 0;      int r = 0;      //[l...r) -> [0,0) 窗口内无数            int res = 0;            while(l < arr.length) {        while(r < arr.length) {          while(!qmin.isEmpty() && arr[qmin.peekLast()] >= arr[r]) {            qmin.pollLast();          }          qmin.addLast(r);                    while(!qmax.isEmpty() && arr[qmax.peekLast()] <= arr[r]) {            qmax.pollLast();          }          qmax.addLast(r);                    if(arr[qmax.getFirst()] - arr[qmin.getFirst()] > num) {            break;          }          r++;        }                res += r -l;        if(qmin.peekFirst() == l) {          qmin.pollFirst();        }        if(qmax.peekFirst() == l) {          qmax.pollFirst();        }                l++;      }            return res;  }
复制代码


对于此题:


  1. 当前范围内若达标,则缩小范围必达标

  2. 若不达标,则扩大范围必不达标,可以及时 break


遇到题,先看看问题本身和范围是否能够建立单调性,然后选择对应流程及流程中所要的信息

2. Review

最近在学习 Kubernetes,所以阅读了相关文献,文献链接Events, the DNA of Kubernetes - mgasch.com


Understanding the various components and overall system design of Kubernetes is not an easy task. This is partially due to the designers of Kubernetes fully embracing a microservices based architecture. I.e. every piece of the control (“masters”) and data plane (“nodes/workers”) is implemented as distinct services (controllers). Major advantages of this architecture are flexibility and independence in development/deployment, horizontal scalability and failure tolerance, i.e. running two or more (typically n+1) instances of critical processes like etcd, scheduler, API server, etc.


Kubernetes 的设计者完全采用了基于微服务的架构。也就是说,控制面("主控")和数据面("节点/工作者")的每一部分都作为不同的服务(控制器)来实现。这种架构的主要优势在于开发/部署的灵活性和独立性、横向可扩展性和容错性,即运行两个或多个(通常是 n+1)关键进程实例,如 etcd、调度程序、API 服务器等。


Kubernetes is not just observing one signal, but two: the desired state of the All processes (controllers), e.g. the scheduler, deployment controller, endpoint controller, Kubelet, etc. can be understood as producers and/or consumers of events from these logs (consumers can be producers as well, and vice versa).


所有进程(控制器),如调度程序、部署控制器、端点控制器、Kubelet 等,都可以理解为这些日志中事件的生产者和/或消费者(消费者也可以是生产者,反之亦然)。


Consumers specify the objects (and optionally namespace) they want to receive events from the API server. This is called a ListWatch in Kubernetes: list all events from the API server when the consumer starts, then switch to “watch mode” (triggered by new events) to reduce the load on the API server. Think of the combination of object+namespace as a dedicated (virtual) event queue the API server handles. As each event carries a resource version for the particular object it contains, e.g. a pod object, going back in time (time travel) is actually possible by requesting a specific resource version .


ListWatch 机制:当消费者启动时,列出来自 API 服务器的所有事件,然后切换到 "观察模式"(由新事件触发),以减少 API 服务器的负载。

3. Technique/Tips

推荐大家一个在阅读 Go 项目源码时的分析工具,这个工具可以帮我们梳理出代码的整体结构,然后生成接口和结构体的 UML 图。有了这个图之后,基本上也就对项目整体关系有了一个基本概念,再读代码的话,相对来说会容易一些。可以手动少画一点,嘿嘿嘿


项目地址: https://github.com/jfeliu007/goplantuml

4. Share

“懒惰”应该是所有程序员的骄傲

Perl 语言的发明人 Larry Wall 曾经说过,优秀程序员应该有三大美德:懒惰、急躁和傲慢(Laziness, Impatience and hubris)。想要成为一个优秀的程序员,就要让机器为自己很好地工作,而这需要对自动化有着很好地理解。


  • 懒惰,是一种品质,它会使你花很大力气去规避过度的精力消耗,敦促你写出节省体力的程序,别人也能很好地利用,你还会为此写出完善的文档,以免别人来问问题。

  • 急躁,是计算机偷懒时,你会感到的一种愤怒。它会促使你写出超越预期的程序,而不只是响应需求。

  • 傲慢,极度自信,写出(或维护)别人挑不出毛病的程序。


学习自动化,先要知道哪些东西不要自动化,尽最大的努力不做浪费时间的事。一方面,我们要从需求上规避那些没必要做的事;另一方面,我们也从自身防止 NIH 综合症(Not Invented Here Syndrome),争取做一个懒惰的程序员。

用户头像

还未添加个人签名 2020-05-29 加入

还未添加个人简介

评论

发布
暂无评论
ARTS打卡第二周_请务必优秀_InfoQ写作社区