自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java8 IntStream.range

IntStream.range是Java 8中的一个方法,它是java.util.stream.IntStream类中的静态方法。这个方法用于生成一个顺序排列的整数流,包含起始值但不包含结束值。startInclusive是生成整数流的起始值(包含),endExclusive是生成整数流的结束值(不包含)//业务处理总的来说就相当于i++)只是转换为java8 stream的写法,也可以调用一些stream方法,写起来会简便,但是可读性自然而然的变差,也要考虑使用的场景。​。

2023-08-30 11:44:11 1134

原创 删除list中数据

list删除数据

2023-02-08 09:02:08 944

原创 java 合并两个List并去掉重复项

工作中很多时候需要用到合并两个List并去除其中的重复内容。

2022-10-09 16:55:39 10376

原创 Java 生产环境 linux下汉字变方框解决

部署在linux下的服务,使用java下载文件时,由于缺少字体导致中文字都变成方块

2022-06-28 11:28:46 2077

原创 项目无法启动,Disconnected from the target VM

项目无法启动,maven打包刷新解决

2022-06-24 10:54:50 1140

原创 rocket-MQ

Rocket-MQ消息队列使用说明注意下文中出现的大多都是由作者公司封装过一层1.引入jar包<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.0.1</version></dependency>

2021-09-06 17:42:30 185

原创 垃圾收集器与内存分配策略 - 1 GC

垃圾收集(Garbage Collection,简称GC),主要有以下三点那些内存需要回收什么时候回收如何回收像java中已经对于垃圾收集与内存分配实现了自动化,那么我们为什么还要去了解呢?是当我们需要达到更高并发量时,当GC会成为瓶颈的时候,我们就需要去监控和调节GC而java内存运行时,其中程序计数器、虚拟机栈、本地方法栈都随线程变化——编译器可知而堆和方法区也不同,会根据接口的实现类多少或者一个方法中不同条件分支所需要的内存也可能不一样——运行期可知GC关心的也是运行期间这些动态产

2021-08-12 15:44:04 193

原创 对象内存布局与对象访问定位

对象在内存中的存储布局可以划分为三个部分:对象头、实例数据、对齐填充1. 对象头对象头包括两类信息:用于存储对象自身得运行时数据(如:哈希码、GC分代年龄、锁标志等)另一部分是类型指针,即对象指向它的类型元数据的指针,java虚拟机通过这个指针来确定该对象是哪个类的实例2. 实例数据实例数据部分是对象真正存储的有效信息,即是我们再程序代码中所定义的内容,无论是从父类中继承下来的,还是在子类中定义的字段都记录着;这部分的存储顺序会受到虚拟机分配策略参数(-XX:FieldsAllocation

2021-07-05 17:28:25 102

原创 虚拟机中对象创建

对象的创建当我们代码中通过new关键字去创建一个对象时,虚拟机会怎么做呢?1.首先去检查这个命令的参数是否能在常量池中定位到一个类型的符号引用2.在类加载检查通过后,接下载虚拟机将为新生对象分配内存3.内存分配完成后,虚拟机必须将分配到的内存空间(不包括对象头)都初始化为零值4.java虚拟机还要对对象进行必要的设置注意:对象创建在虚拟机中是非常频繁的行为,在并发情况下并不是线程安全的解决:(1)对分配内存空间的动作进行同步处理(2)把内存分配的动作按照线程划分在不同的空间之中进行当上述的四

2021-06-30 16:59:21 94

原创 java内存区域

1. 程序计数器程序计数器(Program Count Register)是一块较小的内存空间,可以将其看作是当前线程所执行的字节码文件的行号指示器;在java虚拟机的设置里,字节码解释器工作时就是通过改变该计数器的值来选取下一条需要执行的字节码指令;所以它也是 程序流程控制的指示器,分支/循环/跳转/异常等等基础功能都需要依赖于这个计数器来完成由于java虚拟机中的多线程是通过轮流切换线程,分配处理器执行时间来实现的,所以在任何一个时刻,一个处理器都只会执行一个线程中的指令;所以每个线程都需要有一个.

2021-06-10 18:28:29 63

原创 21.解释器模式

定义解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的方案,在现在的项目中使用很少定义:给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子AbstractExpression抽象解释器TerminalExpression终结符表达式:通常一个解释器模式中只有一个终结符表达式NonterminalExpression非终结符表达式:文法中的每条规则对应一个非终结符表达式,非终结符表达式根据逻辑的复杂程度而增加,原则上每个文法规则

2021-05-06 18:29:58 58

原创 20.状态模式

定义定义:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类状态模式的核心是封装,状态的变更引起了行为的变更,从外部看起来就好像这个对象对应的类发生了改变一样State抽象状态类:接口或抽象类,负责对象状态定义,并且封装环境角色以实现状态切换ConcreteState具体状态类:两个职责:本状态的行为管理以及趋向状态处理(就是本状态要做的事,以及本状态如何过度到其他状态)Context环境类:负责状态的切换通用源码//抽象状态类public abstract class St

2021-04-29 17:57:26 64

原创 19.访问者模式

定义访问者模式(Visitor Pattern)定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作Visitor抽象访问类:抽象类或接口,声明访问者可以访问那些元素ConcreteVisitor具体访问类:影响访问到一个类该做什么Element抽象元素:接口或抽象类,声明接受哪一类访问者访问ConcreteElement具体元素:实现accept方法,通常是visitor.visit(this)ObjectStruture结构对象:元素

2021-04-28 18:12:54 53

原创 18.备忘录模式

定义备忘录模式(Memento Pattern)——“后悔药”定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存;这样以后就可将该对象回复到原先保存的状态备忘录模式就是一个对象的备份模式Originator发起人类:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据Memento备忘录类:负责存储Originator发起人的内部状态,在需要时提供该状态Caretaker备忘录管理员类:对备忘录进行管理,保存和提供备忘录通用源码//发起人类

2021-04-23 18:29:17 59

原创 17.门面模式

定义门面模式(Facade Pattern),也叫做外观模式,是一种较为常用的封装模式定义:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行;门面模式提供一个高层次的接口,使得子系统更易于使用门面模式注重“统一的对象”,也就是提供一个访问子系统的接口,除了这个接口外不能有任何访问子系统的行为发生Facade门面类:客户端可以调用这个角色的方法;该角色没有实际的业务逻辑subsystem子系统类:可以同时有一个或多个子系统,对于子系统来说,门面仅仅是另外的客户端通用源码//子系统p

2021-04-21 18:51:17 62

原创 16.观察者模式

定义观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/subscrible)定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态时,则所有依赖于他的对象都会得到通知并被自动更新Subject被观察者:定义被观察者必须实现的职责,必须能够动态的增加/取消观察者Observer观察者:观察者接收到消息后,即进行update操作,对接收到的信息进行处理ConcreteSubject具体被观察者:定义被观察者的业务逻辑ConcreteObserver具体观察者:

2021-04-19 18:36:58 77

原创 Mysql 日期类型数据格式化

首先介绍一下mysql中时间类型的格式共有5中:date : 只有日期,没有时间;datetime : 有时间,有日期;time : 只有时间 ,精确到分秒 ;timestamp : 时间戳,精确到分秒;year : 年,如2002,如果写为 2002-01-15,将会进行计算,插入结果为1986一般在项目中使用时,我们都是使用datetime类型进行存储,那么在库中的数据就是年-月-日 时-分-秒的形式,但是可能我们查询时只需要其中的年-月-日或是时-分-秒的部分,那么我们就需要对于这些数

2021-04-19 16:50:02 1211

原创 15.组合模式

定义组合模式(Composite Pattern),也叫做合成模式或是部分-整体模式主要用于描述部分与整体的关系定义:将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性Companent抽象类:定义参加组合对象的公有方法和属性,可以定义一些默认的行为和属性Leaf叶子类:叶子对象其下没有其他的分支,也是最下的遍历单位Composite树枝类:树枝对象,它用于组合树枝和叶子形成一个树形结构通用源码//抽象类public abstract clas

2021-04-13 18:29:54 69

原创 14.迭代器模式

定义迭代器模式(Iterator Pattern)该模式现在已经基本没人会去单独写一个迭代器,除非是开发产品定义:它提供一种方法访问一个容器对象中的各个元素,而又不需要暴露该对象的内部细节迭代器是为容器服务的,容器就是指能容纳对象的所有类型都可以称之为容器如:Collection集合类型,Set类型等迭代器就是为了解决遍历这些容器中的元素而诞生的Iterator抽象迭代器类:抽象迭代器负责定义访问和遍历元素的接口,基本上有固定的3个方法——first()获得第一个元素;next()获得下一个元

2021-04-10 17:59:40 63

原创 13.适配器模式

定义适配器模式(Adapter Pattern)定义:将一个类的接口变换成客户端所期待的另一种接口,从而使得原本因接口不匹配而无法在一起工作的两个类能够在一起工作适配器模式也叫做变压器模式,或是包装模式例如:电源适配器,可以将110-220V之间的电源去给你的电脑充电,同时你的电脑还能正常使用适配器模式就是把一个接口或类转换成其他的接口或类Target目标类:这个类定义把其他类转换为什么接口(期望接口)Adaptee源类:这个类就是就是要被转换的类,它是已经存在且运行良好的类或对象Adapt

2021-04-09 18:31:40 83

原创 12.策略模式

定义策略模式(Strategy Pattern),也叫做政策模式(Policy Pattern)定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换策略模式主要使用的就是面向对象中的继承和多态机制Context封装类:也叫做上下文类,起到承上启下的封装作用,不让高层模块对算法直接访问,封装变化Strategy抽象策略类:策略/算法的抽象,通常是一个接口,定义每个策略或算法必须具有的方法...

2021-04-02 15:27:27 74

原创 11.装饰模式

定义装饰模式(Decorator Pattern)定义:动态的给一个对象添加一些额外的职责,就增加功能而言,装饰模式相比生成子类更加灵活Component抽象类:Component是一个接口或是抽象类,用于定义我们最核心的对象注意:在装饰模式中,必须有一个最基本,最核心,最原始的接口或抽象类充当Component抽象类ConcreteComponent具体类:是上边Component的实现类,我们所需要装饰的就是它Decorator装饰类:一般实一个...

2021-03-29 17:21:41 261

原创 springboot使用@Scheduled定义定时任务

前言之前遇到需要定时任务的需求时,我一般是选择通过java的Timer或是第三方的Quartz来进行实现但是使用起来也是比较麻烦的,直到最近发现还可以去使用Springboot中的@Scheduled来解决问题,就十分方便了(当然spring中也可以使用,但如果不是springboot需要写一些xml文件的配置,也没有那么方便了)下面具体说一下实现步骤具体实现1.启动类首先需要在启动类上添加注解@EnableScheduling来开启定时任务@SpringBootApplication@En

2021-03-26 15:17:23 174

原创 10.责任链模式

定义

2021-03-25 19:05:19 120

原创 9.命令模式

定义命令模式是一种高内聚的模式定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能Receive接受类:就是负责干活的类,命令传递到这里是应该被执行的Command命令类:需要执行的命令都在这里声明Invoker调用类:接收到命令,并且执行命令模式比较简单,但是在项目中使用的很频繁,因为其封装性很好,并将请求方和执行方所分离,扩展性也得到了保证通用源码//Receiver类public abstract class

2021-03-24 10:11:36 63

原创 8.中介者模式

定义在多个对象依赖的情况下,通过加入中介者角色,取消了多个对象的关联或依赖关系,减少了对象的耦合性定义:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示的相互作用,从而十七解耦,并且可以独立的改变它们之间的交互中介者模式一般由以下几部分组成:Mediator抽象中介者角色:抽象中介者角色定义统一的接口,用于各同事角色之间的通信Concrete Mediator具体中介者角色:具体中介者角色通过协调各同事角色实现协作行为,所以其依赖于同事角色Colleague同事角色:每一个同事角色

2021-03-15 23:24:40 56

原创 7.原型模式

定义原型模式(Prototype Pattern)的简单程度仅次于单例模式;但正是因为其简单所以使用的场景很多可以将不通过new关键字来产生一个对象,而是通过对象复制来实现的模式就叫做原型模式定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象原型模式的核心是一个clone方法,通过该方法进行对象的拷贝,java提供了一个Cloneable接口来标识这个对象是可拷贝的通用源码public class PrototypeClass implements Cloneable{ //

2021-03-14 15:44:02 55

原创 6.代理模式

定义代理模式(Proxy Pattern)是一个使用率非常高的模式定义:为其他对象提供一种代理以控制对这个对象的访问代理模式也叫做委托模式,是很基础的,很多其他的模式,如状态模式,策略模式等本质上就是在更特殊的场合使用了代理模式而在日常使用中,代理模式可以提供非常好的访问控制一般包含三个角色:Subject抽象主题类:可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求RealSubject具体主题类:也叫做被委托角色,被代理角色,是业务逻辑的具体执行者Proxy代理主题类:也

2021-03-02 19:02:35 78

原创 5.建造者模式

定义建造者模式(Builder Pattern)也叫作生成器模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示在建造者模式中,有如下4哥角色:Product产品类:通常是实现了模板方法模式,也就是拥有模板方法和基本方法Builder抽象建造类:规范产品的组建,一般由子类进行实现ConcreteBuilder具体建造类:实现抽象类定义的方法,并且返回一个组建好的对象Director导演类:负责安排所有模块的顺序,然后让Builder开始建造通用源码如下所示

2021-03-01 11:47:18 48

原创 4.模板方法模式

定义模板方法模式(Template Method Pattern):定义一个操作中的算法的框架,而将一些步骤延迟到子类中;使得子类可以不改变一个算法的结构即可重新定义该算法的某些特殊步骤模板方法模式比较简单,主要就是使用了java的继承机制,其中的AbstractClass就是抽象模板类在抽象模板类中,方法分为两类:基本方法:也称之为基本操作,是要由子类实现的方法,并且在模板方法中被调用模板方法:可以有一个或是多个,一般是一个具体的方法,实现对基本方法的调用,完成所需要的逻辑注意:一般为了防止

2021-02-17 12:49:31 62

原创 3.抽象工厂模式

定义抽象工厂模式(Abstract Factory Pattern):为创建一组相关或相互依赖的对象提供一个接口,并且无需指定它们的具体类抽象工厂模式就是工厂方法模式的升级版,在拥有多个业务品种、业务分类时,而这时使用抽象工厂模式来产生对象就是一个非常好的解决方法通用源码例如有两个互相影响的产品线,如汽车工厂制造左车门和右车门,它们数量应该相等,不同的车车门型号不同等等//**抽象产品类**public abstract class AbstractProductA { //产品共有的方法

2021-02-03 18:16:18 52

原创 2.工厂方法模式

定义工厂方法模式也是我们使用频率相当高的模式定义:定义一个用于创建对象的接口,让子类来决定实例化那一个类;工厂方法使一个类的实例化延迟到其子类通用源码在工厂方法模式中,会存在几个类:抽象产品类Product负责定义所要生产的产品的共性,实现对事物最抽象的定义抽象创建类Creator,也就是我们所谓的抽象工厂实现工厂类ConcreteCreator,具体如何创建产品类由它来实现通用源码如下://抽象产品类public abstract class Product { //产品类的公共

2021-02-02 18:15:59 101

原创 1.单例模式

定义单例模式(Singleton Pattern)使我们平时较为常用与简单的模式定义:确保一个类只产生了一个实例,并且自行实例化,向整个系统提供这个实例通用源码public class Singleton { private static final Singleton singleton = new Singleton(); //限制类产生多个对象不能new private Singleton() { } //只能通过这个方法来获得实例对象 public static Singleto

2021-01-30 13:33:40 135 2

原创 六大设计原则

设计原则了解23种设计模式之前,先要了解6大设计原则因为设计模式都是由这些设计原则引申出来的,6大设计原则是根本的东西当然,如果想要直接了解设计模式当然也是可以的但,多了解一下也不是坏处,大家自行选择1.单一职责原则单一职责原则(Single Responsibility Principle),简称SRP定义顾名思义,单一职责原则的定义就是:应该有且仅有一个原因引起类的变更平常工作中,你可能会遇到有人问你 “你设计的类符合单一职责吗”这时就可以根据单一职责原则的定义去进行排查优势优势

2021-01-25 17:15:23 286

原创 IDEA java.lang.OutOfMemoryError:metaspace解决办法

首先我们了解一下java.lang.OutOfMemoryError:java.lang.OutOfMemoryError是内存溢出的异常,一般出现这个异常的原因是jvm启动参数设置有问题。既然知道了原因,那么我们只要去修改jvm的启动参数就可以了。我这里使用的IDE是IDEA:1.右键属性打开idea的所在文件夹2.找到bin目录下的vmoptions文件3.我这里打开后,初始的配置是:-Xmx...

2020-11-23 00:00:00 1807

原创 Iterable/Iterator 转 list

先简单介绍一下iterable和iterator:iterator为Java中的迭代器对象,是能够对List这样的集合进行迭代遍历的底层依赖。而iterable接口里定义了返回iterator的方法,相当于对iterator的封装,同时实现了iterable接口的类可以支持for each循环。虽然我们平时的增强for循环都是基于iterator迭代器来实现,但是如果有一组数据是由iterable...

2020-11-19 00:00:00 5668

原创 java中各类对象的含义(pojo/vo/po/do/bo/qo....)

O/RM 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。下面具体说一下各种o:PO(persistant object)持久对象在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了。通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的 java 对...

2020-11-19 00:00:00 105

原创 @RequestBody 和 @RequestParam

@RequestParam注解@RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中。RequestParam可以接受简单类型的属性,也可以接受对象类型。@RequestParam有三个配置参数:required 表示是否必须,默认为 true,必须。defaultValue 可设置请求参数的默认值。value 为接收url的参数名(相当于key值)。**@...

2020-11-11 00:00:00 130

原创 Mysql中将时间戳转为Date

在工作中遇到一个情况:日志系统的表中,时间字段存储的是13位时间戳timestamp而不是日期数据,而在业务中,我们需要通过时间和ip来进行分组查询给定日期的数据.当然你可以选择在业务层先将传入的日期转为时间戳,再去进行查询,但是既然mysql既然可以直接进行转换,那么省去在业务层的操作何乐而不为呢?1.首先介绍一下mysql中将时间戳和日期互相转换的函数:时间戳转换成日期FROM_UNIXTIM...

2020-11-10 00:00:00 2638

原创 Spring Data JPA使用:看这一篇就够了

简介首先了解Spring Date JPA是什么?SpringData:其实SpringData就是Spring提供了一个操作数据的框架。而SpringData JPA只是SpringData框架下的一个基于JPA标准操作数据的模块。SpringData JPA:基于JPA的标准数据进行操作。简化操作持久层的代码。只需要编写接口就可以。JPA是Spring Data下的子项目,JPA是Java P...

2020-11-07 00:00:00 781

空空如也

空空如也

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

TA关注的人

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