自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

NasubiZW

github:https://github.com/NasubiZW

  • 博客(39)
  • 收藏
  • 关注

原创 简单写一个生产者与消费者例子

1、概要:生产者与消费者其实是一种思想或者说是一种代码的设计模式,生产者往存储空间中放入数据,消费者从存储空间中存储数据。2、代码:public class TestThread { private final Lock lock = new ReentrantLock(); private final Condition producerCondition = lock.newCondition(); private final Condition consumerCon

2021-03-01 13:33:49 1158

原创 Class.forName与ClassLoader加载类的区别

加载类有好几种方式,今天主要说下Class.forName与ClassLoader这两种方式的区别主要区别点:Class.forName加载会对类进行初始化(类加载总共有以下几个过程:加载->验证->准备->解析->初始化,详情可自行百度),而ClassLoader不会。上代码,验证过程:其中我们使用Class.forName加载,控制台打印结果:而使用ClassLoader加载,控制台无任何打印结果。...

2020-11-05 11:14:41 672

原创 使用切面Around做数据修改遇到的一个问题

背景:由于业务上需要对前端传过来的数据解密,以及返回的数据进行整体的加密操作,所以第一时间想到的是利用aop切面过程:1、先定义一个注解:2、定义切面:3、对于需要加密和解密的方法,添加注解结果:程序运行报错Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception i

2020-05-26 15:01:19 1108

原创 mysql mvcc

1、概念MVCC:Multi-Version Concurrency Control,多版本并发控制。为了提高数据库的并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。mysql中分为当前读和快照读:(1)当前读:读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁(2)快照读:不加锁的查询操作就是快照...

2019-10-20 11:54:46 571

原创 简单说下mysql本地事务

1、几种事务问题(1)脏读:事务A读取事务B修改的数据,然后事务B进行了事务回滚,导致事务A读取到。(2)不可重复读:事务A多次读取一个数据,在事务A读取的期间,事务B对这个数据做了修改,并且提交,导致事务A多次读取的数据前后不一致。(3)幻读:事务A对表中符合条件的多条数据(或者全表)做数据修改,这时事务B插入一条新数据或者删除了其中一条数据,导致最后修改完与预期的结果不一致。2...

2019-10-19 14:14:47 444

原创 简单说下分布式事务

1、微服务架构存在的问题有哪些?(1)分布式系统,进程间的通讯机制和故障处理措施变的更加复杂(2)系统微服务化后,一个简单的功能,内部可能需要调用多个服务并操作多个数据库实现,产生服务调用的分布式事务问题(3)微服务数量众多,测试、部署、监控等等运维工作都变的更加困难2、解决方案随着RPC框架的成熟,第一个问题已经逐渐得到解决。例如dubbo可以支持多种通讯协议,springc...

2019-10-18 11:06:36 582

原创 使用redis实现接口幂等性

1、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能会多次回调, 必须处理重复回调普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次等等2、常用解决方案唯一索引,防止新增脏数据token机制,防止页面重复提交...

2019-06-30 23:23:40 16700 7

原创 ES基本介绍

简介ES是一个基于RESTful web接口并且构建在Apache Lucene之上的开源分布式搜索引擎。同时ES还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。ES就是为高可用和可扩展而生的。一方面可以通...

2019-06-28 16:10:23 310815 17

原创 基于redis实现分布式锁

实现方式分布式锁一般有三种实现方式:1、基于数据库的乐观锁;2、基于redis实现;3、基于zookeeper的分布式锁。本文内容主要基于redis实现分布式。具备条件确保锁可用,必须要满足一下几个条件:1、互斥性,任意时刻只有一个用户能持有锁2、不会产生死锁,假设某个用户在持有锁的期间由于服务崩溃或者其他原因没有主动释放锁,也能保证后续其他用户可以加锁3、加锁和解锁必须是...

2019-06-26 14:52:04 312

原创 The temporary upload location [/tmp/tomcat.xxx.xxx/work/Tomcat/localhost/ROOT] is not valid

spring boot系统文件上传,报错如下:org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/t...

2019-03-24 13:13:53 7820

原创 使用jedis连接redis,关闭连接问题

1、问题描述:今天项目运行时,突然报如下错误:Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool我的第一反应是jedis的连接池中没有可用连接了,直接把连接池jeidsPool连接数增大一下但是一段时间之后,又开始报...

2019-02-21 19:55:33 9555

原创 RequestParam和PathVariable

RequestParam和PathVariable两者都是把request的请求参数,绑定到controller的方法参数中,区别点在于采用这两种方式的RequestMapping的写法不同,以及请求的url写法不同。1、RequestMapping写法区别采用PathVariable的写法:@RequestMapping(value = "/whisperingNew/workOr...

2019-01-12 10:49:31 1214

原创 通过http请求tomcat服务直接下载linux服务器上的文件

如图所示,在linux服务器上有如图一些文件,现在想通过http访问tomcat的请求方式来获取这些文件步骤:1、找到服务器上tomcat的server.xml的文件,添加一句:<Context docBase ="/usr/local/download/" path ="/download" debug ="0" reloadable ="true"/>其中docBa...

2019-01-02 14:19:42 3713

原创 GET,POST,PUT,DELETE,OPTIONS等请求方式简单总结

之前做的java web项目,基本上只使用get和post的请求方式,但是现在新项目额外增加了put,delete,查了点资料,做个简单的总结。1、GETget请求是用来获取数据的,只是用来查询数据,不对服务器的数据做任何的修改,新增,删除等操作。在这里我们认为get请求是安全的,以及幂等的。安全就是指不影响服务器的数据,幂等是指同一个请求发送多次返回的结果应该相同。特点:ge...

2018-11-23 17:17:28 43543 4

原创 阿里云中本次项目运行环境安装与配置遇到的坑点与总结

由于博主最近刚接手一个其他团队开发过程中的中间版本的项目,并且整个项目环境需要博主重新在阿里云上搭建一套,中间也遇到了一些问题,上网求助了一些资料,在这里,我对此次搭建环境做一个总结。1、代码编译方面遇到的问题(1)由于是刚接手另一个团队交接给我的全新项目工程,所以jar包的依赖管理的特别乱,有一些jar包根本不需要,但是在pom文件中也添加了该jar包的依赖,并且添加的依赖还无法下载下来...

2018-11-21 11:58:29 433 1

原创 使用PageHelper时发现超过最大数量的页数,仍然可以返回数据

最近在做项目的时候,使用PageHelper来进行分页查询,发现一个现象:明明查询出来的总数只有7个,分页的时候每页10个,按理说只有第一页返回会有数据,第二页开始就没有数据了,但是实际情况却是第二页返回的数据与第一页一致,甚至第三页,第四页。。。也是与第一页一样的数据返回结果通过分析PageHelper的源码,发现PageHelper里面有一个reasonable参数,如果是true,会分页...

2018-10-25 16:37:48 10307 1

原创 对于mysql中的group by分组后获取组内创建时间最大的那行数据

1、问题场景:group分组之后,一个组中会有好几条数据,但是一般默认返回id最小的那一条,现在想返回创建时间最大的那一条数据。如图所示,根据上面的QUALITY_ID来查询数据,会有两条数据产生,这个时候直接分组group,产生的结果是:2、解决方法:(1)先根据创建时间倒叙,根据倒叙完的视图进行分组group或者把查询的条件从内查询中放到外查询中也是可以的:...

2018-10-11 11:49:01 28825 9

原创 mysql中EXISTS与IN用法比较

1、使用方式:(1)EXISTS用法select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b where a.projectId = b.id)上面这条SQL的意思就是:以ucsc_project_batch为主表查询batchName...

2018-08-28 15:59:42 51127 10

原创 mysql中对于模糊查询like的一些总结

1、常见用法:(1)搭配%使用%代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据:(2)搭配_使用_代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出下面一条数据:2、使用like模糊查询会导致索引失效,在数据量大的时候会有性能问题(1)尽量少以%或者_开头进行模糊查询通过explain执行计划,我们发现,使用like模糊...

2018-08-21 20:57:33 69493 3

原创 mybatis中LIKE模糊查询的几种写法以及注意点

mybatis中对于使用like来进行模糊查询的几种方式:(1)使用${...}注意:由于$是参数直接注入的,导致这种写法,大括号里面不能注明jdbcType,不然会报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionExc...

2018-08-20 19:42:58 391069 39

原创 git中一些关于ignore的操作

1、文件之前没有进行版本管理,不在版本库的跟踪当中(1)提交时忽略(ignore)这个文件把该文件位置添加到.ignore文件中比如现在提交时要忽略controller下面的TestController.java,在controller文件夹下面添加.ignore文件(2)提交时由之前的忽略(ignore),变成不忽略(ignore)该文件找到对应的.ignore文件,...

2018-08-17 15:05:29 1732

原创 @Validated参数校验,异常信息封装成JSON返回给前端

在之前,曾经写过一篇博客对于@Validated的使用说明,但是对于参数校验不通过之后的异常信息,又如何封装到一个JSON对象返回给前端呢?controller层的代码:如图所示,如果我们仅仅使用@Validated进行校验,但是不做任何其他处理,使用postman模拟前端请求,最终返回给前端的是这样的:在实际的项目开发中,这样明显不可取。解决方案:写一个spring的统一...

2018-08-15 20:15:39 19273 3

原创 mybatis中开启sql日志打印

我们平常用mybatis框架的时候,会遇到一些调试,需要打印sql日志出来,网上查了一些,发现一个很简单的方法,只需要一步就行:如图所示,在mybatis-config.xml文件中的setting里面设置logImpl属性值为STDOUT_LOGGING,再次调试,控制台就能打印出sql日志出来了  ...

2018-08-14 20:19:29 13410

原创 mysql纵表转换为横表进行多表之间的关联查询

1、数据库的表可以分为两类:纵表与横表纵表:表中字段与字段的值采用key——value形式,即表中定义两个字段,其中一个字段里存放的是字段名称,另一个字段中存放的是这个字段名称代表的字段的值。例如,下面这张project_audit_log表,其中date_type字段表示为什么时间类型,后面的date_value表示这个时间的值横表:所有的字段都在表结构中定义出来。如果把上面表的...

2018-08-13 21:15:49 15134

原创 mybatis查找的结果集对象中包含对象和集合的用法

平时项目中使用mybatis查询数据库,对象结果集可能比较复杂,对象中嵌套对象或者集合。如下图所示,返回结果集对象project中包含其他子对象(查询的主表与关联子表数据一对一关系)和list集合(查询的主表与关联子表数据一对多关系):解决方案:对象下面嵌套的对象采用<association>写法,嵌套的集合采用<collection>写法写法实例:...

2018-08-10 22:24:40 78081 11

原创 mybatis接口传入多个入参问题

实际项目开发时,经常会遇到mybatis的接口需要多个入参的情况,但是由于可能参数只有两三个,不愿意把这些参数封装成一个对象,这时就面临着参数直接传入的情景。这时如果按照下面写法,会报错误:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingExcepti...

2018-08-09 20:25:10 2428

原创 @Valid与@Validated注解

之前项目中参数的校验,都是自己写的判断方法进行校验,这次采用了spring提供的注解进行参数的校验,更为的方便,简洁。@Valid:常见用在方法,类中字段上进行校验@Validated:是spring提供的对@Valid的封装,常见用在方法上进行校验 定义的校验类型@Null       验证对象是否为null@NotNull    验证对象是否不为null, 无...

2018-08-06 20:58:21 20991 2

原创 java泛型

最近,在项目中由于一个接口要适配多个不同场景的调用,所以导致这个接口的出参与入参都不可确定,需要用到泛型,这里简单记录一下我的用法。泛型的用法分为泛型类,泛型接口,泛型方法。1、泛型类由于项目中过多的设计分页查询,所以,写了一个泛型类,这个对象中包含一个分页信息对象,一个查询条件泛型对象,用来接收不同的查询条件2、泛型接口不同的业务场景都需要调用这个接口,而且不同场景的...

2018-08-03 21:12:05 1328

原创 java静态代理与动态代理用法

代理模式是指通过代理对象来访问目标对象,这样便于在目标对象的功能基础之上添加额外的功能扩展,并且不需要改变原目标对象的代码。1、静态代理静态代理比较简单,代理类与目标类实现同一个接口,把目标类的对象添加进代理类中,然后在代理类的方法中调用目标类的方法,代码如下:接口public interface People {void eat();}目标类public cla...

2018-04-08 15:04:14 156

原创 java中强引用,软引用,弱引用,虚引用

1、强引用强引用是最普遍的引用,我们一般new创建出来的对象的引用都为强引用。强引用不会被jvm强制回收,就算jvm内存不够继续分配,抛出OOM,也不会随意回收强引用。public class A {public void aa(){System.out.println("引用测试");}}A a = new A();2、软引用如果一个对象只有软引用,如果jvm内存空...

2018-03-28 10:56:22 238 1

原创 oracle与mysql分页

1、mysql分页采用limit分页select * from test limit start,size;查询test表中从第start行开始,查询size数量行的数据,注意表的下标是从0开始的,即如果要查表最开始的前10行,分页语句应该这么写:select * from test limit 0,10;2、oracle中分页采用rownum分页select * from (...

2018-03-22 11:11:46 282

原创 java多线程同步

java中为了多线程安全问题,我们往往会要求线程同步操作,以下是java中常用的几种实现线程同步的方式。1、使用synchronized关键字修饰方法class ThreadA{int count = 0;synchronized public void count(){System.out.println(count);count++;}}public class Tes...

2018-03-21 11:18:57 199

原创 java常见的几种调用机制(同步调用,异步调用,回调)

1、同步调用同步调用是最基本的调用方式,对象b中的方法直接调用对象a的方法,这个时候程序会等待对象a的方法执行完返回结果之后才会继续往下走。代码如下:public class A {public void methodA(){System.out.println("this is class A method");}}public class B {public voi...

2018-03-19 19:52:04 15859 1

原创 java中"多重继承"方案

我们知道java中接口是支持多继承的,但是类是不支持进行多继承的,但是有些时候难免会遇到可能需要用到多个类中的某些成员或者方法,这个时候怎么办呢?利用内部类可以独立继承一个类的机制,无论外部类是否继承了其他类,对于内部类的继承没有影响。代码如下:public class TestAA {public void testA(){System.out.println("method:...

2018-03-14 20:02:04 323

原创 java web之跨域问题

1、问题原因实际项目开发中,我们经常前后端分离,前端代码工程与后端代码工程分别部署在不同的服务器上,然后这个时候再做前后端通信的时候就会出现跨域的情况。这个操作分为两个部分,刚开始是前端发起对后端程序的访问,这个是可以操作的,并且后端程序也返回了response给前端,只是在浏览器的安全策略处理上不允许这类数据的接受。这个主要是由于浏览器的同源策略的限制,现在所有支持JavaScrip...

2018-02-28 15:12:53 1047

原创 java的向上转型与向下转型

1、java的向上转型概念:定义一个父类的引用变量来指向一个子类的对象。该引用变量可以调用父类中定义的属性和方法,对于非静态方法,如果子类中重写了该方法,则会引用java的动态绑定机制,实际调用子类的方法。实例代码:public class Father {    public static int a = 15;public int b = 110;public static ...

2017-12-19 16:42:15 546

原创 java中数组快速转成List集合

java中,如果想把一个数组转换成为List集合,我们一般会使用Arrays.asList()方法,代码如下:public class ArrayTest1 {public static void main(String[] args) {String[] arr = {"aa","bb","cc"};List<String> list = Arrays.asList(arr...

2017-12-12 16:41:36 18611 2

原创 线程中主线程与子线程之间的关系

1、最常见的情况,主线程中开启了一个子线程,开启之后,主线程与子线程互不影响各自的生命周期,即主线程结束,子线程还可以继续执行;子线程介素,主线程也能继续执行。测试代码如下:public class TestThread{public static void main(String[] args) throws InterruptedException {System.out.prin...

2017-12-12 10:45:40 20317 4

原创 java反射之初认识

1、java反射机制的概念?java反射机制是指java在运行状态时,可以知道任意一个类的属性和方法,对于任意一个对象,可以调用它的所有属性和方法,这种动态获取信息,以及动态获取对象方法的功能称之为java反射机制2、获得类定义信息的几种方式?Test test = new Test();1)Class cla = test.getClass();2)Class cla = T...

2017-08-29 19:24:37 228

空空如也

空空如也

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

TA关注的人

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