自定义博客皮肤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)
  • 收藏
  • 关注

原创 多数据源分布式事务

我们对应的service 上都是有@Datasource注解,这个注解DynamicDataSourceAspect会在方法调用的时候进行拦截,在方法之间会解析@Datasource中的值,会将其设置到ThreadLocal里面,这里面DynamicDataSourceContextHolder,然后调用mybatis时候获取链接的时候时候会带调用上面的类determineCurrentLookupKey获取对应的key,我们通过这个key可以获取对应的数据源。3.并设置了目标数据源和配置的数据源。

2023-12-25 14:58:04 451

原创 全局统一异常处理, 断言工具-JSR303

在开发中,为了保证业务的正确性我们会对业务参数进行校验,不满足要求的参数采用throw new XxxException 来抛出异常,阻止程序继续执行,比如:用户名不可为空,密码错误等。这类异常是需要展示给用户看的,还有一类是程序抛出来的一些未知的异常,如:SQL异常,空指针异常等等,这类异常不能直接抛给用户,而是应该统一捕获后,封装成统一的错误提示返回给用户,如“系统内部异常啦”。为了把我们手动抛出的异常和系统内部出现的异常区分开,我们需要抛出自定义的异常。

2023-12-20 15:03:53 913

原创 SQL优化方法

-> 使用范围查询, like, 尽量使用后模糊, 前模糊会全表扫描, 非要用则强制使用索引 [force index(索引名称)]4.不等, 空值, or, 比较运算符, not in, not exists 时可能导致索引失效, 进行全盘扫描。(条件不可以跳, 当跳过了第一个, 后面相当于都是无序的, 因为后面所有的顺序都是基于第一个索引的)二叉树: 在有序的数据下(1,2,3,…非聚合索引 --- MyISAM存储方式 frm 表结构, MYD表数据, MYI表索引。

2023-12-19 19:04:36 366

原创 模板引擎--velocity使用方法

配置输出路径(自定义时使用)示例:controller层。

2023-12-19 19:01:31 515

原创 Vue: node-sass 无法为当前环境找到绑定, Windows64-bit, 重新安装node-sass失败

npm install node-sass@[本地node所对应的node-sass版本] --registry=https://registry.npm.taobao.org --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/解决Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 14.x。

2023-12-19 16:34:37 971

原创 分布式事务Seata

当微服务架构将单片系统分解成自我封装的服务时,它可能会破坏事务。这意味着单片系统中的本地事务现在分布在多个服务中,将按顺序调用这些服务。以下是使⽤本地事务的单⽚系统的客户订单示例图:客户订单示例图,使⽤本地事务的单⽚系统在上⾯的客户订单示例中,如果⽤户向单⽚系统发送⼀个“放置订单”操作,系统将创建⼀个跨多个数据库表⼯作的本地数据库事务。如果任何⼀步失败,事务可以回滚。这被称为ACID(原⼦性,⼀致性,隔离性,持久性),由数据库系统保证。

2023-12-12 14:49:01 970

原创 XXL-JOB分布式任务调度

由于采用微服务架构,一个服务往往会部署多个冗余实例来运行我们的业务,在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度,如下图:分布式任务调度面临着许多挑战,以下是其中一些挑战:分布式环境下的任务调度:在分布式环境下,任务调度需要考虑如何在多个节点之间分配任务,以及如何监控和管理这些节点上的任务执行。可扩展性:随着任务量的增加,任务调度系统需要具备可扩展性,以便能够处理大规模任务的并发执行。

2023-12-09 09:17:01 989

原创 Spring Cloud Gateway

在微服务架构中,一个系统往往由多个微服务组成,而这些服务可能部署在不同机房、不同地区、不同域名下。这种情况下,客户端(例如浏览器、手机、软件工具等)想要直接请求这些服务,就需要知道它们具体的地址信息,例如 IP 地址、端口号等。这种客户端直接请求服务的方式存在以下问题:当服务数量众多时,客户端需要维护大量的服务地址,这对于客户端来说,是非常繁琐复杂的。在某些场景下可能会存在跨域请求的问题。身份认证的难度大,每个微服务需要独立认证。

2023-12-06 15:52:50 934

原创 Spring Cloud Alibaba—Sentienl限流

Sentinel诞生于阿里巴巴,其主要目标是流量控制和服务熔断,2018年,Sentinel演变为一个开源项目现如今成为了Spring Cloud Alibaba的一个子项目。Sentinel是通过限制并发线程的数量来减少不稳定资源的影响,而不是使用线程池,省去了线程切换的性能开销。当资源的响应时间变长时,线程将开始被占用。当线程数累积到一定数量时,新的传入请求将被拒绝。反之亦然,当资源恢复并变得稳定时,占用的线程也将被释放,新请求将被接受。除了限制并发性外,Sentinel可以根据响应时间降级。

2023-12-04 18:33:28 919

原创 RPC远程调用与Apache Dubbo

rmi可以说是java中最早的RPC框架之一,且此PRC框架由sun团队开发,集成于JDK中,可以说完全可以实现开箱即用,不需要任何外部jar依赖,但由于早期的rpc实现,且设计上并不是为了解决互联网企业类的高并发问题,所以不建议现在互联网开发中作为PRC实现。:bRPC是一个基于protobuf接口的PRC框架,看到命名就可以知道此框架来自著名的百度团队,此框架囊括了百度内部的所有RPC协议,并且支持多种第三方协议,由于基于protobuf算法,从性能来看几乎是同类RPC框架中的领跑者。

2023-12-02 09:13:02 65

原创 Spring Cloud OpenFeign

OkHttpClient和Apache HttpClient 5的Feign客户端可以通过将spring.cloud.openfeign.okhttp.enabled或spring.cloud.openfeign.httpclient.hc5.enabled设置为true来使用,并将它们放在类路径上。您可以通过提供org.apache.hc.client5.http.impl.classic.CloseableHttpClient类型的bean来自定义所使用的HTTP客户端,当使用Apache HC5时。

2023-11-30 17:00:01 1031

原创 ElmentUI+mockjs+Axios

axios和其他的ajax库都很类似,他是基于promise的http库,可以用在浏览器和node.js中。引入:刚刚的数据写死的,数据是不应该写死的。Element是一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库,类似于easyui一样,提供了很多的ui组件。Element UI 可以使用cdn方式和npm方式进行安装,我们使用npm ,推荐使用 npm 的方式安装,它能更好地和。注意:在操作下的四个图标可以修改,复制完整地址,可以删除,还可以测试接口。

2023-11-30 10:49:51 202

原创 权限方案设计

1. 有的资源可以直接访问,有的资源需要登录之后才能访问2. 不同的人登录系统之后,看到的界面是不一样的3. 即使登录之后,进入界面看到相同的按钮,但是有的人可以点击,有的点不了,即使能点击,也会有限制时间体现:会员、普通管理员超级管理员等RBAC是基于角色的访问控制【Role-Based Access Control 】,是目前最为广泛接受的权限控制模型。也称之为RBAC权限控制模型在 RBAC 中,用户通过角色与权限进行关联。

2023-11-30 10:36:55 391

原创 Restful风格, Swagger接口规范, 跨域问题

Restful【规范】是一种面向资源的架构风格,可以简单理解为:使用URL名词定位资源,用HTTP动词【GET,POST,DELETE,PUT,PATCH】描述操作。客户端使用GET,POST,PUT,DELETE,PATCH来表示操作方式的动词对服务端资源进行操作。一般情况下:GET:获取资源POST:添加资源【也可以用于更新资源】PUT:更新资源【也可以用于添加资源】DELETE:用来删除资源PATCH:用来做批量操作。

2023-11-30 10:30:03 239

原创 Spring事务

1、NESTED和REQUIRES区别区别的场景:当前存在事务,子方法抛异常NESTED和REQUIRES_NEW在父方法可以选择捕获子方法,父方法数据不会回滚REQUIRES无论捕不捕获,父方法数据都回滚2、NESTED和REQUIRES_NEW区别区别的场景:当前存在事务,父方法抛异常时NESTED数据回滚,REQUIRES也是如此REQUIRES_NEW数据不回滚。

2023-11-30 10:13:19 15

原创 Spring Cloud Loadbalancer服务均衡负载器

当⼀个请求需要访问某个服务时,LoadBalancer 会先从缓存中查找可用的服务实例列表,如果缓存中没有可用的实例列表,则会重新从服务注册中心获取服务实例列表。在微服务架构中,服务提供者往往会有多个实例,这些实例可以部署在不同的节点或者不同的地理位置。与传统的负载均衡器相比,Spring Cloud LoadBalancer 的优点在于它是⼀个基于应用程序的负载均衡器,可以与 Spring Cloud 中的其他组件集成,如服务注册中心、断路器、配置中心等,从而实现更灵活、更高效的微服务架构。

2023-11-29 18:23:41 585

原创 Spring Cache

spring cache的理解和基本使用

2023-11-28 19:40:04 895

原创 获取Nacos注册中心中的配置文件

在Spring官方通过作为统一配置文件管理中心,其实我们使用过后就会发现Spring Cloud Config使用起来总归比较麻烦。Nacos作为Spring Cloud Alibaba的一个重要组件,它不仅可以用作服务注册与发现,也可以用来替代Spring Cloud Config作为统一配置文件管理,而且它的使用更为简单和人性化。

2023-11-28 11:40:17 575

原创 文本图片审核,邮件发送,Excel,Echarts报表

点击该链接激活

2023-11-28 09:24:21 83

原创 MinIO

●部署简单:一个single二进制文件即是一切,还可以支持各种平台。●minio支持海量存储,可按2one打展(原zone不受任何影响),支持单个对象最大5TB;兼容Amazon S3接口,充分考虑开发人员的需求和体验;●低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存储一个1 M的数据对象,实际占用磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为一个纠删码集合(Erasure Coding Set)中的disk数量)。

2023-11-28 09:02:28 75

原创 分布式核心技术-Redis-持久化机制+淘汰策略

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,它泛指非关系型的数据库。随着互联网2003年之后web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的交友类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。关系数据库:以关系(由行和列组成的二维表)模型建模的数据库简单理解:有二维表的数据库。

2023-11-27 19:54:29 98

原创 RocketMQ分布式消息队列

MQ:消息队列提供消息(请求)服务的中间件 (消息中间件)生产 存储 消费全过程的软件系统, 先进先出原则使用场景: 限流削峰, 异步, 解耦, 数据收集, 大数据处理大项目, 体量大 并发高好处: 提高系统响应速度, 稳定性产品: Kafka (多使用在大数据) 瞬时大流量应用 --> 大量的大文件RocketMQ --> 大量的小文件技术选型: 业务场景简单, 允许数据丢失 想要快速上线 --> Redis大数据场景, 日志收集, 实时性要求高 --> Kafka。

2023-11-27 19:46:17 859

原创 ElasticSearch全文搜索引擎

Lucene是apache下的一个开源的全文检索引擎工具包(一堆jar包)。它为软件开发人员提供一个简单易用的工具包(类库),以方便的在小型目标系统中实现全文检索的功能。Lucene适用于中小型项目 ,ES适用于中大型项目(它底层是基于lucene实现的)虽然全文搜索领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但是,Lucene只是一个库。

2023-11-27 19:30:32 1209

原创 SpringCloud Alibaba微服务01——Nacos注册中心

HTTP短连接模型,每次客户端请求都会创建和销毁TCP链接,TCP协议销毁的链接状态是WAIT_TIME,完全释放还需要⼀定时间,当TPS和QPS较⾼时,服务端和客户端可能有⼤量的WAIT_TIME状态链接,从⽽会导致connect time out错误或者Cannot assign requested address 的问题。通过⼼跳续约,当服务规模上升时,特别是类似Dubbo的接⼝级服务较多时,⼼跳及配置元数据的轮询数量众多,导致集群TPS很⾼,系统资源⾼度空耗。

2023-11-27 15:21:43 938 1

原创 java抽象类

1.多个子类中有相同声明的方法,但是方法体不一样,父类抽取该方法之后,无法书写方法体。2.因为父类中的方法如果没有方法体看起来很奇怪,所以索性就省略方法体,使用";"结束,但是由于程序无法识别,所以使用关键字abstract修饰没有方法体的方法3.程序使用abstract修饰的方法是没有方法体的抽象方法,没有使用abstract修饰的方法是普通的成员方法4.因为一个普通事物描述类中无法存放抽象方法,所以要想放抽象方法,该类也需要使用abstract关键字描述为:抽象类。

2023-08-31 10:36:59 32

原创 面向对象:特点,变量,重载,重写,修饰符,封装,继承,final,Object类

明确: 面向对象,面向过程 等是一种编程思想思想的概念: 是人们普遍能接受的思维方式。面向过程 : 将需求 按照步骤一步步划分,一步步执行。典型语言:C语言面向对象 :将自己的事情交给别人(对象) 来做面向函数 : 不考虑对象,只针对功能本身 例如:JDK1.8提供的新特性。

2023-08-31 09:37:56 35

原创 GIT的使用

最先进的分布式版本控制系统git网站:​全球最大的开源项目网站。Gitee - 企业级 DevOps 研发效能平台中国最大的开源项目网站。​ 1.使用命令git add <file>,注意,可反复多次使用,添加多个文件;​ --可以是多个文件 或文件夹​ 2.使用命令git commit -m <message>,完成。--把add后的文件全部提交到版本库的分支要随时掌握工作区的状态,使用git status命令。

2023-08-29 22:01:07 45 1

原创 JAVA数组进阶

Arrays数组工具类工具类 特点: 只提供一个私有的无参构造 --- 无法new出对象所有的方法都被static修饰 --- 可以通过类名直接调用工具类中提供的方法:void rangeCheck(int arrayLength, int fromIndex, int toIndex) : 校验数组索引范围是否合法void sort(int[] a) : 将数组a默认升序排序。

2023-08-29 21:43:10 43 1

原创 java:方法

main方法的方法体中的代码不宜过多,需要将一部分的功能代码抽取到其他自定义的方法中,提高阅读性。非void : 返回结果的数据类型 变量名 = 方法名(实际参数列表);返回结果的类型 变量名 = 方法名(实际参数列表);public static 返回值的类型 方法名(形式参数列表){void : 方法名(实际参数列表);其他方法中,目前一般在main方法中调用。其他自定义的方法,一般直接或者间接由main方法调用。{} : main方法的方法体 , 具体的逻辑代码。

2023-08-29 21:21:57 34 1

原创 java: 数组

数组的定义: 是内存中一次能存多个相同类型元素的容器。

2023-08-17 08:26:57 42 1

原创 java: 循环

2. for 循环中 初始化语句,条件判断语句,条件控制语句都可以省略,省略条件判断语句会在程序编译时期默认加上:true。是for循环的局部变量,只能在for循环中使用,在for循环的后面不能使用。第 1 轮循环:初始化语句 -> 条件判断语句 -true->循环体语句->条件控制语句。第 2 轮循环:条件判断语句 -true->循环体语句->条件控制语句。第 n 轮循环:条件判断语句 -true->循环体语句->条件控制语句。1. int i = 1 定义的变量是循环变量,在循环的外面不能使用。

2023-08-15 17:09:22 42 1

原创 break,return,continue关键字

在switch语句中: break用来结束switch语句,跳到switch语句的后面。注意事项:continue 和 if判断可以等价转换,一般使用if更加简单。在循环语句中: break用来结束循环语句,跳到循环语句的后面。使用: 使用在循环结构中,用来结束当前这一轮循环,继续下一轮循环。形式1: return;结束方法, 跳到方法的后面。形式2: return 值;入门:循环从[1,10],但是只打印:3 6 9。在方法中使用: 结束方法。break关键字: 结束。return关键字: 结束。

2023-08-15 17:05:53 31 1

原创 java: switch语句

拿到 表达式值 依次从上往下匹配case后的值,一旦匹配上就执行case后的代码,然后遇到break结束switch。2. 当case后面的值是: byte , short , int , char 类型时, 匹配时使用:==如果 表达式值 和前面的case后的值都不匹配 就执行default中的代码,然后结束switch。当case后面的值是:String 类型时, 匹配时使用:equals()当 表达式值 和前面的case后的值都不匹配时执行的代码。当 表达式值 和 值1 匹配时执行的代码。

2023-08-15 17:03:40 116 1

原创 Java : if分支结构

当关系表达式成立,执行 {} 中的代码,再执行 if语句之后的代码。当关系表达式不成立,执行 if语句之后的代码。当 关系表达式 不成立 , 执行else的{}中的代码。当 关系表达式 成立 , 执行if的{}中的代码。特点: 代码块中的代码必然会执行,if语句是带条件的代码块。3. 局部变量:在方法的{} 或者 局部代码块的{} 中定义的变量。当 关系表达式 成立时执行的代码。当 关系表达式2 成立执行的代码。当 关系表达式 不成立,执行的代码。当 关系表达式 成立,执行的代码。if(关系表达式){

2023-08-07 22:50:18 77 1

原创 java运算符

分类:算术运算符赋值运算符比较运算符逻辑运算符位运算符三目运算符。

2023-08-05 17:11:28 74 1

原创 JAVA字符在计算机中的存储, 转义符

'b' --- 98 说明:'a' - 'z' 是连续的。'B' --- 66 说明:'A' - 'Z' 是连续的。'1' --- 49 说明:'0' - '9' 是连续的。使用场景: 做密码的校验 大写字母范围: 'A' - 'Z'\" : 双引号转义 使用场景: 字符串中表示 "\' : 单引号转义 使用场景: 字符串中表示 '\\ : 反斜杠转义 使用场景:表示文件路径。\t : 制表符 ,多个空格。

2023-08-03 13:18:36 53

原创 JAVA: 常量

例如: "宝,我今天去输液了~" , "hello" , "" , "100"例如: 'a' , 'h' , '中' , '*' ,'8'整数常量: 例如: -88 , 10 参考生活中的整数。小数常量: 例如: 9.9 , 3.14 参考生活中的小数。说明: 由于final的存在,导致常量空间中的值不能改,否则就是变量。空常量: null 说明: 在内存中不占有任何空间。字符串常量:只要是使用""包起来的都是字符串。错误: 'ab' , ''字符常量: '' 引起来的单个字符。

2023-08-03 13:11:45 45

原创 JAVA:变量

例如: int stuAge1 = 18 , stuAge2 = 19 , stuAge3 = 20;随堂练习:姓名:jack 年龄:18 , 分数:99.5 ,地址: 武汉。注意事项:1. 变量未赋值不能直接使用,在使用变量之前,变量中必须有值。变量的本质: 内存中一次只能存一个值的空间(容器)。例如: stuScore = 98;说明:同时声明的多个变量类型必然相同。格式: 数据类型 变量名 = 值;例如: int a = 10;格式: 变量名 = 值;变量的概念: 值可以发生改变的量。

2023-08-03 13:10:13 33

原创 关键字&保留字&标识符

特点: 1. 关键字都是小写字母 , 2. 关键字在常用的代码编辑器:IDEA 中是:屎黄色。方法名和变量名的规范: 小驼峰命名-从第二个单词开始首字母大写,其他字母小写。组成: 0-9的数字,26个英文字母(大小写), $ , _自定义常量: 所有的字母都是大写, 多个单词之间使用_连接。保留字: 目前程序中还没有使用,预备使用的并且具有特殊含义的单词。包名: 所有的字母都是小写,多级包使用.连接。关键字: 目前程序中正在使用的并且具有特殊含义的单词。标识符:程序中给类,方法,变量,包取名都成为标识符。

2023-08-03 12:54:17 39

原创 整数在计算机中的存储

转成补码: 1111-1111 1111-1111 1111-1111 1111-1000 + 1 ---> 1111-1111 1111-1111 1111-1111 1111-1001。补码: 1111-1111 1111-1111 1111-1111 1110-1111 + 1 ---> 1111-1111 1111-1111 1111-1111 1111-0000。转成反码: 1111-1111 1111-1111 1111-1111 1111-1000。补充:在二进制中,0取反1,1取反0。

2023-08-03 12:53:07 46

空空如也

空空如也

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

TA关注的人

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