diff --git "a/03\345\256\271\345\231\250\345\222\214\351\233\206\347\276\244/4helm.md" "b/03\345\256\271\345\231\250\345\222\214\351\233\206\347\276\244/4helm.md" new file mode 100644 index 0000000..d4f30a6 --- /dev/null +++ "b/03\345\256\271\345\231\250\345\222\214\351\233\206\347\276\244/4helm.md" @@ -0,0 +1,9 @@ +## Helm + +[helm](https://github.com/helm/helm) + +[官方charts](https://github.com/helm/charts) + +[helm介绍](https://blog.csdn.net/bbwangj/article/details/81087911) + +[中文文档](https://whmzsu.github.io/helm-doc-zh-cn/quickstart/quickstart-zh_cn.html) \ No newline at end of file diff --git "a/14\346\225\260\346\215\256\347\273\223\346\236\204\345\222\214\347\256\227\346\263\225/3\347\256\227\346\263\225.md" "b/14\346\225\260\346\215\256\347\273\223\346\236\204\345\222\214\347\256\227\346\263\225/3\347\256\227\346\263\225.md" index 197d43a..11808f5 100644 --- "a/14\346\225\260\346\215\256\347\273\223\346\236\204\345\222\214\347\256\227\346\263\225/3\347\256\227\346\263\225.md" +++ "b/14\346\225\260\346\215\256\347\273\223\346\236\204\345\222\214\347\256\227\346\263\225/3\347\256\227\346\263\225.md" @@ -48,14 +48,39 @@ - 借助KMP算法对BF算法的改进思想,对Trie树改进,增加了失败指针,类似KMP算法中的next数组,进行下次匹配的多滑动定位,不是从头开始 - 算法实现:1.将多个模式串构建AC自动机(有分2步,1:将模式串构建Trie树 2:在Trie树上构建失败指针), 2.AC自动机中匹配主串 - + +### 递归和递推算法 + +[参考](https://www.cnblogs.com/jycboy/p/5304347.html) + +#### 递归 + +程序中不断反复调用自身来达到求解问题的方法 + +#### 递推 + +其根据已有的数据和关系,逐步推导而得到结果 + +#### 区别 + +相对于递归算法,递推算法免除了数据进出栈的过程,也就是说,不需要函数不断的向边界值靠拢,而直接从边界出发,直到求出函数值 + + ### 算法思想 #### 贪心算法 特点: +- 一条路走到黑,就一次机会,只能哪边看着顺眼走哪边 - 其他条件一样的情况下,先选贡献最大的 +应用: + +- 哈弗曼编码 +- Prim +- Kruskal最小生成树 +- Dijkstra + #### 分治算法 分治算法是一种处理问题的思想,递归是一种编程技巧 @@ -65,12 +90,54 @@ - 原问题分解成的子问题可以独立求解,子问题之间没有相关性 - 具有分解终止条件,也就是说,当问题足够小时,可以直接求解 - 可以将子问题合并成原问题 - + +应用: + +- MapReduce #### 回溯算法 + +特点: + +- 一条路走到黑,无数次重来的机会,还怕我走不出来 + +应用: + +- 八皇后 +- 数独 +- 0-1背包 +- 图的着色 + + #### 动态规划 + +特点: + +- 把原来的问题分解成了几个相似的子问题。(强调“相似子问题”) +- 所有的子问题都只需要解决一次。(强调“只解决一次”) +- 储存子问题的解。(强调“储存”) +- 无后效性 ---未来与过去无关 + +通俗理解: + +- 拥有上帝视角,手握无数平行宇宙的历史存档, 同时发展出无数个未来 +- 大部分动态规划能解决的问题,都可以通过回溯算法来解决,只不过回溯算法解决起来效率比较低,时间复杂度是指数级的 +- 空间换时间思路 +- 每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到-->这个性质叫做最优子结构 + +#### 区别 + +每个阶段只有一个状态->递推; +每个阶段的最优状态都是由上一个阶段的最优状态得到的->贪心; +每个阶段的最优状态是由之前所有阶段的状态的组合得到的->搜索; +每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的->动态规划 + + + + + diff --git "a/16\346\236\266\346\236\204/5\347\274\223\345\255\230.md" "b/16\346\236\266\346\236\204/5\347\274\223\345\255\230.md" new file mode 100644 index 0000000..ec83c80 --- /dev/null +++ "b/16\346\236\266\346\236\204/5\347\274\223\345\255\230.md" @@ -0,0 +1,29 @@ +## 缓存 + +### 设计缓存面临问题 + +#### 缓存穿透 + +- 原因:查询一个一定不存在的数据,每次都需要去数据库查,如果访问量大,DB挂掉,利用不存在的Key可以造成攻击 +- 解决: + 1. DB不存在的数据,缓存空值 + 2. 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉 + +#### 缓存雪崩 + +- 原因:**所有的key**设置了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩 +- 解决:过期时间随机,降低缓存在同一时刻全部失效 + +#### 缓存击穿 + +- 原因:**热点访问,同一个key**,缓存过期,大量请求并发访问DB,压垮DB +- 解决: + 1. 缓存失效,加互斥锁,只有一个线程可以访问DB去请求数据缓存,其他线程sleep,然后再请求缓存 + 2. key不过期,维护一个假定过期时间,异步更新数据,性能好,代码复杂 + + +### 缓存高可用和可拓展 + +[一致性哈希算法](../14数据结构和算法/2一致性哈希算法.md) + +