数据结构与算法
文章平均质量分 86
数据结构与算法的原理以及实战汇总
外星喵
喵了个咪的~~
展开
-
Mysql索引
### 什么是索引?索引(index) 是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。### 为什么使用索引?使用索引可以很大程度上提高数据库的查询速度。不使用索引,MySQL 就必须从第一条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间就越多。如果表中查询的列有一个索引,MySQL 就能快速到达一个位置去搜索数据文件,而不必查看所有数据,这样将会节省很大一部分时间。原创 2021-03-16 17:25:31 · 1825 阅读 · 2 评论 -
操作系统CPU调度算法
### 什么是调度算法在操作系统中调度是指一种资源分配的过程,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法。对于不同的的系统和系统目标,通常采用不同的调度算法### 为什么需要调度算法计算机系统中的CPU资源非常宝贵,为了充分利用其资源,让多线程或者多进程系统能够多快好省地完成我们让它做的各种任务,就需要指定一定的规则去使用CPU。为此,可在内存中可存放数目远大于计算机系统内CPU个数的进程,让这些进程在操作系统的进程调度器的调度下,能够让进程高效(高的吞吐量–throughpu原创 2021-05-21 00:00:54 · 1695 阅读 · 3 评论 -
延迟队列DelayQueue原理
前言什么是DelayQueue(延时队列)DelayQueue 是一个通过PriorityBlockingQueue实现延迟获取元素的无界队列无界阻塞队列,其中添加进该队列的元素必须实现Delayed接口(指定延迟时间),而且只有在延迟期满后才能从中提取元素。什么是PriorityBlockingQueue(优先队列)PriorityBlockingQueue是一个支持优先级的无界阻塞队列,队列的元素默认情况下元素采用自然顺序升序排列,或者根据构造队列时提供的 Comparator 进行排序,具体取原创 2021-07-10 15:56:57 · 14624 阅读 · 14 评论 -
常用的限流算法
在衡量Web系统性能的指标中,最重要的参数是QPS,它表示系统每秒最多能够处理的请求数量,当存在需要处理的流量(Query数)使得系统即使以极限QPS处理也无法在短时间内处理完所有流量,则称这个段时间内系统处于承压状态。原创 2021-06-10 19:47:09 · 927 阅读 · 8 评论 -
怒刷力扣题三百,面试不过也能吹
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[...原创 2019-11-19 15:51:00 · 301 阅读 · 1 评论 -
分布式系统之Raft算法
介绍Raft是一种为了管理日志复制的分布式一致性算法。Raft 出现之前,Paxos 一直是分布式一致性算法的标准。Paxos 难以理解,更难以实现。Raft 的设计目标是简化 Paxos,使得算法既容易理解,也容易实现。Paxos 和 Raft 都是分布式一致性算法,这个过程如同投票选举领袖(Leader),参选者(Candidate)需要说服大多数投票者(Follower)投票给他,一旦选举出领袖,就由领袖发号施令。Paxos 和 Raft 的区别在于选举的具体过程不同。Raft 可以解决分布式 C原创 2021-06-22 20:23:01 · 1072 阅读 · 3 评论 -
分布式ID算法
介绍什么是分布式ID算法就像每个人都对应一个身份证一样,每条数据都对应一个ID,所以ID是数据的唯一标识,传统的做法是利用自增ID创建每条数据的唯一标识。但是随着数据量越来越大,数据库压力越来越大,需要对数据进行分库分表甚至转移到到多台机器上,此时每个表中的数据都会按自己的节奏进行自增,就会出现ID冲突的情况。这时就需要一个单独的机制来负责生成唯一ID,生成出来的ID也可以叫做分布式ID,或全局ID,而这个机制就是分布式ID算法。分布式ID的意义业务量小于500W或数据容量小于2G的时候单独一个my原创 2021-06-19 21:19:55 · 813 阅读 · 6 评论 -
分布式系统之paxos算法
文章目录paxos介绍拜占庭将军问题算法原理协议过程举个例子paxos介绍Paxos 算法是莱斯利·兰伯特(英语:Leslie Lamport)于 1990 年提出的一种基于消息传递且具有高度容错特性的共识(consensus)算法。Paxos 算法所要解决的问题是分布式共识性问题,即一个分布式系统中的各个进程如何就某个值(决议)通过共识达成一致。但是Paxos 常被误称为“一致性算法”,而**一致性(consistency)和共识(consensus)**其实是两个概念。Paxos 实际上是一个共识原创 2021-06-13 23:24:26 · 994 阅读 · 0 评论 -
缓存淘汰算法LRU&LFU
文章目录LRU(The Least Recently Used,最近最久未使用算法)介绍Java实现第一种:使用LinkedHashMap第二种:双链表+hashmapLFU(Least Frequently Used ,最近最少使用算法)介绍Java代码实现定义Node节点定义LFU类总结LRU(The Least Recently Used,最近最久未使用算法)介绍LRU算法的思想是:如果一个数据在最近一段时间没有被访问到,那么可以认为在将来它被访问的可能性也很小。因此,当空间满时,最久没有访问的原创 2021-06-13 17:56:44 · 419 阅读 · 0 评论 -
分治算法详解
分治算法介绍分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。基本原理当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再原创 2021-06-11 23:07:23 · 6565 阅读 · 5 评论 -
KMP算法
文章目录什么是KMP?KMP算法原理KMP算法的next数组KMP的Java代码实现KMP的时间复杂度什么是KMP?KMP全称为Knuth Morris Pratt算法,这个算法由 Donald Knuth、Vaughan Pratt、James H. Morris 三人于 1977 年联合发表,故取这 3 人的姓氏命名此算法。KMP是一种高效的字符串匹配算法,用来在主字符串中查找模式字符串的位置(比如在**"hello,world"主串中查找"world"模式串**的位置)。KMP算法原理我们先拿原创 2021-06-11 14:16:07 · 287 阅读 · 4 评论 -
手写HashMap
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap类与Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。原创 2019-11-19 12:31:56 · 150 阅读 · 1 评论 -
常用的加密算法
文章目录加密算法分类加密算法的应用对称加密算法实现DES介绍Java代码实现:IDEA介绍Java代码实现不可逆加密算法MD5介绍Java代码实现SHA1介绍Java代码实现HMAC介绍Java代码实现非对称加密RSA介绍Java代码实现ECC介绍Java代码实现加密算法分类加密算法通常分为三类:对称加密指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密效率高且易于实现。不可逆加密不可逆加密算法的特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有同样输入的输入数据原创 2021-06-09 22:07:57 · 1320 阅读 · 7 评论 -
数据结构之树的详细介绍
树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。它是由 n(n >= 0)个有限节点通过连接它们的边组成一个具有层次关系的集合。n = 0 时称为空树。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。当n>1时,其余节点可以分为m(m>0)个互不相交的有限集合,其中每一个集合本身又是一棵树,称为结点的子树。原创 2019-11-20 13:03:07 · 549 阅读 · 1 评论 -
红黑树详解
红黑树是一种结点带有颜色属性的二叉查找树,但它除了满足二叉查找树的特点外,还有以下要求:1. 节点是红色或黑色。2. 根是黑色。3. 所有叶子都是黑色(叶子是NIL节点)。4. 红色节点的子节点必为黑色。(从根到每个叶子的任意路径上不能有两个连续的红色节点。)5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。原创 2019-11-20 13:05:58 · 1301 阅读 · 1 评论 -
时间复杂度
什么是时间复杂度 算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,原创 2021-05-03 23:54:38 · 244 阅读 · 0 评论 -
数据结构与算法
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[...原创 2019-11-19 17:13:42 · 233 阅读 · 1 评论 -
不使用算术运算符如何实现加减乘除
记得有次面试,面试官问了我这样一个问题:不使用加法运算符,如何实现加法运算?当时看到这个问题直接把我愣住了,因为工作多年确实没想过这个问题,当时的感觉就好像我一个多年驾龄的老司机突然被交警逮到考我这台车的发动机原理是什么。你说动不动发动机原理跟我开车有关系吗?好像也有关系,但是影响我开车吗?好像也没什么影响,除非那天汽车半路抛锚了估计还是能抢救一下吧。既然问到了这个问题,自然还是要回答一下的,我当时能想到答案就是通过位运算符去对两个数的二进制从低到高进行比较。主要分为以下几种情况:同位异号:存在进原创 2021-05-17 22:46:03 · 1052 阅读 · 1 评论 -
撸完十大经典排序算法也枉然,一行代码搞定面试
目录选择排序插入排序冒泡排序非优化版本优化版本希尔排序归并排序递归式归并排序非递归式归并排序快速排序堆排序基数排序非优化版本优化版本桶排序基数排序选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据原创 2021-05-09 23:01:47 · 830 阅读 · 3 评论 -
一致性哈希算法
场景如下:有三台缓存服务器分别为A、B、C,编号依次为1、2、3,现在有N张名称不重复的图片平均分配到每台服务器上进行缓存,如何设计一套算法,使得每次图片请求都能命中该图片所在的缓存服务器呢?传统的做法是,得到每张图片的名字的哈希值,然后对服务器数量进行取模,得到的值就是对应的服务器编号。如:现在有一张图片为a.jpg,通过hash(a.jpg)得到一个哈希值9,因为我们有三台服务器,就用9对3进行取模运算得到0,那么就将a.jpg缓存到A这台服务器上,每次请求a.jpg的时候就通过同样的算法知道该原创 2021-05-08 00:02:19 · 618 阅读 · 0 评论 -
负载均衡算法
1、轮询法将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。 private static Integer pos = 0; public String getHostByPoll(){ List<String> hosts = Host.getHostList(); String host; synchronized (pos){ if(原创 2021-05-06 22:10:47 · 1697 阅读 · 1 评论