- 博客(32)
- 收藏
- 关注
原创 RabbitMQ 模拟实现【五】:网络通信设计
Type 希望客户端能远程调用服务器的核心API,type就是描述调用哪一个API的Length 表示接下来的Payload的长度Payload 是真正需要用到的数据.Type表示请求响应不同功能,取值如下:0x1 创建channel0x2 关闭channel0x3 创建 exchange0x4 销毁 exchange0x5 创建 queue0x6 销毁 queue0x7 创建 binding0x8 销毁 binding0x9 发送 message。
2024-03-14 13:02:52 1040
原创 RabbitMQ 模拟实现【四】:虚拟主机设计
咱们实现的方法是,使用一个阻塞队列,当生产者发布消息到交换机时,交换机转发消息到对应的队列后,就把队列名当作令牌添加到这个阻塞队列中,再配置一个扫描线程,去时刻扫描这个阻塞队列中是否有新的令牌了,有了新令牌,则根据令牌去对应的队列中,去把新消息安装轮询策略转发给消费者.关于消费者,咱们并不打算持久化存储消费者的信息,即只在内存中存储消费者信息,如果服务器重启后,那么内存中的消费者信息也会清空,此时消费者就需要重新订阅消息.自动应答:将消息发送给消费者就算应答了(不关心消费者收没收到,相当于没应答)
2024-03-14 13:02:33 1287
原创 RabbitMQ 模拟实现【三】:存储设计
我们知道在存储时,我们需要保存到文件,而文件只能存储字符串/二进制数据,无法直接存储消息对象,同时通过socket套接字在网络中传输时,也需要转为二进制,因此消息的序列化与反序列化尤为重要。, 因为⼀个完整的 SQLite 数据库,只有⼀个单独的不到1M的可执⾏⽂件,在Java中使用SQLite,不需要额外安装,只需要引入依赖即可,同时采用。上述我们存储在硬盘中的数据,分为了两个,⼀个是存放数据库中,⼀个是存放在⽂件中。消息是依托于队列的,因此存储的时候,就要把 消息 按照 队列 维度展开。
2024-03-14 13:02:06 1031 1
原创 RabbitMQ 模拟实现【二】:模块划分
虚拟主机:为了便于简单实现,此处只支持一个虚拟主机,但是按道理来讲要有多个虚拟主机,类似于MySQL中的database,整合一系列相关的业务数据。主要实现通过TCP与服务器建立联系,通过远程调用服务器API来实现用户需求。(交换机、队列、绑定、文件)
2024-03-14 13:01:32 402
原创 RabbitMQ 模拟实现【一】:需求分析
简单理解为一个使用阻塞队列来通信的组件,本质上就是个转发器,包含发消息,存消息,消费消息的过程。此处采用 推 的实现方式:Broker把收到的数据主动发送给订阅的消费者(订阅:哪些消费者要从中间人这里取数据,这个注册的过程,称为“订阅”)结合实际,我们多使用消息队列在分布式系统中,一对一或者一对多的关系无法满足我们服务器对于消息队列的需求,因此以多对多的方式来实现。数据的存储主要有两点需要注意:持久化 + 高效,因此采用 内存 + 硬盘 的方式来存储。交换机类型:用于描述不同的转发规则。
2024-03-14 13:01:11 875
原创 一篇文章吃透整个JVM,JVM超详细笔记
双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父 类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最 终都应该传送到最顶层的启 动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类) 时,子加载器才会尝试自己去完成加载。GC:帮助程序员自动释放内存的释放时机:较为模糊,只有彻底不使用了才能释放堆区主要流程:垃圾对象判断 + 垃圾对象释放。
2024-03-03 16:49:08 877
原创 c语言之内存对齐、结构体内存大小详解
结构体类型对我们来说并不陌生,然而,关于结构体内存的大小,也可以说是内存对齐吧,一直是个非常经典的问题,很容易出现,那么跟着博主来一起了解结构体的存储方式吧!
2024-02-28 18:53:55 1235 4
原创 c语言必读系列——c语言文件操作(千字详解)
本文主要对c语言文件操作进行详细介绍,包括,文件的类似文件的打开与关闭,常用输入输出函数,文件读取结束的判定,文件缓冲区等等
2024-02-28 18:53:43 1036 9
原创 c语言必读篇——深入理解C语言指针的应用(千字详解)
本文主要讲指针与数组,函数的组合使用,主要的内容有以下知识点:指针与数组, 指针数组与数组指针,数组传参和指针传参,函数指针数组搭配使用,回调函数以及qsort函数等等
2024-02-28 18:53:31 1662 5
原创 c语言必读系列(基础篇)——10分钟带你摆脱指针苦海(千字图文详解),手把手带你扫清指针所有盲区
超详细指针,一篇文章扫清所有盲区,让你不在头疼指针,快来一起看看吧!
2024-02-28 18:53:21 1729 8
原创 c语言入门必读系列--初学者如何学习c语言,c语言如何自学,带你玩转c语言
近十年来,c语言在TIOBE(编程语言排行榜)稳居前三,甚至可以说,c语言是其他编程语言的基础,所以学好c语言是进入IT世界的必修课。那么如何学习c语言,该如何自学c语言以及编译器VS2022走入编程世界
2024-02-28 18:51:53 1821 8
原创 字符函数和字符串函数——c语言进阶必看系列!!!
字符函数和字符串函数——c语言进阶必看系列!!! strlenstrcpy strcat strcmp
2024-02-28 18:51:29 782 3
原创 从入门到精通——【初识网络】
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
2023-08-07 15:14:08 998 16
原创 认识文件操作与IO
关于InputStream类,Java中实现的方法是抽象类,因此我们不能够直接实例化,而是通常使用实现了这个抽象类的类,就目前阶段,我们不涉及到网络等等内容,只关心从文件中读取,所以使用FileInputStream。我们所说的路径就是找到文件途经的目录组成的,根据树状结构,我们知道找到一个文件就是从根开始,一路沿着树杈走下去所经过的目录,Windows系统都是通过此电脑起手的,所以我们通常省略此电脑。:关闭操作是非常必要的,不同于Java之前的习惯,文件这里的。我们平时所说的文件指的是。
2023-07-08 23:29:28 373 19
原创 Java泛型详解
写在开头:想必大家和博主一样,在以往学习JavaSE的语法中,遇到了一个陌生的词——泛型,博主当时很好奇,什么是泛型呢?即使是学完了JavaSE,这个问题都没有解决,只能在百度查阅了解关于泛型的一些皮毛。却不成想,在数据结构的第一课就接触到了这个问题,为了能帮助大家简单的认识泛型,博主通过学习以及查阅诸多资料,决定写下本篇博客并分享给大家,希望能够帮助到和博主当时有一样困境的小伙伴,同时博主也在持续更新各方面的知识内容,欢迎大家动动手指点个关注,第一时间阅读博主的分享内容!
2023-05-19 19:07:19 1362 13
原创 JavaSE入门必读篇——详解数组
数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。例如车库:1.每个车位都是用来停车的;2.车位是连在一起的;3.车位都有属于自己的编号数组中存放的元素其类型相同数组的空间是连在一起的每个空间有自己的编号,其实位置的编号为0,即数组的下标内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
2023-05-19 19:05:56 1172 8
原创 详解线程与进程的区别
通俗来讲,进程=火车,线程=车厢,而线程在进程下行进(单纯的车厢无法运行)一个进程可以包含多个线程(一辆火车可以有多个车厢)不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)但同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)就好比,一张只能容纳8个人的桌子,要求把饭吃干净,在人数少于8人时自然是多多益善,而人数达到8个无法容纳时,就人多也无益了,甚至会影响前八个人的效率~
2023-05-15 09:46:55 509 10
原创 操作系统与进程调度
如图,进程直接访问内存,如果出现数组越界等等的代码bug,极有可能由一个不相干的进程引起另一个进程的bug,显然这种实现代价是极为糟糕的,使用代价也是非常大的,为了让各个进程之间互不干扰, 就出现了“虚拟地址空间”,每个进程都只能访问到自己的地址空间,成功的完成进程间的隔离。现代的应用,要完成一个复杂的业务需求,往往无法通过一个进程独立完成,总是需要进程和进程进行配合地达到应用的目的,如此,进程之间就需要有进行“信息交换“的需求。进程之间无法互相干扰,大大提高了操作系统的稳定运行!
2023-05-12 18:20:57 1527 94
原创 Java三大特性篇之——继承篇(超详解的好吧!)
🥴在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物,具体如下图所示。当然在猫之后也会有波斯猫、狸花猫等等可以继承猫类;同时也有二哈,卷毛等继承狗类,这些动物之间会形成一个继承体系,这就是我们今天要说的继承问题!继承是面向对象语法的三大特征之一。继承可以。通过继承,子类获得了父类的成员变量和方法。那么一个
2023-04-23 22:18:47 1049 12
原创 Java三大特性篇之——多态篇(千字详解)
java三大特性中的多态通俗来讲就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态!比如stuendt是一个父类,那么在操场上上体育课的学生和在教室里面的学生就是它的子类。这时上课铃声响了,上体育课的学生去操场,在教室里面上课的学生则是回教室,不同的学生有着不同的反应,这就是多态。
2023-04-23 22:18:27 2473 11
原创 String常用方法归纳 & StringBuilder拓展——火速收藏!!!
注意:比较两个字符串内容是否相等使用“==”是在比较引用对象存储的地址。
2022-11-23 17:19:20 1391 15
原创 入门必写项目之图书管理系统(分析详解+完美运行+代码可拿)
图书管理系统的简易实现,利用数组,类和对象,动态,封装,继承,接口等等知识点,来综合性的设计与实现出一个简易的。
2022-11-20 17:32:36 4954 14
原创 Visual Studio 2022安装教程(千字图文详解),手把手带你安装运行VS2022以及背景图设置
VS2022的安装与使用以及主题环境,字体,颜色,背景图等的修改(超详细,识字就能完成的操作)
2022-09-26 20:48:56 90018 35
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人