自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 win10 下 mvn install 报错:编码GBK不可映射字符

win10下JDK编码导致的报错:编码GBK不可映射字符

2023-11-29 20:22:33 503

原创 okta/sf平台实现saml2.0单点登录集成实战(详细步骤+完整代码)

步骤详细的完全实战文章,基于Springboot+SpringSecurity+Saml2.0实现单点登录

2023-06-06 17:28:13 3221 10

原创 mysql是如何插入一条数据的

在很多资料中,都会说mysql的innodb是基于B+树的聚簇索引。这里对B+树不做深入讲解,可以理解为对简单的平衡二叉树进行了改进,通常的平衡二叉树是一个父节点挂左右两个字节的,B+树的子节点,有两个,也可能有三个,所以也简称二、三树。众所周知,把数据构造成一颗二叉树,最主要的作用就是可以通过二分查找的方式,快速找到指定数据。那么聚簇索引主要也是利用了这个原理,且由于它子节点比较多,会减少这颗二叉树的深度,从而加快查询速度。那么到底什么是聚簇索引呢?

2023-01-19 08:30:49 3771

原创 三方系统集成SF(SuccessFactors),实现单点登录要点

在笔者先前的文章中,详细介绍了如何把一个自开发的三方系统,集成到okta或者IAS平台。经过笔者的实际工作经验,发现SF自己本身其实也可以作为一个单点登录平台来使用。

2022-12-21 19:10:45 1562 1

原创 Java以Graph方式发送Outlook、Exchange邮件(2022新版)——修订版,可运行

Graph发送exchange邮件,2022新版

2022-12-07 18:38:15 2263 6

原创 SAML message intended destination endpoint did not match recipient endpoint,问题解决及原理

彻底解决报错:SAML message intended destination endpoint 'XXX' did not match the recipient endpoint 'XXX'

2022-12-04 17:16:11 881

原创 Springboot启动流程分析(四):完成启动流程

Springboot启动过程完结篇

2022-11-27 12:19:25 1062

原创 Springboot启动流程核心知识点(二):bean的实例化过程

Java Bean实例化过程,getBean、createBean原理解析

2022-11-05 12:44:41 1470

原创 Springboot启动流程核心知识点(一):Spring自动装配原理

依托Springboot启动流程,结合源码,完整了解Springboot自动装配原理。

2022-09-10 17:10:43 508 3

原创 Springboot启动流程分析(三):刷新IOC容器之执行beanFactory后置处理器原理

不惮其烦,逐行解析,全景再现Springboot启动流程。

2022-09-09 11:30:02 752

原创 org.opensaml.common.SAMLException: Response issue time is either too old or with date in the future

okta 单点登录报错解决

2022-09-02 20:18:31 442

原创 Springboot启动流程分析(二):准备IOC容器相关信息

不惮其烦,逐行解析,全景再现Springboot启动流程。

2022-08-28 19:49:06 667

原创 Springboot启动流程分析(一):IOC容器初始化

干货满满,深入源码,全流程分析Springboot启动过程

2022-08-20 15:45:09 943

原创 SpringMVC核心流程分析(源码讲解)

SpringMVC核心流程分析

2022-08-17 15:02:34 520

原创 SpringMVC框架原理剖析(一):如何自定义一个@ResponseBody

在我们平常使用的@RestController注解中,就已经包含了对返回结果的处理:其关键点便在于@ResponseBody这个注解,在我们的普通MVC框架,在获取结果以后是要同时返回ModelAndView的。如果标注了@ResponseBody注解,则会触发默认的后置处理器,对返回结果进行处理,其核心方法如下:其核心方法便是实现接口HandlerMethodReturnValueHandler中的两个方法:通过supportsReturnType确认进入此类,然后执行handleReturnValue

2022-07-12 10:29:22 676

原创 ConcurrentHashMap核心方法分析(简略版)

ConcurrentHashMap

2022-07-06 18:00:20 272

原创 前k个高频元素

输入:arr={2, 2, 2, 2, 3, 3, 3, 1},k = 2;输出:[3,2];利用PrioriQueue的特性和Map的数据结构,返回前k个高频元素。

2022-06-29 21:55:07 86

原创 求滑动窗口最大值

Java求滑动窗口最大值

2022-06-26 11:38:59 80

原创 反转字符串,并去除前后多余空格

" hello world I am judy! " 反转为: "judy! am I world hello"步骤1:去除前后空格,中间多余空格去除步骤2:反转所有字符串步骤2:按单词反转public class StringTest { public static void main(String[] args) { char[] strArray = {' ',' ','h', 'e', 'l', 'l', 'o', ' ', ' ', 'w', 'o',

2022-05-23 14:29:12 375

原创 单链表删除倒数第n个链表节点

前置准备:public class NodeTest { static class MyNode { int val; MyNode preNode; MyNode nextNode; public MyNode(int val, MyNode preNode, MyNode nextNode) { this.val = val; this.preNode = preNode;

2022-05-13 20:47:26 375

原创 反转单向链表

前置:static class MyNode { int val; MyNode preNode; MyNode nextNode; public MyNode(int val, MyNode preNode, MyNode nextNode) { this.val = val; this.preNode = preNode; this.nextNode = nex

2022-05-13 20:44:45 132

原创 设计模式之监听器模式

监听器模式,主要由3个角色组成:事件(EventObject),监听器(EventListener),事件发布者(EventPublish)。其核心流程便是,由事件发布者发布事件,在事件发布前后分别放置监听器。其代码示例如下:1.事件public class MethodExecutionEvent extends EventObject { private static final long serialVersionUID = -71960369269303337L;

2022-04-16 10:13:13 2174 3

原创 基于saml2.0的平台(适用多种平台)单点登录配置,以okta为例

SAP中SCI平台、OKTA 平台单点登录 集成Java自开发平台

2022-04-13 18:15:34 8352 7

原创 Qaurtz报错:org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named‘xx‘available

目录NoSuchBeanDefinitionException报错解决NoSuchBeanDefinitionException报错原因分析1.容器未实例化指定类2.Qaurtz前台页面,bean名称配置错误3.Qaurtz框架在非集群环境下,使用同一个数据库,部署了多个版本的代码(重点)结语NoSuchBeanDefinitionException报错解决关于Qaurtz定时框架的运行原理,在文章《Qaurtz定时框架,是怎么运行的(源码讲解)》中有详细讲解,自以为

2022-03-26 18:10:04 3367 1

原创 手写一个简易数据库连接池

数据库连接池,一般用于后台应用与后台数据库的交互,其目的主要是控制服务器资源消耗,常用的有Druid、C3P0、Hikari。为了对数据库连接池有一个更深入的了解,我们手写一个简易连接池。其具体步骤如下:核心参数:空闲线程数 freeConnectPool活动线程数 activeConnectPool原理:1.根据配置文件参数,初始化连接池,设置初始线程数2.通过getConnection(),获取连接,如果空闲线程大于0,则直接从空闲线程取连接,此时freeConnectPool计

2022-03-18 11:18:49 2343 5

原创 Java简单实现HashMap

构造map接口:package com.extHashMap;import sun.awt.SunHints;public interface ExtMap<K,V> { V put(K k,V v); V get(K k ); interface Entry<K,V>{ K getKey(); V getValue(); V setValue(V v); }}构造HashMa

2022-03-15 14:38:37 1991

原创 Java简单实现List集合

根据list集合的原理,简单的实现一版原理,有助于更好的了解jdk源码。1.构造list接口:package com.arraylist;public interface ExtList<T> { boolean add(T t); T get(int i );}2.实现ArrayList:package com.arraylist;import org.springframework.context.ConfigurableApplicat

2022-03-11 16:28:52 581

原创 双向链表删除指定节点,JAVA实现

构造双向链表,删除指定节点:public class NodeTest { static class MyNode { int val; MyNode preNode; MyNode nextNode; public MyNode(int val, MyNode preNode, MyNode nextNode) { this.val = val; this.preNode =

2022-02-24 15:37:58 1767

原创 Qaurtz定时框架,是怎么运行的(源码讲解)

我们从一个小的业务场景开始。当一个springboot项目集成好Quartz框架之后,其前端界面如下:此时我们点击最右边的立即执行按钮,后台是如何执行的呢?和我们平常的同步执行方法不同,这个方法其实是异步执行的。其核心原理就是,先把需要执行的任务信息持久化到数据库,再通过Quartz自带的后台线程查询数据库,获取需要执行的定时任务。下面我们从源码开始分析:...

2022-02-23 11:42:51 1109

原创 jpa设置ddl-auto不生效

在一般的配置中,jpa自动生成表的配置为:spring.jpa.hibernate.ddl-auto = update笔者采用的是springboot的2.3.2.RELEASE版本,按照上面配置之后,总是不能生成表格。所以进入源代码,看了下具体情况:找到类DataSourceInitializedPublisher,可以发现其利用的Spring生命周期中的后置处理器:BeanPostProcessor,在entityManagerFactory实例化之后,判断是否初始化数据库,具.

2022-01-20 12:08:12 2690

原创 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

问题背景:在使用VPN的情况下,远程linux服务器运行mysql8.0的docker镜像。本机navicat软件连接可以访问,java的JDBC无法访问。解决方法:JVM启动加参数:-Djava.net.preferIPv4Stack=true详细报错如下:The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from .

2021-12-20 11:00:53 3182

原创 This scheduler instance (...) is still active but was recovered by another instance in the cluste

问题描述:这是关于Quartz服务部署的集群问题。先说结论,如果只有这一个报错可以不予理会,这是由于在Quartz集群部署引起的,原因是在集群环境中,对于同一个集群实例,只允许一个可用服务器来执行定时任务。PS:如果想要彻底解决,方便本地调试,可以设置org.quartz.jobStore.isClustered=false。实际过程:在单体服务中,引入了Quartz定时任务框架,且使用的是集群模式,当部署了公司的DEV环境以后,由于开发需要,还需要在本地启动服务,这就导致隔一段时间,log就会.

2021-12-13 18:09:34 12795 1

原创 springboot使用中,引入jar包冲突解决,通用方法

最核心的,看报错,仔细看控制台打印的输出日志。下面以具体的案例来说明如何操作。先看报错:***************************APPLICATION FAILED TO START***************************Description:An attempt was made to call a method that does not exist. The attempt was made from the following location:

2021-11-19 10:26:42 5815

原创 两个有序数组,合并后排序

以数组nums1={1, 3, 5, 9}和nums2={3, 4, 6, 8}为例,其求解思路如下:1、构造一个空数组,长度为8,名为ints={};2、比较nums1[0]和nums2[0],1<3,把1放在ints的第1位{1},由于nums1中的第一个 元素已经被使用,其当前索引后移一位,以后用下一位元素3和nums2的第1位元素3比较;3、比较nums1[1]和nums2[0],3不小于3,把nums2[0]放入ints第2位:{1,3};4、比较nums1[1]和...

2021-11-12 15:56:22 644

原创 getElementById取不到,为什么呢?

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>入职7天邮件模板</title> <!-- script需要放下面,等待html加载完成以后才能访问 --> <script type="text/javascript" defer="true"> let url = "ht.

2021-11-11 11:39:27 3210

原创 Springboot中ThreadPoolTaskExecutor、ScheduledThreadPoolExecutor和ThreadPoolTaskScheduler的区别和用法

刚开始看到这三个类,我看了很久也没看出它们的区别。先分别对其做个简短介绍。先介绍一下三个类的共性,都是为了对JVM资源进行合理分配,并用线程池的特性也实现。ThreadPoolTaskExecutor常用于项目中的异步任务处理,其UML关系如下:其配置如下:@Configuration@EnableAsyncpublic class AsyncConfiguration implements AsyncConfigurer{ @Override public E.

2021-11-05 11:26:53 4579

原创 Java中static和final关键字的区别

属性(域):private static int a = 1;仅有static属性时,代表这是一个静态属性,在JVM的加载阶段会给a赋一个初始值0。只有到了初始化阶段,开始初始化静态属性时,才会给a赋值为1。private final int a = 1;关于final的属性其实不太好理解,但是有一个快速记忆的窍门,就是把仅带有final属性的字段就当作不带任何修饰的普通字段,就可以了。但是有区别,区别就是final只能赋值一次,后续不能再有变动。体现在实践上就是final的赋值,只

2021-11-05 10:57:19 105

原创 Springsecurity改造Shiro项目踩坑

为了快速开发,借助一套快速框架做了后台管理端。由于我采取的鉴权是SpringSecurity(下称SS),而快速框架用的是Shiro,所以要对原本的Shiro框架进行舍弃,统一使用SS。问题:在统一鉴权方式的时候遇到了一个坑,特此记录。由于原本的管理端采用的只是单纯的springboot,以此为admin服务搭建了一套springcloud项目,另有一个自己搭建的app服务。在调试的过程中发现,app服务比较好的集成了jwt+SS鉴权,在不带token的情况下,直接访问app的接口会报错。.

2021-10-21 20:08:16 999

原创 Eureka源码解析之Eureka Cilent

在Springcloud中,注册中心是一个不可缺少的组件,eureka便是一个比较经典的注册组件。虽然现在eureka已经停止了维护,在实际项目中仍然会有不少应用,对其源码进行了解,能够更好的理解整个注册中心的功能。eureka根据功能的不同,分为客户端和服务端。本文主要探究的是客户端。对于客户端来说,想要把微服务注册到注册中心,一般来说都要引入如下pom文件:<dependency> <groupId>org.springframework.cloud&lt

2021-09-24 17:52:11 86

原创 快速排序实现

其思路主要是,取得数组的中位数(方式多种,本文采用中间索引为中位数),把数组中小于中位数的放左边,大于中位数的放右边。之后在分好的左右数组中,使用递归的方式,来执行上述的排序思路。代码及详细解释如下:// static int[] list = {9, 4, 0, 8, 5, 7, 6, 2, 3, 1}; static int[] list = new int[80]; static { for (int i = 0; i < list.l

2021-09-08 14:58:31 67

空空如也

空空如也

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

TA关注的人

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