自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(204)
  • 问答 (4)
  • 收藏
  • 关注

原创 关于spring加载(下载)xsd文件失败的问题。

一,前言最近在开发的过程中,遇到了一个奇怪的问题,项目启启停停了几次之后,突然就跑不起来了。主要的报错信息如下:1.Ignored XML validation warning schema_reference:无法读取文档 'xxx.xsd'2.Server return HTTP response code :403 for URL : xxx.xsd3.Context initialization fialed大概就是这几个问题,可以看出来是xsd加载的问题,然后就开始了..

2021-04-30 10:58:25 1942 1

原创 idea 打包项目

一,前言最近在打包发布项目的时候,遇到了一个奇怪的问题:与项目有关的jar包,都已经在maven仓库了,但是每次打包项目的时候,都要去下载相关的jar包,导致打包项目的时候非常非常的长。二,解决方法把c盘那个路径下的maven设置文件,覆盖掉你maven安装路径下的设置文件就可以了。按照网上的说法是,编译运行,idea用的是你maven设置的那个设置文件,但是打包的话,用的是另外一个设置文件,也就是你maven安装路径下的设置文件。...

2021-04-13 09:32:26 507

原创 dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

一,前言最近在使用mysql的分组grouo by的时候,出现了这个错误,我的记得我的写法之前是对的,查了一下资料才发现,原来是mysql版本的问题。二,具体过程编写sql的时候,查询了多个列,而分组的列只是其中的一个列。我记得这个写法是没问题的,百度了之后才发现,原来5.6和5.7的sql_mode不一样了。这前这个写法没问题,是因为mysql是5.6的,现在5.7之后就不可以了。这个sql_mode,可以理解成是mysql对插入数据时候的一种校验,这里给出几种常见的:O.

2021-01-14 23:45:52 3187 1

原创 jvm笔记 (未完结)

一,PC寄存器功能:主要负责记得当前线程的执行指令地址,每个 线程都会有各自的pc寄存器,因为在多线程坏境中,需要知道切换线程后,当前线程执行到哪个位置,当切换回来的时候,通过寻找到这个位置继续执行程序既不会发生gc,也不会发生oom,是线程私有的二,虚拟机栈管理java程序运行,保存方法的局部变量(如果是引用类型则报存引用地址),部分结果,参与方法的调用和返回。内部保存的基本单位是栈帧,每个栈帧对应一个方法。生命周期和线程一样,不会触发gc,是线程私有的优点:栈是一种快速有效的分配存储结构

2021-01-11 22:47:26 216

原创 序列化

一,序列化id/** * 单品表 */@Getter@Setter@ToStringpublic class Product extends BaseImgModel implements Serializable { private static final long serialVersionUID = 1L; /** * 单品id */ @TableId(value = "product_id", type = IdType.AUTO)

2021-01-04 23:29:26 189

原创 设计模式的七大原则

一,单一职责职责越单一,被修改的原因就越少,模块的内聚性(Cohesion)就越高,被复用的可能性就越大,也更容易被理解。二,开闭原则实体应该对扩展开放,对修改关闭。在软件的生命周期内,更改是难免的,如果有一种方案既可以扩展软件功能,又可以不修改原代码,那是我们梦寐以求的。因为不修改就意味着不影响现有业务,新增的代码不会对既有业务产生影响,也就不会引发漏洞。我们通常通过继承和多态来实现OCP,即封装不变部分。对于需要变化的部分,通过接口继承实现的方式来实现“开放”。很多的设计模式都以达到O.

2020-12-30 23:49:39 224

原创 java 泛型边界 多继承的问题

一,前言最近在做项目代码优化的时候,运用泛型来接受参数,从而让方法达到重用的效果。然后我想起之前看到过的一个面试问题:有没有使用过继承?java中有多继承吗?有用过extends多个对象吗?在java里,类都是单继承的,接口可以多继承。对于extends多个对象,是在泛型里边有出现过,但是其实并不是真正的多继承。二,具体代码分析在使用泛型确定边界的时候,这个不就是多继承了吗?其实并不是真正的多继承。BaseExcel是一个类,ProductService是一个接口,这种写法相当.

2020-12-30 22:48:46 1950

原创 ThreadLocal

一,前言ThreadLocal 用作保存每个线程独享的对象,为每个线程都创建一个副本,这样子就可以解决在并发情况下,因为多个线程访问共享变量而引发的并发问题。也可以用作当前线程的全局变量,例如 ,通过过滤器来获取请求的用户信息,然后作为一个全局变量set到ThreadLocal里,在其他地方调用get方法来取出。二,常用的方法分析以上是ThreadLocal的类结构图,ThreadLocalMap是底层真正存储的对象,ThreadLocalMap由一个Entry类型的数组,Entr.

2020-12-30 21:57:29 149

原创 Text ‘2020-12-18‘ could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO

错误信息提示很明显,yyyy-MM-dd格式的日期类型并不能转换成LocaldDateTime。LocalDateTime必须是yyyy-MM-dd HH:mm:ss解决方法:可以对字符串进行处理,补充缺少的部分

2020-12-30 21:54:20 14361

原创 Null return value from advice does not match primitive return type for

这个报错信息,大概说的是说,一个空的返回追不匹配。跟踪 报错信息,它提示是一个service的save方法返回值不对。具体代码:可以看到,这个save方法返回值是一个基本数据类型,如果返回null则对应不上。我百度了一下,其他小伙伴提供的这两种思路1,直接修改方法的返回值2,切面报错的问题可以看到,切面返回的是一个object,如果是切面导致的异常,这个result就是一个空值,所以就会导致方法返回一个null。我们可以在这个方法里边try...catch一下看.

2020-12-30 21:47:30 688

原创 Springboot 初始化

一,前言有时候,我们可能需要在使用一个service或者工具之前,做一些数据的初始化或者对象的初始化。这里介绍一下在开发中常用的三种做法二,实战2.1 使用 static 关键字这个方法是比较普遍的实现方式之一,了解过类加载顺序的朋友都知道,静态属性和静态方法都比实例属性和实例方法先加载,这里就不多介绍了。2.2 实现CommandLineRunner 接口在springboot中,我们可以实现CommandLineRunner接口,重写run()方法。当spr...

2020-12-16 23:35:37 1379

原创 SpringBoot 错误页面和异常处理

一,错误页面如图所有,这两种错误提示在springboot开发的应有程序中都很常见,第一种是html请求,第二种是json格式的请求。在SpringBoot中,默认错误请求控制器是BasicErrorController。这里主要看我圈出来的这两个方法,第一个方法是处理html请求的错误,第二种是处理json格式请求的错误。了解完基础知识之后,就可以开始准备我们专属的错误页面的。从SpringBoot官方文档里边可以知道,默认的错误页面是在templates下的一个erroe

2020-12-07 23:03:06 1872

原创 StringJoiner

一,前言在项目里,经常会用到字符串拼接,例如,拼接多个水果名称,用竖线隔开: apple|orange|banana注意,在最后是没有这个分隔符竖线的,这里我们可能 就需要用到逻辑操作去除最后的竖线。但是,最近发现一个类可以完美完成以上功能。它就是StringJoiner。二,StringJoiner2.1构造函数StringJoinerpublic StringJoiner(CharSequence delimiter) { this(delimite..

2020-12-07 21:17:15 293

原创 springboot 拦截器

一,基础知识拦截器,它是基于AOP来实现的,它拦截的对象一般是方法。你可以使用拦截器来对某些方法执行某些任务,例如在Controller处理请求之前编写日志,添加或更新配置......二,实战配置类:@Configurationpublic class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRe...

2020-11-30 23:21:50 201

原创 springboot 过滤器Filter

一,基础知识Filter 过滤器主要是用来过滤用户请求(也就是对请求路径过滤)的,它允许我们对用户请求进行前置处理和后置处理,比如实现 URL 级别的权限控制、过滤非法请求等等。而且,Filter是基于servlet的,也就是说它的生命周期和servlet一样。二,实战2.1 使用配置文件的方式来配置一个过滤器@Componentpublic class MyFilter implements Filter { @Override public vo..

2020-11-30 23:05:26 261

原创 SpringBoot2.x 时间日期类型的转换

一,前言最近做项目遇到一个问题,就是controller层使用@RequestBody来接受一个对象,但是时间类型的属性需要自己手动去格式化。网上看了许多介绍的,使用@JsonFormat注解,使用@DateTimeFormat注解的,也都不行,最后找到了一个解决方法。二,解决方法import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.jackson.databind.DeserializationCon..

2020-11-25 16:14:45 723

原创 Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on

一,前言最近给项目加上了一个测试模块,但是在install的时候,出现了这个错误,一直编译不成功。通过百度搜查了很多文字,都是使用maven插件来跳过检测。我想是测试模块的问题,然后就到测试模块那边,注释掉了启动类上的测试注解,发现编译又成功了,但是还找不到原因,有大佬知道的请指教一下。二,具体操作...

2020-11-24 17:36:10 1567

原创 SpringBoot2.X-启动项目的方式

一,通过idea直接启动二,通过命令 mvn spring-boot:run 来运行注意,需要进入到当前项目的目录后,再执行这个命令可以看到,在执行这个命令之前,其实还进行了install操作,然后再启动项目。三,打包,然后通过java -jar 运行首先,先执行 mvn install 命令,编译项目,这个时候可以看到在target文件夹下打包生成项目的jar包使用命令行进入到target目录,然后执行jar包最后,成功运行...

2020-11-24 16:43:40 364

原创 mysql limit的问题

一,问题的引出 主要是limit a,b ,从a开始,返回后面的b条数据,会扫描a+b行。当a很大的时候就会影响查询速度。例如,limit10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行。二,问题的解决方法...

2020-11-24 15:43:32 944

原创 Springboot2.X —读取配置文件

一,前言最近在做项目的时候,用到了读取配置文件这个功能,发现网上的博客读取配置文件的方式有很多种,但是由于时间不一致,导致读取文件的方式也不同,这里列出我个人觉得比较好的方法来,就像跟使用常量一样,直接可以把配置文件的属性通过 点 来获取。二,具体操作第一步,先看配置文件oyj: name: oujiji age: 18我这个是yml的配置文件,通过一种key-value的形式来配置,而且在结构上更加有层次感。我们的目标就要是读取name和age这两个值第二步...

2020-11-24 14:46:31 403 1

原创 Not registered via @EnableConfigurationProperties, marked as Spring component, or scanned via @Confi

一,问题描述出现这个问题,是我的一个读取yml配置属性的类上出现的错误,根据错误提示marked as Spring component ,可以猜到是需要把这个文件作为一个spring的组件二,解决方法给这个类加上@Component注解即可。...

2020-11-23 23:09:25 614

原创 Arrays.copyOf与System.arrayCopy

一,Arrays.copy因为根据数组的类型不同,有很多的重载方法,这里就取出int类型来分析。 public static int[] copyOf(int[] original, int newLength) { int[] copy = new int[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, new

2020-11-21 14:59:21 288

原创 java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)

1.问题出现场景我出现这个问题的原因是,刚接手到了一个新项目,虽然我idea已经设置好了jdk版本是1.8的,但是项目从git上拉下拉,编译环境那些都是1.5的,所以在编译的时候没通过,出现这个报错。2.解决方法主要分成三步,这三个地方全都设置成你自己的jdk版本即可解决。①项目的jdkFile ->Project Structure->Project Settings ->Project②工程的jdkFile ->Project S...

2020-11-19 11:05:25 936 1

原创 RabbitMQ(十)顺序消费

一,前言对于一些业务来说,需要确保消息被消费时候的顺序性。例如,有前后关系的查询-新增-删除这么三个消息,消费者必须按照这个顺序来消费,如果乱序就会出现结果不符合预期。二,解决方式前提是:必须要使用 生产者-队列-消费者 这种单消费者模式,为的就是防止消费者争抢消息导致顺序不一样。1,使用多队列的模式,例如我上边的那个例子,把它分发给三个队列,一个查询队列,一个新增队列,一个删除队列,每个队列对应一个消费者,这样子就可以保证顺序性。2.使用分组的思想。也是我上边那个...

2020-11-09 12:44:05 6762 3

原创 RabbitMQ(九)消息重复消费

一,前言首先,rabbitMQ并没有为消息的重复消费而设计一种解决方法,这个解决方法需要我们来根据业务自己实现,我整理了几种常见的解决方法。二,消息重复发送导致消息被重复消费的场景第一个场景,在生产者发送消息给rabbitMQ服务器的时候,有可能因为网络波动等情况,导致生产者收不到rabbitMQ服务器的应答,导致生产者再发送一条消息。第二个场景,也是因为网络波动等问题,导致rabbitMQ服务器在向消费者发送消息的时候,没有收到消费者的应答,重复向消费者发生消息。这两个场景,其实.

2020-11-09 11:07:22 1854

原创 RabbitMQ(八)消息丢失

一,rabbitMQ消息的传递过程及可能发生丢失的地方消息从生产者产生,然后发生给rabbitMQ服务器,再发送给对应的消费者。在这个过程中,生产者发生消息的时候,可能会因为网络等问题,导致消息丢失了,也就是①的地方也可能rabbitMQ服务器挂掉了,造成的消息丢失,也就是②的地方也可能因为服务器发送消息给客户端,或者客户端出现错误(拿到消息后并没有正确完整地处理完对应的业务)而导致出错,也就是③最后,③这个地方说一下,因为rabbitMQ是把消息发送给消费者之后,它就会删除掉对应的

2020-11-07 20:15:34 1201

原创 rabbitMQ(七)实战-限流

一,什么是限流?为什么要限流?rabbitMQ的限流,就是指在消费者端,限制消费者接收消息的数量。之所以要限制消费者的流量,是因为,假设Rabbitmq 服务器积压了很多很多条消息,当我们打开一个消费者,巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多消息。类似于许多请求都到达数据库一样,会给我们的系统造成很大的压力,影响系统的性能,严重甚至会导致系统崩溃。那为什么要在消费者端限流呢,不在生产者端限流?因为,生产者消息的产生,是用户的行为,我们无法去约束它。例如,下单的时候,会产

2020-11-06 10:50:27 2234

原创 rabbitMQ(六)实战-使用死信队列来实现延时队列的效果

一,什么是死信队列?“死信”是RabbitMQ中的一种消息机制,当你在消费消息时,如果队列里的消息出现以下情况:消息被否定确认,使用channel.basicNack或channel.basicReject,并且此时requeue属性被设置为false。 消息在队列的存活时间超过设置的TTL时间。 消息队列的消息数量已经超过最大队列长度。那么该消息将成为“死信”,也就是过期消息。“死信”消息会被RabbitMQ进行特殊处理,如果配置了死信队列信息,那么该消息将会被丢进死信队列中,...

2020-11-06 03:11:47 405

原创 rabbitMQ(五)实战-springboot整合rabbitMQ和各种交换机的使用

一,springboot整合rabbitMQ为了后续的实战,这里创建2个项目,一个消息生产者,一个消息消费者。rabbitMQ的基本配置信息很简单,就一个pom引入和yml配置连接信息,详细如下图所示:第一步,pom文件引入rabbitMQ,也需要引入web模块,为了后续的实战需要。第二步,配置yml的连接信息两个项目的配置都是类似的,就server.port和spring.application.name需要修改。二,各种类型交换机的实战1.Direct Exch.

2020-11-02 15:56:43 414

原创 rabbitMQ(四)应用场景

一,服务解耦两个高耦合的服务,通过消息中间件的使用,从而变成低耦合。例子:订单系统需要和库存系统配合实现业务。订单系统的业务需要使用到库存系统的服务,但是,当使用库存系统出现错误,或者库存系统某一段时间内,不可用,那么随之造成的结果是,订单系统也变成不可用了。引入消息队列后:订单系统把订单信息发送到消息队列里边,即可给客户反馈下单操作完成,不需要等待库存系统的响应。同样的,库存系统只需要负责从消息队里里边取出信息即可,如果在处理过程中发生错误了,只需要再通知客户即可。当客户.

2020-11-02 00:43:17 247

原创 rabbitMQ(三)交换机的类型

一,Direct Exchange处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “dog”,则只有被标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog。二,Fanout Exchange不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。Fanout交换机转发消息是最快的。...

2020-11-01 19:52:51 276

原创 rabbitMQ(二)六大应用模式

一,简单模式生产者不经过交换机的路由,直接把消息放到队列里边去,消费者则监听消息队列,如果有消息,则直接消费掉,然后队列里的消息就会被自动删除。注:这个模式有个问题,就是如果在消费者消费消息的时候出现问题了,那么这个时候消息已经被自动删除掉了,这就会造成消息的丢失。具体的解决方法,留到之后再介绍。二,work工作模式(资源的竞争)生产者把消息放入队列里,多个消费者同时监听着这个队列。如果队列里有消息,则多个消费者同时争夺消息,谁抢到那么就谁去处理这个消息。注:在高并发的坏境下,.

2020-11-01 19:35:49 295

原创 rabbitMQ(一)基本介绍

一,基本介绍RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。AMQP(Advanced Message Queue:高级消息队列协议)它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。RabbitMQ 最初起源于消息系统,用于在分布式系统中存储转发消息,具体有如下一些特点:可靠性:RabbitMQ 使用一些机制来保证可靠性,比如持久化、传输确认机制(ack)和发布确认等。 灵活的路由策略:.

2020-11-01 19:06:34 425

原创 5.1 文本编辑器VIM

三种模式:命令模式,插入模式,编辑模式输入: vim 文件名 进入命令模式输入a/i/o 进入插入模式按ESC,退出插入模式,切换到命令模式输入: 进入编辑模式,以回车结束运行:100 移动到第100行:set nu 设置显示行号:set nonu 设置取消显示行号:n1,n2 d 删除n1到n2行:wq 保存修改退出:q! 不保存修改退出...

2020-10-27 14:31:32 209

原创 4.8 关机重启

命令名称:shutdown语法:shutdown [选项] 时间 -c 取消前一个关机命令 -h 关机 -r 重启例子 : shutdown -h now 马上关机其他的关机命令:haltpoweroff = 直接断电,危害大init 0其他的重启命令:rebootinit 6系统运行级别:0 关机1 单用户(只启动最基础的核心服务,用于做修复,类似windos的安全模式,只有root)2 不完全多用户,不含NFS服务3...

2020-10-27 13:58:37 155

原创 面试题 01.06. 字符串压缩

classSolution{publicStringcompressString(StringS){inti=0;intn=S.length();StringBuilderresult=newStringBuilder();while(i<n){intj=i;while(j<n&&S.ch...

2020-10-25 11:31:09 158

原创 1356. 根据数字二进制下 1 的数目排序

classSolution{publicint[]sortByBits(int[]arr){int[]map=newint[arr.length];for(inti=0;i<arr.length;i++){map[i]=Integer.bitCount(arr[i])*10000000+arr[i];}Arrays.sort(map)...

2020-10-25 11:11:42 208

原创 1403. 非递增顺序的最小子序列

classSolution{publicList<Integer>minSubsequence(int[]nums){Arrays.sort(nums);intsum=Arrays.stream(nums).sum();List<Integer>list=newArrayList<>();intscur=0;for(inti=...

2020-10-25 10:56:49 159

原创 1502. 判断能否形成等差数列

classSolution{publicbooleancanMakeArithmeticProgression(int[]arr){Arrays.sort(arr);inttemp=arr[1]-arr[0];booleanresult=true;for(inti=1;i<arr.length;i++){if(temp!=arr[i]-arr[i-1])...

2020-10-23 22:40:55 196

原创 1491. 去掉最低工资和最高工资后的工资平均值

classSolution{publicdoubleaverage(int[]salary){doublesum=0;intmin=salary[0];intmax=salary[0];for(inti=0;i<salary.length;i++){sum+=salary[i];if(salary[i]<min...

2020-10-23 22:34:01 173

空空如也

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

TA关注的人

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