ARTS 打卡 第 4 周
ARTS简介
Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。
Algorithm
Leecode 6. Z 字形变换
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:
L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:”LCIRETOESIIGEDHN”。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = “LEETCODEISHIRING”, numRows = 3
输出: “LCIRETOESIIGEDHN”
示例 2:
输入: s = “LEETCODEISHIRING”, numRows = 4
输出: “LDREOEIIECIHNTSG”
解释:
L D R
E O E I I
E C I H N
T S G
解题思路:
如果我们将LEETCODEISHIRING
按照0-15标记,对numRows=3,4,5的结果也进行标记如下:
通过对比发现第0行与第n-1行,它们的索引编号间隔相同,比如:numRows=3时,间隔是4;numRows=4时,间隔是6;numRows=5时,间隔是8。可以推算出间隔公式cap=2numRows-2,第0行的索引间隔是0+k*cap,第n-1行的索引间隔是n-1+k*cap,其中k代表第几个cap
对于中间的行,经过分析,发现索引间隔由两组cap=2numRows-2的索引组成
所以可以看出,索引间隔有两种:i+k*cap与(k+1)*cap-i
Review
学习-微服务架构模式系列,网站地址是:https://microservices.io
微服务架构-Pattern: Decompose by subdomain
这篇文章的主要介绍了分解模式:根据子域进行服务拆分:
当我们使用微服务的架构是,需要对整个应用进行分解,有多种分解的方式,这篇文章介绍的是根据业务能力进行分解。
分解服务的强制条件:
结构必须稳定
服务必须是高内聚的
松耦合的
可测试的
服务必须小,支撑团队小6-10
必须是自治的,与其他团队交互较少
在此种情况下,可以通过DDD(Domain-Driven Design,领域驱动设计)划分子域的方式进行分解。DDD 将应用的问题空间(业务)当作一个领域,领域有多个子域,子域可以按照如下方式进行分类:
核心 业务的关键区分点,应用的最有价值的部分
支撑 与业务是做什么的相关,但不是主要区分点;这个可以自己做或者外包
通用 不特定于业务,理想情况下使用现成的软件来实现
ps: 关于领域驱动设计的进一步资料可以看:豆瓣-领域驱动设计,领域驱动设计精粹,领域驱动设计与模式实战
比如,一个在线商城,可以分解为如下子域:
订单管理
商品管理
物流管理
库存管理……
这样的好处:
稳定 子领域是稳定的,所以服务也是稳定的
使用业务价值划分团队 团队较小,非常自治
高内聚低耦合
有以下问题需要解决:
如何划分业务功能,可以参考的方式:
Tips
记录我对于Linux的学习,从磁盘相关的命令开始:
ps:”~” 表示为 home 目录,”.” 则是表示目前所在的目录,”..” 则表示当前目录的上一层目录
-h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数
mkdir
命令用于子目录,常用参数有:
-p 确保目录名称存在,不存在的就建一个
-v 打印每个创建的目录,最好与-p一起使用
rmdir
删除空的目录,常用的参数有:
-p 当子目录被删除后使它也成为空目录的话,则顺便一并删除副目录
-v 打印每个删除的目录,最好与-p一起使用
Share
分享最近对计算机基础的复习,这次分享的是信息的表示与存储 - 整数的运算,可能会有不足之处,之后会根据理解继续修改。
参考资料
版权声明: 本文为 InfoQ 作者【引花眠】的原创文章。
原文链接:【http://xie.infoq.cn/article/8fb5b26e1cea3c54e5f4f3d25】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论