写点什么

ARTS 打卡 第 18 周

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

ARTS 简介

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

Algorithm

力扣(LeetCode)43. 字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例1:
输入: num1 = "2", num2 = "3"输出: "6"
示例 2:输入: num1 = "123", num2 = "456"输出: "56088"
复制代码

说明:

  1. num1 和 num2 的长度小于 110。

  2. num1 和 num2 只包含数字 0-9。

  3. num1 和 num2 均不以零开头,除非是数字 0 本身。

  4. 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

解题思路:

题目要求不能使用大数类型,那么可以用数组模拟两数相乘,先将字符串转换为整数数组,然后每个循环相乘,

  1. 先将字符串转换为整数数组

  2. 用一个整数数组的保存乘积结果,该结果数组的长度是两个整数数组之和

  3. 两个数组从右到左依次相乘,将结果存入,同时处理进位

  4. 将结果转为字符串

class Solution {    public static String multiply(String num1, String num2) {        if ("0".equals(num1) || "0".equals(num2)) {            return "0";        }        int xlen = num1.length();        int ylen = num2.length();        int[] x = toIntArr(num1);        int[] y = toIntArr(num2);        int[] ansArr = new int[xlen + ylen];//两个数相乘,则乘积的位数不超过两个数位数之和        for (int i = xlen - 1; i >= 0; i--) {            for (int j = ylen - 1; j >= 0; j--) {                int mul = x[i] * y[j];                int index = i + j + 1;                ansArr[index] += mul;                //处理进位                ansArr[index - 1] += ansArr[index] / 10;                ansArr[index] %= 10;
} } StringBuilder ans = new StringBuilder(); if (ansArr[0] != 0) { ans.append(ansArr[0]); } for (int i = 1; i < ansArr.length; i++) { ans.append(ansArr[i]); } return ans.toString(); }
private static int[] toIntArr(String num1) { char[] a = num1.toCharArray(); int[] m1 = new int[num1.length()]; for (int i = 0; i < m1.length; i++) { m1[i] = a[i] - '0'; } return m1; }}
复制代码

ps:参考资料《剑指Offer:名企面试官精讲典型编程题(第2版)》

Review

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

微服务架构-Pattern: Service Integration Contract Test

这篇文章的主要介绍了微服务架构下如何进行测试:服务集成协议测试

背景:使用微服务架构,会有很多服务,必然存在一个调用可能涉及多个微服务,那么如何测试

问题:如何简便的测试服务提供的 API 是客户端期望的

强制条件:端到端的测试(即启动多个服务的测试)是困难的、缓慢的、脆弱的和昂贵的。

解决方法,由使用该服务的另一个服务的开发人员编写的服务的测试套件。测试套件验证服务是否符合预期。

好处

  1. 更容易

  2. 更快

  3. 更可靠的

  4. 更便宜的

不足

  1. 可能出现通过测试但生产失败

需要解决 如何确保测试与实际需要的测试相匹配

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

Tips

记录我对于 Linux 的学习,备份压缩相关的命令:

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

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

zip 与 unzip

zip 用于压缩文件。在 window 平台中 rar 是常用的压缩文件格式,但是在 linux 平台中 zip 是个使用广泛的压缩文件格式。

格式:zip [参数] [打包后的文件名] [打包的目录路径]

常用参数:

  1. -a 将文件转成 ASCII 模式

  2. -b<工作目录> 指定暂时存放文件的目录。

  3. -c 替每个被压缩的文件加上注释。

  4. -d 从压缩文件内删除指定的文件。

  5. -D 压缩文件内不建立目录名称。

  6. -F 尝试修复损坏的压缩文件

  7. -h 显示帮助界面

  8. -m 将文件压缩之后,删除源文件

  9. -n 特定字符串 不压缩具有特定字尾字符串的文件

  10. -o 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间

  11. -q 安静模式,在压缩的时候不显示指令的执行过程

  12. -r 将指定的目录下的所有子目录以及文件一起处理

  13. -S 包含系统文件和隐含文件(S 是大写)

1.#将 /var/www/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip:2.zip -q -r html.zip /var/www/html/
复制代码

unzip 用于解压缩 zip 文件

格式:unzip [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] file[.zip] [file(s) …] [-x xfile(s) …] [-d exdir]

常用参数:

  1. -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。

  2. -l 显示压缩文件内所包含的文件。

  3. -n 解压缩时不要覆盖原有的文件;

  4. -o 不必先询问用户,unzip 执行后覆盖原有的文件;

  5. -P [密码] 使用 zip 的密码选项;

  6. -q 执行时不显示任何信息;

  7. -d<目录> 指定文件解压缩后所要存储的目录。

  8. -x<文件> 指定不要处理.zip 压缩文件中的哪些文件。

  9. -Z unzip -Z 等于执行 zipinfo 指令。

1.#将压缩文件html.zip在当前目录下解压缩。2.unzip html.zip3.#将压缩文件html.zip在目录/var/www/html/下解压缩。4.unzip html.zip -d /var/www/html/
复制代码

Share

分享最近对的学习,这次分享的是SpringBoot系列(2)-第一个SpringBoot程序,可能会有不足之处,之后会根据理解继续修改。


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

引花眠

关注

还未添加个人签名 2018.06.11 加入

还未添加个人简介

评论

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