写点什么

ARTS 打卡 第 22 周

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

ARTS简介

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



Algorithm

力扣(LeetCode)57. 插入区间



给出一个无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。



示例 1:
输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]

示例 2:

输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出:[[1,2],[3,10],[12,16]]
解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。




解题思路: 这道题与力扣(LeetCode)56. 合并区间类似,不过 intervals 已经是排序的了,



  1. 将 intervals 数组中小于要插入的区间的所有区间插入到集合中

  2. 将 newInterval 与集合中最右侧的区间对比,如果有交集,则合并

  3. 将 intervals 中剩余的区间插入到集合中,并与集合中最右侧的区间对比如果有交集,则合并



class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
if (intervals == null || intervals.length == 0) {
return new int[][] { newInterval };
}
int n = intervals.length;
int itIdx = 0;
List<int[]> merged = new LinkedList<>();
//处理小于newInterval的区间
while (itIdx < n && intervals[itIdx][0] < newInterval[0]) {
merged.add(intervals[itIdx]);
itIdx++;
}
//处理 newInterval
if (merged.isEmpty()) {//如果为空,则直接插入
merged.add(newInterval);
} else {
if (merged.get(merged.size() - 1)[1] < newInterval[0]) {//如果不相交则直接插入
merged.add(newInterval);
} else {//相交则合并
merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1],
newInterval[1]);
}
}
//处理剩余的区间
for (int i = itIdx; i < n; 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()][2]);
}
}



ps:参考资料



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

  2. labuladong 的算法小抄



Review

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



强制条件



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

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

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

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

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

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

  7. 监控每个服务实例

  8. 可靠的部署

  9. 高效的部署



解决方法,一个服务实例打包成镜像容器并部署



好处



  1. 扩容方便 增加Container实例

  2. 打包和部署快 打包比AMI快100倍 启动也比AMI快

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

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

  5. 服务隔离



不足



  1. 部署基础设施可能没有vm丰富



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



Tips

记录我对于Linux的学习,网络管理的命令:



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



ping

ping 用于检测主机。ping 使用 ICMP 协议规定的 ECHO_REQUEST 数据报引发一个来自主机或网管的 ICMP ECHO_RESPONSE 回应。 ECHO_REQUEST 数据报(“ping”信 息)有一个 IP 和 ICMP 头部, 其后跟随了一个结构,包含一个时间相关的值以及一个任意的“pad” 字节的随机数用以填充数据包。 格式:ping [选项] 目标主机 常用选项:



  1. -c<完成次数> 设置完成要求回应的次数。

  2. -i<间隔秒数> 指定收发信息的间隔时间。

  3. -R 记录路由过程。

  4. -s<数据包大小> 设置数据包的大小。

  5. -t<存活数值> 设置存活数值TTL的大小。



ping www.baidu.com #需要手动ctrl+c
PING www.a.shifen.com (61.135.169.121) 56(84) 比特的数据。
64 比特,来自 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=57 时间=5.32 毫秒
64 比特,来自 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=57 时间=9.83 毫秒
64 比特,来自 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=57 时间=12.5 毫秒
64 比特,来自 61.135.169.121 (61.135.169.121): icmp_seq=4 ttl=57 时间=7.99 毫秒
^C
--- www.a.shifen.com ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 5.319/8.908/12.494/2.618 ms

ping -c 4 www.baidu.com #四次响应结束
PING www.a.shifen.com (61.135.185.32) 56(84) 比特的数据。
64 比特,来自 61.135.185.32 (61.135.185.32): icmp_seq=1 ttl=57 时间=4.45 毫秒
64 比特,来自 61.135.185.32 (61.135.185.32): icmp_seq=2 ttl=57 时间=11.0 毫秒
64 比特,来自 61.135.185.32 (61.135.185.32): icmp_seq=3 ttl=57 时间=16.4 毫秒
64 比特,来自 61.135.185.32 (61.135.185.32): icmp_seq=4 ttl=57 时间=18.1 毫秒

--- www.a.shifen.com ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 4.453/12.486/18.106/5.331 ms




Share

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



发布于: 2020 年 11 月 01 日阅读数: 24
用户头像

引花眠

关注

还未添加个人签名 2018.06.11 加入

还未添加个人简介

评论

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