
算法
文章平均质量分 79
Hzy_han
bug不会凭空产生,也不会凭空消失,只是从一个地方转移到了另一个地方。
展开
-
布谷鸟过滤器
缓存穿透缓存穿透是指请求了缓存和数据库中都没有的数据,频繁请求这类数据,那么数据库就要频繁响应这种不必要的查询,会导致数据库压力过大。那么如何将这些请求阻挡在外呢?主要有两个思路:1.从缓存和数据库中都取不到得数据,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如两分钟2.使用过滤器布隆过滤器布隆过滤器(Bloom Filter)大概的思路就是,当你请求的信息来的时候,先检查一下你查询的数据我这有没有,有的话将请求压给数据库,没有的话直接返回,是如何做到的呢?原创 2021-09-18 17:09:15 · 866 阅读 · 0 评论 -
令牌桶算法实现限流
试想这样的场景, 尽管服务器的 QPS 已经达到限速阈值了, 但是并不想将所有的流量都拒之门外, 仍然让部分流量能够正常通过限流器. 这样我们的服务器在面对突发流量时能够有一定的伸缩空间, 而不是一直处于不可用状态。在开发高并发的系统时,有很多手段来保护系统,如缓存、降级和限流等。缓存可以提升系统的访问速度,降级可以暂时屏蔽掉非核心业务,使得核心业务不受影响。限流的目的通过对并发访问进行限速,一旦达到一定的速率就可以拒绝服务(定向到错误页或告知资源没有了)、排队等待(如秒杀、评论、下单等)、降级(直接返回原创 2021-05-19 19:19:04 · 4974 阅读 · 2 评论 -
常见排序算法总结
排序分类根据时间复杂度的不同,常见的排序算法可以分为三大类:时间复杂度为O(n^2)的算法冒泡排序、选择排序、插入排序、希尔排序等。时间复杂读为O(nlogn)的算法快速排序、归并排序、堆排序等。时间复杂度为O(n)的排序算法计数排序、桶排序、基数排序等。以下将挑选三种较为经典的算法进行介绍。冒泡排序冒泡排序是一种基础的交换排序,是稳定排序类型。package main.java;import java.util.Arrays;public class Sort {原创 2021-02-13 19:36:10 · 273 阅读 · 2 评论 -
解决高并发项目下的热点问题
1.什么是热点点表示我们在系统的业务路径上有一个地方存在性能的瓶颈,比如数据库,件系统,网络,甚至于内存等,这个点一般有io,锁等问题构成。热表示其被访问的频率很高。就是说一个被访问频率很高的io或锁自然而然就造成了我们系统业务路径上的性能瓶颈。这样的热点问题会影响系统稳定性和性能瓶颈,例如支付系统中的热点账户进出款,电商系统中的热点商品参与秒杀,金融系统中的热点理财产品抢购等,都会因为热点问题而影响系统性能。2.热点问题有哪些其次我们需要弄清楚我们的热点问题是属于读热点问题还是写热点问题,原创 2021-02-08 00:34:03 · 1697 阅读 · 0 评论 -
并发控制--乐观锁&悲观锁
锁分为三大类:乐观锁、悲观锁、自旋锁乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。java 中的乐观锁基本都是通过 CAS 操作实现的,CAS 是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败悲观锁:悲观锁是就是悲观思想,即认为写多原创 2020-12-27 16:01:57 · 968 阅读 · 2 评论 -
python、go和java中的垃圾回收机制
常见的 GC 算法。分别是:引用计数法、Mark-Sweep法、三色标记法、分代收集法。引用计数标记-清除分代回收Go三色标记法(1.5版本之后)三色标记法是传统 Mark-Sweep (标记清除法)的一个改进,它是一个并发的 GC 算法。首先创建三个集合:白、灰、黑。将所有对象放入白色集合中。然后从根节点开始遍历所有对象(注意这里并不递归遍历),把遍历到的对象从白色集合放入灰色集合。之后遍历灰色集合,将灰色对象引用的对象从白色集合放入灰色集合,之后将此灰色对象放入黑色集合重复 4 直原创 2020-07-29 22:26:02 · 1243 阅读 · 0 评论 -
动态规划解决0-1背包问题
问题描述:有3个物品,它们有各自的重量和价值是A[3, 8],B[2, 5],C[5, 12],现有给定容量5的背包,如何让背包里装入的物品具有最大的价值总和?总体思路:根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成)找出01背包问题的最优解以及解组成,然后编写代码实现;代码实现#使用动态规划求解0-1背包...原创 2020-01-31 13:58:21 · 272 阅读 · 0 评论 -
动态规划解决投资问题
问题描述假设有4个工厂,投入总计60万元,如何分配各工厂的资金数,使得总的利润最大。各工厂跟据投资数额获得的投资回报的表格如下:解题思路:老大让老二去统计给老二[10,60]后,老二的最大收益,然后根据老二所能获得的最大利润和自己对比,便能得到总最大利润。而老二则延续老大的做法,老二让老三去统计给老三[10,60]后老三能取得的最大利润,然后根据老三所能获得的最大利润和自己相加对比,便...原创 2020-01-28 20:58:34 · 1923 阅读 · 0 评论 -
回溯法解决八皇后问题
问题:在国际象棋棋盘上(8*8)放置八个皇后,使得任意两个皇后之间不能在同一行,同一列,也不能位于同于对角线上。问共有多少种不同的方法,并且指出各种不同的放法。思路:使用回溯法依次假设皇后的位置,当第一个皇后确定后,寻找下一行的皇后位置,当满足左上、右上和正上方向无皇后,即矩阵中对应位置都为0,则可以确定皇后位置,依次判断下一行的皇后位置。当到达第8行时,说明八个皇后安置完毕。回溯法实现...原创 2020-01-22 22:50:07 · 405 阅读 · 0 评论 -
递归实现汉洛塔
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。当搬运的碟子数n=1时,直接搬运即可;(就是递归的基例)当n大于1时:要把n个碟子从针1搬运到针3...原创 2020-01-22 21:22:43 · 427 阅读 · 0 评论