- 博客(25)
- 收藏
- 关注

原创 七大排序算法的基本原理和实现(超详细,逐步图解,超级易懂)
1. 元素集合越接近有序,直接插入算法的时间效率越高2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:稳定。
2025-01-03 22:02:59
1650
4
原创 Redis的持久化-AOF
auto-aof-rewrite-min-size:表示触发重写时AOF的最小文件大小,默认为64MB auto-aof-rewrite-percentage:代表当前AOF占用大小相比较上次重写时增加的比例。这是因为AOF文件中有一些内容是冗余的,Redis启动过程中读取AOF文件的内容,记录了中间的过程,实际上Redis在重新启动时只关注最终结果。2.RDB视为内存的快照,产生的内容更为紧凑,占用空间较小,回复速度更快。理论上最多丢失1秒的数据。
2025-03-14 12:19:30
983
原创 Redis的持久化-RDB
,硬盘中也存数据(持久化)。当要插入一个新的数据时,就需要把这个数据写入到内存和硬盘上,当查询某个数据的时候,直接从内存中读取,硬盘中的数据知识在Redis重启的时候,用来恢复内存中的数据,但代价是消耗更多的空间,毕竟一份数据存两遍。一提到持久化,我们就会第一时间联想到MySQL的事务,MySQL的事务有4个比较核心的特征:原子性(把多个操作打包成一个整体),一致性(事务执行之前和之后,数据都不能离谱),持久性(事务中做出的修改都会保存在硬盘上),隔离性(事务并发执行,涉及一系列的问题)
2025-03-11 15:26:13
1050
3
原创 Redis客户端
前面学习的Redis的基本操作和命令都是在redis命令行手动执行的,更多的时候,是使用redis的API来实现定制化的redis客户端操作redis服务器。接下来我们要了解Redis服务端和客户端的通信协议,以及Java语言的Redis客户端使用方法Redis服务器在官网上公开了使用的协议RESP,任何一个第三方都可以通过上述协议,来实现一个和redis服务器通信的客户端程序Java生态中,封装了RESP协议,实现的redis客户端有很多的,接下来我们使用的时Jedis。
2025-03-09 15:16:59
1146
1
原创 Redis数据结构,渐进式遍历,数据库管理
前面我们主要讲述了Redis中比较常用的集中数据结构String,List,Hash,Set,Zset,但这并不代表Redis只用这几种数据结构还有如Streams,Geospatial,Hyperloglog,Bitfields,Bitmap这样的数据结构,接下来我们对这些数据结构进行一下简单的介绍。Redis提供了几个面向数据库的操作,分别是dbsize(获取到当前数据库中key的个数),select,flushdb(删除当前数据库中的key),flushall(删除所有数据库中的key)命令。
2025-03-06 23:00:54
947
3
原创 Redis数据结构-Zset有序集合
有序集合保留了集合不能有重复成员的特点,但与集合不同的是,有序集合中的每个元素都有一个唯一的浮点类型的分数与之关联,这使得有序元素中的元素是可以维护有序行的,但这个有序不是用下表作为排序依据而是用这个分数(进行排序时,就是按照分数大小来进行按照升/降序排序)时间复杂度:O(N*K)+O(M*logM),N是输入的有序集合中,最小的有序集合的元素个数,K是输入了几个有序集合,M是最终结果的有序集合的元素个数。返回分数在min和max之间的元素,默认情况下,min和max都是包含的,可以通过(排除。
2025-03-05 13:38:29
877
2
原创 Redis数据结构-Set集合
每个用户,访问服务器,都会产生一个UV,但是同一个用户多次访问,不会使UV增加,UV需要按照用户进行去重,而使用Set统计UV,达到了去重的目的。集合类型也是保存多个字符串类型的元素的,但和列表不同的时,集合中元素之间是无序的,而且元素是不允许重复的,一个集合中最多可以存储2^32-1个元素。intset(整数集合):当集合中的元素都是整数并且元素个数小于set-max-intset-entries配置(默认512个)时,Redis会选择intset来作为集合的内部实现,从而减少内存使用。
2025-03-02 20:38:13
807
原创 Redis数据结构-List列表
列表类型适用于存储多个有序的字符串(这里的有序指的是强调数据排列顺序的重要,不是升序降序的意思),列表中的每个字符串称为元素(element),一个列表最多可以存储2^32-1个元素。
2025-03-02 15:44:06
1190
5
原创 Redis数据结构-Hash哈希
ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认为512个),同时所有值小于hash-max-ziplist-value配置(默认为64个字节)时,Redis会使用ziplist作为哈希的内部实现,ziplist使用更紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀,但是读写元素比较慢。几乎所有的主流编程语言都提供了哈希(Hash)类型,它们的叫法可能是哈希,字典,关联数组,映射。优点:简单,直观,灵活。
2025-03-01 18:41:13
954
1
原创 Redis数据结构-String字符串
一个分布式Web服务将用户的Session信息保存在各自的服务器中,但这样会造成一个问题:处于负载均衡的考虑,分布式服务会将用户的访问请求均衡到不同的服务器上,并且通常无法保证用户每次请求都会被均衡到同一台服务器上,这样当用户刷新一次访问是可能会发现需要重新登陆的,这个问题对于用户来说是非常不适的。如果对应的值是负数,则视为减去对应的值。实际的开发一个成熟,稳定的真实技术系统,要面临的挑战远不止如此简单:防作弊,按照不同的维度技术,避免单点问题(单个redis挂了,数据丢失),数据持久化到底层数据源等。
2025-02-21 19:10:09
880
原创 Redis的预备知识
这些Socket并不是无时无刻都在传输数据,很多情况下,每个客户端服务器之间的通信没有那么频繁,此时很多Socket都是静默状态的,上面没有要传输的数据,只有少数Socket活跃,于是采用一个线程来管理。虽然单线程给Redis带来了很多好处,但是也有一个致命的问题:对于单个命令的执行时间都是有要求的,如果某个命令执行时间过长,会导致其他命令全部处于阻塞队列中,迟迟得不到响应,造成客户端的阻塞,对于Redis、这种高性能的服务是非常严重的,所以Redis是面向快速执行场景的数据库。
2025-02-20 11:02:59
1169
原创 初识Redis
Redis是一种基于键值对(key-value)的NoSQL数据库。与很多键值对数据库不同的是,Redis中的value可以由String(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)等多种数据类型组成,同时同一种的数据类型可能有不同种编码形式,因此Redis可以满足很多的应用场景。虽然Redis可以作为数据库,但是Redis相比于MySQL来说,Redis存储的能力很小。Redis主要作为缓存而被程序员广泛使用和称赞。
2025-02-19 22:02:24
970
2
原创 数据结构-堆和PriorityQueue
通过之前的介绍,队列是一种先进先出(FIFO)的数据结构,但是优先情况下,操作的数据可能带有优先级,并不希望按照队列原始的顺序进行出栈,可能优先级高的元素想先出队列在生活中有一个很常见的例子:当你在用听歌的时候,突然接到电话,音乐会自动停止,而执行通话的操作优先级队列(PriorityQueue)是一种特殊的队列,其中的每个元素都有一个优先级,队列会根据优先级来决定元素的出队顺序,优先级高的元素先出队,优先级低的元素后出队,如果两个元素的优先级相同,则按照它们入队列的顺序出队。
2025-02-05 13:05:08
1287
1
原创 数据结构-二叉树
二叉树是一种特殊的树,其中每个节点最多有2个子节点,这两个子节点通常称为左子节点和右子节点,二叉树是节点的一个有限的集合。
2025-02-03 20:38:37
1504
1
原创 数据结构-队列
只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表称为队列,队列遵循先进先出FIFO(First In First Out)的原则。入队列:进行插入操作时的一段称为队尾出队列:进行删除操作时的一段称为队头在Java中队列时一种重要的数据结构,队列在多线程,任务调度,消息传递等场景中有着广泛的应用。Queue是Java中一个非常重要的接口,用于实现队列数据结构。Queue接口本身并不制定底层实现的具体方式,而是由具体的实现类来决定的。
2025-02-01 21:44:43
1659
2
原创 数据结构-Stack和栈
栈是一种特殊的线性表,只允许在固定的一段进行插入和删除操作,进行插入和删除操作的一段称为栈顶,另一端称为栈底。栈中的数据元素遵顼后进先出LIFO(Last In First Out)的原则,就像一叠盘子,只能在顶部添加或移除盘子。压栈:栈的插入操作叫做压栈/进栈/入栈,新插入的元素在栈顶。出战:栈的删除操作叫做出栈,要删除的 元素在栈顶。从图上观察发现:无论是插入还是删除操作,栈底的位置不发生变化,但是栈顶的位置会随插入或删除操作而发生变化。
2025-01-31 19:13:07
1541
1
原创 数据结构-LinkedList和链表
LinkedList是Java集合框架中的链表,LinkedList是基于双向链表实现的,由于链表中没有将元素存储在连续的空间内,元素存储在单独的节点中,然后通过引用将节点连接起来,因此在任意位置插入或者删除元素,不需要搬移元素,效率比较高。LinkedList中的节点结构:说明:1.LinkedList实现了List接口2.LinkedList的底层使用了双向链表3.LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问。
2025-01-20 19:28:02
1807
1
原创 数据结构-ArrayList和顺序表
顺序表是一段连续的存储单元来依次存储线性表中的数据元素。一般情况下采用数组存储。在集合框架中,ArrayList是Java标准库中的一个非常常用的类,它实现了List接口,提供了动态数组的功能。ArrayList内部使用数组来存储元素,因此它具备顺序表的所有特点,是顺序表的一种实现。说明:1.ArrayList是以泛型的方式实现的,使用时必须要先实例化2.ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问。
2025-01-18 14:42:33
1818
6
原创 初识JAVA-面向对象的三大特征之多态
多态,简单来说就是多种形态,复杂点说就是不同对象去完成某个行为时产生不同的状态。总的来说:同一件事情,发生在不同对象上,就会产生不同的结果。
2025-01-14 21:00:26
1759
1
原创 初识JAVA-面向对象的三大特征之继承
继承专门用来进行共性的提取,实现代码的复用。继承是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样的类是派生类(子类)。
2025-01-07 09:38:28
1360
7
原创 初识JAVA-面向对象的三大特征之封装
面向对象是一种解决问题的思想,它把计算机程序看作是各种对象组合起来的。每个对象都有自己的数据(属性)和行为(方法),主要依靠对象之间的交互来解决和实现问题。Java是一门纯面向对象的语言(Object Oriented Program,简称OOP)。封装是将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现的细节,仅对外公开接口来和对象进行交互,从而实现功能。为了更好的管理类,把多个类收集在一起成为一组,称为软件包。在Java中包是对类,接口等的封装机制的体现,是一种对类和接口等的很好的组织方法。
2024-12-16 16:43:16
7027
6
原创 初识JAVA-分支结构和循环结构
这就是所谓的“穿透”效果,即表达式中的值和case依次进行匹配,如果有响应则执行语句,直至遇到break为止,上述代码中无break,所以从case 1的情况开始响应,并依次执行case 1下面的语句,到switch语句结束。比如:考试成绩大于等于80分,小于等于100分为优秀,大于等于70分,小于80分为良好,大于等于60分,小于70分为及格,小于60分为挂科。如果布尔表达式1成立,则执行语句1,如果布尔表达式2成立,则执行语句2,若布尔表达式1和布尔表达式2都不成立,则执行语句3。
2024-12-15 11:11:39
1153
2
原创 初识JAVA-JDK,JRE,JVM
JVM(Java Virtual Machine):java虚拟机,JVM是Java程序运行的基础,它是一个虚拟的计算机,可以运行Java字节码文件(.class文件)。JDK(Java Development Kit):Java语言开发工具包,JDK包含了JRE,JVM,开发工具集例如编辑器javac,图形化监控工具jconsole,打包工具jar,堆栈跟踪工具jstack,文档生成器javadoc等。总的来说,JDK是整个Java开发的核心。JRE是运行Java程序所需的最小环境。
2024-12-12 22:43:27
425
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人