自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

分享技术,共同进步!

士别三日当刮目相待!

  • 博客(92)
  • 资源 (2)
  • 收藏
  • 关注

原创 盘点JAVA中延时任务的几种实现方式

一、挂起线程;二、ScheduleService;三、DelayQueue;四、Redis监听过期key;五、时间轮;六、消息队列

2022-07-15 23:28:13 3629 1

原创 日常开发填坑

设置jpa.hibernate.ddl-auto: update启动服务器自动建表报错More than one table found in namespace (, ) - SchemaExtractionException因为在同一个数据源下存在多个相同表结构的schema。解决办法:指定schemajpa:properties:hibernate:default_schema.........

2022-07-10 23:56:30 861

原创 RabbitMQ(八) - RabbitMQ集群

在RabbitMQ 使用过程中难免会出现各式各样的异常情况,有客户端的,也有服务端的客户端的异常一般是由于应用代码的缺陷造成的,这个从RabbitMQ本身的角度无法掌控。对于服务端的异常来说,虽然不能完全杜绝,但是可以采取一些有效的手段去监测、管控,当某些指标超过闽值时能够迅速采取一些措施去修正,以防止发生不必要的故障(比如单点故障、集群故障等),而当真正发生故障时也要能够迅速修复。一、集群搭建......

2022-07-10 23:46:48 225

原创 盘点JAVA中五个重定向的方式

日常开发中,时常要用到重定向,有时甚至是同一个请求需要根据不同的业务场景进行不同的重定向,下面总结了5种重定向的方式

2022-07-08 23:32:14 10042 2

原创 解耦的利器:Spring中的发布订阅模式

你是否因为产品经理一个需求变更,要翻出布满灰尘的代码,一点点的进行修改,重新提测呢?你是否因为代码的耦合度太高,改动一块代码,就不得不翻阅关联的所有代码,一步步关联修改?这里推荐一个代码解耦的便捷方式,需求变更,业务逻辑调整,都不用修改核心代码就能完成需求——Spring中的发布订阅模式...

2022-07-08 16:06:13 833

原创 如何选择数据库ID字段类型?UUID or 雪花算法 or 自增整型?

UUID VS 自增数值型ID VS 雪花算法ID

2022-07-07 20:30:04 3900

原创 盘点IDEA的超实用快捷键以及插件

快捷键用于帮助我们更为快速的编码,阅读代码,而插件是我们编码过程中常常用于辅助开发的。若能熟练使用实用的快捷键,插件,对于解放我们的生产力有着不可比拟的作用。

2022-07-05 00:03:24 630

原创 小白都能看懂的MySQL超实用安装说明书(windows系统)

Mysql windows安装教程

2022-07-03 23:28:23 315

原创 还在为并发编程苦恼吗?轻松掌握volatile和CAS原理

JMM(JAVA Memory model,java内存模型)本身是一种抽象的概念,并不真实存在,描述的是一组规范或规则,通过这组规范定义了程序中各个变量(包括实例字段,静态字段,构成数组对象的元素)的访问方式。Java内存模型是围绕着并发编程中原子性、可见性、有序性这三个特征来建立的。可见性:一个线程对共享变量做了修改之后,其他的线程立即能够看到(感知到)该变量的这种修改(变化)。JMM关于同步的规定:线程解锁前,必须把共享变量的值刷回主内存。线程加锁前,必须把主内存的变量值更新到工作内存(

2021-03-07 15:06:05 357 3

原创 拷贝还分深浅?探究JS中的深浅拷贝

开发中遇到的问题需要对一个数组对象进行部分节点移除,但是该数组对象同时又是另一个表格的数据源,因此,会同时影响到表格数据。原先采用,新建一个数组,遍历源数据一个个push进被Object.assign()复制过的对象,但是发现,修改复制过的数组,仍会改动源数组。因此用下列方法解决:XX.getBlockTree(parms).then(x => { this.tableData = x.data; let copyArray = JSON.parse(JSON.stringify

2020-09-29 10:58:39 147

转载 Linux重置root密码与修改密码

在linux中,root的密码忘记了怎么办,怎么在Linux下修改和重置root密码的方法,如下操作:1.开机之后在内核上敲击e,然后编辑选项2.在linux16这一行,将红框内的内容改成rw rd.break根据提示,使用组合键CTRL+X进入密码修改3.进入到系统的紧急求援模式4.依次输入以下的命令5.重启,重启之后就可以使用刚才重置的密码登录了6.修改密码没有忘记自己的密码,进行修改:以root身份修改一般用户的密码:...

2020-09-02 23:58:19 2199

原创 小白都能看懂的MySQL超实用安装说明书(CentOS7.0系统)

一、环境准备1.1 查看CentOS是否有相应cglib版本我的安装包名为:mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz该安装包指定了glibc的版本,因此先查询下centos是否有该版本## 补充:glibc是GNU发布的libc库,即c运行库。## glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。strings /lib64/libc.so.6 | grep GLIBC命令示范:若没有对应版本,需要升级对应G

2020-08-05 15:53:21 1235 3

原创 重构(二)-代码的坏味道

重复代码(Duplicated Code) - 用Extra Method 提炼方法过长函数(Long Method) - 用Extra Method 提炼方法过大类(Large Class) - 用Extra Class 或 Extra SubClass 提炼类或子类过长参数列表(Long Parameter List) - 将相似参数封装到类中发散式变化(Divergent Chang...

2020-04-17 10:26:35 284

原创 重构(一)-重构的意义与原则

——本文是参考Martin Fowler的《重构》一书做的总结。(一)什么是重构?对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。(二)为什么要重构?2.1 重构改进软件设计如果没有重构,程序的设计会逐渐腐败变质。经常性的重构有助于帮助代码维持其原有的设计形态。2.2 重构使软件更容易理解“早期重构就像是擦掉窗户上的污垢,使你看得更...

2020-03-12 09:13:32 6740

原创 RabbitMQ(七) - RabbitMQ配置

一般情况下,可以使用默认的内建配直未有效地运行 RabbitMQ ,并且大多数情况下也并不需要修改任何 RabbitMQ 的配直 当然 为了更加有效地操控 Rab itMQ ,也可以利用调节系统范围内的参数来达到定制化的需求。RabbitMQ 提供了三种方式来定制化服务:(1)环境变量(Enviroment Variables)。 RabbitMQ 服务端参数可以通过环境变量进行配置,例如节...

2020-01-10 11:31:06 802

原创 RabbitMQ(六) - RabbitMQ的管理操作

一、多租户和权限每一个RabbitMQ 服务器都能创建虚拟的消息服务器,我们称之为虚拟主机( virtual host),简称为vhost 。每一个vhost 本质上是一个独立的小型RabbitMQ 服务器,拥有自己独立的队列、交换器及绑定关系等,井且它拥有自己独立的权限。vhost 之间是绝对隔离的,无法将vhostl 中的交换器与vhost2 中的队列进行绑定,这样既保证了安全性,又可以确保...

2020-01-10 00:12:27 529

原创 RabbitMQ(五) - RabbitMQ进阶

一、RPC(远程过程调用)二、持久化持久化可以提高RabbitMQ的可靠性,以防在异常情况(重启、关闭、宿机等)下的数据丢失。RabbitMQ的持久化分为三个部分:交换器的持久化、队列的持久化和消息的持久化。要确保消息不会丢失,需要将其设置为持久化。通过将消息的投递模式 (BasicProperties 中的 deliveryMode 属性)设置为"2"即可实现消息的持久化。MessageP...

2020-01-09 09:58:59 346

原创 RabbitMQ(四) - 队列的特殊属性

一、死信队列

2020-01-07 15:39:31 268

原创 RabbitMQ(三) - 消息的详细解读

mandatory当mandatory 参数设为 true 时,交换器无法根据自身的类型和路由键找到一个符合条件的队列,那么 RabbitMQ 会调用 Basic.Return 命令将消息返回给生产者。当 mandatory数设置为 false 时,出现上述情形,则消息直接被丢弃。交换器无绑定队列,或者路由键并未路由至队列,则会触发监听immediate当immediate 参数设为 tr...

2020-01-07 00:59:22 346

原创 RabbitMQ(二) - 原理概述及初级开发向导

RabbitMQ的整体模型架构:生产者与消费者Producer : 生产者,就是投递消息的一方。生产者创建消息,然后发布到RabbitMQ 中。消息一般可以包含2 个部分:消息体和标签( Label )。消息体也可以称之为payload ,在实际应用中,消息体一般是一个带有业务逻辑结构的数据,比如一个JSON 字符串。当然可以进一步对这个消息体进行序列化操作。消息的标签用来表述这条消...

2020-01-04 01:41:45 292

原创 RabbitMQ(一) - 初识RabbitMQ

前言RabbitMQ是什么?RabbitMQ 是目前非常热门的一款消息中间件,不管是互联网行业还是传统行业都在大量地使用。RabbitMQ 凭借其高可靠、易扩展、高可用及丰富的功能特性受到越来越多企业的青睐。什么是消息?消息( Message )是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串、JSON 等,也可以很复杂,比如内嵌对象。什么是消息中间件?消息队列中间件( ...

2019-12-19 22:55:53 155

原创 Spring Security渐入佳境(三)[附] -- 配置化重构,验证码逻辑优化重构,RememberMe源码解析

二、原理过滤器链的位置:原理图部分源码解析①首次登录时,输入正确的用户名密码,勾选记住我并登录:登录成功,此时进入AbstracrtAuthenticationProccessingFilter,将认证结果放入session, 执行rememberMeServices.loginSuccess;在loginSuccess中,做两步操作:同步数据库;添加到浏览器cookie。...

2019-12-13 17:56:52 187

原创 Spring Security渐入佳境(二) -- 自定义用户认证逻辑

(一)用户信息获取<1>UserDetailsService这是SpringSecurity提供的一个接口,用于根据登录名获取用户信息(从内存,数据库中…)。<2>实现接口UserDetailsService详解UserDetails请参考附录。@Componentpublic class MyUserDetailsService implements User...

2019-12-12 15:56:59 306

原创 Spring Security渐入佳境(三) -- 图片验证码,模拟短信登录以及RememberMe的使用

在开发中,有时会有这种需求:已经登录成功的用户在一段时间内不需要再校验用户民密码,直接有访问权限。这时就需要用RememberMe功能。一、如何使用?所需的依赖这里省略SpringSecurity的相关依赖以及数据库驱动的相关依赖。SpringBoot对jdbc的支持:<dependency> <groupId>org.springframework.boot...

2019-12-11 15:32:34 348

原创 Spring Security渐入佳境(四) -- 第三方应用授权登录

单点登录(Single Sign On,简称SSO),它的用途在于,不管多么复杂的应用群,只要在用户权限范围内,那么就可以做到,用户只需要登录一次就可以访问权限范围内的所有应用子系统。对于用户而言,访问多个应用子系统只需要登录一次,同样在需要注销的时候也只需要注销一次。①各应用间的关系:OAuth2.0授权服务端和第三方客户端不属于一个互相信任的应用群(通常都不是同一个公司提供的服务),第三方客户端的用户不属于OAuth2.0授权服务端的官方用户;而单点登录的服务端和接入的客户端都在一个互相信任的应用群(通

2019-12-11 09:26:28 1392

原创 Spring Security渐入佳境 -- 自定义安全框架

通过SpringSecurity编写自定义安全框架

2019-12-11 09:25:56 80

原创 Spring Security渐入佳境(一) -- Getting Start

一、概念Spring Security 是一个能够为基于Spring的企业应用系统提供声明式的安全訪问控制解决方式的安全框架,应用的安全性包括用户认证(Authentication)、用户授权(Authorization)和 攻击防护(防止伪造身份)。用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成...

2019-12-05 22:20:06 146

原创 JAVA调用MySQL递归查询相关的存储过程引发的思考

CREATE PROCEDURE `get_child_nodes` (IN `tableName` VARCHAR(100), IN `idKey` VARCHAR(50), IN `pIdKey` VARCHAR(50), IN `pId` VARCHAR(100), IN 'queryLevel' INT, OUT `result` VARCHAR...

2019-11-06 23:43:38 195

原创 OIDC认证授权协议

一、OIDC简介OIDC是OpenID Connect的简称,OIDC=(Identity, Authentication) + OAuth 2.0。它在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议。OAuth2是一个授权协议,它无法提供完善的身份认证功能,OIDC使用OAuth2的授权服务器来为第三方客户端提供用户的身份认证,并把对应的身份认证信息传递给客户端,......

2019-10-18 07:09:47 7975

原创 JSON Web Token (JWT) 与 Token认证

一、JWT是什么?JWT是目前最流行的跨域认证解决方案。JWT是一个定义一种紧凑的,自包含的并且提供防篡改机制的传递数据的方式的标准协议。二、基于token的认证与session认证的区别1️⃣传统的session认证:http协议是一无状态协议,所以如果用户向后台应用提供了用户名和密码来进行认证,下一次请求时,用户还是要带上用户名和密码进行用户认证。为了使后台应用能识别是哪个用户发出......

2019-10-16 22:56:33 1265

原创 单点登录无法绕过的话题:OAuth2.0协议

一、什么是OAuth2.0OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不兼容OAuth 1.0(即完全废止了OAuth1.0)。二、应用场景第三方应用授权登录:在APP或者网页接入一些第三方应用时,时长会需要用户登录另一.........

2019-10-15 16:54:00 1485

原创 Spring Security渐入佳境(一)[附] --SpringSecurity的基本原理及源码剖析

知识预备一、概念Spring Security 是一个能够为基于Spring的企业应用系统提供声明式的安全訪问控制解决方式的安全框架,应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。...

2019-09-06 07:03:12 197

原创 WireMock使用总结

一、WireMock 服务端二、引入WireMock依赖三、WireMock 客户端(为请求伪造响应内容)

2019-08-31 13:30:52 2445

原创 Swagger2的使用

Swagger2 可以动态生成Api接口文档,并且提供测试接口,降低沟通成本,促进项目高效开发。

2019-08-31 08:09:46 3265

原创 JAVA设计模式(十八) -- 备忘录模式

一、概念备忘录(Memento)模式又称标记(Token)模式。GOF 给备忘录模式的定义为:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。二、组成结构1) 备忘录(Memento)角色: 备忘录角色存储“备忘发起角色”的内部状态。“备忘发起角色”根据需要决定备忘录角色存储“备忘发起角色”的哪些内部状态。为了防止“备忘...

2019-08-27 12:01:37 87

原创 JAVA设计模式(十七) -- 状态模式

一、概念状态模式:允许一个对象在其内部状态改变时改变它的行为。二、组成结构1 ) 使用环境(Context)角色: 客户程序是通过它来满足自己的需求。它定义了客户程序需要的接口;并且维护一个具体状态角色的实例,这个实例来决定当前的状态。2 ) 状态(State)角色: 定义一个接口以封装与使用环境角色的一个特定状态相关的行为。3 ) 具体状态(Concrete State)角色: 实现状...

2019-08-26 11:45:28 112

原创 JAVA设计模式(十六) -- 责任链模式

一、概念责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。二、责任链模式的组成结构抽象处理者角色(Handler): 它定义了一个处理请求的接口。当然对于链子的不同实现,也可以在这个角色中实现后继链。具体处理者角色(Concrete Handler): 实现抽象角色中定义的接口,并处理...

2019-08-23 17:46:23 151

原创 泛型详解及其应用

泛型(Generics,通用的类型)的本质是为了参数化类型(通过泛型指定的不同类型来控制形参具体限制的类型)。Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。

2019-08-14 17:50:38 1049

原创 Spring中的拦截器、过滤器与切面

|类别|拦截器| 过滤器 | 切面|

2019-08-05 16:54:55 1198

原创 JAVA设计模式(十五) -- 观察者模式与发布-订阅模式

观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式。GOF 给观察者模式如下定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。(一)观察者模式的组成部分1) 抽象目标角色(Subject):目标角色知道它的观察者,可以有任意多个观察者观察同一个目标。并且提供注册和删除观察者对象的接口。目标角色往往由...

2019-08-02 18:23:42 215

6种JAVA设计模式.rar

6种JAVA设计模式的demo,包括:策略模式,组合模式,装饰模式,建造者模式,原型模式,代理模式。 想要详读java设计模式相关知识,可以参考本人JAVA设计模式相关博客。

2019-07-17

ORACLe数据库教程

详细描述了数据库的使用方法,增加对数据库的认识

2013-04-17

空空如也

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

TA关注的人

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