ARTS 打卡 第 10 周

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

ARTS简介

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

Algorithm

力扣(LeetCode)32. 最长有效括号

给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。

示例 1:

输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:

输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"


解题思路:

  1. 首先可以找到第一个左括号,因为如果是左边开始都是右括号,肯定不能匹配。可匹配的括号的特点,一定是左括号的数量大于右括号的数量,如果右括号大于左括号则可以跳过继续寻找,当左右括号数量相等的时候,就是此次匹配有效括号的数量。

  2. 1中的逻辑可以解决右括号比左括号多,但是不能处理左括号比右括号多(比如”()((())”)为了处理这种情况,我们还需要从右边寻找可匹配的括号数量,条件与1正好相反。

class Solution {
private static final char RIGHT_BRACK = ')';
public static int longestValidParentheses(String s) {
char[] bracks = s.toCharArray();
int len = s.length();
int leftCount = 0;
int rightCount = 0;
int count = 0;
int firstLeft = 0;
while (firstLeft < len) {
if (RIGHT_BRACK == bracks[firstLeft]) {
rightCount++;
} else {
leftCount++;
}
if (leftCount == rightCount) {
count = Math.max(rightCount, count);
} else if (leftCount < rightCount) {
leftCount = 0;
rightCount = 0;
}
firstLeft++;
}
leftCount = 0;
rightCount = 0;
int firstRight = len - 1;
while (firstRight >= 0) {
if (RIGHT_BRACK == bracks[firstRight]) {
rightCount++;
} else {
leftCount++;
}
if (leftCount == rightCount) {
count = Math.max(leftCount, count);
} else if (rightCount < leftCount) {
leftCount = 0;
rightCount = 0;
}
firstRight--;
}
//count = Math.max(rightCount, count);
return count << 1;
}
}

Review

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

微服务架构-Pattern: API Composition

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

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

强制要求

  1. 使用微服务

  2. 使用一个服务一个数据库模式

  3. 需要聚合多服务数据

解决方法,API 聚合模式:

  1. 使用聚合API调用多个服务然后在内存中将数据结合

好处: 比较简单

缺点: 有些查询效率低,数据大磁盘相关命令

Tips

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

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

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

修改文件属性等命令

touch 于修改文件或者目录的时间属性。比如访问时间、修改时间。

格式:touch [选项]... 文件列表...

  1. -a 仅更改文件访问时间

  2. -c,--no-create 假如目的档案不存在,不会建立新的档案

  3. -d, --date=字符串 使用指定字符串所表示的时间而非当前时间

  4. -f (被忽略的选项)

  5. -h, --no-dereference 影响所有符号链接而非被引用的文件(仅在能够更改符号链接的时间戳的系统上有用)

  6. -m 改变档案的修改时间记录。

  7. r--reference=文件 使用指定文件的时间记录

  8. -t STAMP 使用 [[CC]YY]MMDDhhmm[.ss] 代替当前时间

  9. --time=关键字 改变文件的指定时间:若关键字是 access,atime 或 use,则等同于 -a;若关键字是modify 或 mtime,则等同于 -m



# ls -l 查看最后时间
ls -l touchTestFile
-rw-r--r-- 1 shaozuo shaozuo 0 8月 2 10:09 touchTestFile
# 修改文件时间属性为当前系统时间
touch touchTestFile
ls -l touchTestFile #查看文件的时间属性
-rw-r--r-- 1 shaozuo shaozuo 0 8月 2 10:13 touchTestFile
# 也可以使用stat查看时间
stat touchTestFile
文件:touchTestFile
大小:0 块:0 IO 块:4096 普通空文件
设备:30h/48d Inode:344 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 1000/ shaozuo) Gid:( 1000/ shaozuo)
最近访问:2020-08-02 10:13:07.864729079 +0800
最近更改:2020-08-02 10:13:07.864729079 +0800
最近改动:2020-08-02 10:13:07.864729079 +0800
创建时间:-



chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。

ps:这个命令只有root才能执行。

格式:chown [选项]... [所有者][:[组]] 文件...

chown [选项]... --reference=参考文件 文件...

  1. -c, --changes 显示更改的部分的信息

  2. -f, --silent, --quiet 忽略错误信息

  3. --dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身

  4. -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)

  5. --from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性

  6. --reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值

  7. -R : 处理指定目录以及其子目录下的所有文件

1. -H 如果命令行参数是一个指向目录的符号链接,则对其进行遍历

2. -L 遍历每一个遇到的指向目录的符号链接

3. -P 不遍历任何符号链接(默认)



ps:如果没有指定所有者,则不会更改所有者信息。若所属组若没有指定也不会对其更改,但当加上':' 时 GROUP 会更改为指定所有者的主要组。所有者和所属组可以是数字或名称。

# 递归修改文件夹的组和所有者
chown -R shaozuo:devel fun
chown shaozuo tstfile



chgrp 与chown命令类似,不过只用于变更文件或目录的所属群组。

格式: chgrp [选项列表]... 组 文件...

chgrp [选项列表]... --reference=参考文件 文件...

  1. -c, --changes 显示更改的部分的信息

  2. -f, --silent, --quiet 忽略错误信息

  3. --dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身

  4. -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)

  5. --from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性

  6. --reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值

  7. -R : 处理指定目录以及其子目录下的所有文件

1. -H 如果命令行参数是一个指向目录的符号链接,则对其进行遍历

2. -L 遍历每一个遇到的指向目录的符号链接

3. -P 不遍历任何符号链接(默认)

# 递归修改文件夹的组
chgrp -R devel fun
# 修改文件夹的组
chgrp devel tstdir



chmod

格式:chmod [选项]... 模式[,模式]... 文件列表...

chmod [选项]... 八进制模式字符串 文件列表...

chmod [选项]... --reference=参考文件 文件列表...

  1. -c, --changes 显示更改的部分的信息

  2. -f, --silent, --quiet 忽略错误信息

  3. --dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身

  4. -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)

  5. --from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性

  6. --reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值

  7. -R : 处理指定目录以及其子目录下的所有文件



其中模式(mode)的格式如下:

`[ugoa]*(-+=)+|[-+=][0-7]+`

其中:

  1. u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

  2. + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。

  3. r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

  4. 数字也可以表示权限,r=4,w=2,x=1。所以可读可写是rw=4+2=6



# 设置一个文件的权限有多种写法,比如将file.txt设置为自己可读可写,组可读可写,其他人可读可写
chmod ugo+rw file.txt
chmod a+aw file.txt
chmod 666 file.txt



ps: chown、chgrp与chmod都是由同样的程序员编写的,所以它们的参数与使用方式都很类似



Share

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



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

引花眠

关注

还未添加个人签名 2018.06.11 加入

还未添加个人简介

评论

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