自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 问答 (1)
  • 收藏
  • 关注

原创 教你如何实现自定义SpringBootStarter

教你如何实现自定义SpringBootStarter

2022-04-01 21:42:46 16625 5

原创 springboot+springsecurity+jwt实现基于token认证(可能有点详细)

准备工作1、新建一个springboot项目并导入下面依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency><dependency> <groupId>io.jsonwebtoken</gro

2020-11-02 14:45:43 1775 6

原创 手机H5如何对接支付宝登陆授权以及支付(H5网站支付)

场景需求:通过支付宝扫描二维码进入手机H5网站,获取用户唯一标识appid来标识用户以及处理逻辑。一系列操作后,调起支付窗口完成支付宝支付1、支付宝开放平台配置1、登陆支付宝开放平台中心,选择“ 网页&移动应用 ”,然后创建一个应用。此时该应用的状态为开发中,需要我们添加一些功能和信息后去审核,审核通过就成了已上线。就可以开始使用了。这里我们只需要两项功能:1、手机网站支付;2、用户信息授权除此之外还需要配置一下开发设置,如下图:具体配置可以参照上面官方的文档来。我这里只配了一个接

2020-05-18 12:01:00 6687 5

原创 一篇文章教你彻底理解ThreadLocal

ThreadLocal底层原理解析、ThreadLocal.ThreadLocalMap threadLocals、 ThreadLocal.ThreadLocalMap inheritableThreadLocals 、内存泄漏、泄露原因、ThreadLocal解决内存泄漏问题、线程数据隔离、传递

2023-03-11 21:02:33 725 1

原创 一文带你了解Spring中的事务管理

声明式、编程式事务怎么选?spring事务管理底层源码解析、spring中事务是跟线程绑定的,事务只能控制当前线程的操作。

2022-11-27 20:49:26 975

原创 一篇文章搞明白Java中的SPI机制

SPI机制是Java的一种服务发现机制,为了方便应用扩展。那什么是服务发现机制?简单来说,就是你定义了一个接口,但是不提供实现,接口实现由其他系统应用实现。你只需要提供一种可以找到其他系统提供的接口实现类的能力或者说机制。这就是SPI机制( Service Provider Interface)eclipse和idea里的插件使用就是通过SPI机制实现的。开发工具提供一个扩展接口,具体的实现由插件开发者实现,开发工具提供一种服务发现机制来找到具体插件的实现,这就达到了插件的安装效果。从而可以使用插件服务。

2022-11-13 21:18:44 4890 1

原创 一篇文章讲明白Java中的线程池(含源码分析)

线程池工作流程:当有任务提交到线程池后,会先判断当前是否有空闲线程,如果有则将任务交给空闲线程执行,如果没有,则会进入等待队列等待执行,如果等待队列已满。则会执行拒绝策略拒绝执行任务。Q:线程池是什么?A:线程池是一种由多个不同线程组成的池化技术。池化技术是一种针对一些比较稀缺的资源,提供一个可复用资源的技术。Q:线程池有什么作用?A:提高系统性能,避免频繁创建销毁线程。且方便统一管理,统一调度线程。Q:线程池怎么使用?

2022-10-30 22:00:38 432

原创 关于Java中的锁,看这一篇就够了(总结篇)

基本上我们理解的操作前对资源加锁,操作完后释放锁。说的都是悲观锁。悲观锁认为所有的资源都是不安全的,随时会被其他线程操作、更改。所以操作资源前一定要加一把锁、防止其他线程访问。乐观锁是一种特殊的锁,它认为所有的资源都是安全的,每个线程对资源的操作都是符合预期的,所以它不需要对资源加锁。那么问题来了,既然乐观锁不会对资源加锁,那它能不能保证线程安全呢?答案是:可以保证线程安全,且性能比悲观锁还要好。因为乐观锁在操作资源时,会采用一种确认机制来保证所操作资源未被其他线程更改过。

2022-10-24 22:27:32 13891 4

原创 设计模式太难学?Java设计模式之迭代器模式

迭代器模式是行为型设计模式中的一种,它提供一个迭代器对象用来顺序访问集合对象内数据,而不用暴露集合对象内部细节。java当中用来遍历集合的Iterator迭代器就是迭代器设计模式的一种运用一个集合对象最基本的功能应该就是提供存取以及查询能力。我们在使用一个集合对象时,最基本就是对集合对象进行存取或者遍历。使用迭代器模式时,会将集合对象拆分成存取和访问两个部分。存取元素由集合对象本身实现。引入一个迭代器对象,用来访问集合元素。Java当中的集合对象就是采用迭代器模式设计的,例如Iterator。...

2022-07-17 16:43:13 144

原创 设计模式太难学?Java设计模式之责任链模式

责任链模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。责任链模式又叫职责链模式,它是行为型设计模式中的一种。该模式通过创建一组对象,对象之间依次引用,形成一条对象链。适用于可能需要多个对象处理的事件场景。在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,请求会自动进行传递。所以责任链将请求的发送者和请求的处理者解耦了。比如:O

2022-07-10 19:34:40 110

原创 设计模式太难学?Java设计模式之组合模式

组合模式是属于结构型设计模式中的一种,它适用于树状结构类型的对象使用。用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性。怎么理解这句话呢?举个例子:一般电脑文件夹下面会包含不同的文件以及子文件夹,子文件夹里又包含文件和子文件夹……图示(来源网络):这种文件系统就是一个典型的树形结构。组合模式则是专门适用于这种树形结构对象的设计。整个文件系统可以看作一个整体,单个子文件或者文件夹可以看作部分。不止是文件系统,所有可以转成树形结构的对象都可以使用组合模式。比如:公司、部门、员工。组合

2022-06-18 17:39:03 151

原创 设计模式太难学?Java设计模式之桥接模式

桥接(Bridge)模式是属于结构型设计模式的一种,它是将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现的,从而降低了抽象和实现这两个可变维度的耦合度。桥接模式适用于有多种维度变化的对象,比如说:汽车,汽车从类型划分有轿车、suv、越野车、卡车等等。从颜色划分有红色、白色、黑色等等。从品牌划分就更多了。在软件系统里,设计这种可多维度变化、组合的对象类。就需要用到桥接模式。桥接(Bridge)模式包含以下主要角色。结构图示(来源网络):接着以上面汽车维度划分为例,讲解一下桥接模式和普通

2022-06-15 12:46:29 199

原创 设计模式太难学?java设计模式之适配器模式

适配器(Adapter)模式是属于结构型设计模式当中的一种,它是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。以现实生活中的案例举例:电源适配器。就是适配器模式的一种表现。我们生活用电一般是220V,而一般电器是不需要那么大的输出功率。比如电脑,为了能够正常给电脑供电,所以设计出了电源适配器做一个中间转换。用软件系统的角度来解读就是:有a、b两个系统。a系统有某些业务或者功能能力是b系统所需要的,但是b系统原有接口又兼容不了a系统。所以为了适配这两个系统

2022-06-11 17:24:11 99

原创 设计模式太难学?java设计模式之策略模式

策略模式属于行为型的设计模式。该模式通过定义一系列策略。当需要使用某一种策略时。我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如支付策略有微信支付、支付宝支付。登陆策略有第三方微信登陆、QQ登陆、手机号登陆等等。策略模式在结构上分为:结构图示(来源网络):我们以一个接入第三方支付的需求来介绍如何使用设计模式。需求是现阶段需支持微信支付和支付宝支付,后期可能增加银联支付、数字人名币支付等渠道。不使用设计模式的情况下会如何实现这种场景呢?封装一个支付服务类,分别编写微信支付方法、支付宝支

2022-06-05 17:10:34 176

原创 设计模式太难学?JAVA设计模式之抽象工厂模式

之前学习了工厂方法模式。发现其在简单工厂模式上做了些优化,从而使得你的工厂符合开闭原则、具有良好的扩展性。但是发现工厂方法模式对于一些复杂的产品创建,会增加类文件个数,加大系统开销。所以为了适应复杂产品的创建,引申出了另外一种工厂设计模式-抽象工厂模式抽象工厂模式的角色跟工厂方法模式的角色一致。分为:抽象工厂、工厂实现类、抽象产品、产品实现类、客户端抽象工厂模式的提出是为了解决复杂产品的创建问题,它跟工厂方法模式的区别就是:工厂不再只创建单

2022-05-01 21:17:11 538

原创 设计模式太难学?JAVA设计模式之工厂方法模式

设计模式太难学?简单工厂模式文章目录设计模式太难学?前言一、工厂方法模式二、简单工厂和工厂方法之间的区别简单工厂模式工厂方法模式总结简单工厂模式:工厂方法模式:前言之前学习了简单工厂模式,发现如果工厂要新增生产对象的话,就得修改工厂类,但这样就违背了开闭原则。为了解决这一问题,便衍生了下面这一个工厂方法模式。提示:以下是本篇文章正文内容,下面案例可供参考一、工厂方法模式先思考一个问题。当你的类、方法写的很复杂很不好扩展的时候应该如何解决?答:抽它!把一些可能公共的逻辑抽象起来。这

2022-04-23 18:55:31 1865 1

原创 SpringBoot集成elasticsearch使用

此文适合了解了es相关概念以及基础知识的同学阅读

2022-04-09 22:25:16 5514 4

原创 spring核心之Bean加载过程剖析

此文是从spring框架的源码进行剖析Bean加载的一个过程从springboot程序入口开始剖析

2022-04-05 23:19:11 2968

原创 RocketMQ之深入浅出

RocketMQ之深入浅出前言一、RocketMQ消息模型架构设计消息存储同步刷盘异步刷盘文章目录前言一、RocketMQ消息模型架构设计消息存储同步刷盘异步刷盘前言前言简单介绍一下什么是消息中间件,消息中间件又叫消息队列。它是在网络环境中为不同应用系统之间同步、异步提供稳定的消息传输系统。 常见的消息中间件有:RocketMQ、Kafka、RabbitMQ、ActiveMQ……等。 这里主要介绍RocketMQ。一、RocketMQ消息模型RocketMQ的消息模型是由:Producer、B

2022-03-30 23:45:59 333

原创 《来客宝》系统使用介绍

来客宝 会员 客户 系统 管理 理发店 超市

2022-03-05 21:14:16 1010

原创 一篇文章搞清楚什么是分布式事务

事务的特性原子性、一致性、隔离性、持久性。分布式事务:2PC、3PC、Seata

2022-02-02 13:48:18 1337

原创 假如你是Java面试官,你会问哪些问题?持续更新中……

Java面试、面试官会这样问

2022-01-25 14:55:47 1409 1

原创 ShardingSphere实战:SpringBoot整合Sharding-JDBC实现分库分表

目录前言一、概念分库分表水平拆分垂直拆分二、使用步骤1.准备2.依赖3.配置4. 验证总结前言教你如何使用Sharding-JDBC实现对数据库的分库分表。一、概念分库分表分库分表是当数据量大到一定程度时,对数据库、表进行一个合理拆分。以MySQL为例:单表的数据量建议最大不要超过千万级,索引树不要超过3层。否则就需对表进行水平拆分。由于高并发下单库的性能受限以及服务器的性能等方面原因,为了更好的提供服务,也需要将数据进行分片存储。也就是分库。在Sharding-JDBC中,分库被称为数据分

2021-09-23 22:05:41 466

原创 分布式系统中如何有效的生成唯一ID

背景:在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如支付流水号、订单号、用户编号等等。当数据量大到我们不得不分库分表处理时,如何保证ID的唯一性就成了问题。解决:方案一:数据库生成在单机系统中,我们一般采用数据库自增的方式生成唯一ID主键,显然分布式环境下不适用普通的自增方式。但是可以设置数据库自增的步长。mysql默认的自增步长为1。也就是:1、2、3、4……顺序下去。假设在分布式系统环境中,我们预先知道需要部署N台数据库实例,那么可以将这N台数据库实例的步长设置为N,然后分

2021-09-12 17:03:36 1162

原创 教你搭建一个springcloud微服务项目框架

目标:用maven搭建一个springcloud微服务项目,使用nacos作为服务注册。集成springcloud getway、springcloud openfeign、springcloud sleuth等组件的使用内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点

2021-09-07 23:13:02 1505

原创 使用Netty搭建Rpc框架,整合Nacos实现服务治理

基本介绍Netty是一个基于JAVA NIO的高性能网络通信框架,它屏蔽了NIO复杂的API操作,让我们得以编写很简单的程序就能获得一个高性能的通信组件。目前主流微服务之间调用方式有:RPC(Remote Procedure Call Protocol 远程过程调用协议)和 HTTP restful 两种。比较有代表性的微服务框架就是dubbox 和 springcloud。分别主要以RPC和RestFul方式进行服务之间调用。本文旨在学会如何使用Netty搭建一个简易的RPC框架。搭建原理首先

2021-08-01 15:35:37 3624 5

原创 Netty服务端启动过程源码简单分析

了解:Netty 是一个基于NIO的客户、服务器端的编程框架,它提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序服务端Demo:package com.yxj.netty.server;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import

2021-07-13 15:26:15 106

原创 MySQL底层索引的原理

MySQL引擎:MySQL索引是基于引擎级别,引擎分为InnoDB和MyISAM两种。虽然二者索引的底层都是由B+树实现。但在使用形式上又有所不同!MySQL索引:MySQL的索引分为很多种:主键索引、普通索引、联合索引等……这里主要讲主键、普通以及联合索引在两种存储引擎上的实现原理例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六

2020-12-29 21:42:06 843

原创 Linux从0到1搭建一个redis的哨兵sentinel模式集群

目标:从0到1搭建一个redis的哨兵sentinel模式集群内容:一、准备工作安装Centos7系统在官网下载最新版的redis(目前是6.0.9)在Centos7系统的任意目录下建一个任意文件夹,并将redis通过xftp工具上传指定文件夹二、开始安装1、开始之前,需要先升级一下你系统的gcc工具。(如果你的系统没有自带gcc,那么需要先下载)因为redis6版本需要gcc5.3以上的版本支持。而Centos7自带的gcc是4.xx版本。否则待会编译redis源码的时候会报错。#

2020-12-18 17:37:41 322

原创 Linux Centos7 安装nginx

目标:在centos7的环境下,成功完成nginx的安装及配置内容:环境要求:1、先安装nginx需要的一些环境工具,由于安装 nginx 需要先将官网下载的源码进行编译。编译依赖 gcc 环境,需要安装gcc工具。yum install gcc2、nginx的rewrite模块和http模块会使用到pcre正则表达式语法。所以需要安装两个安装包pcre和pcre-devel。第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码。yum install -y pcr

2020-12-18 09:47:50 73

原创 bash: /usr/local/java/jdk1.8.0_271/bin/java: 无法执行二进制文件: 可执行文件

Centos7安装配置java:Centos7安装配置java报错:bash: /usr/local/java/jdk1.8.0_271/bin/java: 无法执行二进制文件: 可执行文件问题描述:bash: /usr/local/java/jdk1.8.0_171/bin/java: 无法执行二进制文件: 可执行文件 原因分析:软件包下载错误,跟系统不匹配。解决方案:下载正确的软件包即可...

2020-12-17 15:07:30 10086 5

原创 Linux Centos7 安装Tomcat9并配置环境变量

下载Tomcat9:去官网下载Tomcat9的安装包,下载tar.gz版本的安装以及配置:在Centos根目录建一个software文件夹,将下载好的压缩包拖入文件夹内。步骤如下:mkdir /software ###在根目录建一个software文件夹将下载好的压缩包拖入文件夹内tar -zxvf tomcat***.tar.gz ###解压缩解压缩后,会生成一个文件夹安装就是解压缩!然后去配置系统环境变量。(这里环境变量可配可不配,不影响软件运行,配环境变量只是方便你在任何

2020-12-17 15:01:37 1150

原创 Linux Centos7安装配置JAVA环境

下载JDK8:去官网下载jdk1.8的版本,别下载错了版本,否则配置环境变量后会报错-bash: /software/jdk1.8.0_271/bin/java: 无法执行二进制文件安装并配置环境变量:在centos根目录,建立一个software的文件夹。用xftp工具将下载好的jdk1.8拖入software里,然后解压jdk**.tar.gz压缩包。步骤如下:1、“ cd / ” ###回到系统根目录2、 “ mkdir software ” ###创建software文件夹3、

2020-12-17 13:52:58 230

原创 Redis序列化报错:org.springframework.data.redis.serializer.SerializationException: Cannot serialize;

问题描述:org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is

2020-11-13 09:46:39 5965 2

原创 MySQL主从复制:同一台电脑Windows环境下如何搭建MySQL主从复制

文章目录前言主从原理一、准备工作二、搭建步骤总结前言一般我们在服务器上做数据库集群部署的时候都是需要最少两台物理机器。那么我们做为个人学习或者模拟搭建的时候,就可以参考这篇博文,实现一台物理机照样搭建好MySQL主从环境主从原理MySQL主从复制是依靠bin-log二进制文件来完成的。主库开启biglog日志后,每一条执行过的新增和修改语句,都会被记录到biglog日志里。然后从库会监听这个文件,一旦发现biglog文件有改动,则会起一个线程将biglog日志文件拉到从库环境并执行。从而达到数.

2020-11-12 15:58:16 1077

原创 微信支付实战:企业付款到用户零钱

场景介绍:企业付款为企业提供付款至用户零钱的能力,支持通过API接口付款,或通过微信支付商户平台(pay.weixin.qq.com)网页操作付款。1、商户号(或同主体其他非服务商商户号)已入驻90日2、截止今日回推30天,商户号(或同主体其他非服务商商户号)连续不间断保持有交易3、 登录微信支付商户平台-产品中心,开通企业付款。以上来自于官方文档的简单说明,具体可参照官方文档说明数据准备:首先,我们需要证书 apiclient_cert.p12证书,在微信商户平台(pay.weixin.qq

2020-05-22 11:43:52 1181

原创 AopAutoConfiguration matched 报错信息,已解决!

CONDITIONS EVALUATION REPORTPositive matches:AopAutoConfiguration matched: - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition) AopAutoConfiguration.ClassProxyingC...

2020-04-10 18:04:09 15297 5

原创 设计模式太难学!JAVA设计模式之简单工厂模式

有关设计模式,我看了多少遍就忘了多少次!!!痛定思痛,决定开始记录下来。工厂模式总共分为3个小类型:简单工厂模式:简单来说,就是创建一个工厂类。集中管理实现了同一个接口的类。比如说:现有接口A。类B实现接口A,类C实现A接口。现在创建一个工厂类Dpublic interface A{ void make();}public class B implements A{@Overri...

2020-03-31 14:49:03 169

原创 Linux环境下安装配置kafka

准备下载zookeeper,我这里用的是zookeeper3.5.5版本。(这里提下,要下载带bin的文件,这个是已经编译好的,不带bin的是源码)下载kafka,我用的是2.12-2.4.0版本Centos7系统,Jdk1.9版本安装zookeeper因为kafka是依赖于zookeeper的,所以要先安装zookeeper。首先在 /usr/local/目录下建立 zookee...

2019-12-31 17:08:08 236 2

原创 对HashMap的一次简单总结(源码分析)

简单概述jdk1.8以前,数组+链表jdk1.8及以后,数组+链表+红黑树基本知识:属性:默认的初始数组长度:16。最大容量:2的30次幂。容量长度总是为2的次幂(1转为2进制然后左移4位后转为10进制就是16。或者:1<<4 == 2的4次幂。至于为什么是2的次幂。因为这样可以是对象均匀分布,减少哈希碰撞)默认的加载因子:0.75。意思就是当你的HashMap里存...

2019-12-27 14:56:55 114

空空如也

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

TA关注的人

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