自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

绅士jiejie的博客

复利是世界第八大奇迹!!!

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

原创 Mac如何找到文件的绝对路径

有时候我们在破解mac版的一些软件,比如mac的idea时,需要加入补丁文件,同时维护上补丁文件的绝对地址,那么在mac上怎么获取文件的绝对地址呢?比如我要查找idea文件夹中的idea.vmoptions文件的绝对路径,通过命令sudo find / -name idea.vmoptions即可,结果如下:截图里可以看到idea.vmoptions文件的绝对路径是/Applications...

2020-01-31 20:12:31 7285 1

原创 简单了解线程池

线程池是什么创建一定数量的可执行线程放入一个容器(池)中,这个池就叫做线程池,我们也可以把线程池理解成是一组线程的集合。为什么要用线程池首先我们要知道,线程是很宝贵的资源,因为在Java中创建线程需要调用操作系统内核的Api,从而使操作系统为线程分配所需的资源,成本很高。那么我们就应该尽量的避免这样的宝贵资源重复创建和销毁,而使用线程池就能够做到。因为线程池中的线程在执行完任务后,会...

2020-01-31 13:10:47 1411

原创 了解Java中的4种引用类型

Java的引用类型有哪4种强引用软引用弱引用虚引用每个引用的有什么不同强引用:像我们平时用new关键字创建出来的对象引用对象就是属于强引用,对于强引用类型的对象,虚拟机宁愿抛出OOM异常,也不会去回收这个对象,所以强引用可能会造成内存泄漏。软引用:软引用是通过SoftReference类实现的。如果一个对象只有软引用,一旦内存不足时,这个对象就会被自动回收,反之则不会。...

2020-01-30 22:50:28 307

原创 什么是无状态协议

无状态指的是客户端(Web浏览器)和服务器之间不需要建立持久的连接,当一个客户端向服务器发起请求后,服务器收到了请求并且返回响应结果,这次的通信就结束了,同时服务器不保留连接的相关信息。所以每次请求都需要包含所需的所有信息,这样消息结构会比较复杂,同时也会导致相同的数据在多个请求里反复传输,协议效率也会因此降低。...

2020-01-30 10:19:59 1886

原创 泛型标记有哪些,怎么选择使用

经常看到源码里有使用泛型,有时用T标记,有时用E标记等等,为什么要这样用不同的字母标记泛型呢,这是因为每个字母标记都有不同的含义。泛型标记说明E-Element在集合里使用,表示在集合中存放的元素T-Type表示Java类K-Key表示键V-Value表示值N-Number表示数值类型?表示不确定的Java类型...

2020-01-29 22:01:39 331

原创 简析ThreadLocal

ThreadLocal是什么我们知道在使用多线程时,有时需要共享变量,需要同步数据,所以各个线程之间对这个变量都是开放的,这概念可以称之为线程开放。但也不是所有时候都需要同步数据,每个线程也可以有自己独有的变量,不需要同步给其他线程,这概念可以叫做线程封闭。而ThreadLocal就是线程封闭具体的体现之一。在JDK1.2版本里就提供了java.lang.ThreadLocal类,我们可以把...

2020-01-29 21:51:59 268

原创 什么是CAS

什么是CASCAS英文全称为Compare And Swap,比较并交换的意思。CAS操作包含3个参数-----V,E,N。V代表着要更新的变量(也可以理解为内存地址),E代表着预期原值,N代表着新值。CAS操作采用了乐观锁的思想,判读逻辑是只有在V的值等于E值时,才会将V的值设置为N。如果V的值和E值不想等,说明有别的线程先修改了E值,当前线程不做任何操作。到最后,CAS会返回当前V被其他...

2020-01-29 00:43:17 1904

原创 线程的上下文切换指的是什么?

什么是线程的上下文切换首先要了解,就算我们的CPU是单核的,也是支持多线程运行代码的。那么能做到这点的关键就在于CPU利用了时间片轮询来为每一个任务都服务一段时间。时间片指的就是CPU分配给每一个线程的时间,同时因为时间片的时间很短,以毫秒为单位,所以即使CPU不断的切换线程运行,给我们的感知也是并行的。而在这不断切换线程的过程中,CPU会把当前任务的状态保存下来(方便之后切换回来时能够继续...

2020-01-28 22:12:20 1320

原创 线程的stop方法和interrupt方法

创建测试需要的类新建一个类MyThread,继承Threadpublic class MyThread extends Thread { public int x = 0; public int y = 0; @Override public void run() { //保证线程安全和原子性 synchronized ...

2020-01-26 22:24:59 1361

原创 了解线程的生命周期

线程的生命周期新建(NEW)就绪(RUNNABLE)运行(RUNNING)阻塞(BLOCKED)死亡(DEAD)线程的生命周期状态描述新建:在Java中使用了new关键字创建一个新线程,同时为这个线程分配内存并初始化一些成员变量的值,这时候这个线程就是处于新建状态。就绪: 新建的线程调用了start方法,这时候JVM会把线程私有的虚拟机栈和本地方法栈以及程序计数器创建好...

2020-01-26 21:21:23 324

原创 重写hashCode()方法让对象相等

承接上文的重写equal()方法让对象值相等,可以知道重写了equal()方法可以让对象的内容相等,不过如果把这两个比较的对象都加入set集合中,会发现set集合里的size是2而不是1,说明其实这两个对象并不是完全相等的。测试代码如下:public class TestMain { public static void main(String[] args) throws Excep...

2020-01-23 21:32:43 776

原创 重写equal()方法让对象值相等

假想有时候会碰到这样的业务需求,产品要求用户的名字和年龄相同的话,就是同一个用户,要做出判断,给出提示。新建一个UserInfo类:public class UserInfo { private String id; private String userName; private int age; public String getId() { ...

2020-01-23 11:08:32 748

原创 双亲委派机制

要了解双亲委派机制,首先要了解类加载器,而类加载器实现的功能就是在加载阶段获取二进制字节流的时候做的。类加载器每个加载器作用启动类加载器:负责加载Java_HOME/lib目录中的类库,或通过-Xbootclasspath参数指定路径中被虚拟机认可的类库。扩展类加载器:负责加载Java_HOME/lib/ext目录中的类库,或通过java.ext.dirs系统变量加载指定路径中的...

2020-01-23 00:41:34 419

原创 JVM的类加载阶段

JVM的类加载阶段如图所示:JVM的类加载阶段分为5个阶段,加载,验证,准备,解析,初始化。初始化完成后就能够使用该类,同时在该类不再被需要时,可以从JVM中卸载它。每个阶段的作用加载:简单的说就是JVM读取Class文件,并且根据Class文件信息创建java.lang.Class对象。验证:这个阶段主要是验证Class文件的字节流是否符合虚拟机的要求规范,从而保障虚拟机的安全...

2020-01-22 23:36:03 436

原创 简单了解JVM结构

JVM的结构图每个模块的简述类加载子系统:类加载子系统用于将编译好的.Class文件加载到JVM中运行时数据区:运行时数据区用于存放JVM在运行时产生的数据程序计数器:程序计数器是线程私有的,用来存储当前线程运行时所执行的字节码的行号指示器。在方法运行时,程序计数器存储的是当前的虚拟机字节码指令的地址,不过如果方法是本地方法,那么程序计数器的值是空的。简单的理解,可以想象成平时退...

2020-01-22 10:52:48 341

原创 spring boot验证框架

在平时开发中,前端一般都会做参数的正确化校验,但是单单前端做校验是不够保险的,所以后端也需要加上相关的参数校验,防止有人绕过前端直接调用接口。而spring boot就提供有这样的验证框架,默认实现用的是Hibernate validator。我们只需要将@Validated注解标注在方法参数上,spring boot就可以对参数进行校验,同时把校验结果放在BindingResult对象里。...

2020-01-20 11:21:25 852

原创 Zuul实现Fallback

在微服务系统里,众多的微服务大多部署在不同的服务器上,我们使用Zuul来作为网关提供统一入口同时协调服务。但有时出现一两个服务请求不通或者干脆就是宕机的情况,这也是可以预见的问题,所以需要时时刻刻准备着容错的手段,没有系统可以做到万无一失。请求经过Zuul,然后调用服务失败了,怎么容错了解过Hystrix的简单实现,其实可以发现在Spring Cloud里Hystrix是个很重要的组件,它...

2020-01-17 11:19:17 558

原创 何时使用接口,何时使用抽象类

什么是接口Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。接口的特点定义接口的关键字是interface接口不能实例化,也没有构造函数接口的实现类必须实现接口的所有方法,除非这个实现类是抽象类一个接口可以继承多个接口,不过无法继承类接口的方法不能有具体实现...

2020-01-15 23:32:53 622

原创 xml里对集合数据的条件判断千万别这样写

原来的写法:select name from user_infowhere 1=1 < if test="qo.ids.size>0 and qo.ids!=null"> and PK_GUID in <foreach collection="qo.ids" index="index" item="item" open=...

2020-01-14 15:45:05 2136

原创 Hystrix线程池的划分

通过简单了解Hystrix的舱壁隔离这篇博文,可以了解到划分独立线程池是Hystrix实现舱壁隔离的手段之一。怎么划分线程池以继承方式实现的 Hystrix 命令使用类,在该类的构造函数里划分线程池用注解的方式划分线程池以继承方式实现的 Hystrix 命令使用类,在该类的构造函数里划分线程池public class DemoCommand extends HystrixCo...

2020-01-14 10:49:41 572

原创 mapper [userName] of different type, current_type [text], merged_type [keyword]

111

2020-01-10 16:29:13 8339 8

原创 Fielddata is disabled on text fields by default. Set fielddata=true on [usrName]

使用spring boot+ElasticSearch做数据聚合时,报了该异常:Fielddata is disabled on text fields by default. Set fielddata=true on [usrName]

2020-01-10 16:24:39 1132

原创 简单了解Hystrix的舱壁隔离

通过Hystrix的简单实现这篇博文,可以了解到我们为什么要使用Hystrix以及如何简单使用Hystrix的功能不过我突然意识到,我的系统可是要调用好多个三方接口的,那么如果其中一个第三方接口出现了问题,要是在高并发的情况下,所有的资源都会被这个第三方接口所耗尽,那其他的接口就没法做事了,再夸张点,还会造成系统宕机。那这时候引入Hystrix还有什么用,在上述情况下,他容错降级的功能形同虚设...

2020-01-09 17:01:34 1483

原创 抽象工厂模式

在使用了工厂模式之后,发现了一个问题一个具体工厂只能创建一个产品但是在实际的使用中,一个工厂往往需要创建多个产品,这时抽象工厂模式就应运而生了。什么是抽象工厂模式抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。抽象工厂模式中存在四种角色,分别是抽象工厂角色,具体工厂角色,抽象产品角色,具体产品角色。...

2020-01-09 14:27:29 270

原创 工厂模式

什么是工厂模式工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。利用工厂模式,我们可以在创建对象时不对客户端暴露创建逻辑,而是通过使用一个共同的接口来创建新的对象。工厂模式具体可以分为3种:为什么要用工厂模式如果创建一个类的步骤很复杂,很多地方都用得到这个类,我们可以使用工厂模式做统...

2020-01-09 14:27:02 202

原创 Hystrix怎么针对不同异常做不同降级逻辑

测试代码:有一个RibbonService类,用来做远程调用服务,远程调用的方法helloRibbon()里的逻辑暂时为空,还有个降级方法fallback(),里面也暂无逻辑 @Service public class RibbonService { @HystrixCommand(fallbackMethod = "fallback") public U...

2020-01-08 17:30:16 701

原创 spring boot上传文件的同时带上参数

项目碰到一个需求,需要为一条数据绑定相关的excel文件,所以在上传文件的同时还需要上传数据的主键id具体方法如下:@PostMapping("/upload") public Result<Object> upload(@RequestParam("file") MultipartFile file, @RequestParam("cmHisIds") String cmHis...

2020-01-08 15:50:43 17929 11

原创 Page 31 of 30 containing UNKNOWN instances

数据分页展示,然后显示出问题,最后打断点看到有"Page 31 of 30 containing UNKNOWN instances"这个信息分析后发现原因:因为page是从0开始的,而不是从1开始的,前端把第一页的分页参数page设成了1传给了后端,就造成了"Page 31 of 30 containing UNKNOWN instances"这个结果解决方案:前端把page参数改成从...

2020-01-08 15:03:15 370

原创 工厂模式

工厂模式对简单工厂模式做了一些改进,它通过定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行,具体实例的创建过程是在其子类执行的。接下来对之前简单工厂模式的代码再做一层优化,改进成工厂模式创建一个接口工厂类CarFactory类,作为所有汽车品牌工厂的工厂父类/** * 汽车工厂类 */public interface CarFactor...

2020-01-07 23:59:26 143

原创 简单工厂模式

背景假设:有3种品牌的轿车,奔驰,玛莎拉蒂,宝马,我们用简单工厂模式实现他们的实例化构建轿车抽象类Car,有一个run()方法/** * 轿车类 */public interface Car { /** * 轿车奔跑的方法 */ void run();}构建奔驰类,实现Car类/** * 奔驰车 */public class M...

2020-01-07 22:57:25 146

原创 com.netflix.hystrix和org.springframework.cloud.netflix.hystrix两个包下都有HystrixCircuitBreaker

com.netflix.hystrix.HystrixCircuitBreaker是接口,HystrixCircuitBreaker是Hystrix的核心组件,HystrixCircuitBreaker作为断路器使用,有着自己的核心方法:public interface HystrixCircuitBreaker { boolean allowRequest(); boolea...

2020-01-07 17:33:44 442

原创 fallback method wasn't found

使用Hystrix,为远程调用方法设置回调降级方法时出现这个异常:fallback method wasn’t found原因是降级方法的入参和返回值类型和第三方方法不一致,修改成相同后就可以了。总结:目标方法的降级方法,入参和返回值类型要相同...

2020-01-07 17:28:24 791

原创 设计模式的六大原则简介

1、开闭原则(Open Close Principle)开闭原则,即对扩展开放,对修改关闭,开闭原则是面对对象设计中最重要的原则之一。一般来说,面对新的需求,如果我们能做到不修改原有的软件代码,而是通过新增代码来实现这功能,也就做到了开闭原则了。2、里氏代换原则(Liskov Substitution Principle)里氏代换原则是面向对象设计的基本原则之一。里氏代换原则也是实现...

2020-01-06 22:53:53 203

原创 观察者模式

什么是观察者模式观察者模式属于行为型模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。为什么要用观察者模式当一个目标对象发生变化时,所有的依赖对象都会被广播通知,作出相应的改变观察者模式的优点观察者和观察目标之间是松耦合的,可观察者不知道观察者的细节,只知道观察者实现了观察者接口Java也有多种观察者模式的实现...

2020-01-06 01:49:12 180

原创 命令模式

什么是命令模式命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。为什么要用命令模式将行为请求者和行为执行者解耦可以将多个行为组合成一个命令,比如按下一个按钮,同时打开房间里的所有灯可以很容易的新增新的命令,无需修改已...

2020-01-05 17:04:52 162

原创 Hystrix工作原理

Hystrix官方的工作流程图工作流程(对应上图标记的序号)创建HystrixCommand或者HystrixObservableCommand对象HystrixCommand:用在依赖服务返回的结果是单个的时候HystrixObservableCommand:用在依赖服务返回的结果是多个的时候这里创建HystrixCommand或者HystrixObservableCom...

2020-01-04 16:53:34 260

原创 CyclicBarrier的简单使用

通过之前的这篇博客CountDownLatch的简单应用和实现原理,可以了解到,CountDownLatch实质上做的事,就是让一个线程等待多个线程通过CountDownLatch我们可以对一些没有前后依赖的方法做到并行执行,节省大量的时间,但是这时候出现了新的需求:现在我要做的是一个循环的操作,反复的从数据库里取出订单数据和快递单数据,然后这两个数据要进行对比,我要知道哪些订单配送失败了...

2020-01-04 12:29:52 249

原创 ROWNUM小于100,结果却是49条

sql语句:SELECT AGE AS AGE, WMSYS.WM_CONCAT(NAME) as NAMEFROM USER_INFOWHEREROWNUM<100GROUP BY AGE一般来说用了ROWNUM<100,只要数据够,那取出来的数据就是99条,现在的结果却是49条原因:因为sql通过ROWNUM<100先搜出99条数据后,又通过了GR...

2020-01-03 10:33:12 794

原创 oracle把数据分组,一对多的按逗号分隔拼接

使用group by + WMSYS.WM_CONCAT来实现数据:sql样例背景:姓名和年龄,这里数据排除同名同姓,相同年龄的姓名的人可能很多,用sql做一个数据合并,把相同年龄段的人的姓名用逗号拼接SELECT AGE AS AGE, WMSYS.WM_CONCAT(NAME) as NAMEFROM USER_INFOGROUP BY AGE结果如下:...

2020-01-02 16:25:30 3968

原创 单例模式

什么是单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这个模式涉及到一个单一的类,这个类的构造方法是私有化的,但是该类会提供一个访问其唯一的对象的方法,可以直接访问,无需实例化该类对象。这样保证了一个类仅有一个实例,并且提供了一个全局可以访问的入口。为什么要用单例模式防止一...

2020-01-01 22:46:10 149

空空如也

空空如也

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

TA关注的人

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