自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 利用JSR303来完成对象参数校验

JSR 303在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情。应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的。在通常的情况下,应用程序是分层的,不同的层由不同的开发人员来完成。很多时候同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余和一些管理的问题,比如说语义的一致性等。为了避免这样的情况发生,最好是将验证逻辑与相应的域模型进行绑定。...

2020-01-05 18:31:51 421

原创 Java如何预防NullPointerException

1. 问题引入之前写过一篇文章 利用JSR303来完成对象参数校验,我们可以很好的对对象进行参数校验。采用这种方法,我们可以对某个对象被使用之前进行必要的参数校验,如果出现异常,我们可以跑出异常也可以返回结果。但是如果我们想对一个方法的参数进行一些类似非空校验的操作,可否有更好的方法来避免产生java.lang.NullPointerException异常呢?2. 采用Objects类提供的方...

2020-01-05 18:29:44 370

原创 日期格式‘YYYY-MM-DD’中的BUG

1. 日期格式先来看一下日期格式主要有下面三种,US style,Euro style,RFC 3389。Layout Format string Example------------------------ ------------- ----------US style (Dec 29, 2019) MM/DD/YY...

2020-01-05 18:27:00 3357

原创 Java字符编码的那些事

1. 问题引入1.1 GBK、UTF8、ISO-8859-1由于GBK中采用的中文是2个字节的,而UTF8中的中文是3个字节的,特殊生僻字采用的是4个字节,这就导致我们在将GBK编码的中文转为UTF8的中文需要补充字节数,才能进行编码的转换。如果直接强行转换的话,那么将会导致自动补充编码的情况发生,出现乱码。以非UTF-8编码编码出的字节数组,一旦以UTF-8进行解码,通常这是一条不归路!...

2020-01-04 23:39:54 182

原创 自动爬取LeetCode并通过网页按照分类、标签、时间轴详情展示

LeetCode-Viewer简介:LeetCode-Viewer是一个利用Python爬取LeetCode-CN的做题信息,并通过Vuepress构建网页展示出来的一个项目,具体可以参考Demo:LeetCode-Viewer下面给先看一下吧:使用方式fork该工程,然后clone到本地,由于本项目需要vuepress和python相关环境支持,需要先执行下面该命令:npm in...

2019-12-29 22:58:41 951 1

原创 如何对HashMap进行排序

如何对HashMap进行排序在这篇文章中,我们将介绍如何对HashMap进行排序,我们将讨论如何通过键或者值对HashMap进行排序。为了下面文章的演示,我们先构造一个HashMap@Data@AllArgsConstructorclass Student{ private Integer id; private String name; @Override...

2019-04-12 10:50:11 10178 2

原创 StringUtils使用介绍

StringUtils使用介绍在本文章中,我们将介绍StringUtils的使用方法,正如它的名字一样,它是Apache Commons Lang中的一员,被用来处理字符串的常用操作,它对我们一些常用的操作进行了包装,相比于我们自己写的代码,使用它会显得更加小巧,简介和易读。1. 简介在Apache Commons包中,有两个StringUtils类,一个是org.apache.comm...

2019-04-12 10:49:26 15515

原创 FileUtils使用介绍

FileUtils使用介绍这篇文章我们会介绍FileUtils类相关的功能,它也是Apache Commons IO的一部分。它所提供的方法将我们常用的任务进行了包装,使我们写的代码更简洁易读。1. FileUtils方法我将介绍FileUtils类中一些重要的方法,并详细说明它们如何使用。FileUtils是一个静态类,这样意味着我们可以不用实例化就可以直接通过类去调用方法。con...

2019-04-12 10:48:46 3025

原创 IOUtils使用介绍

IOUtils使用介绍在下面的例子,我们将详细说明如何使用 org.apache.commons.io 包中的 IOUtils类如何使用,通过包名我们可以知道它是 Apache Commons IO 的一部分 。该类的所有成员函数都被用来处理输入 - 输出流,它的确非常利于来编写处理此类事务的程序。IOUtils与其他Apache Commons中的类一样,都是处理IO操作的非常重要包装器,与手...

2019-04-12 10:48:02 32733 1

原创 HTTPClient使用方法总结

1. 简介超文本传输协议(HTTP)可能是当今Internet上使用的最重要的协议。Web服务、支持网络的设备和网络计算的增长继续扩展HTTP协议在用户驱动的Web浏览器之外的作用,同时增加了需要HTTP支持的应用程序的数量。虽然java.net包提供了通过HTTP访问资源的基本功能,但它没有提供许多应用程序所需的全部灵活性或功能。HttpClient试图通过提供一个高效的、最新的、功能丰富的...

2019-03-25 14:25:05 1468

转载 Windows安装MySQL

1. 下载:我下载的是64位系统的zip包:下载地址:https://dev.mysql.com/downloads/file/?id=482487下载zip的包下载后解压:D:\软件安装包\mysql-5.7.20-winx642. 配置环境变量:变量名:MYSQL_HOME变量值:E:\mysql-5.7.20-winx64path里添加:%MYSQL_HOME%\bin;3...

2019-03-17 11:41:33 132

原创 Git学习

Git1. Git结构2. 命令行操作2.1 本地仓库初始化git init 2.2 设置签名项目级别/仓库级别: 仅在当前本地库范围内有效 ,信息保存位置: ./.git/config 文件git config user.name liuyaogit config user.email [email protected]系统用户级别: 登录当前操作系统的用户范...

2019-03-17 11:37:49 101

原创 Intellij Idea Tomcat控制台乱码问题

解决Tomcat发布乱码问题第一步:修改intellij idea配置文件:找到intellij idea安装目录,bin文件夹下面idea64.exe.vmoptions和idea.exe.vmoptions这两个文件,分别在这两个文件中添加:-Dfile.encoding=UTF-8第二步:找到intellij idea的file—settings—Editor—FileEnco...

2019-03-15 14:25:49 174

原创 Docker的镜像和容器

Docker的镜像和容器1. 架构与底层技术支持Docker的总体架构:底层技术支持:Namespaces:做隔离pid,net,ipc,mnt,utsControl Groups:做资源限制Union File System:Container和Image的分层2. ImageImage是文件和meta data的集合(root filesystem)image是分层...

2019-03-13 22:58:14 241

原创 Docker安装

Docker安装在Mac下先安装好Virtual Box和Vagrant,我们通过Vagrant来安装Centos,可以快速的复制相关的环境,具体的Vagrant的相关使用方式可以查看:vagrant系列(1):使用vagrant在线/离线安装centos7,按照这个链接里面的步骤把相关的box文件下下来,然后添加到本地,最后安装并启动好Centos7。下面是安装在Centos7 上安装Doc...

2019-03-13 22:56:35 94

原创 Java时间计算

Java在给定的时间的基础上加减多少小时分钟import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class MyTime { private SimpleDateFormat sdfA = new SimpleDateFormat("yyyy-...

2019-03-12 16:19:38 666

转载 PostgreSQ 连接问题 FATAL: no pg_hba.conf entry for host

原因PostgreSQ数据库为了安全,它不会监听除本地以外的所有连接请求,当用户通过JDBC访问是,会报一些如下的异常:org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host 解决方案要解决这个问题,只需要在PostgreSQL数据库的安装目录下找到/data/pg_hba.conf,并在里面找到**...

2019-03-11 14:04:34 4284

原创 利用Python3实现终端百度和谷歌翻译

利用Python3实现终端百度和谷歌翻译1. Python调用Google翻译最开始发现Google翻译居然用的Get方式请求的翻译数据,还暗自高兴了一波,这不简单吗?直接拼字符串就可以翻译了,还是我太天真

2018-11-30 23:19:43 1189 1

原创 Mac安装virtualenv和virtualenvwrapper

我们常常要在不同的Python程序中使用不同的Python依赖包,如果我们都将这些依赖包安装到电脑默认的位置下,将导致环境混乱,这个时候,我们可以安装一个Python的VirtualEnv来解决开发环境隔离等问题。1.安装virtualenv直接通过pip安装python3 -m pip install virtualenv2.安装virtualenvwrapperpython3 -m...

2018-11-29 21:00:29 2051

原创 命令模式

命令模式(Command)命令模式是行为模式之一,Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数1. 命令模式中的角色及其职责1.1 Command是一个抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute方法用来执行命令。Commandpackage com.liuyao;/** * @author liuyao...

2018-11-10 20:20:33 101

原创 访问者模式

访问者模式(Visitor)访问者模式是行为模式之一,它分离对象的数据和行为,使用Visitor模式,可以不修改已有类的情况下,增加新的操作。1. 访问者模式中的角色及其职责1.1 访问者角色(Visitor)为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。Vis...

2018-11-10 20:20:04 100

原创 状态模式

状态模式(State)状态模式是行为模式之一,状态模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。1. 状态模式中角色及其职责1.1 用户对象(Context)拥有一个State类型的成员,以标识对象的当前状态Mainpackage com.liuyao;import java.util.HashMap;import java.util...

2018-11-10 20:19:29 101

原创 模板方法模式

模板方法模式(Template Method)模板方法模式是行为模式之一,它把具体特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。1. 模板方法中的角色及其职责1.1 Abstract Class抽象类MakeCarpackage com.liuyao;/** * @author liuyao * @date 2018/0...

2018-11-10 20:18:58 129

原创 备忘录模式

备忘录模式(Memento)备忘录模式是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。1. 备忘录模式中的角色及其职责1.1 原生者(Originator)需要被保存状态以便恢复的那个对象Personpackage com.liuyao;/** * @author liuyao * @date 2018/08/...

2018-11-10 20:18:19 128

原创 中介者模式

中介者模式(Mediator)中介者模式是行为模式之一,在中介者模式中,类之间的交互行为被统一放在中介者的对象中,对象通过中介者对象同其他对象交互,中介者对象起着控制器的作用。1. 中介者模式中的角色及其职责1.1 Mediator中介者类的抽象父类AbstractMediatorpackage com.liuyao;/** * @author liuyao * @dat...

2018-11-09 09:47:05 112

原创 责任链模式

责任链模式(Chain of Responsibility)责任链模式是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些累的额对象之间像链条一样紧密相连,所以称为责任链模式。1. 责任链模式的基本条件对象链的组织。需要将某任务的所有职责执行对象以链的形式加以组织消息或请求的传递。将消息或请求沿着对象链传递,让处于对象链中的对象得到处理机会。处于对象...

2018-11-09 09:46:30 169

原创 迭代模式

迭代模式(Iterator)迭代模式是行为模式之一,他把对容器中包含的内部对象的访问委让给外部类,使用Iterator按顺序进行遍历访问的设计模式。不使用迭代模式存在的问题:由容器自己实现顺序遍历。直接在容器类里直接添加顺序遍历方法。(容器类承担了太多功能:一方面需要提供添加删除等本身应有的功能;一方面还需要提供遍历访问功能)让调用者自己实现遍历。直接暴露数据细节给外部。(往往容器在遍...

2018-11-09 09:45:53 378

原创 解释器模式

解释器模式(Interpreter)解释器模式行为模式之一,它是一种特殊的设计模式,它建立一个解释器,对于特定的计算机程序设计语言,用来解释预先定义的文法。即解释器模式是一种简单的语法解释器构架。1. 解释器模式中的角色及其职责1.1 Context解释器上下文环境类,用来存储解释器的上下文环境,比如需要解释的文法等。Contextpackage com.liuyao;/**...

2018-11-09 09:45:27 285

原创 组合模式

组合模式(Composite)组合模式是构造型的设计模式之一。通过递归手段来构造树形的对象结构,并可以通过一个对象来访问整个对象树。1. 组合模式中的角色及其职责1.1 树型结构的节点抽象(Component)为所有的对象定义统一的接口(公共属性,行为等的定义)提供管理子节点对象的接口方法提供管理父节点对象的接口方法(可选)IFilepackage com.liuyao;...

2018-11-09 09:44:50 106

原创 外观模式

外观模式(Facade)外观模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面称作外观(facade)1. 外观模式的角色及其职责1.1 外观(Facade)为调用方定义简单的调用接口Facadepackage com.liuyao;/** * @author liuyao * @date 2018/08/02 */pub...

2018-11-09 09:44:12 109

原创 适配器模式

适配器模式(Adapter)适配器模式是构造型模式之一,通过适配器模式可以改变已有类(或外部类)的接口形式1. 适配器模式中的角色及其职责1.1 目标接口客户端使用的接口Targetpackage com.liuyao;/** * @author liuyao * @date 2018/08/03 */public interface Target { publ...

2018-11-09 09:43:34 103

原创 桥接模式

桥接模式桥接模式是构造型的设计模式之一,基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是抽象与行为实现分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。1. 桥接模式中的角色及其职责1.1 Client桥接模式的使用者就是后面使用的Main类1.2 Abstraction维护对行为实现(Implementor)的引用C...

2018-11-09 09:43:05 111

原创 享元模式

享元模式(Flyweight)享元模式是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用1. 享元模式的角色及其职责1.1 抽象享元角色所有具体享元类的父类,规定一些需要实现的公共接口Personpackage com.liuyao;/** * @author liuyao * @date 2018/08/01 */public class Person {...

2018-11-09 09:42:31 99

原创 代理模式

代理模式(Proxy)代理模式是构造型的设计模式之一。他可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。1. 代理模式中的角色及其职责1.1 抽象主题(Subject)真实主题与代理主题共同的接口Subjec...

2018-11-09 09:41:56 115

原创 观察者模式

观察者模式(Observer)观察者模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。观察者模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保存状态同步。1. 观察者模式的角色及其职责1.1 被观察者(Subject)被观察的对象,被观察者的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(...

2018-11-06 17:01:42 146

原创 装饰器模式

装饰器模式(Decorator)装饰模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。1. 装饰模式中的角色和及其职责1.1 抽象组件角色一个抽象接口,是**被装饰类(RunCar)和装饰类(CarDecorator)**的父接口Carpackage com.liuyao;/** * @author liuyao * @date 20...

2018-11-06 17:01:12 101

原创 策略模式

策略模式(Strategy)策略模式是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有算法加以封装和实现,具体的算法选择交给客户端决定。策略模式主要用来平滑地处理算法的切换。1. 策略模式的角色及其职责1.1 策略(Strategy)策略(算法)的抽象。Encryptpackage com.liuyao;/** * @a...

2018-11-06 16:59:58 93

原创 建造者模式

建造者模式(Builder)Builder模式是一种对象创建型模式,又叫生成器模式,用来隐藏符合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态的创建具有符合属性的对象。1. 模式中包含的角色及其职责1.1 产品(Product)最后客户端需要获得的产品Productpackage com.liuyao;import lombok.Data;i...

2018-11-06 16:59:18 124

原创 原型模式

原型模式原型模式是一种对象创建型模式,它采用复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的数据。1. 原型模式的特点由原型对象自身创建目标对象。也就是对象创建这一动作发自原型对象本身。目标对象是原型对象的一个克隆。也就是说,通过prototype模式创建的对象,不仅与原对象具有相同的结构,还与原型对象具有相同的值。根据对象克隆深度层次的不...

2018-11-06 16:58:39 154

原创 简单工厂模式

简单工厂模式(SimpleFactory)简单工厂模式属于类的创建型模式,又叫静态工厂方法模式,通过专门定义的一个类来负责创建其他类的实例,被创建出来的类通常具有共同的父类。1. 模式中包含的角色及其职责1.1 工厂(Creator)简单工厂模式的核心,它负责实现创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象AnimalFactorypackage com.l...

2018-11-06 16:57:34 103

空空如也

空空如也

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

TA关注的人

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