摘要: 缓存置换算法 缓存置换算法 操作系统本质上是一个多级缓存系统,从cpu寄存器,cpu一级缓存,cpu二级缓存,cpu三级缓存,主内存,硬盘,从右到左访问效率依次提升。如何在有限的资源内处理无限的数据?最理想的情况是置换出未来短期内不会被再次访问的数据,但是我们无法预知未来,所以只能从数据在过去的访问 阅读全文
posted @ 2019-11-11 21:28 banananana 阅读(640) 评论(0) 推荐(0) 编辑
摘要: 无序数组的中位数 不能使用排序算法,而且要求时间复杂度O(n)。 阅读全文
posted @ 2019-04-22 11:32 banananana 阅读(723) 评论(0) 推荐(0) 编辑
摘要: Redis管道理解 简介 管道并不是Redis本身提供的功能,通常是客户端提供的功能; 管道就是打包多条无关命令批量执行,以减少多个命令分别执行消耗的网络交互时间(TCP网络交互),可以显著提升Redis的性能; 管道使用的场景并不适用于,必须知道每次交互结果的场景或者当前的执行依赖于上一次的执行结 阅读全文
posted @ 2019-04-13 06:01 banananana 阅读(1328) 评论(0) 推荐(0) 编辑
摘要: Redis使用场景 计数器,具体原理就是利用incrby命令,具体实现可以参考这里限时业务,由于Redis可以设置数据的过期时间,到期会自动删除,因此可以使用在限时的优惠活动业务中;队列,利用Redis中的List数据结构中的bpop和rpop的命令,可以实现队列;分布式锁,利用Redis中的set 阅读全文
posted @ 2019-04-11 08:35 banananana 阅读(439) 评论(0) 推荐(1) 编辑
摘要: Redis集群方案总结 Redis集群方案总结Codis其余方案Redis cluster Redis集群方案总结Codis其余方案Redis cluster 目前,Redis中目前集群有以下几种方案: 主从复制哨兵模式redis cluster代理codis客户端分片 主从复制 哨兵模式 redi 阅读全文
posted @ 2019-04-11 06:34 banananana 阅读(678) 评论(0) 推荐(0) 编辑
摘要: Redis淘汰删除策略 Redis淘汰删除策略6种淘汰Key策略3种删除过期键策略定时删除惰性删除定期删除其他模块的淘汰处理RDB 快照持久化创建载入AOF 只追加持久化写入重写主从复模式下对过期键的处理 Redis淘汰删除策略6种淘汰Key策略3种删除过期键策略定时删除惰性删除定期删除其他模块的淘 阅读全文
posted @ 2019-04-10 08:23 banananana 阅读(5065) 评论(0) 推荐(0) 编辑
摘要: 47. 全排列 II 题意 给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 解题思路 去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换。用编程的话描述就是第i个数与第j个数交换时,要求[i,j)中没有与第j个数相等的数。有两种方法(1)可以每次在需要交换时进行顺序 阅读全文
posted @ 2019-04-08 17:17 banananana 阅读(450) 评论(0) 推荐(0) 编辑
摘要: Redis缓存穿透和缓存雪崩以及解决方案 Redis缓存穿透和缓存雪崩以及解决方案缓存穿透解决方案布隆过滤缓存空对象比较缓存雪崩解决方案保证缓存层服务高可用性依赖隔离组件为后端限流并降级数据预热缓存并发分布式锁 Redis缓存穿透和缓存雪崩以及解决方案缓存穿透解决方案布隆过滤缓存空对象比较缓存雪崩解 阅读全文
posted @ 2019-04-08 10:15 banananana 阅读(11299) 评论(0) 推荐(6) 编辑
摘要: 39. 组合总和 题意 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。解集不能包含重复的组 阅读全文
posted @ 2019-04-04 22:57 banananana 阅读(672) 评论(0) 推荐(0) 编辑
摘要: 674. 最长连续递增序列 题意 给定一个未经排序的整数数组,找到最长且连续的的递增序列。 解题思路 从下标1的位置开始和前面的值进行比较,如果大于前面一个值,增加1,否则重置为1(因为肯定至少有1个); 从下标1的位置开始和前面的值进行比较,如果大于前面一个值,增加1,否则重置为1(因为肯定至少有 阅读全文
posted @ 2019-04-03 15:06 banananana 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 450. 删除二叉搜索树中的节点 题意 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明 阅读全文
posted @ 2019-04-02 07:06 banananana 阅读(509) 评论(0) 推荐(0) 编辑
摘要: 236. 二叉树的最近公共祖先 题意 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 解题思路 后序遍历法,将pq的公共父节点问题转化为找到一个节点node使得p、q分别位于node的左右子树中; 若p和q要么分别位于左右子树中,那么对左右子结点调用递归函数,会分别返回p和q结点的位置 阅读全文
posted @ 2019-04-01 18:42 banananana 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 235. 二叉搜索树的最近公共祖先 题意 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 解题思路 利用BST的性质,如果该结点小于给定的其中一个结点,并且大于另外一个给定的结点,那么则认为该点是两个结点的最近公共祖先; 利用BST的性质,如果该结点小于给定的其中一个结点,并且大于另外 阅读全文
posted @ 2019-04-01 17:13 banananana 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 230. 二叉搜索树中第K小的元素 题意 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。 解题思路 中序遍历,利用Python3中提供的生成器方法; 中序遍历,判断存储结点值的数组是否到到k 阅读全文
posted @ 2019-03-31 07:53 banananana 阅读(545) 评论(0) 推荐(0) 编辑
摘要: 173. 二叉搜索树迭代器 题意 实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。 调用 next() 将返回二叉搜索树中的下一个最小的数。 next() 和 hasNext() 操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 h 是树的高度。你可以假设 next() 阅读全文
posted @ 2019-03-31 06:55 banananana 阅读(590) 评论(0) 推荐(0) 编辑
摘要: 95. 不同的二叉搜索树 II 题意 给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树。 解题思路 这道题目是基于不同的二叉搜索树进行改进的; 对于连续整数序列[left, right]中的一点 i,若要生成以 i 为跟结点的BST,则有如下的规律: i 左边的序列可以作为左子 阅读全文
posted @ 2019-03-29 15:59 banananana 阅读(662) 评论(0) 推荐(0) 编辑
摘要: Python 线程和进程和协程总结 线程和进程和协程 进程 进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位;进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响;进程间可以通过信号、信号量、共享内存、管道、队列等来进行通信;进程创建、销毁、上下文切 阅读全文
posted @ 2019-03-28 15:40 banananana 阅读(768) 评论(0) 推荐(0) 编辑
摘要: 96. 不同的二叉搜索树 题意 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 解题思路 对于n个结点,除去了跟结点,还剩余n-1个结点,因此左右子树的结点数分配方式如下: ​ 假定G(n)表示由连续的n个数形成的二叉搜索树的个数,并且以i作为分界点, 那么左子树为G(i- 阅读全文
posted @ 2019-03-28 12:11 banananana 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 429. N叉树的层序遍历 题意 给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。 解题思路 和二叉树的层次遍历的思想一样; 实现 阅读全文
posted @ 2019-03-28 10:16 banananana 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 107. 二叉树的层次遍历 II 题意 给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)。 解题思路 递归:利用前序遍历的思想,在递归过程中记录下结点的深度,在对应深度将结点加入到结果中; 迭代:使用两个队列是因为一个用于记录当前层的结点, 阅读全文
posted @ 2019-03-27 08:51 banananana 阅读(241) 评论(0) 推荐(0) 编辑