- 博客(62)
- 收藏
- 关注
原创 网络原理--HTTP&HTTPS
HTTP(全称“超文本传输协议”)是一种应用非常广泛的。我们平时打开一个网站,就是通过HTTP协议来传输数据的。
2025-07-29 20:01:11
952
原创 MySQL--InnoDB存储引擎--页结构
前面介绍了每个数据页默认大小为,是操作系统的整数倍,那么只要保证页的大小是操作系统“数据块”大小的整数倍,我们也可以修改数据页的大小。MySQL提供了一个专门的系统变量来控制页的大小,可以通过系统变量进行调整与查看,在调整页大小时需要保证设置的值是操作系统大小的整数倍,从而保证通过操作系统和磁盘交互时的完整性,不被分割和浪费,所以规定了的可以设置的值,分别为4096、8192、16384、32768、65536,对应 4KB 、8KB、16KB、32KB、64KB。
2025-07-05 17:12:42
811
原创 MySQL--InnoDB存储引擎--MySQL存储结构
表空间文件是用来存储表中数据的文件,表空间文件的大小由存储的数据多少决定,不同的表空间文件存储数据的种类也有所不同,在MySQL中表空间共分为五类,包括,这些在InnoDB架构上都有体现。
2025-06-16 20:30:29
970
原创 Redis应用--分布式锁
在一个分布式系统中,也会涉及到多个节点访问同一个公共资源的情况,此时就需要通过锁来做互斥控制,避免出现类似于"线程安全"的问题。而 java 的 synchronized 或者 C++ 的 std::mutex, 这样的锁都是只能在当前进程中生效, 在分布式的这种多个进程多个主机的场景下就无能为力了.这时候就需要用到分布式锁了。利用Redis来做分布式锁本质上就是使用了一个公共的服务器来记录加锁状态,这个公共的服务可以是Redis也可以是其它的组件。
2025-05-22 10:53:36
771
原创 Redis应用--缓存
访问的 key 在 Redis 和数据库中都不存在. 此时这样的 key 不会被放到缓存上, 后续如果仍然在访问该key, 依然会访问到数据库.这就会导致数据库承担的请求太多, 压力很大.这种情况称为。
2025-05-21 12:09:07
1288
原创 Redis--Zset有序集合
有序集合相对于字符串、列表、哈希、集合来说会有⼀些陌生。它保留了集合不能有重复成员的特点,但与集合不同的是,有序集合中的每个元素都有⼀个唯⼀的浮点类型的分数(score)与之关联,着使得有序集合中的元素是可以维护有序性的,但这个有序不是用下标作为排序依据而是用这个分数。有序集合提供了获取指定分数和元素范围查找、计算成员排名等功能,合理地利用有序集合,可以帮助我们在实际开发中解决很多问题。有序集合中的元素是不能重复的,但分数允许重复。类比于⼀次考试之后,每个人⼀定有⼀个唯⼀的分数,但分数允许相同。
2025-05-15 20:58:12
987
原创 Redis--Set集合
集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中 1)元素之间是⽆序的 2)元素不允许重复。⼀个集合中最多可以存储 个元素。Redis 除了支持集合内的增删查改操作,同时还⽀持多个集合取交集、并集、差集,合理地使用好集合类型,能在实际开发中解决很多问题。二、普通命令。
2025-05-12 09:34:55
861
原创 Redis--常见数据类型List列表
列表类型是用来存储多个有序的字符串,列表中的每个字符串称为元素(element),⼀个列表最多可以存储 个元素。在 Redis 中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是⼀种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景。列表类型的特点:第⼀、列表中的元素是有序的,这意味着可以通过索引下标获取某个元素或者某个范围的元素列表。第⼆、区分获取和删除的区别。第三、列表中的元素是允许重复的。二、命令。
2025-05-11 10:58:06
1135
原创 Redis--哈希类型
一、Hash 哈希几乎所有的主流编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中,哈希类型是指值本身又是⼀个键值对结构,形如 key = "key",value = { {哈希类型中的映射关系通常称为 field-value,⽤于区分 Redis 整体的键值对(key-value),注意这里的 value 是指 field 对应的值,不是键(key)对应的值,请注意 value 在不同上下文的作用。1.2 常用命令1.2.1 HSET。
2025-05-07 22:45:04
887
原创 网络原理--TCP/IP协议
我们之前编写完了基本的,要知道,我们之前所写的所有代码都在应用层,都是为了完成某项业务,如翻译等。二、传输层负责数据能够从发送端传输接收端2.1 端口号端口号(Port)标识了⼀个主机上进行通信的不同的应用程序;在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样⼀个五元组来标识⼀个通信(可以通过netstat -n查看);2.1.1 端口号范围划分。
2025-04-26 17:17:54
852
原创 Linux--基础常用命令
语法: ls [选项] [目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件⼀样显示,而不是显示其下的文件。如:ls ‒d 指定⽬录-k 以 k 字节的形式表示文件的大小。ls ‒alk 指定文件-l 列出文件的详细信息。-r 对目录反向排序。-t 以时间排序。-R 列出所有子目录下的文件。(递归)ls -l。
2025-04-25 21:17:43
578
原创 Redis--预备知识以及String类型
一、预备知识Redis 提供了 5 种数据结构,理解每种数据结构的特点对于 Redis 开发运维非常重要,同时掌握每种数据结构的常见命令,会在使用 Redis 的时候做到游刃有余。
2025-04-24 20:57:23
760
原创 Redis--主从复制
在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满足故障恢复和负载均衡等需求。Redis 也是如此,它为我们提供了复制的功能,实现了相同数据的多个 Redis 副本。复制功能是高可用 Redis 的基础,哨兵和集群都是在复制的基础上构建的。
2025-04-19 21:15:13
1202
原创 Redis--事务
Redis 的事务和 MySQL 的事务概念上是类似的. 都是把一系列操作绑定成⼀组. 让这⼀组能够批量执行.但是注意体会 Redis 的事务和 MySQL 事务的区别:1.弱化的原子性:Redis没有“回滚机制”,只能做到这些操作“批量进行”。不能做到“一个失败就回到最初状态”。2.不保证一致性:不涉及“约束”。也没有回滚。MySQL的一致性体现的是运行事务前与运行事务后,结果都是合理有效的,不会出现中间非法状态。3.不需要隔离性:也没有隔离级别,因为不会并发处理事务(Redis单线程处理请求)
2025-04-17 20:34:01
1238
原创 Redis--持久化
Redis支持RDB和AOF两种持久化机制持久化功能有效地避免因进程退出造成数据丢失问题, 当下次重启时利用之前持久化的文件即可实现数据恢复。二、RDBRDB 持久化是把当前进程数据⽣成快照保存到硬盘的过程,触发 RDB 持久化过程分为手动触发和自动触发。2.1触发机制手动触发分别对应和命令:1.save命令:阻塞当前Redis服务器,知道RDB过程完成为止,对于内存比较大的实例造成长时间阻塞,基本不采用。
2025-04-15 22:44:07
1202
原创 RabbitMQ--应用问题
幂等性是数学和计算机科学中某些运算的性质,它们可以被多次应用,而不会改变初始应用的结果。在应用程序中, 幂等性就是指对⼀个系统进行重复调用(相同参数), 不论请求多少次, 这些请求对系统的影响都是相同的效果.比如数据库的select操作. 不同时间两次查询的结果可能不同, 但是这个操作是符合幂等性的. 幂等性指的是对资源的影响, 而不是返回结果. 查询操作对数据资源本⾝不会产⽣影响, 之所以结果不同, 可能是因为两次查询之间有其他操作对资源进行了修改.比如i++
2025-04-13 21:06:51
908
原创 RabbitMQ--延迟队列&事务&消息分发
延迟队列(Delayed Queue),即消息被发送以后, 并不想让消费者立刻拿到消息, 而是等待特定时间后, 消费者才能拿到这个消息进行消费1.1应用场景延迟队列的应用场景有很多,比如:智能家居: 用户希望通过手机远程遥控家⾥的智能设备在指定的时间进行⼯作. 这时候就可以将用户指令发送到延迟队列, 当指令设定的时间到了再将指令推送到智能设备.日常管理: 预定会议后,需要在会议开始前⼗五分钟提醒参会人参加会议用户注册成功后, 7天后发送短信, 提高用户活跃度等......
2025-03-30 18:27:39
1281
原创 RabbitMQ高级特性--TTL和死信队列
TTL(Time to Live, 过期时间), 即过期时间. RabbitMQ可以对消息和队列设置TTL.当消息到达存活时间之后, 还没有被消费,就会被自动清除。1.1设置消息的TTL目前有两种方法可以设置消息的TTL一是设置队列的TTL,队列中所有消息都有相同的过期时间,二是对消息本身进行单独设置,每条消息的TTL可以不同,如果两种方法一起使用,则消息的TTL以两者之间较小的那个数值决定。先看针对每条消息设置TTL。
2025-03-30 17:16:13
1147
原创 RabbitMQ高级特性--重试特性
在消息传递过程中, 可能会遇到各种问题, 如网络故障, 服务不可用, 资源不足等, 这些问题可能导致消息处理失败. 为了解决这些问题, RabbitMQ 提供了重试机制, 允许消息在处理失败后重新发送.但如果是程序逻辑引起的错误, 那么多次重试也是没有用的, 可以设置重试次数。
2025-03-29 21:13:26
944
原创 RabbitMQ高级特性--发送方确认
1. confirm确认模式在使用RabbitMQ的时候, 可以通过消息持久化来解决因为服务器的异常崩溃而导致的消息丢失, 但是还有⼀个问题, 当消息的生产者将消息发送出去之后, 消息到底有没有正确地到达服务器呢?如果在消息到达服务器之前已经丢失(比如RabbitMQ重启, 那么RabbitMQ重启期间生产者消息投递失败), 持久化操作也解决不了这个问题,因为消息根本没有到达服务器,何谈持久化?RabbitMQ为我们提供了两种解决方案:1. 通过事务机制实现2. 通过发送方确认机制实现。
2025-03-29 20:48:31
847
原创 RabbitMQ高级特性--持久性
一、交换机持久化我们在前面讲了消费端处理消息时, 消息如何不丢失, 但是如何保证当RabbitMQ服务停掉以后, 生产者发送的消息不丢失呢. 默认情况下, RabbitMQ退出或者由于某种原因崩溃时, 会忽视队列和消息, 除非告知他不要这么做.RabbitMQ的持久化分为三个部分:交换器的持久化、队列的持久化和消息的持久化一、交换机持久化。
2025-03-10 20:57:59
394
原创 JVM内存区域划分以及GC原理
JVM 是 Java Virtual Machine 的简称,意为 Java虚拟机。虚拟机是指通过软件模拟的具有完整硬件功能的、运⾏在⼀个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVM、VMwave、Virtual Box。JVM 和其他两个虚拟机的区别:1.VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;2.JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进行了裁剪。
2025-03-10 16:09:16
1204
原创 RabbitMQ高级特性--消息确认机制
生产者发送消息之后,到达消费端之后,可能会有以下情况:1. 消息处理成功;2. 消息处理异常。RabbitMQ向消费者发送消息后,就会把这条消息删除掉,那么第二种情况就会造成消息丢失。那么如何确保消息端已经被成功接收了并且被正确处理了呢?为了确保消息从队列可靠的到达消费者,RabbitMQ提供了消息确认机制(Messageacknowledment)。
2025-03-09 22:13:26
1064
原创 基于Spring3的抽奖系统
1. 策略模式(Strategy Pattern):定义 AbstractActivityOperator 策列类,和其策略实现类PrizeOperator、ActivityOperator 和 UserOperator。每个具体的操作类都实现了AbstractActivityOperator 定义的接⼝,代表了不同的状态转换策略。
2025-03-09 19:29:30
1169
原创 高阶数据结构--B树&&B+树实现原理&&B树模拟实现--Java
1. 如果树为空,直接插入新节点中,该节点为树的根节点2. 树非空,找待插入元素在树中的插入位置(注意:找到的插入节点位置一定在叶子节点中)3. 检测是否找到插入位置(假设树中的key唯一,即该元素已经存在时则不插入)4. 按照插入排序的思想将该元素插入到找到的节点中5. 检测该节点是否满足B-树的性质:即该节点中的元素个数是否等于M,如果小于则满足6. 如果插入后节点不满足B树的性质,需要对该节点进行分裂:(1申请新节点(2找到该节点的中间位置。
2024-12-08 14:28:24
1283
原创 高阶数据结构--并查集--Java
比如:某公司今年校招全国总共招生10人,西安招4人,成都招3人,武汉招3人,10个人来自不同的学校, 起先互不相识,每个学生都是一个独立的小团体,现给这些学生进行编号:{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};给以下 数组用来存储该小集体,数组中的数字代表:该小集体中具有成员的个数。负号下文解释毕业后,学生们要去公司上班,每个地方的学生自发组织成小分队一起上路,于是: 西安学生小分队s1={0,6,7,8},成都学生小分队s2={1,4,9}
2024-12-05 19:31:57
774
1
原创 高阶数据结构--位图和布隆过滤器--Java
特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”,它是用多个哈希函 数,将一个数据映射到位图结构中。此种方式不仅可以提升查询效率,也可以节省大量的内存空间。隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的 一种。紧凑型的、比较巧妙的概率型数据结构。七、布隆过滤器模拟实现。十、布隆过滤器应用场景。
2024-11-27 17:19:28
769
原创 文件IO--文件操作和IO--JAVA
针对硬盘这种持久化存储的I/O设备,当我们想要进⾏数据保存时, 往往不是保存成⼀个整体,⽽是独⽴成⼀个个的单位进⾏保存,这个独⽴的单位就被抽象成⽂件的概 念,就类似办公桌上的⼀份份真实的⽂件⼀般。除了可以从根开始进⾏路径的描述,我们可以从任意结点出发,进⾏路径的描述,⽽这种描述⽅式就 被称为相对路径,相对于当前所在结点的⼀条路径。文件除了有数据内容以外,还有一部分信息,例如文件名,文件类型,文件大小,这些信息并不作为文件的数据存在,我们将其称为文件的元信息。类来对⼀个⽂件(包括⽬录)进⾏抽象的描述。
2024-11-23 16:22:35
582
原创 多线程--CAS--JAVA
假设存在两个线程 t1 和 t2. 有⼀个共享变量 num, 初始值为 A.接下来, 线程 t1 想使⽤ CAS 把 num 值改成 Z, 那么就需要先读取 num 的值, 记录到 oldNum 变量中.使⽤ CAS 判定当前 num 的值是否为 A, 如果为 A, 就修改成 Z.
2024-11-21 16:15:08
622
原创 多线程--常见锁策略--Java
Java⾥只要以Reentrant开头命名的锁都是可重⼊锁,⽽且JDK提供的所有现成的Lock实现类,包括 synchronized关键字锁都是可重⼊的。但是直接来找两次⽼师之后, 发现⽼师都挺忙的, 于是下次再来问问题, 就先发个消息问问⽼师忙不忙,其中, 读加锁和读加锁之间, 不互斥. 写加锁和写加锁之间, 互斥. 读加锁和写加锁之间, 互斥.synchronized 开始是⼀个轻量级锁. 如果锁冲突⽐较严重, 就会变成重量级锁。⼊锁(因为这个原因可重⼊锁也叫做递归锁)。二、重量级锁VS轻量级锁。
2024-11-19 19:43:32
1106
原创 TCP/IP--Socket套接字--JAVA
简单来说,我们知道计算机中的“文件”通常是一个广义的概念。文件还能代指一些硬件设备。那么我们就可以将网卡抽象成Socket文件,操作网卡的时候就和操作普通文件差不多分为三步,打开-->读写-->关闭。由于操作网卡,直接操作是不好操作的,所以我们将操作网卡转换成操作socket文件,socket文件就相当于“网卡的遥控器”。
2024-11-15 15:45:49
1386
原创 网络初识--Java
IP地址主要⽤于标识⽹络主机、其他⽹络设备(如路由器)的⽹络地址。简单说,IP地址⽤于定位主 机的⽹络地址。就像我们发送快递⼀样,需要知道对⽅的收货地址,快递员才能将包裹送到⽬的地。综上所述 IP地址是标识网络一台设备所在的位置。有些资料把物理层和数据链路层看作一个整体。分用,数据到达接收方主机,逐层进行解析。三、网络数据通信的基本流程。
2024-11-14 17:29:35
1078
原创 MySql--多表查询及聚合函数总结
1.COUNT(列||*):统计结果的个数。 2.SUM(列):求和。 3.AVG(列):求平均值。 4.MIN(列) 最小值。 5.MAX(列) :最大值。 对某一个字段进行分组操作,分组后可以结合聚合函数进行一些运算。 对GROUP BY的结果进行过滤 select * from table1,table2 where table1.xxx=table2.xxx; select * from table1 join table2 on table1.xxx=table2.xxx; s
2024-11-12 14:37:42
1345
1
原创 MySql--增删改查表设计总结
select * from 表名 order by 列名 asc||desc limit num offset start;列名[,列名]... from 表名 where 列名 between 开始条件 and 结束条件;select 列名[,列名]... from 表名 order by 列名 asc||desc;insert into 表名 [(列名[,列名]...)] values (值[,值]...);select distinc 列名[,列名]... from 表名;
2024-11-12 14:08:46
812
原创 多线程--线程池概念以及使用--Java
第二个拒绝策略 CallerRunsPolicy,让调用submit的线程自行执行任务,这种做法不推荐使用,如果调用submit就阻塞(业务逻辑上的线程调用submit)就会使这个线程无法做别的事情,这不是一个好的选择。由于线程池的使用有些繁琐,所以Java标准库基于工厂设计模式针对ThreadPoolExecutor进一步进行了封装,简化了线程池的使用。第四个拒绝策略 DiscardPolicy,是丢弃最新的任务(当前submit的任务)。三、Java标准库中线程池的简化使用。
2024-10-30 18:29:26
757
原创 LeetCode--买卖股票的最佳时机Ⅲ--动态规划
值得注意的是我们的纵坐标是从0开始的所以填表过程中可能越界,需要添加判断语句来防止越界。由于题目中所说最多交易两次,所以我们获得最大利润交易了0,1,2次都有可能,所以最后的返回值是g[n-1]这一行的最大值。
2024-10-28 18:46:17
389
原创 LeetCode--图像渲染--floodfill算法
floodfill算法就是再矩阵中找到性质相同的连通块,可以使用dfs(深度优先遍历)来解决或者是bfs(宽度优先遍历),本文采用dfs来解决。
2024-10-27 20:11:55
335
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人