自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Security在6.0弃用WebSecurityConfigurationAdapter后该如何自定义配置介绍(新旧示例)

在旧版的配置中,Security需要我们写一个类去继承他的WebSecurityConfigurerAdapter并把这个配置注入到容器中在继承这个类后,我们可以在WebSecurityConfigurer里面去重写WebSecurityConfigurationAdapter类里面的一些方法来实现自定义过滤链等操作实现自定义过滤链需要重写configure(HttpSecurity http)方法这个方法的参数http采用的是链式设计,我们直接 ‘.’就可以进行设置。

2023-04-12 15:44:05 14622 8

原创 使用MyBatisPlus进行增删改查

MyBatisPlus不对MyBatis进行结构上的修改,仅做增强功能,帮助程序员快速开发

2023-02-23 23:09:22 11402 1

原创 Mockito单元测试&Mockito对Service层的测试案例

Mockito是一个流行的Java单元测试框架,专门用于模拟(mocking)和 stubbing(预设行为)。在软件开发的测试阶段,Mockito允许开发者创建并配置模拟对象来替代真实依赖项,这样可以在隔离的环境中对特定代码片段进行单元测试,而无需关心那些依赖对象的具体实现或外部服务的状态。所以在单元测试中,对于Service层的触及数据库的那一个部分,我们可以使用Mockito提供的工具,将那些访问数据库甚至说模仿请求的部分方法或者代码给模拟欺骗过去!!!也就说,

2024-02-24 23:38:34 2381

原创 Spring Cloud Gateway 的简单介绍和基本使用

网关是一种网络设备,它用于连接不同网络之间的数据传输。它是在网络层级上工作的,能够将数据从一个网络传输到另一个网络。网关可以是物理设备,如路由器,也可以是软件程序,如网络服务器。

2023-11-26 17:07:16 1459

原创 Spring Cloud LoadBalancer 简单介绍与实战

❀ LoadBalancer是一种流量分发机制,专业中文叫法“负载均衡”,这种流量分发可以通过软件或者硬件来实现服务端系统资源的均衡利用,提高整体系统的高可用和性能。要实现自定义策略需要三个步骤编写自定义策略类封装自定义策略类全局或者局部使用自定义配置类回到我们下面这张图。

2023-11-24 18:05:50 2517

原创 OpenFeign的简单介绍和功能实操

OpenFeign全名Spring Cloud OpenFeign,是SpringCloud开发团队基于Feign开发的框架,声明式Web服务客户端Feign是一种声明式、模板化的HTTP客户端,可用于调用HTTP API实现微服务之间的远程服务调用。它的特点是使用少量的配置定义服务客户端接口,可以实现简单和可重用的RPC调用。Feign实现了声明式调用,允许程序员只需定义接口并作出一些小的注释,就可以实现一个完整的客户端,从而开发简单,潜在的问题可以被检测出来,程序的可维护性和可读性也更好。

2023-11-02 23:02:30 1251

原创 Nacos 注册中心介绍与实操

服务实例启动时,将自身信息注册到注册中心,包括服务名称、地址、端口等。服务发现:消费者向注册中心查询服务,并获取服务实例信息来访问服务。服务健康检测:注册中心定期检测服务实例健康状况,过滤不健康实例。服务路由:提供服务的路由与负载均衡功能。服务监控:统计服务调佣次数,时长等,用于监控服务状态。服务更新:当服务实例信息变更时,向注册中心发送更新信息通知。通过注册中心,服务提供者和消费者只需与注册中心交互即可,从而实现服务的注册与发现,减低服务间的耦合度。注册中心详情页:重要参数说明分组。

2023-11-01 13:17:52 1166

原创 Nacos的安装和实操

Nacos是Dynamic Naming and Configuration Service的首字母简称,一个由阿里开发,用于云原始应用动态服务发现、配置管理和服务管理平台。

2023-10-27 16:46:25 2726

原创 JVM(Java Virtual Machine)G1收集器篇

本文参考《深入理解Java虚拟机》,本文主要介绍G1收集器的收集思想和具体过程(填上一篇文章留下的坑)

2023-10-26 18:33:21 718

原创 LeetCode 740.删除并获得点数---->打家劫舍

答案很简单,定义一个hash数组,下标意义就为这个数x=nums[i],但是需要注意的是,我们需要检查数据范围是否允许我们这么操作而不会导致空间超过限制。到这个一步,你就会发现这个玩意在取值的时候只需要考虑要么选择hash[2]+hash[4]或者hash[3]就可以了,这样就做到了一个选与不选的逻辑删除。这道题翻译成人话就是我可以在一个数组中随机获取一个x = nums[i],但是数字的x+1和-1全部都得删除(如果数组中存在的话),举个例子,假如你选择3,那么数组中的2和4就全部不能选了。

2023-10-26 11:53:51 275

原创 LeetCode 64.最小路径和(开辟额外空间(二维)、不开辟额外空间(二维)、优化(一维))

简单写写自己对这道题的拙见,如有意见或者建议可以联系笔者owo。

2023-10-26 11:50:24 164

原创 JVM(Java Virtual Machine)垃圾收集器篇

本文参考《深入理解Java虚拟机》一书,本文主要介绍几个经典的垃圾收集器:Serial、ParNew、parallelScavenge、CMS、Serial Old、Parallel Old、G1。

2023-10-22 17:16:01 708 4

原创 牛客TOP101-判断链表中是否有环

本文以Java为语言讲解【判断链表中是否有环】这一题,题目来源【牛客TOP101】

2023-10-21 15:58:55 144

原创 JVM(Java Virtual Machine)垃圾收集算法篇

本文参考《深入理解Java虚拟机》,主要介绍GC相关的算法,引用计数法、可达性分析算法、垃圾收集算法(分代收集理论,标记-清除/整理/复制)

2023-10-19 22:00:40 503

原创 JVM(Java Virtual Machine)内存模型篇

Java Virtual Machine是运行Java程序的基础,JVM基于C、C++实现,JVM有很多种类,但是这些虚拟机都必须按照《Java虚拟机规范》来进行实现。目前JDK使用的是HotSpot虚拟机。

2023-10-18 17:01:46 907

原创 快速排序(重点)

思想:选择最左元素作为基准点元素j指针负责从右向左找比基准点小的元素,i指针负责从左向右找比基准点大的元素 (),一旦找到二者交换,直至i,j相交最后基准点与i(此时i与i相等)交换,i即为分区位置i、j指针分别执行数组首尾,而我们的基准pv选择首从左往右找比基准大的值从右往左找比基准小的值当 i 和 j 的任务都完成后,就将二者的值进行swap,当左右指针相遇的时候,停止并且,pv指针的值和i指针进行交换这个时候就做到了以基准为分界线,左右两边被分成了两个部分的目的,记录pv当前所在位置。

2023-09-11 16:53:41 215

原创 冒泡排序及其优化

冒泡排序是一种简单且经典的排序算法。是通过反复交换相邻的未按顺序排列的元素,将最小(或最大)的元素逐渐“浮”到正确位置。O(n^2)稳定说大白话就是两个位置判断是否符合小到大(大到小)顺序,不符合则交换,符合则下一轮,图例(一轮):就上图所示,我们的数组{4,2,7,1,5},在交换排序这个过程中,需要两个指针进行辅助排序,两个指针是同时移动的,每移动一位就比较一次,这样就能将大的值往后放,小的值往前放,这样一轮下来,大的数是一定在被排序到数组往后位置的。

2023-09-11 15:33:34 294

原创 Java中的动态代理(JDK Proxy VS CGLib)

动态代理是指程序在运行过程中,动态代理的实现是基于某个特点类而生成的增强类,也就是说,动态代理生成的类会顶替掉原来的类而被执行从而做到达到增强的目前目前流行的动态代理机制有两种:JDK Proxy 和 CGLIB这两个人实现动态代理的方式不同,前者是要求被代理类必须继承接口,而后者则没有这个要求,因为他是通过生成代理类的子类来进行构造的。

2023-09-01 14:51:28 362

原创 Redis中的淘汰策略

本文主要说明在Redis面临key过期和内存不足的情况时,可以采用什么策略进行解决问题。

2023-08-19 15:54:45 476

原创 Redis的数据持久化(概念版)

持久化是指将数据在内存中的状态保存到非易失性介质(如硬盘、固态硬盘等)上的过程。在计算机中,内存中的数据属于易失性数据,一旦断电或重启系统,这些数据将会丢失。

2023-08-19 14:56:33 809

原创 Redis中的分布式锁及其延生的问题

首先问题就是什么是分布式锁,分布式锁就是分布式系统中实现并发控制的一种锁机制,它可以保证多个节点在同一个时间只有有一个能成功竞争到系统资源(共享资源或执行关键代码),防止造成并发安全问题。

2023-08-19 12:36:47 505

原创 Redis中的有序集合及其底层跳表

跳跃表(Skip List)是一种有序的数据结构,它由多层有序链表组成。每一层链表中的节点是有序排列的,而每一层链表中的节点指针可以跨越若干个节点,这样就提高了查询效率。跳跃表最底层的链表包含了所有的元素,而每一层链表都是下一层链表的子集。最顶层链表只有两个节点,即头节点和尾节点。每一层链表中的节点包含了一个成员(Member)和一个指向同样成员的下一层链表节点的指针。通过使用跳跃表,可以在时间复杂度O(logN)的情况下执行插入、删除和查找操作。这相比于传统链表的时间复杂度O(N)来说更加高效。

2023-08-19 11:41:02 597

原创 Redis的基本知识(偏八股)

本文篇概念,着重介绍Redis的执行效率、功能作用、数据类型、

2023-08-19 10:35:19 591

原创 HashMap源码探究之底“库”看穿

HashMap是Java集合框架中的一种数据结构,它实现了Map接口,并基于哈希表(Hash Table)来存储键值对。下面这张是HashMap的继承关系图:在HashMap中,每个键值对由一个键(key)和一个值(value)组成。键是唯一的,而值可以重复。HashMap使用哈希函数将键映射到存储桶(bucket)中,每个存储桶存储着一个链表或红黑树的数据结构(jdk1.8),用于解决哈希冲突。*哈希冲突是指不同的键经过哈希函数映射到相同的存储桶*举个例子: 假如。

2023-08-12 14:19:58 309

原创 RabbitMQ入门案例之Work模式

RabbitMQ的Work模式是一种简单的消息队列模式,也叫做“竞争消费者模式”或“任务分发模式”。在这种模式下,多个消费者同时监听同一个队列,当队列中有消息时,多个消费者之间会进行竞争,只有一个消费者能够获得这个消息并进行处理。其他消费者则需要等待下一个消息的到来。工作原理是这样的:生产者向队列中发送任务消息,多个消费者同时监听队列,当队列中有消息时,RabbitMQ会将消息分发给其中的一个消费者。

2023-06-21 16:14:47 2378

原创 RabbitMQ入门案例之Topic模式

RabbitMQ的Topic模式是一种基于主题的消息传递模式。它允许发送者向一个特定的主题(topic)发布消息,同时,订阅者也可以针对自己感兴趣的主题进行订阅。在Topic模式中,主题通过一个由单词和点号组成的字符串来描述。例如,“*.china.#”表示匹配所有以“china”为结尾的主题,比如“bj.china”或“shanghai.china.weather”等。( ‘ # ’ 和 ‘ * ’ 会再后面介绍)

2023-06-21 12:30:09 6611

原创 RabbitMQ入门案例之Direct模式

RabbitMQ中的Direct模式是一种消息传输模式,通常使用Direct Exchange(直连交换机)实现。在Direct模式中,生产者将消息发送到交换机,并指定消息的Routing Key(路由键)。交换机会将Routing Key与队列绑定进行匹配,如果匹配成功,则将该消息路由到对应的队列中。如果没有匹配成功,该消息将被丢弃或返回给生产者。在Direct模式中,每个消息只能被一个消费者接收。Direct模式常用于一对一的场景,例如订单管理系统中将订单分配给特定的处理队列。

2023-06-10 16:37:24 2370

原创 RabbitMQ入门案例之发布订阅模式

RabbitMQ中的发布与订阅模式是一种消息传递的方式,用于在分布式系统中传递消息。在该模式中,发送者(发布者)通过将消息发送到一个称为Exchange(交换机)的组件,消息将被路由到一个或多个称为Queue(队列)的组件。每个队列都有一个名称和一组绑定(bindings),指定接收哪些消息。消费者(订阅者)可以在指定的队列上进行侦听,以获取消息。该模式的一个重要特点是支持多个消费者接收相同的消息,通过使用多个队列和绑定实现。

2023-06-10 15:42:19 3561

原创 RabbitMQ中的AMQP协议与核心组成介绍

在RabbitMQ中为了传输数据,使用的是基于TCP/IP协议构造的AMQP协议。RabbitMQ的核心组成部分包括:Server、Connection、Channel、Message、ExChange、Virtual Host、Bingings、Routing key、Queue。

2023-06-06 18:53:59 946

原创 RabbitMQ入门案例之Simple简单模式

本文将介绍RabbitMQ的七种工作模式的第一种Simple模式的代码实现,编程工具使用的是IDEA,在RabbitMQ中的工作模式都是生产消费模型多线程实操&&阻塞队列所谓Simple模式就是简单的一个生产者p与一个消费者c,一对一的关系,如下图所示:在这个过程中,生产者会将消息通过channel通道放入到我们的消息队列queue中,消费者在察觉消息队列中有消息时,会从queue中获取消息。既然我们刚刚使用到了管理界面,那当然要做一下简单介绍,如下图:Queue功能释义queue1的详情页。

2023-06-06 09:25:23 446

原创 RabbitMQ安装、端口修改、简单的角色介绍

本文主要介绍RabbitMQ的安装、端口修改以及它内部的角色权限说明

2023-06-05 18:47:20 5536

原创 Spring Security如何使用JWT作为访问数据身份认证Token,并将身份数据存入Redis

本文将着重介绍在Spring Security中如何使用JWT作为数据访问的身份认证令牌,使用JWT这个将代替原来的cookie身份认证。

2023-04-13 17:53:44 2229 5

原创 前后端分离项目无法得到Spring Security 认证cookie而导致循环登录问题

那是因为内置的登录页面属于前后端不分离的项目,后端在自家人登录,自然信任自家人给了它通行证,**而在前后端分离项目中,我们是一定会出现跨域问题的!值,也就是说,后端没有给前端颁发认证cookie,导致前端没有获取登录用户的对应cookie,这样就会使每次请求都没有携带这个cookie,就无法做到身份认证,从而导致循环登录。那为什么会导致整个问题呢,明明数据已经发送过去了,并且也登录成功了,为什么会被后端认为是没有登录,这个时候就一定是少了什么,我们再次通过Fiddller抓包看看。

2023-04-12 17:01:10 1757

原创 Redis应用问题(缓存穿透&缓存击穿&缓存雪崩)

服务器访问Redis缓存,发现Redis缓存内部没有对应数据的key,就只能走数据库路线,当这种情况多的时候,就会加大数据库的压力,造成数据库奔溃,像这种绕过缓存去获取数据的情况叫缓存穿透比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。

2023-03-02 18:03:41 152

原创 Redis事务及其锁机制

目录一、Redis事务及其锁机制1.Redis的事务定义2.Multi、Exec、discard3.事务的错误处理(1)编译阶段错误(2)执行阶段错误 3.Redis中的的锁机制(1)悲观锁(2)乐观锁4.WATCH key [key ...]5.unwatch Redis事务是一个单独的隔离操作:Multi: 命令组队Exec: 执行队伍命令discard: 放弃组队 案例: 在组队的命令中,可能会出现两种不同的错误,一种发生在编译阶段,一种发生执行阶段 ※在编

2023-03-02 15:08:44 474

原创 Redis6的三种新数据类型

本文主要介绍Redis6的新三种数据类型:Bitmaps、HyperLogLog、Geospatial,文中会提到Bitmaps与set的功能区别与优点,HyperLogLog统计基数的优势等

2023-02-28 19:42:51 257

原创 Redis基本类型及其使用命令

String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M单键多值Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表。

2023-02-25 21:31:18 423 1

原创 八股文之浅谈ArrayList扩容机制篇(jdk1.8)

本文主要介绍ArrayList的扩容机制,详细说明底层在什么时候实现扩容的、是如何实现扩容的

2022-12-30 13:54:03 1793

原创 合并升序链表系列(Java)

新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。

2022-12-28 16:24:49 1910 3

原创 八股文之Java基础篇

本文章主要介绍Java基础方面的八股文:封装、泛型、注解、反射

2022-12-27 16:20:12 1232 2

空空如也

空空如也

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

TA关注的人

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