重新认识时间复杂度
大O符号表示法 我们假设计算机运行一行基础代码需要执行一次运算。 int aFunc(void){ printf("Hello,World!\n"); //需要执行1次 return 0; //需要执行1次} 那么上面这段代码执行的总运算次数 ...
Read more
小小String对象大大奥秘
什么是字符串? 字符串是由引号所括起来的一系列字符序列。例如"String","Hello"就为一个字符串 String 的不可变性 "String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何操作都会生 ...
Read more
Redis 缓存设计 - 缓存穿透/雪崩/击穿
缓存收益和成本 缓存收益 加速读写 减低后端负载 缓存成本 数据不一致问题:缓冲层和数据层保存的数据可能不一致 代码维护成本变高,多了一层缓存逻辑 运维成本,例如 Redis cluster的维护 使用场景 减低后端负载:对高消耗的SQL结果进行缓存,例如join结果集/分组 ...
Read more
Redis Cluster 故障转移
故障发现 通过ping/pong消息来实现故障发现:不需要sentinel 主观下线:某个节点认为另一个节点不可用,“偏见” 客观下线:当半数以上持有槽的主节点都标记了某节点主观下线 故障链表可以维护了每个节点对其他节点的"看法",即认为主观下线与否 尝试客观下线流程如 ...
Read more
Redis Cluster 重定向问题 - Moved/Ask重定向
相比于单机redis或使用sentinel来管理的redis主从复制的客户端,Redis cluster的客户端连接更加复杂,需要进行额外的处理。 Moved 重定向 槽命中:直接返回结果 槽不命中:即当前键命令所请求的键不在当前请求的节点中,则当前节点会向客户端发送一个Moved 重定向,客 ...
Read more
Redis Cluster 集群伸缩
集群伸缩 在已存在的集群中添加和删除集群节点,在集群伸缩的过程中伴随着虚拟槽在节点中的移动 集群扩容 准备新节点,把新节点配置为集群模式,相关配置信息和其他节点统一,启动后新节点是孤立节点,和集群之间还没有联系 使用 cluster meet newNodeIP newNodePort 把新节 ...
Read more
KMP算法 - 基于《算法》第四版
基本思想 规定:匹配字符串 - 模式串(pat), 匹配文本 - 文本(txt) 基本思想:当出现不匹配时,就能知晓一部分文本的内容(因为在匹配失败之前它们已经和模式相匹配),根据这些已经知晓的内容决定 在出现不匹配时,模式应在处于哪个位置和文本的下一个字符比较 - 即找到已知晓内容和模式的最 ...
Read more
Redis Cluster学习
定义 Redis Cluster 将数据分布到不同的节点当中,以解决Redis使用过程中的容量问题(单个Redis内存无法无限扩充),并发问题(官方称当个Redis可以使用10万并发),高可用问题(部分节点不可达能继续处理命令)。 Redis 集群常常和主从复制结合使用。 分布式数据库 - 数据 ...
Read more
<LeetCode>最长回文子串
题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2: 输入: “cbbd” 输出: “bb” 解题思路 解析 我们目标是得到一个字符串的最长 ...
Read more
初探动态规划算法
概念 维基百科的定义如下: dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems, solving ea ...
Read more