写点什么

ARTS 打卡 第 11 周

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

ARTS简介

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

Algorithm

力扣(LeetCode)39. 组合总和

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。

示例 1:
输入:candidates = [2,3,6,7], target = 7,
所求解集为:
[
[7],
[2,2,3]
]
示例 2:
输入:candidates = [2,3,5], target = 8,
所求解集为:
[
[2,2,2,2],
[2,3,3],
[3,5]
]

提示:

1 <= candidates.length <= 30
1 <= candidates[i] <= 200
candidate 中的每个元素都是独一无二的。
1 <= target <= 500


解题思路:

  1. 用taget循环减去数组中的值的到剩余的值b,

  2. 如果b==0结束,将路径加入组合

  3. 如果b!=0,回到一继续运行

  4. 需要注意,如果b<0,则可以直接跳出不继续查找,我们可以提前将数组进行排序,避免多与的回溯

class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> res = new ArrayList<>();
int len = candidates.length;
// 排序是为了提前终止搜索
Arrays.sort(candidates);
backtrace(candidates, len, target, 0, new LinkedList<>(), res);
return res;
}
private void backtrace(int[] candidates, int len, int subTarget, int begin, LinkedList<Integer> path,
List<List<Integer>> res) {
if (subTarget == 0) {
res.add(new ArrayList<>(path));
return;
}
for (int i = begin; i < len; i++) {
// 在数组有序的前提下,剪枝
if (subTarget - candidates[i] < 0) {
break;
}
path.addLast(candidates[i]);
backtrace(candidates, len, subTarget - candidates[i], i, path, res);
path.removeLast();
}
}
}

Review

学习-微服务架构模式系列,网站地址是:https://microservices.io

微服务架构-Pattern: Command Query Responsibility Segregation (CQRS)

这篇文章的主要介绍了微服务架构下如何进行查询:命令查询模式

问题:如何在微服务架构中实现查询

强制要求

  1. 使用微服务

解决方法,命令查询模式:

  1. 将系统分为两个部分,使数据改变的命令和获取数据的查询

  2. 定义一个查询视图,通过订阅数据改变事件来保证视图最新

好处

  1. 更好的概念拆分,数据更新,数据模式

  2. 支持非规格化数据,可伸缩性,高性能

  3. 提高性能和安全性

缺点

  1. 复杂度高

  2. 代码冗余

  3. 可能产生,复制延迟,最终才能有一致视图

Tips

记录我对于Linux的学习,文件相关的命令:

ps:”~” 表示为 home 目录,”.” 则是表示目前所在的目录,”..” 则表示当前目录的上一层目录

-h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数

查找文件

find 用来在指定目录下查找文件

格式:find [path…] [expression]

  1. path find之后直接是要查找的路径,如果path是空的,则搜索当前路径和其子目录。

  2. expression 第一个 - ( ) , ! 之后的是 expression,如果expression 是空字串则使用 -print 为预设 expression,表达式有三部分:选项、测试、动作

常用的expression:

1. 选项:
1. -daystart 从当日起始时开始而不是从24小时之前,计算时间(for -amin, -atime,-cmin, -ctime, -mmin, and -mtime)
2. -depth 先处理目录的内容再处理目录本身
3. -maxdepth levels 进入命令行参数指定的目录下层目录时,最深不超过levels
4. -mindepth levels 不在levels(一个非负整数)层之内执行任何测试和动作
5. -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
1. 测试:
1. +n,-n, n 比n大,比n小,正好是n
2. -amin n : 在过去 n 分钟内被读取过
3. -anewer file : 比文件 file 更晚被读取过的文件
4. -atime n : 在过去n天内被读取过的文件
5. -cmin n : 在过去 n 分钟内被修改过
6. -cnewer file :比文件 file 更新的文件
7. -ctime n : 在过去n天内被修改过的文件
8. -empty : 空的文件
9. -name pattern 基本的文件名(将路径去掉了前面的目录)与shell模式pattern相匹配
10. -path pattern 文件名与shell模式pattern相匹配
11. -type c c代表类型,d : 目录,f: 一般文件,l: 符号连结,等等。
2. 动作:
1. -exec command ;执行 command;如果命令返回状态值0,那么 exec 返回true。所有 find其余的命令行参数将作为提供给命令的参数,直到遇到一个由 `;' 组成的参数为止。命令的参数中,字符串 `{}' 将以正在处理的文件名替换。所有的`{}'都会被替换,不仅是在单独的一个参数中.有些版本的 find不是这样做的。 这些参数可能需要用 `\' 来escape 或者用括号括住,防止它们被shell展开。命令是从起始目录执行的
2. -ok command ; 类似 -exec 但是会先向用户询问 (在标准输入); 如果回应不是以 `y' 或`Y' 起始则不会运行 command 而是返回false。



1.# 查找当前目录及子目录下以.s结尾的文件
2.find -name "*.s"
3../d_add.s
4../add.s
5.
6.# 将目前目录及子目录下中所有一般文件列出
7.find -type f
8.
9.# 查找当前目录及子目录下以.out结尾的文件,删除,删除之前询问一下
10.find -name "*.out" -ok rm {} \;

Share

分享最近对计算机基础的复习,这次分享的是程序的机器级表示 - 控制,可能会有不足之处,之后会根据理解继续修改。



发布于: 2020 年 08 月 09 日阅读数: 56
用户头像

引花眠

关注

还未添加个人签名 2018.06.11 加入

还未添加个人简介

评论

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