- 博客(95)
- 问答 (1)
- 收藏
- 关注
原创 MySQL-三大范式
在⼀个表中出现了两个强相关的关系,⽽且这两个强相关关系⼜存在传递现象,即通过学⽣Id可以找到学⽣记录,学⽣记录中包含学院名,每个学院⼜有⾃⼰的电话和地址。如果要调整MySQL的学分,那么就需要更新表中所有关于MySQL的记录,⼀旦执⾏中断导致某些记录更新成功,某些数据更新失败,就会造成表中同⼀⻔课程出现不同学分的情况,出现数据不⼀致问题。候选键:可以唯⼀标识⼀⾏数据的列或列的组合,可以从候选键中选⼀个或多个当做表的主键.(简单来说候选键就是可以唯一标识一行的字段,主键就属于候选键)数据库的范式是⼀组规则。
2025-09-24 19:55:40
916
原创 Redis高频面试题
⼀个分布式 Web 服务将⽤⼾的 Session 信息(例如⽤⼾登录信息)保存在各⾃的服务器中,但这样会造成⼀个问题:出于负载均衡的考虑,分布式服务会将⽤⼾的访问请求均衡到不同的服务器上,并且通常⽆法保证⽤⼾每次请求都会被均衡到同⼀台服务器上,这样当⽤⼾刷新⼀次访问是可能会发现需要重新登录,这个问题是⽤⼾⽆法容忍的.1)Redis 中所有的键的类型都是字符串类型,⽽且其他⼏种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他 4 种数据结构的学习奠定基础。
2025-09-15 20:45:48
807
原创 javaEE-Spring IOC&DI
Spring是一个开源框架,他让我们的开发更加简单. 他⽀持⼴泛的应⽤场景, 有着活跃⽽庞⼤的社区,是包含了众多工具方法的IoC容器。IoC: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器.IoC 是Spring的核⼼思想,在类上⾯添加 @RestController 和 @Controller 注解, 就是把这个对象交给Spring管理, Spring 框架启动时就会加载该类.把对象交给Spring管理, 就是IoC思想.
2025-09-10 21:11:18
707
原创 RabbitMinQ项目问题
创建一个线程,让其不停地扫描该阻塞队列,一旦获取到队列了,就推送给消费者消费(将有新消息的队列存入到阻塞队列中,让消费者的线程池去不停地扫描该队列,并消费消息)。7.通过创建连接Connection,通过连接声明信道,一个连接上可以声明多条信道,通过hash表来管理连接上的多条信道,通过连接类来实现发送请求,创建新的线程来接收响应和处理响应的功能。basicPublish():发送消息:是将消息发送到指定的交换机,再根据交换机和队列的绑定关系和消息的匹配,将消息分发到指定的队列中。
2025-09-08 10:20:26
166
原创 RabbitMinQ(模拟实现消息队列项目)02
将内存和磁盘上的数据进行整合,用"虚拟机"这个概念将其整合起来. 不同虚拟机中的交换机 队列,绑定关系,消息都是不互通的. 此处为了简化,仅实现单台虚拟主机,但在数据结构上设置不同虚拟主句名。上面的代码中,使用数据库存储了Exchange,Queue,Binding,使用文件存储了Message,将数据存储到数据库和文件,是为了实现其持久性,但数据还是要存储在内存上的,这样才能更快的访问到数据.• 0xc 服务器给客⼾端推送的消息. (被订阅的消息) 响应独有的。• 0x3 创建 exchange。
2025-09-01 14:24:32
1090
原创 RabbitMinQ(模拟实现消息队列项目)
在实际的后端开发中,尤其是分布式系统⾥,跨主机之间使⽤⽣产者消费者模型,也是⾮常普遍的需求.因此,我们通常会把阻塞队列,封装成⼀个独⽴的服务器程序,并且赋予其更丰富的功能.这样的程序我们就称为。将消息存储到文件中是以二进制形式存储的,要先将消息进行序列化,然后再进行写入.读取消息数据的时候,也要将二进制文件进行反序列化,才能看懂文件内容.生产者发布消息,到达Broker,Broker将消息发送给订阅该消息的消费者.Broker是消息队列的核心,负责存储和转发消息.(交换机和队列存在多对多的绑定关系)
2025-08-31 00:38:04
735
原创 RabbitMQ-高级特性
2. 消费者收到消息后, 先用该 id 判断该消息是否已经消费过, 如果已经消费过, 则放弃 处理. 3. 如果未消费过, 消费者开始消费消息, 业务处理成功后, 把唯一ID 保存起来(数据库 或 Redis 等) 可以使用Redis 的原⼦性操作 setnx 来保证幂等性, 将唯一ID 作为 key 放到 redis 中 (SETNX messageID ) . 返回 1, 说明之前没有消费过, 正常消费. 返回 0, 说明这条消息 之前已消费过, 抛弃.
2025-08-28 11:37:25
845
原创 Git-远程操作
⼀台电脑上也是可以克隆多个版本库的,只要不在同⼀个⽬录下,但这样没有意义,实际情况往往是找⼀台电脑充当服务器的⻆⾊,每天24⼩时开机,其他每个⼈都从这个“服务器”仓库克隆⼀份到⾃⼰的电脑上,并且各⾃把各⾃的提交推送到服务器仓库⾥,也从服务器仓库中拉取别⼈的提交。刚开始,只有⼀台机器有⼀个原始版本库,此后,别的机器可以 “克隆” 这个原始版本库,也可以推送代码到Git仓库,⽽且每台机器的版本库其实都是⼀样的,并没有主次之分。当前学习阶段,可以先使用gitup管理平台,只要注册账号,就可以创建自己的远程仓库。
2025-08-27 23:52:47
1297
原创 优选算法-常见位运算总结
统计每个数的第i二进制位为1的个数,然后%3,当不为0时,说明该二进制位的1是要求的数的二进制位累计的,将结果的该为置1.以次计算32位.得到结果。x&(-x)得到的就是1和1左边的二进制数,而1又是最右侧的,就得到了最右侧的1。x-1:将x的最右侧的1(包含该位)的右侧的二进制都取反,1左侧保持不变。6.获取一个数x的二进制位的最右侧的1: 1100 -> 0100。7.删除一个数x的二进制位的最右侧的1:1100 -> 1000。-x:将x的最右侧的1的左侧的二进制都取反,1右侧保持不变;
2025-08-27 22:16:59
542
原创 Git:基本使用
1. index 就是我们的暂存区,add 后的内容都是添加到这⾥的。2. HEAD 就是我们的默认指向 master 分⽀的指针。3. objects 为 Git 的对象库,⾥⾯包含了创建的各种版本库对象及内容。当执⾏ git add 命令时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新对象中,就位于 ".git/objects" ⽬录下。
2025-08-26 18:24:45
712
原创 websocket协议
websocket是html5开始支持的一种网页端和服务端保持长连接的传统的web程序,都是"一问一答"的形式, 客户端给服务端发送了一个http请求,服务端给客户端返回一个http响应.
2025-07-27 17:29:26
676
原创 Redis-典型应用-分布式锁
在 分布式系统中,会出现多个节点同时访问同一个公共资源, 此时就需要通过锁来作互斥控制,避免出现类似于多线程中的"线程安全"问题.
2025-07-15 01:12:12
773
原创 Redis-典型应用-缓存cache
把一些常用的数据放到触手可得的地方,方便随时读取.缓存是计算机中的一个典型应用场景,很多场景中都会涉及.硬件的访问速度: cpu寄存器 > 内存 > 硬盘 > 网络.对硬件来说,内存相对于硬盘来说,就是触手可及的地方.内存就是硬盘的缓存;对内存来说,cpu寄存器就是触手可及的地方,cpu寄存器就是内存的缓存.内存虽然访问速度快,但是他的存储空间小,只能存放一些热点数据.由于: 20%的热点数据可以处理80%的应用场景 .因此,只需要将少量的热点数据寸放大缓存里,在整体上就能有明显的提升.
2025-07-15 01:11:35
651
原创 Redis-搭建集群环境
上篇谈到了集群环境的作用和实现方法,这篇来在linux上搭建集群环境,由于目前手上还是只有一台云服务器,因此还是基于docker来实现多态虚拟机的效果。
2025-07-15 01:10:32
1106
原创 Redis-集群Cluster
上篇文章谈到的哨兵机制,提高了系统的可用性,但是真正存储数据的还是master主节点和slave从节点,所有的数据都要存储在master和slave上.当数据量很大时,超出master/slave所在物理机的物理内存,就可能会出现很严重的问题了怎样获取更大的空间来存储数据呢?所谓"大数据"的核心是一台机器存储不下了,可以用多态机器共同来存储.
2025-07-10 15:08:19
541
原创 Redis-哨兵选取主节点流程
哨兵节点通过心跳包,判定redis服务器是否正常工作,若心跳包没有按时到达,说明redis服务器出现故障了.此时还需要再进行判定,不能排除是网络波动的影响,认为redis节点的出现故障.
2025-07-09 22:34:08
414
原创 Redis-哨兵机制&doctor环境搭建
接下来就需要将多个主从节点和哨兵节点部署到服务器上,目前手上只有一个服务器,只能在一台服务器上部署,但多个程序同时部署到一台机器上时,需要防止端口号冲突和相关配置文件的处理.处理这个过程会非常麻烦,并且在实际应用的过程中,哨兵节点和数据节点只有部署在不同的机器上,才会真正发挥作用.这里可以通过doctor虚拟机的方式解决这个问题.构造出来一些虚拟的电脑.虚拟机存在的一个问题,就是比较消耗配置资源,目前手上的云服务器甚至电脑模拟不了几台虚拟机.doctor就。
2025-07-09 22:16:27
1042
原创 Redis-哨兵机制Sentinel
redis的主从复制模式下,一旦主节点出现了故障无法提供服务了,需要人工进行主从切换,同时大量的客户端需要被通知切换到新的主节点上,对于有了一定规模的应用来说,这种方案的延迟是无法接受的,于是redis2.8提供了来解决这个问题.
2025-07-08 14:26:09
943
原创 Redis-主从复制-psync运行流程
不能, 因为主从同步,要求的不是尽量保持一致,而是要求100%的一致,此时可能主节点已经有新的数据操作,但还未被rdb持久化,若直接将已有的rdb文件传输过去,更不能保证主从节点数据的一致性了,因此主节点必须要重新生成rdb文件.使用rbd文件,而不是aof文件,是因为rdb文件是以二进制的形式存储的,aof是以文本格式存储的,主节点通过网络传输向从节点传输大量数据时,rdb文件节省空间.(由于目前得到的是所有的数据,数据存在一定的冗余,此操作会进行数据的整理,瘦身),得到最新的aof文件。
2025-07-07 23:26:54
937
原创 Redis-主从复制-分布式系统
在分布式系统中存在一个非常重要的问题:单点问题.若某个服务器只有一个节点(只使用一台物理服务器来部署服务器程序),就面临很多问题:1.可用性问题.若这个服务器挂了,服务也就中断了.2.并发问题,性能较低,支持的并发量非常有限.在分布式系统中,往往希望使用多个服务器来部署redis服务,从而构成一个redis集群,这就可以让这个redis集群给给整个分布式系统的其他服务提供更加高效可靠的服务了.
2025-07-06 18:50:20
985
原创 Redis-事务
mysql的事务具有四个特性:原子性,一致性,隔离性,持久性.上一篇文章讲了redis的持久化,也就是持久性.接下来谈谈其他几个特性.
2025-07-06 09:15:03
739
原创 Redis-持久化
当在两次“存档”之间,操作了大量的数据,但在第二次出发快照之前,由于异常情况,redis服务器异常退出,并未触发快照,那么这之间的数据就丢失了,再次重启服务器,就回到了上次“存档”的状态。再次查看redis进程,会发现进程还存在,是因为在windos系统中,当发现进程异常终止时,会立即重启一个新的新的进程,当再次查看进程时,还存在,但ip已经变了,就是重新启动了一个新的进程.后续redis一旦重启了,内存中的数据就会消失,就可以根据“快照”,将内存中的数据恢复。即重启进程或主机后,数据是否还存在。
2025-07-05 14:24:08
1092
原创 Redis-渐进式遍历
注:渐进式遍历scan虽然解决了阻塞的问题,到那时如果在遍历期间键有所变化(对其执行增删改操作),可能会导致遍历的时候键的重复或遗漏,使用的时候需要注意这一点。之前使用的keys查找key,一次获取到了所有的key,当key较多时,这个操作就有可能造成Redis服务器阻塞.特别是keys *操作.注: 这个返回的光标,仅能有Redis服务器知道这个光标对应的元素位置在哪里.不能理解成"下标",程序员或客户端是不认识的.type: 指定key对应的val的类型,默认是所有类型,不区分类型。
2025-07-01 22:39:26
221
原创 Redis-5种较冷门的数据类型
前面介绍过了5种redis常用的数据类型:String(z字符串),List(列表),Hash(哈希),Set(集合),Zset(有序集合).这5种数据类型在Redis种是非常常见的.Redis还有另外5种数据类型,他们的应用场景没那么广泛(主要应用于特定场景),浅浅了解一下吧.
2025-07-01 12:17:25
313
原创 Redis-String字符串
字符串类型,是redis最基础的数据类型。注意: redis中的所有键都是字符串类型,其他几种数据结构也是在字符串的基础上构建的。redis内部存储字符串是以二进制流的形式保存的,redis不处理字符集编码的问题。若想要以字符集编码存储,可以指定redis的编码方式,在进入redis客户端的时候,加上--raw这样的命令,就可以 以字符集编码的形式存储了。
2025-07-01 10:35:31
1040
原创 Redis-hash哈希
目录1.介绍:2.常见命令:hset:hget:hexists:hdel:hkeys:hvals:hgetall:hmget:hlen:hsetnx:hincrby:hincrbyfloat:3、内部编码:4.使用场景hash作为缓存和数据库区别:缓存方式对比:哈希类型是指值又是一个键值对的结构,形如:key=key,val={{filed1,val1},{filed2,val2}....}注意,这里的val指的是key-val中,val中的field-val中的val.eg:为h1添加3个字段f1,f2
2025-06-29 20:43:13
1013
1
原创 Redis-zset有序集合
Zset:有序集合:保留了集合的提点,不能有重复成员;每个元素member都有一个唯一的浮点类型的分数(score)与之相关联,这使得有序集合中的元素可以维护有序性,这里的有序排序就是以分数为依据进行排序的(默认为升序)。有序集合中的元素不可以重复,但分数可以重复,按照分数进行排序时,若分数相同,则按照元素的字典序排序。注意:member 和score以类似于java中的pair的关系存在,并不是键值对的关系。对于有序集合,既可以通过member找到score,也可以通过score找到member.
2025-06-27 11:37:38
759
原创 Redis-set集合
集合类型用来保持多个字符串类型的元素,但和列表不同的是,集合中的元素是无需的,且元素不允许重复。集合还支持交集,并集,差集,合理的利用集合可以在开发中解决很多问题。
2025-06-26 17:23:58
947
原创 Redis-基本命令
有讨论说redis是通过 定时器的方式来实现过期key的删除,但这是不可能的,因为定时器需要需要基于优先级队列(过期时间越早,优先级越高,仅关注队手元素即可),或时间轮 (将时间划分成很多的小段,每个小段上挂着一个链表,每个链表代表一个要执行的任务,让时间轮转动,通过指针进行扫描)来实现,但这两种方式都要引入多线程,而redis是单线程的。当这个key已经到达过期时间了,但是还没有被删除,当一个请求访问到这个过期的key时,就会触发Redis的删除机制,服务器执行删除key的操作,同时再返沪i一个nil;
2025-06-26 15:53:12
425
原创 Redis-list列表
头插(lpush),头删(lpop)尾插(rpush),尾删(rpop)1.列表元素是有序的,因此可以通过下标获取到指定的元素;(此处的有序指的是有顺序之分,而不是升序/降序的意思)2.列表中的元素是可以重复的。
2025-06-25 14:06:39
563
原创 八股文01:基础篇
一共有8种:boolean 1 bit,不到一个字节byte 8 bit,1字节short 16 bit,2字节char 16 bit,2字节int 32 bit,4字节float 32 bit,4字节long 64 bit,8字节double 64 bit,8字节说明:1、int是基本数据类型,Integer是包装类型。int的默认值为0,Integer的默认值为null,因此Integer能区分出null和0。
2025-06-23 15:07:34
776
原创 javaEE-SpringBoot日志
slf4j包 并不是实现了日志框架,而是一个接口,通过一些类实现了日志框架.slf4j 是⼀个抽象层, 对⽇志框架制定的⼀种规范, 标准, 接⼝. 所有SLF4J并不能独⽴使⽤, 需要和具体的⽇志框架配合使⽤日志的实现有: log4j1.log4j2,JUL,logback.springboot 的日志是由logback框架实现的.
2025-02-22 09:56:55
874
原创 javaEE-14.spring MVC练习
请求路径:/user/login请求⽅式:POST接⼝描述:校验账号密码是否正确参数名类型userNameStringpasswordString响应数据:响应内容 : true //账号密码验证成功false//账号密码验证失败1.发表留言接口:请求:body为JSON格式.请求路径:/message/publish请求⽅式:POST接⼝描述:校验数入格式是否正确参数名类型fromStringtoStringsayString响应数据:true:输入格式正确。
2025-02-19 17:01:00
972
原创 javaEE-13.Spring介绍
Spring MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“”来⾃其源模块的名称(Spring-webmvc),但它通常被称为spring mvc.spring web mvc就是一个web框架.它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分.
2025-02-17 19:25:58
1343
原创 javaEE-11.javaScript入门
JavaScript(简称JS),是⼀个脚本语⾔,解释型或即时编译型的编程语⾔.javaScript和java是不存在任何关系的.Javascript诞生记 - 阮一峰的网络日志JS和CSS和html的关系:html相当于网页的骨架;CSS相当于对网页进行填充,修饰JS是赋予网页特有的功能,行为。
2025-02-10 14:48:42
1167
原创 javaEE-10.CSS入门
Cascading Style Sheet 层叠样式表⽤于控制⻚⾯的样式CSS能够对⽹⻚中元素位置的排版进⾏像素级精确控制,实现美化⻚⾯的效果.能够做到⻚⾯的样式和 结构分离。
2025-02-10 12:05:56
1230
原创 javaEE-9.HTML入门
目录一.什么是html二.认识html标签1.标签的特点:2.html文件基本结构3.标签的层次结构三、html工具四、创建第一个文件五.html常见标签1标题标签h1-h62.段落标签:p3.换行标签:br4.图片标签:img图片路径有1三种表示形式:5.超链接:a链接的几种形式:6.表格标签1>.2>.3>.属性: 7.表单标签8.form标签9.input 标签包含的属性:常用类型:1>.文本框:text2>.密码框:password3>.单选框:radio4>.复选框:checkbox5>.普通按钮
2025-02-06 21:15:56
1886
原创 javaEE-8.JVM(八股文系列)
JVM : java Virtual Machine 的简称,意为Java虚拟机。java的执行流程是:先通过javac 将.java文件转为.class(字节码文件)文件,之后在某个平台执行;然后 通过JVM 将.class文件转换为CPU能识别的机器指令。因此,编写一个java程序,只需要发布.class文件就行了。JVM拿到.class文件,就知道该如何转换了.
2025-02-03 23:51:43
1895
原创 javaEE-7.网络原理-HTTPS
若中间人更加聪明,当服务器返回非对称加密的公钥key1 时,黑客对公钥信息进行拦截,自己创造出一对新的非对称密钥,公钥key3,私钥key4,将自己的公钥key3返回给客户端,此时,就会产生以假乱真的现象.:加密和解密的密钥是不同.是两个密钥 k1 ,k2 ,且是成对的,k1用来加密,k2 就用来解密,两个密钥一个公开出来,称为"公钥",另一个自己保存,为"私钥".HTTP属于明文传输,在传输过程中,可能会存在一定的风险,HTTPS对传输的内容进行了加密处理.客户端获取到公钥后,对要传输的密钥进行加密。
2025-02-02 11:49:57
895
模拟用户登录,只能登三次,为啥会出现图片中的样子,代码哪里有问题
2024-04-17
求a的K次方,这是哪里出了问题??
2024-04-07
字符串逆序,这是哪里出了问题?
2024-04-07
结果是错的,这是为什么,哪出错了,,
2024-03-31
为啥这个代码输入后没有反应,
2024-03-31
谁能看一下这个代码的问题出在了哪里,,
2024-03-31
谁能看一下为什么sleep()的那个代码无法运行
2024-03-30
这个找不到的代码结果为什么不正确?
2024-03-29
C语言基础问题,请大家看一下
2024-03-27
谁能帮我解释一下这个代码的s输出的结果为什么不对??
2023-06-19
关于#c++#的问题:计算二维数组相加
2023-06-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅