自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Redis】Redis持久化

在使用Redis作为缓存时,可以选择使用Redis的持久化功能来保证数据不会因服务器重启而丢失。RDB(快照)和AOF(追加式文件)

2024-05-20 22:24:20 478

原创 【MySQL】MySQL事务日志

事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?REDO LOG 称为 重做日志 ,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持 久性。UNDO LOG 称为 回滚日志,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。

2024-05-19 21:31:35 742

原创 【MySQL】MVCC

MVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的 并发控制。这项技术使得在InnoDB的事务隔离级别下执行 一致性读 操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样在做查询的时候就不用等待另一个事务释放锁。

2024-05-19 19:57:23 712

原创 【Java】从0实现一个基于SpringBoot的个人博客系统

使⽤SSM框架实现⼀个简单的博客系统共5个⻚⾯⽤⼾登录博客发表⻚博客编辑⻚博客列表⻚博客详情⻚⽤⼾登录成功后, 可以查看所有⼈的博客. 点击 可以查看该博客的正⽂内容. 如果该博客作者为当前登录⽤⼾, 可以完成博客的修改和删除操作, 以及发表新博客页面预览用户登录博客详情博客列表博客发布。

2024-05-09 13:01:52 1006 2

原创 【Java】从0实现一个消息队列中间件

曾经我们学习过阻塞队列(BlockingQueue),我们说,阻塞队列最⼤的⽤途,就是⽤来实现⽣产者消费者模型.⽣产者消费者模型,存在诸多好处,是后端开发的常⽤编程⽅式.在实际的后端开发中,尤其是分布式系统⾥,跨主机之间使⽤⽣产者消费者模型,也是⾮常普遍的需求.因此,我们通常会把阻塞队列,封装成⼀个独⽴的服务器程序,并且赋予其更丰富的功能.这样的程序我们就称为消息队列(MessageQueue,MQ)市⾯上成熟的消息队列⾮常多.其中,RabbitMQ是⼀个⾮常知名,功能强⼤,⼴泛使⽤的消息队列.咱们就仿照R

2024-04-25 11:06:48 978 1

原创 【RabbitMQ】RabbitMQ详解(二)

先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer 将消息投递到 broker 或者直接到queue 里了,consumer 从 queue 取出消息 进行消费,但某些时候由于特定的原因导致 queue 中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有了死信队列。上文中提到的问题,确实是一个问题,如果不能实现在消息粒度上的 TTL,并使其在设置的 TTL 时间及时死亡,就无法设计成一个通用的延时队列。

2023-12-23 23:43:41 1185

原创 【RabbitMQ】RabbitMQ详解(一)

RabbitMQ是一种开源的消息中间件软件,它实现了高度可靠的消息传递机制。它基于AMQP(Advanced Message Queuing Protocol)协议,可以在分布式系统中传递、存储和接收消息。RabbitMQ提供了一个可靠的消息队列系统,用于在应用程序之间进行异步通信。它的主要特点包括:消息队列:消息发送者将消息发布到队列中,然后接收者从队列中获取消息进行处理。可靠性:RabbitMQ使用持久化消息以确保消息不会丢失,并提供了消息确认机制来确保消息被正确接收。

2023-12-23 01:10:05 1830

原创 【Spring】Spring AOP

AOP(面向切面编程)是一种编程思想和技术,旨在将横切关注点与核心业务逻辑相分离,以提高代码的可维护性、可重用性和可扩展性。在传统的面向对象编程中,我们将功能模块封装成类,并通过对象的方法调用来实现特定的功能。但有些功能可能会跨越多个对象和方法,包括日志记录、安全控制、事务管理等,这些功能通常不属于核心业务逻辑,但需要在多个地方重复使用。AOP的核心思想是将这些横切关注点从业务逻辑中剥离出来,形成一个独立的模块,称为切面(Aspect)。

2023-12-15 22:01:23 907

原创 【Spring】SpringBoot日志

为什么要学习⽇志⽇志对我们来说并不陌⽣, 从JavaSE部分, 我们就在使⽤ System.out.print 来打印⽇志了. 通过打印⽇志来发现和定位问题, 或者根据⽇志来分析程序的运⾏过程.在Spring的学习中, 也经常根据控制台的⽇志来分析和定位问题.随着项⽬的复杂度提升, 我们对⽇志的打印也有了更⾼的需求, ⽽不仅仅是定位排查问题.

2023-12-10 22:38:11 1581

原创 【Spring】Spring统一功能处理

拦截器是Spring框架提供的核⼼功能之⼀, 主要⽤来拦截⽤⼾的请求, 在指定⽅法前后, 根据业务需要执⾏预先设定的代码也就是说, 允许开发⼈员提前预定义⼀些逻辑, 在⽤⼾的请求响应前后执⾏. 也可以在⽤⼾请求前阻⽌其执⾏.在拦截器当中,开发⼈员可以在应⽤程序中做⼀些通⽤性的操作, ⽐如通过拦截器来拦截前端发来的请求, 判断Session中是否有登录⽤⼾的信息. 如果有就可以放⾏, 如果没有就进⾏拦截.实现HandleInterceptor接口 重写方法@Component@Slf4j。

2023-12-10 22:37:08 1250 1

原创 【Mybatis】Mybatis操作数据库详解

MyBatis(前身为iBATIS)是一种Java持久层框架,用于简化数据库访问的开发。它提供了一种将SQL语句与Java代码解耦的方式,使得数据库操作更加灵活和易于维护。MyBatis的核心思想是通过XML或注解配置SQL映射关系,将SQL语句与Java方法进行关联。开发人员只需定义SQL语句,并将其映射到相应的Java方法上,MyBatis会自动执行SQL并将结果映射到Java对象中。

2023-11-24 13:31:58 788

原创 【Spring】SpringBoot配置文件

很多项⽬或者框架的配置信息也放在配置⽂件中, ⽐如:• 项⽬的启动端⼝• 数据库的连接信息(包含⽤⼾名和密码的设置)• 第三⽅系统的调⽤密钥等信息• ⽤于发现和定位问题的普通⽇志和异常⽇志等.

2023-11-10 22:49:23 258

原创 【Spring】Spring IOC & DI

Spring是一个开源的轻量级Java开发框架,它提供了全面的基础设施支持和广泛的应用程序级特性,使得Java开发变得更加简单和高效。Spring框架的核心特点包括依赖注入(Dependency Injection)、面向切面编程(AOP)、容器、事务管理等。依赖注入允许开发人员将组件之间的依赖关系外部化,这样可以降低类之间的耦合度,使得代码更容易维护和测试。面向切面编程则允许开发人员定义横切关注点,比如日志、事务管理等,从而实现模块化的开发。

2023-11-10 17:05:36 371

原创 【Spring】SpringWebMVC入门

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"SpringMVC".MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分• View(视图) 指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.

2023-11-03 15:45:25 506

原创 【MySQL】存储引擎

InnoDB是MySQL的 默认事务型引擎 ,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。数据文件结构:表名.frm存储表结构,表名.ibd存储数据和索引对比MyISAM的存储引擎, InnoDB写的处理效率差一些 ,并且会占用更多的磁盘空间以保存数据和索引。MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据, 对内存要求较高 ,而且内存大小对性能有决定性的影响。

2023-10-22 17:48:35 262

原创 【MySQL】逻辑架构

所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在 文件系统 上,以 文件 的方式存在的,并完成与存储引擎的交互。你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。在 MySQL8.0 以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。缓冲池管理器会尽量将经常使用的数据保存起来,在数据库进行页面读操作的时候,首先会判断该页面是否在缓冲池中,如果存在就直接读取,如果不存在,就会通过内存或磁盘将页面存放到缓冲池中再进行读取。

2023-10-22 17:30:37 886 1

原创 【牛客网】HJ91.走方格的方案数

【代码】【牛客网】HJ91.走方格的方案数。

2023-10-19 21:19:43 115

原创 【牛客网】另类加法

【代码】【牛客网】另类加法。

2023-10-19 21:09:43 95

原创 【Leetcode】176.第二高的薪水

【代码】【Leetcode】176.第二高的薪水。

2023-10-16 19:24:50 62 1

原创 【JVM】JVM的垃圾回收机制

分代算法和上面讲的 3 种算法不同,分代算法是通过区域划分,实现不同区域和不同的垃圾回收策略,从而实现更好的垃圾回收。这就好比中国的一国两制方针一样,对于不同的情况和地域设置更符合当地的规则,从而实现更好的管理,这就时分代算法的设计思想。标记过程仍与"标记-清除"过程一致,但后续步骤不是直接对可回收对象进行清理,而是让所有存活对象都向一端移动,然后直接清理掉端边界以外的内存。因此在老年代一般不能使用复制算法。我们将这个堆分为新生代和老年代,新生代中保存年纪小的对象,老年代中存放年纪大的对象。

2023-10-16 10:42:44 528

原创 【JVM】JVM类加载机制

JVM类加载机制

2023-10-16 00:27:50 386

原创 【JVM】JVM的内存区域划分

程序计数器的内存区域是唯一一个在jvm中没有规定任何oom情况的区域。

2023-10-15 23:57:07 366

原创 【Leetcode】二分查找合集

通过二分查找的方式,找到这段区间的左边界和右边界即可。

2023-10-05 00:31:51 258

原创 【Leetcode】滑动窗口合集

【代码】【Leetcode】滑动窗口合集。

2023-10-04 13:53:14 213

原创 【牛客网】JZ39 数组中出现次数超过一半的数字

将数组排序,再保证有结果的情况下,此时数组中间的数字就是想要的结果。

2023-10-02 18:44:02 82

原创 【牛客网】OR59 字符串中找出连续最长的数字串

【代码】【牛客网】OR59 字符串中找出连续最长的数字串。

2023-10-02 18:36:14 109

原创 【牛客网】排序子序列

【代码】【牛客网】排序子序列。

2023-09-27 00:30:20 76

原创 【牛客网】倒置字符串

首先将整个字符串逆序,再分别将每个单词逆序。

2023-09-26 23:51:54 62

原创 【牛客网】OR63 删除公共字符串

【代码】【牛客网】OR63 删除公共字符串。

2023-09-26 21:50:58 53

原创 【Java】Servlet API

Servlet中的doxxx方法的目的就是根据请求计算得到响应,然后把数据设置到HttpServletResponse对象中,tomcat会把这个HttpservletResponse对象按照Http请求协议的格式转换成一个字符串,通过Socket写会给服务器。我们写 Servlet 代码的时候, 首先第一步就是先创建类, 继承自 HttpServlet, 并重写其中的某些方法.请求对象是服务器收到的内容,不应该修改,因此上面的方法都是读方法而不是写方法。每次收到请求的时候,调用service方法。

2023-09-22 23:42:04 84

原创 【Java】第一个Servlet程序

找到对应版本,我是用tomcat8,就需要3.1版本的api。在中央仓库中找到servlet api。复制这段代码,放在maven依赖中。使用maven工具来打包。

2023-09-18 12:08:55 134

原创 【Java】应用层协议HTTP和HTTPS

签名在一定程度上区分不同的数据,常见的生成签名的算法有MD5和SHA系列以MD5为例,它的特点是定长:无论多长的字符串,计算出来的MD5值都是固定长度(16字节或者32字节)分散:源字符串只要改变一点点,最终得到的MD5值都会差别很大不可逆:通过原字符串生成MD5很容易,但是通过MD5还原成源字符串理论上来说是不可能的所以我们认为,如果两个字符串的MD5值相同,就认为这两个字符串相同如何判定证书是否被篡改呢?假设我们传入字符串1,根据这个字符1计算出hash1。

2023-09-17 22:41:42 723

原创 【Java】网络层协议IP协议

为了解决这个问题,引入了更大的IPv6(Internet Protocol version 6)地址空间,它采用128位二进制数表示,例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334。扩展的地址空间:IPv6采用128位地址格式,相对于IPv4的32位地址,IPv6的地址空间大大扩展,理论上可以支持约340万亿亿亿亿(3.4×10^38)个不同的地址。节省公共IP地址:通过使用私有IP地址和NAT机制,多个设备可以共享少量的公共IP地址,从而避免了IP地址的浪费。

2023-09-10 10:16:02 162

原创 【Java】传输层协议TCP

ACK是0表示这是一个普通报文,此时只有32位序号是有效的,32位确认序号是无效的ACK是1表示这是一个应答报文,这个报文的序号和确认序号都是有效的。

2023-09-08 20:55:46 702

原创 【Java】传输层UDP

再网络传输中,数据往往是通过光信号,电信号,电磁波作为介质来传播的,如果此时遭受到了一些磁场或者高能粒子射线等能够影响这些信号传播,此处数据就会出现错误,可能会导致出现。CRC(Cyclic Redundancy Check,循环冗余校验)是一种常用的错误检测技术,用于验证数据在传输或存储过程中是否发生了错误或篡改。UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并;UDP传输的过程类似于寄信。

2023-09-06 20:22:09 503

原创 【Java】自定义协议

自定义协议是指针对特定需求或应用场景而设计的网络通信协议,它不同于常见的标准协议(如HTTP、FTP等),而是根据具体需要进行个性化开发。自定义协议可以满足一些特定的需求,例如提升通信效率、增强安全性、适配特殊硬件等。以下是设计自定义协议的一般步骤:确定需求和目标:明确自定义协议的目的、应用场景和要解决的问题。例如,如果希望在低带宽环境下传输大量数据,可以考虑设计一种高效的压缩算法。定义协议格式:确定自定义协议的数据格式,包括消息头、消息体以及可能的附加信息。这些格式应考虑到协议的可扩展性和兼容性。

2023-09-06 19:24:07 558

原创 【Java】网络编程

第三步接收端创建DatagramSocket,通过DatagramPacket构造出一个存放数据报的空间,通过socket.receive()方法来接受一个UDP数据报,对于并发要求很高的服务端系统来说,这样的消耗是不能承受的。不管是客户端还是服务端Socket,都是双方建立连接以后,保存的对端信息,及用来与对方收发数据的。一次阻塞等待对应着一次请求、响应,不停处理也就是长连接的特性:一直不关闭连接,不停的处理请求。无连接,不可靠传输,面向数据报,有接收缓冲区,无发送缓冲区,大小受限,一次最多64k。

2023-09-05 13:11:44 608

原创 【Java】网络通信基础

对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。

2023-09-03 22:18:37 211

原创 【Java】文件操作和IO

抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢,一种合乎自然的想法出现了,注意:当完成流的操作时,必须调用close()方法,释放系统资源,否则会造成内存泄漏。注意:当完成流的操作时,必须调用close()方法,释放系统资源,否则会造成内存泄漏。说明:close()方法,当完成流的操作时,必须调用此方法,释放系统资源。

2023-08-31 19:52:13 353

原创 【Java】多线程(进阶)

CAS 操作的 ABA 问题指的是,在某个线程执行 CAS 操作之前,共享变量的值被改变多次,并最终返回到了原始值,因此在执行 CAS 操作时,虽然当前变量的值与期望值相等,但实际上它已经被其他线程修改过了。它们的获取顺序是相反的,即 thread1 先获取 lock1,再获取 lock2,而 thread2 先获取 lock2,再获取 lock1。公平锁是一种按照线程请求的顺序来分配锁的锁机制。**当多个线程竞争一个公平锁时,锁会按照先来后到的顺序将锁分配给等待时间最长的线程,保证了线程获取锁的公平性。

2023-08-30 18:43:29 487

空空如也

空空如也

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

TA关注的人

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