自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(211)
  • 资源 (2)
  • 收藏
  • 关注

原创 不同外网服务器安装ZLMediakit和WVP-pro

也就是今天更新了前后端分离部署的方式,但是由于是昨天开始研究的,这里就没有动,仍然是一个。总体来说,其实没有什么难点,只是比较消耗服务器性能。相较于WVP来说,ZLM方便很多。建议使用docker安装,因为使用其他模式不会。这里主要写配置文件,使用的是。部署方法可以参考官方网站。其他的配置的开发者都会。改为要应用的文件,默认是。这里全程参考了这篇博客。wvp-pro的作者在。需要注意一点:需要将。

2023-03-16 17:11:06 1726 2

原创 Flowable工作流——基础篇

Flowable是BPMN的一个基于Java的软件实现,但是不仅仅限于BPMN,还有DMN决策表和CMMN Case管理引擎,并且有自己的用户管理,微服务API的功能,是一个服务平台。是由开发了Acitivity6的开发人员,再次升级开发的。

2023-01-10 09:14:23 531

原创 Redisson解决分布式锁

是一个在Redis基础上实现的Java驻内存数据网格,提供了一系列分布式的Java常用对象,还提供了很多分布式服务。提供了使用Redis的最简单和最边界的方法。宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中的放在处理业务逻辑上。

2022-09-08 14:46:45 436

原创 使用reids实现分布式锁及高并发下解决reids数据不一致问题

同样以上次的订单为案例,演示高并发下库存问题。在redis设置一个string类型的库存剩余。引入redis依赖这里因为都是默认:地址和端口:localhost:6379,用户名密码都为空,数据库为0,不需要进行额外的配置。修改方法:使用Jmeter进行压力测试(10个用户,每个用户10次)。发现这里数据出现了异常。在redis客户端中,使用下方:修改方法:使用Jmeter测试,发现可以解决并发下数据异常问题。缺陷分析:就是简单的使用的方法去调用redis的命令。优化: 将递归

2022-09-07 08:11:15 644

原创 高并发使用JVM锁和MySQL锁解决数据不一致问题

性能:一条sql锁>悲观锁>JVM锁>乐观锁。在业务场景允许的情况下肯定优先选择一条更新sql自带的默认锁啊。如果是多读少写,争抢不是很激烈的情况下优先选择乐观锁。如果写入的并发量比较高,而且经常出现锁冲突,为了避免出现锁冲突而进行自旋的情况越来越多,优先选择悲观锁。

2022-09-04 20:40:31 721 1

原创 ElasticSearch入门之HTTP和JavaAPI操作

本次下载的是windows下的7.8.0版本。下载完成之后解压启动双击文件。9300为内部集群通信端口,9200为RESful端口。访问,出现如下界面,就表示访问成功。

2022-07-15 09:58:05 386

原创 函数式编程之Optional接口,函数式接口和方法引用

使用来创建对象:无论参数值是否为空都不会抛出异常。使用来创建对象:必须要保证当前参数的对象不能为空,否则同样会抛出空指针异常。使用来创建对象:会返回一个空的对象。1.1.2 安全消费值使用方法来对其中的值进行消费操作(建议使用lambda表达式),不为空时才会运行其中的代码。1.1.3 安全获取值如果使用方法来获取,当内部的数据为空时会出现异常,即存在值就返回值,不存在就抛出异常。使用:设置一个默认值,数据为空就返回默认值,存在数据就返回数据值。例如:获取当前的值,如果当前不存

2022-07-07 18:54:29 412

原创 函数式编程之Lambda表达式和Stream流

在方法调用传入匿名内部类时,在匿名内部类使用idea的快捷键: 可以选定lambda表达式。多线程创建方式:lambda创建线程:自定义方法:普通调用方法:简化:自定义方法2:普通调用:lambda简化:自定义方法3:普通方法调用:lambda优化:自定义代码3:普通调用:lambda:1.1.2 lambda表达式省略规则参数类型可以省略;方法体只有一句代码时大括号和唯一的代码的分号可以省略;方法只有一个参数

2022-07-07 10:00:53 319

原创 微服务之分布式事务Seata

单体应用被拆分成微服务应用,原来的三个模块,被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局一致性问题没办法保证。一次业务需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题。Transaction ID - XID:本次业务的全局唯一事务ID,多个数据源和微服务之间统一且唯一的事务ID。三组件:处理过程:下载地址,这里下载的是0.9版本;修改:修改数据库配置:创建数据库,并执行下方sql

2022-06-20 15:30:58 158

原创 微服务之服务限流和熔断Sentinel

新建moudule:;依赖:配置文件:启动类:controller:启动之后,由于sentinel是懒加载机制,必须执行一次当前微服务的访问:,才可以看到:例如,这里如果超过设置的阈值,就会对进行访问限制。默认的冷加载因子是3,在设定的预热时长内最多承受阈值10/3的QPS,当超过预热时长(5秒)后可以达到最大阈值。如果超过当前设置的阈值(1),则等待20000毫秒。不存在半开状态,只有开和关。断开方式:修改代码:这里让睡2秒。配置RT:如果一秒钟进来的请求大于等于5,

2022-06-16 20:45:45 767

原创 微服务之注册及配置中心Nacos

注册中心区别:直接使用docker安装:访问:http://localhost:8848/nacos/index.html,出现如下界面,默认用户名和密码都是。分别新建module:和9002、9003;依赖:配置文件:记得三个提供者端口不同。主启动类:记得不同提供者类名不同。业务类:启动三个微服务测试:可以看到三个服务实例新建module:;依赖:配置文件:配置RestTemplate启动类:业务类:访问测试:可以看出nacos实现了负载

2022-06-15 20:11:49 1038

原创 微服务之消息驱动Stream和请求链路跟踪Sleuth

标准化的消息队列,生产者和消费者之间必须走特定的信道来传递信息,信道里面的消息只有被订阅了之后才会有消息处理器来接收。Stream设计方案:通过定义绑定器作为中间件,完美地实现了应用程序与消息中间件之间的隔离,通过向应用程序暴露统一的信道。使得应用程序不需要再考虑各种不同的消息中间件实现。Binder:新建module:依赖:配置文件:主启动类:发送消息接口:发送消息接口实现类,注意导包位置。controller:启动测试:可以看到新的交换机新建两个基本相同的modu

2022-06-14 20:00:17 267 2

原创 微服务之服务配置Config和服务总线Bus

Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供一个中心化的外部配置。分为服务端和客户端:作用:新建module:依赖:配置文件:主启动类在当前项目下,新建配置文件并提交到git测试。prod:dev:test:确保gitee已经提交成功:访问成功。新建module:;依赖:新建配置文件:,系统级配置文件,优先级高,优先于application.yml加载。主启动类:新

2022-06-13 15:33:04 347

原创 微服务之服务网关Gateway

Gateway是在Spring生态系统之上构建的API网关服务,基于Spring5,SpringBoot2和Project Reactor等技术。Gateway旨在提供一种简单而有效的方式来对API进行路由,目标是代替Zuul。为了提升网关的性能,Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能Reactor模式通信框架Netty。Gateway的目标提供统一路由方式且基于Filter链的方式提供了网关基本的功能,安全、监控/指标、限流等。Gateway是基于异步非

2022-06-12 20:35:29 3131 1

原创 微服务之服务降级Hystrix

Hystrix是一个用于分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。当微服务的某个服务单元发生故障之后,通过断路器的故障监控,向调用的方法返回一个符合预期的、可处理的备选响应,而不是长时间的等待或抛出调用方法无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要的占用,从而避免了故障在分布式系统的蔓延。新建moudle:依赖:配置文件

2022-06-11 16:13:07 741

原创 微服务负载均衡Ribbon和OpenFeign

实际上,在引入下方依赖时,已经在服务调用端就已经引入了Ribbon。getForEntity和getForObject的区别:以如下代码演示:因为前后端分离大趋势,要比用的多。post请求的也是同理。Ribbon中的负载均衡规则主要是实现了接口的类。自带轮询规则:替换负载均衡方式(在order80下修改):负载均衡的配置文件,不能放在被能够扫描到的子包的下面,否则配置类就会被所有的Ribbon客户端共享,无法特殊定制化。新建一个包,与主启动类父包同层级,如图。负载均衡配置类:在包下新建:修改

2022-06-10 17:23:26 434

原创 微服务注册中心eureka,zookeeper和consul

eureka采用CS架构设计,作为服务注册功能的服务器,它是服务注册中心。系统中的其它微服务使用eureka的客户端连接到eureka server 并维持心跳连接。这样系统的维护人员就可以通过eureka server 来监控系统各个微服务是否正常运行。在服务注册与发现中,有一个注册中心。当服务器启动的时候,会以别名的形式把当前自己服务器的信息注册到注册中心上。另一方可以去注册中心获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架核心设计思想:在注册中心上,因为注册中心管理每个服务与服

2022-06-10 10:18:43 280

原创 微服务概念和项目构建

新建maven父项目,选择下图选项。修改父pom文件忽略maven的test新建model选择maven项目,名称为修改pom新建SpringBoot配置文件新建SpringBoot启动类数据库表和实体类封装返回类dao接口dao层xml实现service层controller层4.2 抽取公共类和开启热部署4.2.1 抽取公共类使用mavn新建module:引入依赖:将4.1中服务提供者的实体类移动到当前项目下:将当前项

2022-06-08 21:04:51 127

原创 SpringSecurity前后端分离授权

在SpringSecurity中,默认使用FilterSecurityInterceptor来进行权限校验。在FilterSecurityInterceptor中会从获取其中的,然后获取其中的权限信息。判断当前用户是否包含访问资源的权限。因此需要将权限信息存入,然后对资源设置相应的访问权限。开启配置:类中添加如下注解:限权访问:判断当前用户是否拥有某权限。1.2.2 封装权限信息修改登录服务,给定一个固定权限集合来模拟:修改类,让SpringSecurity内部可以获取权限信息。

2022-06-07 18:40:09 707

原创 SpringSecurity前后端分离登录认证

SpringBoot使用的是2.7.0版本依赖:创建一个:访问测试:可以看到可以访问成功重启项目之后发现接口无法再次进行访问,取而代之的是Security的登录页。此时的默认用户名是,密码会在控制台输出。核心过滤器:1.2案例认证流程:登录流程:校验过程:引入redis:如果认证之后害需要通过JWT中的对数据库进行查询,消耗太大,可以存储入到redis中。实体类:引入数据库相关依赖:配置mapper添加注解扫描构建登录接口:实现中的类,自己实现登录逻辑封装登

2022-06-06 17:02:08 5155 5

原创 redis分布式锁

设置锁的同时设置过期时间:代码演示:UUID优化:如果线程A在加锁并设置过期时间之后,当前服务器A卡顿,并且过期时间以到,线程B再进行加锁,此时线程A反应过来,执行释放锁代码,此时释放的就是线程B的锁。因此可以使用UUID来标记锁来防止误删。LUA脚本优化:当线程A将要执行手动释放锁时,锁过期时间到了,自动过期,此时线程B就获取到了锁,由于A已经判断完成UUID相等,因此此时线程A释放的是线程B的锁。导致互相干扰。即不存在原子性。lua脚本类似于redis事务,有原子性,不会被插队。1

2022-06-05 10:13:12 119

原创 重拾MySQL之锁

加锁:如图加锁之后,进行查询可以执行,但执行删除时回进入阻塞状态。释放锁:执行释放锁之后,阻塞的语句也回立即执行。缺点:解决方案:在InnoDB引擎中,在执行备份时加上参数来完成不加锁的一致性备份。1.2 表级锁1.2.1 表锁加锁表共享读锁:只能读,不能写,切不会阻塞其它客户端的读。如图,对表加锁之后,当前会话客户端和其它客户端均可以查询,但当前客户端执行更新无法进行;其它客户端执行更新会进入阻塞状态,直到当前客户端释放锁才会执行语句。表独占写锁:即当前客户端独占(可以读和写

2022-06-05 09:02:29 121

原创 redis之事务和持久化

组队时某个命令失败了,执行时整个的所有队列都会被取消;执行阶段某个命令出现了错误,只有报错的命令不执行,其它的命令依然执行,不会回滚。悲观锁:即每次操作都只允许一个线程进行操作,只有当当前线程释放锁之后,其它线程才可以操作。乐观锁:拿数据时都默认认为不会被修改,在更新时判断一下期间别人有没有更新数据,可以引入一个版本号进制用来判断是否更新。适用于多读的场景,可以提高吞吐量。乐观锁展示:使用来监视一个或多个key,如果在事务执行之前key被其它命令改动,这个事务将被打断。客户端A,监听,对客户端B也开

2022-06-02 16:54:47 234

原创 redis安装基本操作和数据类型

启动redis并设置密码进入redis认证密码2. Redis相关介绍默认有16个数据库,从数组0开始,默认使用的是0号库。单线程+多路IO复用:单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程;IO多路复用指多个channel或者网络IO,共用一个或者少量线程来处理。3. 基本数据类型3.0 常见key操作查看当前库的所有key:判断key是否存在:查看key类型:删除key

2022-06-01 15:29:18 193

原创 MySQL进阶之SQL优化

1.2 手动事务提交1.3 主键顺序插入1.4 大批量插入数据例如:配置:因为底层的B+树种维护了一个双向指针,保证有序,在新增数据超过当前页时会进行溢出,如果是有序的,直接开辟一个新的页:如果是乱序主键插入:由于新的元素无法放到当前页中,会将当前页的后50%分裂出去,与新元素重新放到一个新的页中,而后更改指针指向,这种现象称为页分裂。

2022-06-01 09:23:51 201

原创 MySQL进阶之存储引擎和索引

1. 存储引擎1.1 体系结构MySQL体系结构主要分为四层:连接层:完成连接处理、授权认证等相关的安全方案;服务器也会验证接入的客户端的操作权限;服务层:完成大多数的核心服务功能,SQL接口、缓存的查询、SQL分析和优化、函数等。引擎层:负责MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同存储引擎功能不同。存储层:讲数据存储在文件系统上,完成和存储引擎之间的交互。1.2 存储引擎简介存储引擎就是存储数据、建立索引、更新/查询数据的实现方式。存储引擎是基于表的

2022-06-01 08:26:25 246

原创 再看Spring之Spring5新特性——【Webflux】

1. Spring5新功能Spring5基于JDK8并且兼容JDK9。并且自带一个日志框架1.1 @Nullable注解可以添加在:属性,表示属性值可以为空;方法,返回值可以为空;参数,参数可以为空。1.2GenericApplicationContext函数式风格...

2022-05-31 11:23:27 573

原创 再看Spring事务

1. 事务数据库操作的最基本单元,逻辑上的一组操作,要么都成功,如果一个操作失败那么这组操作都会失败。1.1 事务的四个特性(ACID)原子性:操作不可分割,要么都成功,要不都失败;一致性:操作前后的总量是不变的;隔离性:同时操作同一条数据不会互相影响;持久性:修改表中数据。1.2 环境搭建这里以银行转账为例子来展示Spring事务。包含两个核心业务,即转款和收款。Sql:SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-

2022-05-29 17:15:14 99

原创 再看Spring之AOP

1. AOP面向切面编程(Aspect Oriented Programming),通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,调高程序的可重用性,提高开发效率。即可以在不修改原有功能的前提下,在执行某功能时给其添加新的功能。这里以登录为例:原有登录功能在原有登录功能的前提下,新增鉴权功能:1.1 实现原理...

2022-05-28 21:20:05 79

原创 再看Spring之IOC

1. IOC容器控制反转(Inversion of Control),面向对象编程一种设计原则,用来减低计算机代码之间的耦合。依赖注入(Dependency Injection,DI),是IOC的使用方式方式。 在创建对象时通过控制反转,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它,即注入到对象中。1.1 对象引用1.1.1 直接引用如图中,使用什么对象直接实例化。这种做法耦合度很高。1.1.2 工厂模式不直接在需要的地方创建对象,而将需要的对象都封装到一个工厂类中,需

2022-05-28 15:36:12 151

原创 数据结构【Mysql引擎 】之B+ 树

1. 存储底层1.1 硬盘这里主要解释的是机械硬盘,理解了如何进行IO才能更好的清除MySQL使用B+树的优势。机械硬盘整体结构:硬盘由多个盘片组成,每个盘片包含两个盘面,每个盘面有一个对应的读写磁头(由上到下从0开始编号),。盘面:盘面中灰色的圆环是一条条的磁道(由内到外从0开始编号);每条磁道上的一个弧段叫做一个扇区,扇区是磁盘的最小读写单位。一个扇区大小一般是512字节,也存在4096字节的。柱面:相同编号的磁道形成一个柱面,柱面数与磁道数相等。磁盘块:window叫做簇,L

2022-05-27 09:46:38 369

原创 数据结构之布隆过滤器

1. 布隆过滤器(Bloom Filter)如果使用哈希表来判断一个元素是否存在,虽然时间复杂度可以达到**O(1)**级别,但是空间的利用率不高。但同时,如果数据量过于庞大就需要过大的内存空间。1970年由布隆提出,一个空间效率高的概率型数据结构,用来判断一个元素一定不存在或者可能存在。本质上是一个很长的二进制向量和一系列Hash函数。优点:空间效率和查询时间都远远超过一般的算法;缺点:一定的误判率(可以通过代码尽可能的降低),删除困难。添加、查询的时间复杂度:O(k),k是哈希函数个数。

2022-05-26 20:57:30 212

原创 算法之动态规划

1. 动态规划(Dynamic Programming)简称DP,是求解最优化问题的常用策略。2. 找零钱题目:leetcode_322_找零钱假设有25、20、5、1的硬币,需要找给客户41的零钱,如何搬到硬币最少?假设dp(n)是凑到 n 分需要的最少硬币个数。如果第一次选择 25 的的硬币,那么dp(n) = dp(n - 25) + 1;如果第一次选择 20 的的硬币,那么dp(n) = dp(n - 20) + 1;如果第一次选择 5 的的硬币,那么dp(n) = dp

2022-05-26 15:18:10 167

原创 算法之贪心&分治

1. 贪心(Greedy)贪心策略,也称贪婪策略。每一步都采取当前状态下最优的选择(局部最优解),从而推导出全局最优解。应用:哈夫曼树;Prim、Kruskal;Dijkstra。1.1 加勒比海盗海盗们打劫了古董船,里面的古董都加载连城,打碎就没有加载。设船的载重量为W,没件古董的重量为wi,如何尽可能的多装古董?例如:W = 30;wi分别是:3、5、4、10、7、14、2、11。贪心: 每一次都选择重量最小的古董:/** * @Description 加勒比海盗

2022-05-20 20:58:15 557

原创 算法之回溯

1. 回溯(Back Tracking)

2022-05-19 20:45:04 152

原创 算法之递归

1. 递归(Rescursion)方法直接或者间接调用自己自身的一种变成编程技巧。1.1 递归调用过程展示Java中调用某方法会先将该方法加入到栈空间,等到方法调用完毕时,弹出栈空间/** * @Description 递归调用展示 * @date 2022/5/17 14:34 */public class ShowRecursion { public static void main(String[] args) { System.out.println(

2022-05-18 10:24:57 221

原创 数据结构之图最短路径

1. 最短路径(Shortest Path)两顶点之间权值之和最小的路径。无权图相当于每条边的权值都是1。不能有负权环。有向图的最短路径:从顶点A出发到达其它顶点的最短路径如下表:无法到达的顶点以∞表示无向图的最短路径:也是以A顶点为起点到达其它顶点的最短路径:无权图的最短路径:即把每条边的权值都作为1来看:负权边:只有不存在负权环时才有最短路径。-负权环:不存在最短路径,如果一种绕环,路径值可以达到无穷小。1.1 Dijkstra(迪杰斯特拉算法)1

2022-05-16 21:50:39 6583

原创 数据结构之图拓扑排序和最小生成树

1. 拓扑排序(Topological Sort)将AOV网中所有活动排成一个序列,使每个活动的前驱活动都排在该活动前面。1.1 AOV网(Activity On Vertex Network)将一项大的工程分为若干个小的子工程,子工程中可以存在顺序,部分子工程需要等待其它子工程完成后才可以执行。AOV网必须是一个有向完全图:明显可以看出边的终点的顶点依赖于起点的顶点。**前驱活动:**有向边起点的活动称为终点的前驱活动;**后驱活动:**有向边终点的活动称为起点的前驱活动;1.2

2022-05-13 20:57:45 505

原创 数据结构之图概念以及深度和广度优先搜索

1. 图(Graph)1.1 基础概念图由**顶点(vertex)和边(edge)**组成,通常表示为G = (V,E)。其中:G表示一个图,V是顶点集,E是边集。V有穷且非空。任意两个顶点之间都可以用边来表示它们之间的关系,E可以是空的。1.2 有向图(Directed Graph)边是有明确方向的。有向无环图(Directed Acyclic Graph,简称 DAG)如果一个有向图,从任意顶点出发无法经过若干条边回到改顶点,就是一个有向无环图。出度、入度

2022-05-11 17:15:04 795

原创 数据结构之并查集

1. 并查集(Union Find)也叫做不相交集合(Disjoint Set)核心操作:查找(Find):查找元素所在的集合;合并(Union):将两个元素所在的集合合并为一个集合;1.1 存储方式假设并查集处理的数据都是整性,可以使用整性数组来存储数据。存储结构逻辑结构可以看出:(0、1、3)是一个集合;(4、5、6、7)是一个集合;2自己一个集合。1.2 接口设计/** * @Description 并查集接口 * @date 2022/5/9 16:

2022-05-09 21:29:26 964

算法工具类:随机生成数组、判断是否为升序、验证是否成功。

算法工具类

2022-05-02

jedis所需要jar包.zip

里面包含jedis所需两个jar包:commons-pool2-2.4.2.jar jedis-2.7.2.jar

2020-03-04

空空如也

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

TA关注的人

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