自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mybatis拦截器

简介Mybatis框架提供的一个功能能够在Mapper接口方法运行之前或之后添加额外代码的功能首先,要想能够成功的拦截Mybatis中mapper运行的sql语句需要先在Spring中设置相关的代码。

2022-07-14 22:46:31 808

原创 消息队列基本知识

消息队列(Message Queue)简称MQ消息队列是采用"异步(两个微服务项目并不需要同时完成请求)"的方式来传递数据完成业务操作流程的业务处理方式如果我们真的将上面生成订单业务里,减少库存的操作从正常流程中剥离到消息队列那么如果库存减少过程中发生异常,就不能由Seata接收了,因为异步的处理无法和Seata通信意思是如果使用了消息队列,队列中处理数据过程发送异常,那么就要用特殊的方法处理问题处理方式就是手写代码进行回滚,一般情况就是在stock,模块再向order模块发送消息,order模块接收到消息

2022-07-09 00:33:00 3055

原创 Radis加强及一些面试题

Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,Redis实现分布式锁?Redis与数据库数据一致策略 Redis的基本数据结构类型 Redis的过期策略Radis缓存淘汰机制Redis持久化 redis的缓存击穿/穿透/雪崩 redis热key如何实现Redis...

2022-07-07 00:23:33 486

原创 Quartz 任务调用管理工具

所谓任务调用,就是执行某些具体动作的时间计划我们使用过的最简单的调度方法就是Timer但是Timer的调度功能过于单一,只能是指定时间的延时调用和周期运行而Quartz可以更详细的指定时间,进行计划调用调度器:Scheduler任务:Job触发器:Trigger​ 我们创建一个类,实现这个接口,在方法中编写要进行的操作(执行具体任务)​ 我们还需要一个JobDetail的类型的对象,Quartz每次执行job时​ 会实例化job类型对象,去调用这个方法,JobDetail是用来描述Job实现类​ 的静

2022-07-06 23:05:53 345

原创 jwt框架基础jjwt

JWT = JSON Web Token,它是通过JSON格式组织必要的数据,将数据记录在票据(Token)上,并且,结合一定的算法,使得这些数据会被加密,然后在网络上传输,服务器端收到此数据后,会先对此数据进行解密,从而得到票据上记录的数据(JSON数据),从而识别用户的身份,或者处理相关的数据。要使用JWT,需要添加相关的依赖项,可以实现生成JWT、解析JWT的框架较多,目前,主流的JWT框架可以是:JWT的组成部分:Jwt的测试当JWT数据过期时,异常信息例如:当JWT解析失败(数据有误)时,异

2022-07-03 13:57:16 871

原创 PageHelper 分页查询插件

PageHelper框架可以实现我们提供页码和每页条数,自动实现分页效果,收集分页信息PageHelper的分页原理就是在程序运行时,在sql语句尾部添加limit关键字,并按照分页信息向limit后追加分页数据代码例:mapperservicecontrollerPageInfo对象既包含查询数据结果,又包含分页信息PageInfo类中的分页信息解释使用JsonPage返回结果当前我们分页查询返回的类型是PageInfo如果用这个类型就会出现任何调用这个方法的模块都需要添加Page

2022-06-30 21:25:56 606

原创 java中字节码说明

Java的源代码中编译后会生成一个class文件,文件内容为一些JAVA虚拟机指令,这些指令的内容,由多个十六进制值组成,两个十六进制值为一组,例如:Java虚拟机的指令由一个字节长度、代表某种特定操作含义的操作码(opcode)以及跟随其后的零个或多个的操作数(operand)构成。Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了定制。二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。因此,也可以看出字节码对于Java生态的重要性

2022-06-30 17:10:30 552

原创 JVM体系结构

​ JVM是Java Virtual Machine的缩写,是一个可以运行JAVA字节码的虚拟计算机他有自己的指令集、内存区域、执行引擎,拥有自己独立的运行机制,是JAVA平台的一部分。其中,图中的​ JRE(Java Runtime Environment) Java 程序运行时的一些基础库类,同时包含JVM。​ JDK(Java Development Kit) Java程序开发工具包(包含了jre.jvm工具).​ JVM是 Java 程序能够实现跨平台的基础(Java的跨平台本质上是通过不同平台的

2022-06-30 00:19:15 129

原创 AOP和OOP的简述及区别

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术,AOP是OOP的延续,是Spring框架中的一个重要内容,是[函数式编程]的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等。主要意图将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻

2022-06-29 23:26:37 556

原创 Spring Data简介

Spring Data是Spring提供的一套连接各种第三方数据源的框架集原生状态下,我们使用JDBC连接数据库,因为代码过于繁琐,所以改为使用Mybatis框架在ES的原生状态下,我们java代码需要使用socket访问ES,但是也是过于繁琐,我们可以使用SpringData框架简化其中连接ES的是Spring Data Elasticseatrch官方网站:https://spring.io/projects/spring-data官网中列出了它可以操作的数据源列表每个列表中都包含一些使用的介绍要想实现

2022-06-28 23:39:10 415

原创 Elasticsearch概述

java有一套名为Lucene的API是搜索引擎的核心支持,Elasticsearch在Lucene的基础上开发出了一个功能全面的开箱即用的全文搜索引擎类似的有Solr/MongoDB所有关系型数据库都有一个严重的性能缺陷mysql\mariaDB\oracle\DB2等就是前模糊的模糊查询不能使用索引测试证明一张千万级别的数据库表进行模糊查询需要20秒以上当今需求"三高"的需求下,不能接受这样的性能我们使用ES来优化后同样的查询我们能将效率提高100倍将大型的查询也能控制在毫秒级别如果不使用ES让数据库

2022-06-28 23:00:56 329

原创 Spring Security框架

Spring Security是用于解决认证与授权的框架。添加依赖启动项目,在启动的日志中,可以看到类似以下内容:Spring Security有默认登录的账号和密码(以上提示的值),密码是随机的,每次启动项目都会不同。Spring Security默认要求所有的请求都是必须先登录才允许的访问,可以使用默认的用户名和自动生成的随机密码来登录。在测试登录时,在浏览器访问当前主机的任意网址都可以(包括不存在的资源),会自动跳转到登录页(是由Spring Security提供的,默认的URL是:http://

2022-06-27 10:06:48 1251

原创 Redis的基本使用

Redis是一款基于内存的NoSQL数据存储服务,是非关系型的,是使用K-V结构进行存储的在基于Spring Boot的开发中,当需要在程序中访问Redis中的数据时,需要添加依赖项。要操作Redis中的数据,需要使用对象,则在根包下的包中创建类,并在其中进行配置,例如:关于Key的使用,通常建议使用冒号区分多层次,类似URL的设计方式,例如:使用Redis可以提高查询效率,一定程度上可以减轻数据库服务器的压力,从而保护了数据库。通常,应用Redis的场景有:一旦使用Redis,就会导致Redis和数据库

2022-06-26 17:46:46 166

原创 Validation框架

添加依赖:在控制类处理请求的方法的参数之前添加 / 注解,例如:然后,在实体类的属性上添加约束,例如:

2022-06-26 17:45:58 139

原创 SpringGateway 网关

早期(2020年前)奈非提供的微服务组件和框架受到了很多开发者的欢迎这些框架和Spring Cloud Alibaba的对应关系我们要知道Nacos对应Eureka 都是注册中心Dubbo对应ribbon+feign都是实现微服务间调用Sentinel对应Hystrix都是项目限流熔断降级组件Gateway对应zuul都是项目的网关Gateway不是阿里巴巴的而是Spring提供的网关:就是网络中的统一入口程序中的网关就是微服务项目提供的外界所有请求统一访问的微服务项目因为提供了统一入口之后,方便对所有请求

2022-06-26 16:59:18 159

原创 Sentinel 介绍

Sentinel也是Spring Cloud Alibaba的组件Sentinel英文翻译"哨兵\门卫"随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。官网地址https://sentinelguard.io/zh-cn/下载地址https://github.com/alibaba/Sentinel/releases丰富的应用场景双11,秒杀,12306抢火车票完备的实时状态监控可以支持显示当前项目各个服

2022-06-26 16:39:40 153

原创 Seata概述

Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务也是Spring Cloud Alibaba提供的组件Seata官方文档https://seata.io/zh-cn/更多信息可以通过官方文档获取我们在业务中,必须保证数据库操作的原子性,也就是当前业务的所有数据库操作要么都成功,要么都失败之前我们使用Spring声明式事务(@transactional)来解决本地的事务问题但是现在是微服务环境,一个业务可能涉及多个模块的数据库操作这种情况就需要专门的微服务状

2022-06-23 23:44:45 619

原创 Dubbo中的负载均衡

在实际开发中,一个服务基本都是集群模式的,也就是多个功能相同的项目在运行,这样才能承受更高的并发这时一个请求到这个服务,就需要确定访问哪一个服务器Dubbo框架内部支持负载均衡算法,能够尽可能的让请求在相对空闲的服务器上运行我们要实现设置好负载均衡的策略算法,并设置好每个服务器的运行权重才能更好的实现负载均衡的效果Loadbalance:就是负载均衡的意思Dubbo内置4种负载均衡算法实际运行过程中,每个服务器性能不同在负载均衡时,都会有性能权重,这些策略算法都考虑权重问题随机生成随机数在哪个范围内让哪个服

2022-06-23 16:05:39 739

原创 Rpc及Dubbo的概述

RPC是Remote Procedure Call的缩写 翻译为:远程过程调用目标是为了实现两台(多台)计算机\服务器,互相调用方法\通信的解决方案RPC的概念主要定义了两部分内容通信协议指的就是远程调用的通信方式实际上这个通知的方式可以有多种例如:写信,飞鸽传书,闪送等等序列化协议指通信内容的格式,双方都要理解这个格式发送信息是序列化过程,接收信息需要反序列化理解了RPC再学习Dubbo就会简单一些了Dubbo是一套RPC框架。既然是框架,我们可以在框架结构高度,定义Dubbo中使用的通信协议,使用的序列

2022-06-23 15:08:00 523

原创 Nacos心跳机制

Nacos内部注册的服务分为两大类:可以通过.yml中设置ephemeral属性来确定服务为临时或永久。例如:临时实例和永久实力的区别:默认情况下,启动服务后,每隔5秒会向nacos发送一个"心跳包",这个心跳包中包含了当前服务的基本信息Nacos收到这个"心跳包"如果发现这个服务的信息不在注册列表中,就进行注册,如果这个服务的信息在注册列表中就表明这个服务还是健康的如果Nacos15秒内没接收到某个服务的心跳包,Nacos会将这个服务标记为不健康的状态如果30秒内没有接收到这个服务的心跳包,Nacos会

2022-06-21 23:49:45 2896

原创 Mybatis的缓存机制

● 缓存:通常是一个临时存储的数据,在未来的某个时间点可能会被删除● 通常,存储缓存数据的位置是读写效率较高的,相比其它“非缓存”的数据有更高的处理效率● 由于缓存的数据通常并不是必须的,则需要额外消耗一定的存储空间,同时由于从缓存获取数据的效率更高,所以是一种牺牲空间、换取时间的做法● 另外,你必须知道,从数据库读取数据的效率是非常低下的● Mybatis有2种缓存机制,分别称之一级缓存和二级缓存● 一级缓存是基于SqlSession的缓存,也称之为“会话缓存”,仅当是同一个会话、同一个Mapper、同一

2022-06-14 23:14:16 949

原创 Mybatis中关于#{} 和${} 格式的占位符

● 在Mybatis中,配置SQL语句时,参数可以使用#{}或${}格式的占位符●例如存在需求:分页查询表中的所有数据。●需要执行的SQL语句大致是:● 则此功能的抽象方法应该是:● 配置SQL语句:● 其实,使用#{}格式的占位符时,Mybatis在处理时会使用预编译的做法,所以,在编写SQL语句时不必关心数据类型的问题(例如字符串值不需要添加单引号),也不存在SQL注入的风险!这种占位符只能用于表示某个值,而不能表示SQL语句片段!● 当使用${}格式的占位符时,Mybatis在处理时会先将参数值

2022-06-14 23:11:12 514

原创 MyBatis框架的基本使用与原理

Mybatis的主要作用是快速实现对关系型数据库中的数据进行访问的框架在原生的Java技术中,需要使用JDBC实现对数据库中的数据访问,执行过程繁琐且相对固定,使用框架可以有效的提高开发效率Mybatis可以不依赖于Spring等框架直接使用的,但是,就需要进行大量的配置,前期配置工作量较大,基于Spring框架目前是业内使用的标准之一,所以,通常会整合Spring与Mybatis,以减少配置在创建工程时,创建普通的Maven工程即可(不需要选择特定的骨架)Mybatis的依赖项:mybatisMybat

2022-06-14 23:10:38 290

原创 springMVC基本知识及其应用原理

● Spring MVC是基于Spring框架基础之上的,主要解决了后端服务器接收客户端提交的请求,并给予响应的相关问题● MVC = Model + View + Controller,它们分别是:– MAcocdeesls:O数bj据ec模t L型a,ye通r)常共由同业构务成逻辑层(Ser vice Layer)和数据访问层(Data– View:视图– Controller:控制器– MVC为项目中代码的职责划分提供了参考需要注意:Spring MVC框架只关心V - C之间的交互,与M其实没有任何

2022-06-14 00:14:08 249

原创 @Resource与@Autowrite

● @Resource注解是javax.annotation包中的如果某属性添加了@Resource注解,Spring也可以实现自动装配● @Resource注解的装配机制是:先尝试根据名称进行装配(即:要求属性名称与beanName相同),如果失败,则尝试根据类型装配,如果不存在类型的Bean,则抛出NoSuchBeanDefinitionException,如果只有1个匹配类型的Bean,则装配成功,如果匹配类型的Bean超过1个,则抛出NoUniqueBeanDefinitionException●

2022-06-13 23:44:13 570

原创 关于spring框架的基本认识及使用

​ 框架(Framework)一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。​ 应用框架指的是实现了某应用领域通用完备功能(除去特殊应用的部分) 的底层服务。使用这种框架的编程人员可以在一个通用功能已经实现的基 础上开始具体的系统开发。框架提供了所有应用期望的默认行为的类集合。具体的应用通过重写子类(该子类属于框架的默认行为)或组装对象来支 持应用专

2022-06-13 23:37:19 322

原创 Knife4j 的基本使用说明

Knife4j是一款可以提供在线API文档的框架,是基于Swagger框架实现的。在Spring Boot项目中,使用Knife4j需要添加依赖:​ 然后,需要添加配置,则在项目的包下创建类:​ 完成后启动项目,从浏览器进入localhost:8080.doc.html#/home即可进入​ 注意:必须修改以上配置中的包名,保证是当前项目中控制器类所在的包!其它各项均可不修改,以上配置代码可以从Knife4j的官网找到!最后,还需要在配置文件中开启Knife4j的增强模式:完成后,启动项目,在浏览

2022-06-10 21:35:13 1947

原创 JVM技术简介

​ JVM是Java Virtual Machine的缩写,是一个可以运行JAVA字节码的虚拟计算机他有自己的指令集、内存区域、执行引擎,拥有自己独立的运行机制,是JAVA平台的一部分。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8769NxqT-1654525625983)(C:\Users\彭\AppData\Roaming\Typora\typora-user-images\image-20220606212720497.png)]其中,图中的​ JRE(Java

2022-06-06 22:27:22 192

原创 简单了解JAVA线程基础

线程:一个顺序的单一的程序执行流程就是一个线程。代码一句一句的有先后顺序的执行。多个单一顺序执行的流程并发运行。造成"感官上同时运行"的效果。多线程改变了代码的执行方式,从原来的单一顺序执行流程变为多个执行流程"同时"执行。* 可以让多个代码片段的执行互不打扰。多个线程实际运行是走走停停的。线程调度程序会将CPU运行时间划分为若干个时间片段并尽可能均匀的分配给每个线程,拿到时间片的线程被CPU执行这段时间。当超时后线程调度程序会再次分配一个时间片段给一个线程使得CPU执行它。如此反复。由于CPU执行时间在纳

2022-06-06 20:28:36 97

原创 JAVA注解基础

* 注解在开发中常被我们利用到反射机制中,辅助反射机制做更多灵活的操作* 注解在如今JAVA流行的框架中被大量的营养,简化了以前繁琐的配置工作·* 注解可以在:* 类上,属性上,方法上,构造器上,以及参数上使用* 可以通过java内置的注解@Target来说明当前注解可以应用的位置,对应的值被定义在ElementType上* 例如:* 当可以用于多个位置时,需要定义成数组的方式包含所有ElementType的值,即"{}"包含*/@Target({ElementType.TYPE,ElementType.F

2022-06-06 20:27:31 1443

原创 异常基础详解

异常处理- java中所有错误的超类为:Throwable。其下有两个子类:Error和Exception- Error的子类描述的都是系统错误,比如虚拟机内存溢出等。- Exception的子类描述的都是程序错误,比如空指针,下表越界等。- 通常我们程序中处理的异常都是Exception。try语句块不能独立存在,后面必须跟catch语句块或finally语句块* 语法:* try{* 可能出现异常的代码片段* }catch(XXXException e){* try中出现XXXException

2022-06-06 20:24:31 113

原创 JAVA基础整理

编译运行过程:- 编译期:.java源文件,经过编译,生成.class字节码文件- 运行期:JVM加载.class并运行.class(0和1)> 特点:跨平台、一次编程到处使用IDE:集成开发环境,一套带图形界面的功能强大的工具,常见的有IDEA和EclipseJava以前是Sun公司,但是Sun已经被Oracle收购了,所以现在说java是Oracle公司的Java是开源(开放源代码)的、免费的语言变量:存数的,代词,指代的就是里面的那个数类型间的转换:运算符、循环判断语句1、算术:+,-,,

2022-06-05 23:39:44 237

原创 JVM面试37问

JVM面试37问1入门部分1.1为什么要学习JVM?深入理解JVM可以帮助我们从平台角度提高解决问题的能力1、有效防止内存泄漏(Memory leak)。2、优化线程锁的使用(Thread Lock)3、科学进行垃圾回收(Garbage collection)4、提高系统吞吐量(throughput)5、降低延迟(Delay) 提高其性能(perfoxmance)1.2你了解哪些JVM产品?1、HotSpot VM (目前应用最官方,最主流的JVM虚拟机)(Sun公司研发,后在2010年由Or

2022-06-05 23:37:05 127

空空如也

空空如也

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

TA关注的人

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