自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 动态规划(Dynamic Programming)

是运筹学的一种最优化方法,只不过在计算机问题上应用比较多。

2023-12-17 16:46:31 150

原创 SpringBoot 集成 Kafka 配置

*** 自定义分区器*/@Override@Override@Override/***/@Component@Overrideif (value.toString().contains("二")){return 2;}else if (value.toString().contains("一")){return 1;

2023-07-09 11:02:46 3464

原创 尚硅谷 Redis 查询缓存工具封装和秒杀整合Lua代码实现

解决方案:解决方案就是在每个线程释放锁的时候,去判断一下当前这把锁是否属于自己,如果属于自己,则不进行锁的删除,假设还是上边的情况,线程1卡顿,锁自动释放,线程2进入到锁的内部执行逻辑,此时线程1反应过来,然后删除锁,但是线程1,一看当前这把锁不是属于自己,于是不进行删除锁逻辑,当线程2走到删除锁逻辑时,如果没有卡过自动释放锁的时间点,则判断当前这把锁是属于自己的,于是删除这把锁。后续扩展:加锁失败时返回锁的 ttl,根据ttl 来判断是否要重试,具体思路可以查看。

2023-07-03 20:42:24 284

原创 Kafka Windows下启动命令

旧版用--zookeeper参数,主机名(或IP)和端口用ZooKeeper的,也就是server.properties文件中zookeeper.connect属性的配置值。新旧用--bootstrap-server参数,主机名(或IP)和端口用某个节点的即可,即主机名(或主机IP):9092。其中,2181是ZooKeeper的监听端口,9092是Kafka的监听端口。

2023-07-03 20:29:35 1734

原创 Spring Security 未认证请求处理源码解析

Overrideresponse.getWriter().println("必须认证之后才能访问!");@Bean// 添加自定义处理器// 注销登入处理器。

2023-05-07 22:27:41 287 1

原创 Spring Security 09 整合 JWT

【代码】Spring Security 09 整合 JWT。

2023-05-07 16:55:44 90

原创 Spring Security 08 CSRF

首先随便发起一次请求获取 XSRF-TOKEN发送请求携带令牌即可请求头中携带令牌 request.getParameter()获取不到数据的问题_zhanghuiyu01的博客-CSDN博客由于请求参数为 JSON,所以 request.getParameter(csrfToken.getParameterName()) 获取不到 请求参数中的 _csrf,此次请求将会被拒绝。但是如果是 GET 请求就不会有问题。 总结:POST 请求必须将令牌写道 Header

2023-05-07 16:51:47 93

原创 Spring Security 07 会话管理

当浏览器调用登录接口登录成功后,服务端会和浏览器之间建立一个会话 (Session) 浏览器在每次发送请求时都会携带一个 Sessionld,服务端则根据这个 Sessionld 来判断用户身份。当浏览器关闭后,服务端的 Session 并不会自动销毁,需要开发者手动在服务端调用 Session销毁方法,或者等 Session 过期时间到了自动销毁。

2023-05-07 16:45:20 120

原创 Spring Security 06 Rember Me

当用户通过用户名/密码的形式登录成功后,系统会根据用户的用户名、密码以及令牌的过期时间计算出一个签名,这个签名使用 MD5 消息摘要算法生成,是不可逆的。然后再将用户名、令牌过期时间以及签名拼接成一个字符串,中间用“:” 隔开,对拼接好的字符串进行Base64 编码,然后将编码后的结果返回到前端,也就是我们在浏览器中看到的令牌。

2023-05-07 16:43:30 482

原创 枚举+接口代替策略模式

例如传 id 则将 person 集合转换成 id 集合,大概就是这样的需求,看见项目代码实现是使用 if-else 实现,if 里面使用 stream.map 进行转换,由于if 分支太多了,看着不舒服,于是想能不能优化一下,第一想法是使用策略模式,但是为了一个区区的转换使用策略模式得不偿失。在百度一番后找到了两种不错的实现。

2023-05-04 20:43:13 89

原创 RabbitMQ 死信队列实现

➢ 使用rabbitTemplate.setReturnCallback设置退回函数,当消息从exchange路由到 queue失败后,如果设置了rabbitTemplate.setMandatory(true)参数,则会将消息退回给producer。消息的可靠投递小结 ➢ 设置ConnectionFactory的publisher-confirms=“true” 开启 确认模式。在方法中判断ack,如果为true,则发送成功,如果为false,则发送失败,需要处理。明天在研究下回调啥的。

2023-05-04 20:26:42 1334

原创 Spring Security 05 密码加密

实际密码比较是由PasswordEncoder完成的,因此只需要使用PasswordEncoder 不同实现就可以实现不同方式加密。

2023-04-22 16:40:33 1373 1

原创 Spring Security 04 自定义认证

发起认证请求,请求中携带⽤户名、密码,该请求会被 UsernamePasswordAuthenticationFilter 拦截在 UsernamePasswordAuthenticationFilter 的 attemptAuthentication ⽅法中将请求中⽤户名和密码,封装为Authentication 对象,并交给 AuthenticationManager 进⾏认证。

2023-04-22 16:11:28 1461

原创 Spring Security 03 认证处理器

spring security 自定义任务处理器

2023-04-22 15:52:03 219

原创 volatile 保证内存变量可见性的实现原理解析

Java代码在编译后会编程 Java 字节码,字节码在被类加载器加载到 JVM 里,JVM 执行字节码,最终需要转化为汇编指令在 CPU 上执行,Java 所使用的并发机制依赖于 JVM 的实现和 CPU 指令。多线程中 synchronized 和 volatile 都扮演着重要的角色,volatile 是轻量级的 synchronized,它在多处理器开发中保证了共享变量的"可见性"(当一个线程修改了一个共享变量时,其他的线程能读到这个修改后的值)。

2023-04-22 15:41:45 589

原创 Spring Security 02 搭建环境

Spring Security 环境搭建以及 默认用户源码解析

2023-04-15 11:26:01 793

原创 Spring Security 01 整体架构

在SpringSecurity的架构中,认证跟授权是分开的,无论采用什么样的认证方式,都不会影响授权,这是两个独立的存在 AuthenticationManager 主要实现类为 ProviderManager,在 ProviderManager中管理了众多 AuthenticationProvider 实例。在⼀次完整的

2023-04-15 11:03:33 286

原创 单例模式之静态内部类

从字面上来看,一个被称为静态嵌套类,一个被称为内部类什么是嵌套?嵌套就是我和你没有关系,自己可以完全独立存在,但我就是想借用你的壳用一下,来隐藏我自己什么是内部?内部就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我(所以内部类对象是以外部类对象存在为前提的)如果一个类被static修饰,那么只有一种情况,该类为静态内部类。若使用static修饰外部类,则将不会通过编译。

2023-04-15 10:38:57 690

原创 Java类加载过程

Java虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这个过程被称作虚拟机的类加载机制。在 Java 语言里面,类型的加载、连接和初始化的过程都是程序运行期间完成的,这种策略让 Java 语言进行提前编译会面临额外的困难,也会让类加载时稍微增加一些性能开销,但是却为 Java 应用提供了极高的扩展性和灵活性。Java 天生可以可以动态扩展的语言特性就是依赖于动态加载和动态连接这个特点实现的。

2023-04-15 10:25:37 1626

原创 Servlet教程

Java Servlet 组成部分介绍

2023-04-09 16:02:03 379

原创 InfluxDB教程

InfluxDB数据库教程

2023-02-07 19:03:43 2070

原创 WebSocket教程

SpringBoot集成WebSocket教程

2023-02-06 22:10:24 2070

原创 dynamic-datasource + Greenplum + MySQL 多数据源配置

Greenplum + Mysql 对数据源配置

2022-12-26 17:12:21 227

原创 MybatisPlus 多数据源配置

MybatisPlus 多数据源配置

2022-12-26 17:06:17 1955

原创 Mybatis常用标签

trim 元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是 prefix 和 suffix;可以把包含内容的首部某些内容覆盖,即忽略,也可以把尾部的某些内容覆盖,对应的属性是 prefixOverrides 和 suffixOverrides;正因为 trim 有这样的功能,所以我们也可以非常简单的利用 trim 来代替 where 元素的功能。set 元素会动态地在行首插入 SET 关键字,并会删掉额外的逗号(这些逗号是在使用条件语句给列赋值时引入的)

2022-11-27 17:44:51 195

原创 MySQL 之 InnoDB存储引擎(二)

事务是MySQL区别于NoSQL的重要特征,是保证关系型数据库数据一致性的关键技术。事务可看作是对数据库操作的基本执行单元,可能包含一个或者多个SQL语句。这些语句在执行时,要么都执行,要么都不执行。:语句要么全执行,要么全不执行,是事务最核心的特性,事务本身就是以原子性来定义的。实现主要基于undo log日志。:保证事务提交后不会因为宕机等原因导致数据丢失。实现主要基于redo log日志。:保证事务执行尽可能不受其他事务影响。

2022-11-14 18:52:29 331

原创 MySQL 之 InnoDB存储引擎(一)

InnoDB的逻辑存储结构如下图所示: 表空间是 InnoDB存储引擎逻辑结构的最高层,如果用户开启了参数 `innodb_file_per_table`(在8.0中默认开启),则每张表都会有一个表空间(xxx.ibd),一个MySQL实例可对应多个表空间,用于存储记录、索引等数据。段,又分为数据段(Leaf node segment)、索引段(Non-leaf node segment)、回滚段(Rollback segment),InnoDB是索引组织表,数据段就是 B+ 树的叶子节点,索引段就是 B

2022-11-14 09:40:25 1229

原创 Spring 之 javax.validation

作用:对 Controller 层接口的入参做校验。

2022-11-13 09:40:08 520

原创 @RequestBody 和 @RequestParam注解使用详解

注解@RequestParam接收的参数是来自requestHeader中,即请求头。通常用于GET请求,像POST、DELETE等其它类型的请求也可以使用。注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非、等类型的数据。通常用于接收POST、DELETE等类型的请求数据,GET类型也可以适用。在GET请求中,不能使用@RequestBody。

2022-11-10 19:03:08 29353 2

原创 Spring 事件发布机制

Spring 事件发布机制使用教程

2022-09-21 19:34:35 1223

原创 Spring 之 AOP

通过方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是的延续,是软件开发中的一个热点,也是框架中的一个重要内容,是的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的降低,提高程序的可重用性,同时提高了开发的效率。AOP、OOP在字面上虽然非常类似,但却是面向不同领域的两种设计思想。OOP()针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的划分。

2022-09-20 19:25:05 300

原创 Java 8 Stream 流根据属性去重

Java 8 Stream流根据属性进行去重操作

2022-09-19 19:39:38 2722

原创 Java 泛型

Java 泛型使用教程

2022-09-15 19:31:30 174

原创 Lombok 之 @Bulider

@Builder

2022-09-14 20:10:16 1981

原创 Optional使用教程

Java 8 之 Optional 使用

2022-09-14 20:01:23 3876

原创 RabbtiMQ

RabbitMQ 入门教程

2022-09-14 19:55:48 616

原创 MP的几种查询方式

Mybatis-plus查询方法的几种编写方式

2022-07-24 21:31:59 3666

原创 MapStruct

MapStruct的简单使用

2022-07-24 21:29:01 1602

原创 通过方法引用获取方法名

MP lambdaQuery根据方法引用获取属性名底层简单实现

2022-07-24 21:04:05 2302

原创 MP查询条件

MP常见方法

2022-07-21 20:05:47 2711

空空如也

空空如也

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

TA关注的人

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