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