ARTS 第13周 |LeetCode 686 Repeated String Match |MySQL 索引原理 | 舒适区

ARTS

ARTS 是陈浩(网名左耳朵耗子)在极客时间专栏里发起的一个活动,目的是通过分享的方式来坚持学习。

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

本周内容

  1. 谷歌也考的 Easy 算法题
  2. 从 B+ 树原理到实践了解 MySQL 索引
  3. 每个人都走在逃离舒适区的路上

Algorithm

本周的题目比较简单:LeetCode 686. Repeated String Match.

唯一的小困难在于要搞清楚如果 A 可以通过重复自己的方式包含 B 的话,最长需要「重复」到多长的字符串,然后直接用标准库的字符串查找就可以了。

自己实现字符串查找算法,不是本题的考点。

func repeatedStringMatch(A string, B string) int {
    t, count, maxLen := "", 0, 2*len(A)+len(B)
    for len(t) < maxLen {
        if strings.Contains(t, B) {
            return count
        }
        t += A
        count++
    }
    return -1
}

Review 文章推荐

这周的文章是一篇介绍数据库索引的中文文章:MySQL索引背后的数据结构及算法原理

文章从 MySQL 索引的底层数据结构讲起:介绍了 B+ 树的优势,B 树和 B+ 树的区别,磁盘和内存在物理设计和实现上的一些原理,以及为什么 B+ 树能在磁盘这种设备上实现相对较快的查询速度。

然后,文章使用了 MySQL 的一些数据样介绍了一些常见的索引优化方式。比如,如何充分利用最左前缀原则,为什么联合索引在使用多个范围查询时只能最多有一个范围查询使用到索引,为什么单调的值更适合做索引等等这些问题。基本上常见的问题都会涉及一点,但如果想透彻深入的了解的话,还是需要再补充一些更相信的资料。比如可以看一下作者给出的参考文献。

当然,关于索引优化这个问题,一篇文章是很难大而全的讲完的。但这篇文章作为一个入门加上要点提示是非常好的,很值得一读。

Tip 编程技巧

Share 灵光一闪

最近一直在「抽空」看乐队的夏天和脱口秀大会。不论是哪一个节目,好像最近这两期都有一些关于舒适区的内容。比如现场唱功一直堪忧的付菡,再比如上一季半决赛认为自己写不出更好稿子而退赛的张博洋。

维持在某个相对「成功」的稳定状态时间越长,突破这个状态就越难。如果不需要为任何任何或者事情负责的话,维持这个状态就很好。可一旦有了一些进取心也好,或者被别人寄予希望也好,再或者对自己有一些要求也好,只要出现了这种改变或者提升的「需求」,就必须要尝试去主动或者被动的突破舒适区了。

看起来已经在某个领域很成功的人都不想尝试,可见走出舒适区确实很难。而且,很可能没有「最后一个」舒适区,一旦突破了这一个,就会不得不走向下一个。

本周阅读列表

I/O Limits: block sizes, alignment and I/O hints

Why does O_DIRECT require I/O to be 512-byte aligned?

Index Merge Optimization

浅谈Linux内核IO体系之磁盘IO

Linux 中直接 I/O 机制的介绍

为什么 CPU 访问硬盘很慢

你可能感兴趣的:(golang,leetcode,mysql,算法-数据结构,职业发展)