写点什么

ARTS 打卡 第 21 周

用户头像
引花眠
关注
发布于: 2020 年 10 月 26 日

ARTS 简介

Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。


Algorithm

力扣(LeetCode)56. 合并区间


给出一个区间的集合,请合并所有重叠的区间。


示例 1:
输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:
输入: intervals = [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
复制代码


提示: intervals[i][0] <= intervals[i][1]


解题思路: 可以先对数组进行排序,然后再不断的将后续的数组与之前的数组比较


  1. 如果左侧小于之前数组的右侧,代表有交集,则需要合并区间

  2. 如果左侧大于前一个数组的右侧,则代表没有交集,是一个独立的新区间


class Solution {    public int[][] merge(int[][] intervals) {        if (intervals == null || intervals.length == 0) {            return new int[0][2];        }        //先将间隔排序,这样就可以直接使用左侧,只需要判断右侧        Arrays.sort(intervals, new Comparator<int[]>() {            @Override            public int compare(int[] interval1, int[] interval2) {                return interval1[0] - interval2[0];            }        });        List<int[]> merged = new ArrayList<>();        for (int i = 0; i < intervals.length; i++) {            int l = intervals[i][0], r = intervals[i][1];            if (merged.isEmpty()) {//如果为空,则直接插入                merged.add(new int[] { l, r });            } else {                if (merged.get(merged.size() - 1)[1] < l) {//如果                    merged.add(new int[] { l, r });                } else {                    merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1],                            r);                }            }        }        return merged.toArray(new int[merged.size()][]);    }}
复制代码


ps:参考资料


  1. 《剑指Offer:名企面试官精讲典型编程题(第2版)》

  2. labuladong 的算法小抄


Review

学习-微服务架构模式系列,网站地址是:https://microservices.io 微服务架构-Pattern: Service Instance per VM 这篇文章的主要介绍了微服务架构下如何进行部署:一个服务实例部署到一台虚拟机 背景:使用微服务架构,会有很多服务,为了获得可用性和吞吐量每个服务发布一组实例 问题:每个服务如何打包和发布


强制条件


  1. 不同服务使用不同的语言、框架

  2. 提高吞吐量和可用性,每个服务都可能有多实例

  3. 服务必须能够独立部署和扩容

  4. 每个服务实例必须与其他实例隔离

  5. 每个服务快速打包部署

  6. 限制每个服务实例的资源使用情况

  7. 监控每个服务实例

  8. 可靠的部署

  9. 高效的部署


解决方法,将每个服务实例部署到一台虚拟机


好处


  1. 服务实例与其他隔离

  2. 扩容方便

  3. VM 封装了用于构建服务的技术的细节

  4. VM 对服务实例消耗的 CPU 和内存进行限制

  5. 诸如 AWS 之类的 IaaS 解决方案为部署和管理虚拟机提供了一个成熟且特性丰富的基础设施


不足


  1. 创建一个虚拟机镜像可能很慢


ps:《微服务架构设计模式》


Tips

记录我对于 Linux 的学习,磁盘管理的命令:


ps:“~” 表示为 home 目录,“.” 则是表示目前所在的目录,“…” 则表示当前目录的上一层目录 -h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数


dd

dd 用来读取设备、文件中的内容,并原封不动地复制到指定位置 格式:dd 选项


  1. if=file 从 file 中读而不是标准输入。

  2. of=file 写到 file 里去而不是标准输出。除非指定 conv=notrunc ,否则, dd 将把 file 截为 O 字节(或由 se

  3. ibs=bytes 一次读 bytes 字节。默认是 512。

  4. obs=bytes 一次写 bytes 字节。默认是 512。

  5. bs=bytes 一次读和写 bytes 字节。

  6. cbs=bytes 为 block 转换和 unblock 转换指定转换块的大小。

  7. skip=blocks 在拷贝之前,跳过输入文件的前 blocks 块,每块大小为 ibs-byte 字节。

  8. seek=blocks 在拷贝之前,跳过输出文件的前 blocks 块,每块大小为 obs-byte 字节。

  9. count=blocks 只拷贝输入文件的前 blocks 块(每块的大小为 ibs-byte 字节),而不是全部内容,直到文件末尾。

  10. conv=<关键字>,关键字可以有以下 11 种:ascii:转换 ebcdic 为 asciiebcdic:转换 ascii 为 ebcdicek= 选项指定的大小)ibm:转换 ascii 为 alternate ebcdicblock:把每一行转换为长度为 cbs,不足部分用空格填充 unblock:使每一行的长度都为 cbs,不足部分用空格填充设为同一个值,至少在 只 lcase:把大写字符转换为小写字符块拷贝到输出,而不把较短的块 ucase:把小写字符转换为大写字符 swab:交换输入的每对字节 noerror:出错时不停止 notrunc:不截短输出文件 sync:将每个输入块填充到 ibs 个字节,不足部分用空(NUL)字符补齐。


ps: 使用 bs 将覆盖 ibs 和 obs 设定的值(并且,设定 bs 不等于同时将 ibs 和 obs 使用 sync, noerror 或 notrunc 转换时是这样的。因为 bs 规定,每个输入块都应作为单独 的数据 组合到一起)。


dd if=/dev/sda of=/root/sda.img #将sda的数据备份到sda.img文件dd if=/root/sda.img of=/dev/sda #将sda.img文件恢复到sda盘...
复制代码


Share

分享最近对的学习,这次分享的是SpringBoot系列(4)- 记录请求日志记,可能会有不足之处,之后会根据理解继续修改。


发布于: 2020 年 10 月 26 日阅读数: 35
用户头像

引花眠

关注

还未添加个人签名 2018.06.11 加入

还未添加个人简介

评论

发布
暂无评论
ARTS打卡 第21周