十几年前就有一些公司开始践行服务拆分以及SOA,六年前有了微服务的概念,于是大家开始思考SOA和微服务的关系和区别。最近三年Spring Cloud的大火把微服务的实践推到了高潮,而近两年K8S在容器编排的地位确定之后大家又开始实践起以K8S为核心的云原生思想和微服务的结合如何去落地,2018年又多出一个ServiceMesh服务网格的概念,大家又在思考如何引入落地ServiceMesh,ServiceMesh和K8S以及Spring Cloud的关系如何等等。
https://threedots.tech/post/basic-cqrs-in-go/ It’s highly likely you know at least one service that:
两种算法 查找字符串有两种相对成熟又实现简单的算法,一个叫做 Brute Force ,叫做暴力匹配,或者朴素匹配的算法;另一个叫做 Rabin-Karp,是前者的升级版,加入了 哈希算法来提高效率,要稍微复杂一点。 在 Golang 的字符串查找中,两种算法都有用到。这和这两种算法在不同的场景下的优势不同有很大关系。我们可以先来看一下这两种算法的原理是什么,然后再对照到 Golang 的源码中。 Brute Force 这种算法其实就是最简单的一个个的字符去做对比来判断字符串是否一样。这种算法的特点就是实现简单,但是相应的效率也不是很高。 假设我们有两个字符串,A串 和 B串。如果我们要在 A 中查找 B,那么,我们把 A 叫做 主串,我们 B 串叫做 模式串 。A 的长度为 n,B的长度为 m,那么就有 n>=mn >= mn>=m。 如果,我们要在 A 中查找B,那么我们就需要从 编号为 0 开始的地方,一直到 n-m 的地方,将 m 长度的子串和 B 对比,看看是否相同。那么,也就是要对比 n−m+1n-m+1n−m+1 次,每次对比 m 个字符,换算成公式就是:(n−m+1)∗m(n-m+1)m(n−m+1)∗m ,所以,这个算法的时间复杂度就是 O(n∗m)O(nm)O(n∗m) 。