自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RabbitMQ消息应答与发布

RabbitMQ一旦向消费者发送了一个消息,便立即将该消息,标记为删除.消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个很长的任务并仅仅执行了一半就突然挂掉了,在这种情况下,我们将丢失正在处理的消息,后续给消费者发送的消息也就无法接收到了.为了确保消息不丢失,我们引入了消息应答机制.消息应答就是:消费者在接收到生产者的消息并且处理该消息之后,告诉RabbitMQ已经处理完成了,rabbitMQ可以进行删除了.一个生产者,两个消费者.

2024-01-23 20:32:33 1271 2

原创 初始RabbitMQ(入门篇)

channel: 如果每次访问消息队列都要建立一个TCP连接,那么当消息很多的时候,就会建立很多TCP连接,这时建立TCP连接的开销是非常大的,效率也是很低的.channel是在connection内部建立的逻辑连接,而且channel之间是完全隔离的.交换机:是消息队列中一个部件,可以接收来自生产者的消息,也可以将消息推送到消息队列中,交换机必须确切的知道要如何处理接收到的消息,是将消息推送到特定的队列,还是将消息推送到所有队列中,获取将消息丢弃.

2024-01-21 13:29:25 1776 3

原创 初始Redis(入门篇)

Redis是⼀种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此Redis可以满⾜很多的应⽤场景,⽽且因为Redis会将所有数据都存放再内存中,所以它的读写性能⾮常惊⼈。

2023-11-30 15:58:06 410 4

原创 高并发分布式架构的演进之路

一个系统初期,我们需要利⽤我们精⼲的技术团队,快速将业务系统投⼊市场进⾏检验,并且可以迅速响 应变化要求。但好在前期⽤⼾访问量很少,没有对我们的性能、安全等提出很⾼的要求,⽽且系统架构简单,⽆需专业的运维团队,所以选择单机架构是合适的。单体架构就是我们的应用服务和数据库服务都是在一个主机上的.用户在浏览器地址栏中输入域名之后,通过DNS解析为ip地址,随后访问该IP地址上的应用服务.单体架构也是我们目前最常见的一种架构,因为系统架构简单,无需过多的维护人员.

2023-11-20 17:40:26 209 6

原创 Git的原理与使用(一)

git是一个非常强大的版本控制工具.可以快速的将我们的文档和代码等进行版本管理.下面这个实例看理解下为什么需要版本控制在工作或者学习中,我们可能经常会遇到这样的场景,例如当我们需要给领导提供一份资料的时候,我们先写出了一个版本,交给领导,但是领导看完不满意,让重新写,于是我们又写了第二个版本,领导还是不满意,于是又写了第三个版本,领导看完之后说还不如第二个版本的文档,于是就要第二个版本的文档.这种情况下我们想要恢复到第二个版本的文档是不是就比较麻烦了.git就会轻而易举的解决这个问题.

2023-11-12 17:09:56 493 3

原创 创新视界论坛项目测试报告

此项目构建了一个基于 B/S 架构的论坛系统,其目标是为用户提供一个交流、分享和讨论信息的平台。在这个系统 中,用户可以创建账户,发布自己的帖子,回复其他用户的帖子,同时也可以浏览和评论其他用户的帖子。该论坛系统分 为多个板块,每个板块专注于不同的主题,例如后端开发、前端设计等。

2023-09-19 14:39:56 332 2

原创 软件测试的基础知识

需求阶段->计划阶段->设计阶段->编码阶段->测试阶段->运行维护可以看出测试阶段是在整个软件的生命周期的后面才开始进行介入的.在测试介入之后,软件测试的生命周期:需求分析->测试计划->测试设计->测试开发->测试执行->测试评估需求分析:主要是分析需求是否正确,是否完整测试计划:主要是谁测试,怎样进行测试,什么时候开始测试.测试设计:设计测试用例.测试开发:开发测试工具,开发自动化测试用例.测试执行:提高bug,验收.测试评估:产出测试报告.

2023-09-17 15:01:37 130

原创 一文带你走进软件测试的大门

在正式开始进行软件测试之前,我们需要进行前置知识的储备,这篇文章主要是软件测试的基础知识,为了以后正式测试打下坚实的基础.我们在理解bug的过程中需要注意一点,上面的理解并不适用于我们现在的体系结构.当程序没有实现与最终用户合理预期的功能要求时,就是软件错误(bug).程序与软件需求不匹配预期结果与执行结果不符合。

2023-09-15 11:51:35 218 2

原创 Linux操作(查询日志)

linux在后端开发人员中对日志的的运用.对于linux基础掌握不是很好的小伙伴可以先去看看linux基础操作:Linux系统使用(超详细)_linux操作系统使用_陌上 烟雨齐的博客-CSDN博客Linux操作系统是和windows操作系统是并列的关系。只不过只是两个操作系统的特性各有不同而已。总体而言,Windows和Linux是两种不同的操作系统,各自有其优点和适用场景。选择哪个操作系统取决于用户的需求、技术背景和使用场景。

2023-09-13 09:58:50 437 3

原创 Redis(详细)

Redis是一个开源的内存数据存储系统,通常被称为缓存存储和键值存储,是一个高性能,轻量级数据库,支持丰富的数据类型和各种高级的功能而闻名.是最受欢迎的NoSQL数据库之一.因此被许多应用程序采用.

2023-09-10 20:21:15 1421 10

原创 Spring事务和事务传播机制

将一组操作封装为一个执行单元,(也就是将一组操作绑定到一起,)这些执行单元要么全部执行成功,要么全部执行失败.我们通过转账操作来体会事务的重要性.比如转账操作分为两步:第一步操作:A账户-100元第二部操作:B账户+100元如果此时要是没有事务的话,第一步操作执行完毕,但是第二步操作可以因为一些原因没有执行成功,那么A账户的100元就不见了,B账户也没有进行增加100元.而如果采用事务就可以解决这个问题,事务就会让这组操作进行绑定,要么一起执行成功,要么一起执行失败.

2023-08-11 12:08:48 252 9

原创 Spring中Bean的作用域和Spring生命周期

限定程序中变量的可见范围叫做作用域,而Bean的作用域是指在Spring整个框架中的某种行为模式,比如singleton单例作用域,就是表示Bean在整个Spring中只有一份,是全局共享的,当其他人修改了这个Bean之后,那么另一个人读取到的就是被修改过的值。

2023-07-22 11:01:33 424 3

原创 Spring更简单读取和存储对象

上篇文章介绍了spring的创建和基本的存储、读取对象的方式,但是在操作过程中我们发现过程其实是很麻烦的,所以接下来我们将学习更加简单的读取和存储对象的方式。

2023-07-21 14:24:42 263 4

原创 Spring框架的创建和使用

常说的Spring指的是Spring Framework(Spring 框架),是一个开源的框架,有着活跃且庞大的社区。同时Spring还支持广泛的引用场景,它可以让Java企业级的应用程序开发更加的简单。总体来说Spring就是包含了众多工具方法的IoC容器。上面这句话包含了两个重要信息,也是Spring的本质。那么什么是容器,什么又是IoC容器?我们回想我们之前学过得容器,是干什么的。List/Map是存储数据的容器。Tomcat是存储Web网站的容器。

2023-07-19 14:12:20 706 2

原创 MySQL索引、事务

索引的本质就是为了加快数据库的查询速度。但是有利就有弊,同时也付出了一定的代价:空间代价来保存索引索引可能会拖慢增加、修改、删除的效率但是总体来说,利大于弊。数据库中的表,数据,索引之间的关系就像是书架上的书、书里面内容、和书的目录之间的关系。索引的作用就是类似于书的目录,用于快速的定位,检索数据。索引对提高数据库性能有很大帮助。

2023-07-16 10:00:41 381 5

原创 JVM——类加载和垃圾回收

JVM 是 Java Virtual Machine 的简称,意为 Java虚拟机。虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVM、VMwave、Virtual Box。VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进行了裁剪。JVM 是一台被定制过的现实当中不存在的计算机。

2023-07-14 20:26:27 1883

原创 Linux系统使用(超详细)

Linux操作系统是和windows操作系统是并列的关系。只不过只是两个操作系统的特性各有不同而已。总体而言,Windows和Linux是两种不同的操作系统,各自有其优点和适用场景。选择哪个操作系统取决于用户的需求、技术背景和使用场景。

2023-07-13 20:07:38 191659 80

原创 Cookie和Session原理详解

在web的发展史中,我们知道浏览器和服务器交互用的是http协议,但是http协议是一种无状态的协议,而这就将导致服务器并不知道是那个浏览器在访问服务器,这就将会出现了很大的问题,所以一些网页需要知道用户的状态,比如网站登录,购物车等等。为了解决上述的问题,Cookie和Session就出现了。Cookie和Session浏览器和服务器传输数据的一种方法,但是需要注意的是,Cookie是有长度限制的,并不能存储比较大的数据,只能存储一些关键的信息。

2023-06-06 14:44:00 1354 14

原创 详解Servlet API

我们在写Servlet代码的时候,第一步都是先创建一个类,然后让这个类去继承HttpServlet,并重写其中的某些方法。那么我们就需要知道,HttpServlet这个类中都有那些方法,都是干啥的。

2023-06-01 22:16:15 675 7

原创 详解Comparable和Comparator

如果是想要以score为基准Comparable接口的功能就是用于对象之间的比较。那个也就是说比较的主要实现逻辑就在compareTo方法中。,从大到小排序,只需要把compareTo中的this和o调换位置即可。

2023-05-31 20:01:57 1109 3

原创 Java中的equals和hashCode

equals方法是Object类中用于检测两个对象是否相同的方法,Object类中实现的是两个对象引用是否相同的方法。hashCode方法的返回值是一个数值,返回的是一个对象具体的位置。

2023-05-21 23:20:14 328 1

原创 详解HTTPS加密过程

众所周知,HTTPS要比HTTP要安全,但是为什么HTTPS要比HTTP安全呢?这篇文章主要研究HTTPS的加密机制。HTTPS 工作过程中涉及到的密钥有三组第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过。

2023-05-20 21:21:08 4669 9

原创 详解HTTP协议

当我们在浏览器中输入百度一下的URL时,浏览器就会给百度的服务器发送一个HTTP请求,百度的服务器也会给浏览器回复一个HTTP的响应。当这个服务器给浏览器的响应被解析后,就展现成我们看到的页面内容,但是在这个过程中,一次请求和一次响应并不能传输这么多的数据,此时就需要多次请求和响应。也就说在这个过程中,浏览器会给服务器发送多个HTTP请求,而服务器则会给浏览器发送多个HTTP响应。这些响应就包含了页面HTML、Javascript、图片、文字等信息。

2023-05-19 11:03:26 725 8

原创 HTML入门(详细)

HTML(全称为“超文本标记语言”)是一种用于创建Web页面的标记语言。它是Web开发的基础,允许开发者定义页面的结构、内容和样式。HTML使用一些标记或“标签”来描述文本和媒体内容的结构和格式,这些标签可以指示网页浏览器如何显示内容,包括标题、段落、列表、超链接、图像、音频、视频等等。HTML还可以与其他Web技术(如CSS和JavaScript)结合使用,以实现更复杂和交互性的Web应用程序。这篇文章只是介绍HTML的基础标签的使用。

2023-05-03 22:19:26 17253 13

原创 详解TCP原理

TCP协议是一种传输层协议,也是TCP/IP协议栈中非常重要的一个协议,它提供了面向连接,可靠性传输,面向字节流等特性。使传输的效率和可靠性大大提高。可靠性是TCP协议的最核心的机制。它可以在数据传输时提供各种控制和错误恢复机制,确保数据在网络中可靠传输。TCP之所以这么复杂,就在于TCP既想要提高传输可靠性,又尽可能的保证传输的效率。校验和序列号(按序到达)确认应答超时重发连接管理流量控制拥塞控制滑动窗口快速重传延迟应答捎带应答。

2023-04-20 12:49:33 1932 20

原创 udp协议

udp协议是一种面向无连接的,简单的传输层协议,也没有提供向tcp协议那样复杂的特性。更加关注的传输的效率和速度。虽然udp比较简单,但是在一些特定的场景下更有优势。udp协议常用于视频观看,网络游戏,DNS等等。归根结底,TCP和UDP都是程序员的工具,什么时机用,具体怎么用,还是要根据具体的需求场景去判断。

2023-04-19 11:43:40 431 2

原创 网络基础知识

在1946年世界上第一台计算机诞生,当时的计算机可以称为是单机模式,主要服务于军事领域,但是当时的计算机没有通信功能,就是两台或者多台计算机之间通信功能。在上世纪60年代末至70年代初,美国军方为了将若干台计算机连接起来,就开发了ARPANET网络。ARPANET于1969年建成。是我们现在所使用Internet的前身。

2023-04-16 22:09:23 245 1

原创 HashTable和ConcurrentHashMap的区别

实际在1.8之前的时候,是采用分段锁的方式来实现加锁的,和上述情况相似,是采用好几个链表共用一把锁对象。hashtable的扩容是当达到一定的负载因子的时候,扩容就需要重新申请空间,然后把旧的空间上的元素全部挪动到新的空间中。给关键方法加上锁之后,虽然保证了在多线程环境下的使用不会出现线程安全问题,但是HashTable加锁的粒度太粗了。hashTable是针对整个哈希表进行加锁的,任何增删改查的操作都是触发加锁,也就可能有锁竞争。也就说只有是针对不同链表的进行操作,就不会出现锁竞争,也就不会阻塞等待。

2023-04-14 09:20:24 239

原创 synchronized原理和优化过程

如果某一个资源被多个线程共享,为了避免因为线程的抢占资源而出现线程不安全的因素,我们需要对线程进行同步,synchronized就是为了保证不会因为线程的抢占式执行而出现的bug。是并发编程中的一个重要的特性。那么接下来就看明白synchronized的底层原理。synchronized在Java并发编程中是非常重要的一个知识点。希望通过上述的描述,对synchronized有个整体的认识。如有不妥,还请多多包涵。

2023-04-13 16:53:31 772

原创 锁策略和CAS

锁策略不是Java语言独有的一门技术,任何和锁有关的话题,都会涉及到锁策略。

2023-04-09 17:33:48 130 1

原创 死锁的原因和解决方案

假如我们此时先看t1线程,在对object1对象加锁之后,然后输出了hello1,此时t2线程也开始执行了,再对object2加锁之后,输出了hello2,此时CPU切换到t1线程上,t1线程要对object2对象进行加速,但是object2是被t2线程已经加锁过,此时这个锁对象还没有被释放,于是t1线程阻塞等待,此时CPU切换到t2线程上,t2线程再对object1对象进行加锁,但是object1是被t1线程加锁中的,所以t2线程也阻塞等待。此时我们就很好的破解了循环等待,也就解决了死锁的问题。

2023-04-08 16:58:21 1501 1

原创 Java多线程之线程池

假如,我们去学校打印店里面去打印一个东西的时候,这时,打印店里面的人比较多,此时打印店老板给你说:同学,你是要在门口的自助打印机上自己打印,还是要等着让我给你打印,如果说我们是要自己在门口的自助打印机上自己打印,那么这个打印东西所消耗的时间完全是在我们可控的范围之内的,如果此时我们要是让老板给我们打印,那么打印完我们的东西需要多少时间就不是我们可以控制的了。我们从线程池中拿线程,就是纯用户态的操作,但是在系统中创建线程,就是用户态和内核态之间的切换,真正的创建内核态操作完成的。

2023-04-07 10:28:07 393

原创 二叉树的基础知识

对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一一对应时称之为完全二叉树。双亲结点或者父节点:若一个结点含有子节点,则这个结点的就称为子节点的父节点,上述图中A就是BCD的父节点。1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( B)叶子结点或者终端结点:度为0的结点称为叶子结点,上述图中 H I J K L 都是叶子结点。结点的层次:从根节点开始,根为第一层,根的子结点为第二层,以此类推。

2023-04-01 13:19:44 467

原创 文件系统(Windows)

文本文件存储的就是文本,文本文件的内容都是有ASCII字符构成的,文本文件里面存储的数据,就是遵守ASCII或者其他的字符编码,所得到的文件。文件本身除了数据内容之外,还有一部分信息,比如文件名,文件类型,文件大小等,但是这些并不作为文件的数据存在,可以把这些信息视为文件的元信息。一个简单粗暴的方法,把这个文件直接用记事本打开,如果能看明白,则是文本文件,如果看不明白,则是二进制文件。文件路径就是从根节点出发,沿着树杈,一路往下走,到达目的文件,此时经过的内容就是一个文件的路径。

2023-03-29 16:43:34 1121

原创 Java线程安全问题原因和解决方案

假如此时CPU又突然调度到了t1线程,由于t1线程上次执行到了save操作,所有此时t1线程就把寄存器中的值写回到内存上,现在内存上的值是1,如果此时又调度到t2线程,t2线程继续执行,add,save操作,执行完了之后,t2线程把寄存器中的值写回到内存上,此时就出现了bug。构成这个bug的原因就是因为此时多个线程试图去修改同一个变量,而这个修改的操作并不是原子的,可以拆分为多个CPU指令,而由于拆分为了多个CPU的指令,而线程的执行顺序是抢占式执行的,无序的。会让++操作变为不能分割的最小单位。

2023-03-29 12:23:17 613 1

原创 单例模式(关于线程安全)

单例模式我们最常用的写法就是饿汉式和懒汉式。那么饿汉式和懒汉式的区别是什么呢?我们可以看一个简单的例子来了解饿汉式和懒汉式的区别:首先我们需要知道什么是单例模式:单例单例,顾名思义就是在程序运行的过程中始终只能有一个对象实例,不能再出现第二个对象实例。饿汉式和懒汉式的区别 举个栗子:比如说我们需要读取计算机中的一个10个G的文件,饿汉式就是直接把这10个G的文件全部读取到内存中,然后进行显示。这样的操作很明显不是很好,因为我们不知道内存到底够不够,而且10个G的文件打开肯定也要卡半天。

2023-03-28 16:36:05 400 3

原创 JAVA Thread类的基本用法

java标准库中Thread类对操作系统提供的API进行了进一步的抽象和封装。

2023-03-15 12:00:13 324 1

原创 操作系统之线程

可以把进程和线程简单的理解为: 进程就是一个.exe的程序,比如QQ,微信,而线程则是在进程里面的,比如我们可以使用QQ一遍打电话,一遍发消息。多个进程之间有隔离性,而线程共享一个进程里面的资源,一个线程的崩溃会导致一个进程的奔溃,一个进程奔溃就会导致这个进程里面的线程全部奔溃。进程包含线程,一个进程中可以有一个线程,也可以有多个线程,每个线程都是独立的执行流,多个线程之间,也都是并发执行的。多个线程可以是在多个CPU核心上同时运行,也可能在一个CPU核心上通过快速调动,进行运行。线程更叫高效,节省资源。

2023-03-12 20:29:43 80

原创 Java包装类和泛型

在java中基本类型不是继承于object,为了能在泛型代码中支持这些基本数据类型,java就给每个基本数据类型设置了一个对应的包装类。包装类是基本数据类型对应的引用类型,这样就可以使基本数据类型也有面向对象编程的能力。当数值在-128到127之间是使用的Integer包装类中数组里面的值。最大的作用就是指定当前类要持有什么类型的对象,让编译器去做检查。在存储数据的时候,可以帮我们自动进行类型的检查。指定一个类的参数,将数据类型参数化。把基本数据类型转为对应的包装类。把包装类转为对应的基本数据类型。

2023-03-08 17:46:26 97

原创 操作系统之进程

软件是无法直接获取到计算机的硬件资源的,所有需要操作系统来进行同一的调度,软件可以通过操作系统 '间接' 的获取到计算机的硬件资源. 常见的操作系统有 linux, windows,Android IOS。文件: 一般硬盘上存储的数据,是以文件为单位进行整理存储的. 当这个进程打开一个文件的时候,就会产生一个文件描述符的东西,用来标识这个文件已经被打开了.进程在离开CPU的时候,就要把当前运行的结果存档,等下次这个进程回到CPU上时,在从之前的存档记录进行恢复,也就是说从上次执行的结果继续向下执行.

2023-03-07 23:30:27 152

空空如也

空空如也

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

TA关注的人

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