自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 消息队列(14) - 客户端类的编写

对于消息队列,大部分工作已经完成了,最后只剩下客户端代码的编写了,对于客户端,我们要实现,一个工厂类来提供链接,然后用一个链接来管理多个channelID,最后实现一个channel类来,与服务器中定义好的参数方法进行交互消费者import com/** 这个类表示一个消费者.* 通常这个类也应该是在一个独立的服务器中被执行System . out . println("启动消费者!");System . out . println("[消费数据] 开始!");

2023-08-15 17:46:17 214

原创 消息队列13-封装服务类中的方法

对于服务器类中的各个方法的参数,都是通过获取请求中的参数获取的,所以我们要封装虚拟主机的每个方法,让其提供必要的参数我们首先设计,几个基础类,让后面的类都继承这几个基础类,然后给服务器调用。

2023-08-15 17:40:45 175

原创 消息队列(12) - 定义服务器类

之前,我们写了通信协议的具体设计,接下来我们设计服务器类。

2023-08-12 20:06:49 320

原创 消息队列(11) - 通信协议的设计

对于channel ,是tcp链接中的一个逻辑上的链接,一个TCP可以有多个Channel,存在的意义是为了让TCP得到复用, 毕竟一个TCP的链接代价挺大。对于客户端来说, 请求是调用一次以上的核心API告诉服务器,我要调用那个类,并传递过来相应的参数,关于 type其实是在描述当前这个请求 、 响应是在调用那个API。3.根据虚拟主机中的方法,将每个方法所需要传递参数的类定义出来。对于服务器来说 ,响应是给客户端返回这次调用的结果。具体的协议设计: 之后我们传递的参数也是这些。

2023-08-12 19:57:56 331

原创 消息队列(10)-转发规则的实现

我们之前在虚拟主机中,提前定义了俩个类,一个数消费者核心类(已完成),一个是转发规则类,接下来我们完成转发规则类的设计。

2023-08-12 16:08:08 159

原创 消息队列 (9)-消费者核心类的实现

我们上一篇博客,写了虚拟主机的实现, 在虚拟主机中需要用到俩个未实现的类,分别是验证绑定关键字和消费者类,接下来我们实现消费者类的核心代码。

2023-08-09 11:14:30 97

原创 消息队列(8)—消费者类的实现

我们之前编写虚拟主机时用到了,消费者核心类的使用, 在编写核心类之前,我们先将消费者这个类编写出来在消费者类中,我们需要有消费者的身份标识消费者要消费的队列应答方式:之前我们说过应答方式分为俩种,一种是手动应答,一种是自动应答回调函数 - 通过一个接口来实现。

2023-08-09 11:03:14 99

原创 消息队列 (7)- 虚拟主机的设计

之前我们已经将,队列,交换机,绑定,存储到了数据库中并测试完毕,而且也将消息存入到了文件中,实现了消息的持久化存储,并且我们将这些都写入了内存,而且还提供了一个给上层调用的接口。而这些内容都是在中间人服务器中的,接下来我们编写重要的一个类,虚拟主机:虚拟主机类似于数据库,不仅仅要管理数据,还要提供一些核心的API供上层调用。主要流程就是将虚拟主机与之前写过的API串联起来。

2023-08-09 10:19:19 122

原创 消息队列 (5)- 将消息存储到内存中

上面我们已经完成了以下操作, 创建核心类 ,将交换机, 队列,绑定写入数据库,并对数据库的一些列操作进行了封装, 并进行了单元测试。接下来我们将完成将消息写入内存中这个操作。

2023-08-08 10:22:31 147

原创 消息队列(3) -封装数据库的操作

上一篇博客我们写了, 关于交换机, 队列,绑定, 写入数据库的一些建库建表的操作 这一篇博客中,我们将建库建表操作,封装一下实现层一个类来供上层服务的调用 , 并在写完该类之后, 测试代码是否完整。

2023-08-07 21:45:43 1709 1

原创 分布式Redis详解

Redis我们最近学习必备工具之一了, 接下来我们将讲解Redis的简单应用 ,以及相关原理答:跳跃表SkipList,也称之为跳表,是一种数据结构,用于在有序元素的集合中进行高效的查找操作。它通过添加多层链表的方式,提供了一种以空间换时间的方式来加速查找。跳跃表由一个带有多层节点的链表组成,每一层都是原始链表的一个子集。最底层是一个完整的有序链表,包含所有元素。每个更高层级都是下层级的子集,通过添加额外的指针来跳过一些元素。

2023-08-05 21:53:11 1497 2

原创 消息队列(6)) -提供上层服务接口

我们之前已经将 数据库 的操作 和文件的操作 都完成了, 但是对于上层调用来说, 并不关心是于数据库中存储数据还是往文件中存储数据, 因此 我们提供一个类, 封装一下 上述俩个类中的操作, 并将这个类 提供给上层调用。

2023-08-01 22:04:08 422

原创 消息队列之 (4)-将消息写入到文件中

我们之前说过, 消息队列不管要往硬盘中存储, 还要往内存中存储, 并且是以内存为主 ,硬盘为辅, 接下来, 就将消息队列如何存储到硬盘 做一个设计我们往硬盘中存放的消息, 只是简单的 存 和 取 还有删除 , 并不涉及 复杂的增删改查, 而且消息的数量可能会非常多, 往数据库中存放效率不高我们之前说过, 消息 是 依附于队列来存在的, 所以存储的时候 就要按照队列的分类来存储 ,在一个虚拟主机中, 会有多个队列 , 每个队列下面, 放着一个文件, 文件中存储我们的消息, 那一个文件不可能只存储一个消息, 而

2023-08-01 21:32:40 306

原创 Spring事务的传播机制与隔离级别

无论对于那个语言, 事务都是什么重要的 , 因此仅仅只了解, 事务是如何创建和使用是远远不够的 , 接下来我们讲述 事务的传播机制与 它的隔离级别。

2023-07-30 14:00:00 291

原创 Spring事务创建与使用

在数据库中我们提到了 事务, 事务的定义为, 将一系列操作封装成一个整体去调用 , 要么一起成功, 要么一起失败。

2023-07-30 08:50:39 597

原创 spring拦截器 与统一格式

之前博客讲述了 , 关于SpringAOP如何实现, 但是在实际开发中, 我们大多数不会遇到SpringAOP, 而是使用Spring拦截器代替了SpringAOP的功能, 因为Spring拦截器 比起AOP来更简单, 更好上手代理: 就是将我们不愿意做的事情,交给别人去做我们先来说什么是静态代理: 在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。简单来说静态代理就是在不改变源代码的基础上增加新的功能。

2023-07-30 08:19:27 157

原创 消息队列(2) - 数据库操作

上一篇博客, 我们将消息队列的实体类创建完毕了, 并且还写了一些关于数据库的操作, 接下来我们继续进行关于数据库的操作。

2023-07-27 20:56:19 205

原创 并查集详解

在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集。适合于描述这类问题的抽象数据类型称为并查集(union-find set)这个岛使用并查集的解法-最大的优点就是不局限于一台CPU了,

2023-07-26 22:28:43 225

原创 哈希表与布隆过滤器

哈希表查找和删除为什么是O(1),因为通过哈希函数算肯定是O(1)的(即使是这个时间长),而通过单链表查询的话(如果这个单链表很短,那么也认为是O(1),单链表长度一旦过长就出发扩容操作)怎样设计,就是将40亿的数都算一遍哈希值,然后模个100,放到0-99的文件(这些文件肯定是能放到内存中的)中,然后在这些文件中找出现次数最多的数,然后比较所有文件中出现次数最多的数.如果这个单链表的值的数量过大了,那就的扩容.也就是将原来的哈希表中的每一个值,重新算一遍哈希模一个新值,然后在以链表形式串起来.

2023-07-26 22:18:15 216

原创 消息队列(1) - 实体类

上一篇博客中我们讲述了, 消息队列的相关知识, 这一篇博客,我们主要讲解消息队列中的实体类的实现。

2023-07-26 22:01:32 295 1

原创 消息队列(0)- 背景知识

消息队列,不知道大家是否陌生,如果说消息队列感到陌生的话, 有一个模型肯定大家都听说过, 那就是生产者-消费者模型, 消息队列就是在生产者 - 消费者模型的基础上 填写成一个程序, 来让大家使用一个消息队列的实现 : 需要实现生产者 - 消费者模型,生产者- 消费者对应的是客户端与服务器, 要给客户端提供一组API , 让其通过网络通信的方式远程调用Borker Server 提供的方法实现Borker Server 要实现核心API与一些基本概念(队列等等)

2023-07-26 21:40:08 257

原创 MyBatis详解

1: 添加MyBits的框架2: 设置MyBits的配置MyBits底层用的是JDBC的框架。

2023-07-24 18:54:56 299

原创 红黑树概念

/ 节点的颜色 int val;} }

2023-07-22 21:00:00 57

原创 二叉平衡树

/ 节点的左孩子 public AVLTreeNode right = null;// 节点的右孩子 public AVLTreeNode parent = null;// 节点的双亲 public int val = 0;// 当前节点的平衡因子=右子树高度-左子树的高度 public AVLTreeNode(int val) {} }

2023-07-22 20:00:00 54

原创 map和set

本篇博客讲述了以下知识点HashMap/TreeMap/HashSet/TreeSet 的使用HashMap 和 HashSet 背后的数据结构哈希表的原理和简单实现。

2023-07-22 15:20:43 57

原创 二叉搜索树

二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树。

2023-07-22 10:57:07 44

原创 栈和队列-详解

本篇博客-叙述了以下关于栈和队列等的相关概念栈的概念及使用队列的概念及使用。

2023-07-22 03:45:00 43

原创 优先级队列 - 堆

本篇博客讲述以下知识点掌握堆的概念及实现掌握 PriorityQueue 的使用。

2023-07-21 21:16:09 39

原创 二叉树详解

本篇博客讲述了以下几个知识点树的基本概念二叉树概念及特性二叉树的基本操作。

2023-07-21 20:33:36 379 1

原创 LinkedList与链表

本篇博客主要讲述 - 以下内容ArrayList的缺陷链表链表相关ojLinkedList的模拟实现LinkedList的使用ArrayList和LinkedList的区别方法解释尾插 e将 e 插入到 index 位置尾插 c 中的元素删除 index 位置元素删除遇到的第一个 o获取下标 index 位置元素将下标 index 位置元素设置为 element清空判断 o 是否在线性表中返回第一个 o 所在下标返回最后一个 o 的下标截取部分 list。

2023-07-21 05:00:00 36

原创 ArrayList与顺序表

本文介绍1.线性表2. 顺序表3. ArrayList的简介4. ArrayList使用5. ArrayList的扩容机制ArrayList是以泛型方式实现的,使用时必须要先实例化ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。

2023-07-21 01:30:00 35

原创 Java异常详解

本问主要讲解以下四个概念异常概念与体系结构异常的处理方式异常的处理流程自定义异常类程序先执行 try 中的代码如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配.如果找到匹配的异常类型, 就会执行 catch 中的代码如果没有找到匹配的异常类型, 就会将异常向上传递到上层调用者.无论是否找到匹配的异常类型, finally 中的代码都会被执行到(在该方法结束之前执行).如果上层调用者也没有处理的了异常, 就继续向上传递.

2023-07-21 00:30:00 46

原创 力扣刷题序列 - 数学

假设有1147483649这个数字,它是小于最大的32位整数2147483647的,但是将这个数字反转过来后就变成了9463847411,这就比最大的32位整数还要大了,这样的数字是没法存到int里面的,所以肯定要返回0(溢出了)。例如对n皇后问题来说,如果使用的算法不够好,就容易超时,而可以在本地用程序计算付出对所有n来说n皇后问题的方案数,然后把算出的结果直接卸载数组中,就可以根据题目输入的n来直接输出结果。n=2,数字包括两部分之和,一部分为n=1的所有10个答案,另一部分为长度为2的新增数字。

2023-07-18 15:00:00 133

原创 JavaScript的WebAPI

用户对于页面的一些操作(点击, 选择, 修改等) 操作都会在浏览器中产生一个个事件, 被 JS 获取到, 从而进行更复杂的交互操作.节点: 网页中所有的内容都可以称为 节点(标签节点, 注释节点, 文本节点, 属性节点等). 使用 node。一旦一个节点插入完毕, 再针对刚刚的节点对象进行修改, 能够同步影响到 DOM 树中的内容.表示文档中与指定的一组CSS选择器匹配的第一个元素的 html元素 Element 对象.修改元素的 CSS 类名. 适用于要修改的样式很多的情况.

2023-07-18 12:30:00 195

原创 JavaScript基本语法

JavaScript是一门动态语言,所谓的动态语言可以暂时理解为在语言中的一切内容都是不确定的。不过在补充一句动态语言相比静态语言性能上要差一些,不过由于JavaScript中应用的JIT技术,所以JavaScript可能是运行速度最快的动态语言了。在 JavaScript 中本身就支持动态类型, 程序猿在使用对象的某个方法的时候本身也不需要对对象的类型做出明确区分. 因此并不需要在语法层面上支持多态.JavaScript 中的函数和普通的变量一样. 存储了函数的变量能够通过 ( ) 来进行调用执行.

2023-07-18 07:42:09 85

原创 自动化测试

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程就是通过机器来代替人工测试说起自动化测试:就离不开这三大测试分别是UI测试,接口测试,单元测试Selenium是web应用中基于UI的自动化测试框架,支持多平台、多浏览器、多语言由Selenium IDE,Webdriver,Selenium Grid组成。

2023-07-17 05:00:00 197

原创 IDEA配置maven国内源

为什么要配置maven国内源, 因为如果不配置国内源,一个是依赖加载速度过慢, 另一个是可能会导致创建spring / Springboot创建失败,或者是在maven项目中引入jar包失败,从而导致项目运行失败。

2023-07-16 15:39:51 468

原创 力扣刷题序列 - 字符串篇

i ++;j --;

2023-07-14 22:00:00 290

原创 Linux常见命令

由于 Linux 是一个完全开源免费的内核, 因此有些公司/开源组织又基于 Linux 内核, 提供了不同的配套程序. 这就构成了不同的 “发行版”. 企业中最主要使用的发行版是 RedHat (红帽). 但是 RedHat 是一个收费的系统。说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。若源文件或目录的形态,不属于目录。

2023-07-14 18:03:26 260

原创 KMP算法

KMP 算法是一个快速查找匹配串的算法,它的作用其实就是本题问题:如何快速在「原字符串」中找到「匹配字符串」。而 KMP 算法的复杂度为 O(m+n)实际上是O(N),因为O(M)不可能大于O(N)KMP 之所以能够在 O(m+n)复杂度内完成查找,是因为其能在「非完全匹配」的过程中提取到有效信息进行复用,以减少「重复匹配」的消耗。

2023-07-14 17:03:58 113

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除