自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(139)
  • 资源 (9)
  • 收藏
  • 关注

原创 单例设计模式

单例设计模式一、类加载与static1.1. 类加载顺序1.2. static关键字二、 单例设计模式2.1. 饿汉式(可用)2.2. 普通懒汉式(线程不安全,不可用)2.4. 双重检查懒汉式(可用,推荐)2.5. 静态内部类(可用,推荐,线程安全)2.6. 枚举(可用,推荐)一、类加载与static1.1. 类加载顺序先执行父类的静态代码块和静态变量初始化,静态代码块和静态变量的执行顺序跟代码中出现的顺序有关。执行子类的静态代码块和静态变量初始化。执行父类的实例变量初始化执行父类的构造函数

2021-03-21 18:34:39 151

原创 Spring 5 新特性总结

Spring 5 新特性总结一、 升级到Java SE 8 和 Java EE 7将Java8作为最低的JDK版本。Spring5在类路径(和模块路径)中完全兼容Java9,而且它通过了JDK9测试套件的测试。在API级别上,Spring5兼容Java EE8技术,满足对Servlet4.0、Bean Validation2.0和全新的JSON Binding API的需求。对Java EE API的最低要求为V7,该版本引入了针对Servlet、JPA和Bean Validation API的次

2021-01-17 16:54:15 1408

原创 合成复用原则

合成复用原则合成复用原则:是指尽量使用对象组合(has-a)/聚合(contanis-a)而不是继承关系达到软件复用的目的。可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。继承叫作白箱复用,相当于把所有的实现细节暴露给子类。组合/聚合称为黑箱复用,我们是无法获取到类以外的对象的实现细节的。虽然我们要根据具体的业务场景来做代码设计,但也需要遵循OOP模型。以数据库操作为例,先来创建DBConnection类:public abstract class DBConnec

2020-09-19 14:56:20 318

原创 迪米特原则

迪米特原则迪米特原则:是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则,尽量降低类与类之间的耦合度。迪米特原则主要强调:只和朋友交流,不和陌生人说话。出现在成员变更、方法的输入、输出参数中的类都可以称为成员朋友类,而出现在方法体内部的类不属于朋友类。现在来设计一个权限系统,Boss需要查看目前发布到线上的课程数量。这时候Boss要找到TeamLeader去进行统计。TeamLeader再把统计结果告诉Boss。接下来我们还是来看代码:根据迪米特原则,Boss只想要结果,不需要跟Course

2020-09-19 14:21:08 1175 1

原创 接口隔离原则

接口隔离原则接口隔离原则:是指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口。设计接口时应该注意以下几点:一个类对另一个类的依赖应该建立在最小的接口之上建立单一接口,不需建立庞大臃肿的接口尽量细化接口,接口中的方法尽量少(不是越少越好,一定要适度)下面我们来看一段代码,对一个动物行为进行抽象描述:IEatAnimal接口的代码如下:public interface IEatAnimal { void eat();}IFlyAnimal接口的代码如下:

2020-09-19 14:03:38 148

原创 单一职责原则

功能职责单一原则错误代码示例:Course 类承担了两种处理逻辑。假如现在要对课程进行加密,直播课程和录播课程的加密逻辑不一样,必须修改代码。而修改代码的逻辑势必会相互影响,容易带来不可控的风险。public class Course { public void study(String courseName){ if("直播课".equals(courseName)){ System.out.println(courseName + "不能快进");

2020-09-14 22:14:48 98

原创 依赖倒置原则

依赖倒置原则依赖倒置原则是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性,并且能够降低修改程序所造成的风险。创建一个课程的抽象ICourse接口:public interface ICourse { void study();}编写JavaCourse类:public class JavaCourse implements ICourse {

2020-09-14 21:40:17 159 1

原创 开闭原则

开闭原则开闭原则是指一个软件实体(如类,模块和函数)应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。它强调的是用抽象构建框架,用实现扩展细节,可以提高软件系统的可复用性及可维护性。开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定、灵活的系统。例如版本更新,我们尽可能不修改源代码,但是可以增加新功能。以学院课程体系为例,首先创建一个课程接口 ICourse:public interface ICourse { Integer getId();

2020-08-19 14:09:21 126

原创 依赖注入

面向接口编程依赖注入是面向接口编程的一种体现,是Spring的核心思想。 事实上依赖注入并不是什么高深的技术, 只是被Sping这么以包装就显得有些神秘。class Main { interface Language { void print(String s); } static class Java implements Language{ ...

2019-11-30 11:04:18 264

原创 Spring获得DataSource

一、从JNDI获得DataSource1.1、Spring JNDI数据源配置信息<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>java:comp/env/jc...

2019-11-30 10:31:39 533

原创 MySQL 性能优化

一、什么是慢查询?慢查询是 MySQL 中提供的一种慢查询日志,它用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过 longquerytime 值的 SQL,则会被记录到慢查询日志中。longquerytime 的默认值为 10,意思是运行 10S 以上的语句。默认情况下,MySQL 数据库并不启动慢查询日志,需要我们手动来设置这个参数,如果不是调优需要的话,一般不建议启动该...

2019-11-24 20:42:05 110

原创 MySQL 索引的面试题总结

一、使用索引注意事项使用短索引,短索引不仅可以提高查询速度,更能节省磁盘空间和 I/O 操作;索引列排序,MySQL 查询只使用一个索引,因此如果 where 子句中已经使用了索引的话,那么 order by 中的列是不会使用索引的,因此数据库默认排序可以符合要求的情况下,不要进行排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引;like 语句操作,一般情况下不鼓励使用...

2019-11-21 00:08:14 419

原创 MySQL 基础模块的面试题总结

一、说一下 MySQL 执行一条查询语句的内部执行过程?客户端先通过连接器连接到 MySQL 服务器。连接器权限验证通过之后,先查询是否有查询缓存,如果有缓存(之前执行过此语句)则直接返回缓存数据,如果没有缓存则进入分析器。分析器会对查询语句进行语法分析和词法分析,判断 SQL语法是否正确,如果查询语法错误会直接返回给客户端错误信息,如果语法正确则进入优化器。优化器是对查询语句进行优化处...

2019-11-20 22:26:28 344

原创 Build模式

一、简介Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来,两者之间的耦合度也降到最低。二、使用场景初始化一个对象,并且这个对象有非常复杂的参数设置,如下所示:public class Swagger2 { @Bean ...

2019-11-19 22:26:20 152

原创 SpringBoot1.X——MockMvc单元测试

@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = MockServletContext.class) @WebAppConfiguration public class ApplicationTests { private MockMvc mvc; @Before...

2019-11-11 22:44:18 132

原创 SpringBoot1.X——配置文件详解

一、自定义属性1.1、自定义属性与加载com.didispace.blog.name=程序猿DDcom.didispace.blog.title=Spring Boot教程@Componentpublic class BlogProperties { @Value("${com.didispace.blog.name}") private String name; ...

2019-11-11 22:22:01 246

原创 Java 5

一、泛型1.1、通配符类型:避免unchecked警告,问号表示任何类型都可以接受public void printList(List<?> list, PrintStream out) throws IOException { for (Iterator<?> i = list.iterator(); i.hasNext(); ) { out.pri...

2019-10-21 20:48:16 64

原创 Java 7

一、switch中使用Stringjava7以前在switch中只能使用number或enum现在可以使用String了:String s = "a";switch (s) { case "a": System.out.println("is a"); break; case "b": System.out.println("...

2019-10-21 00:33:20 149

原创 Java 8

一、什么是Stream1.1、Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sor...

2019-10-21 00:13:50 570

原创 代理模式

一、什么是代理模式简单说即是在不改变源码的情况下,实现对目标对象的功能扩展。二、动态代理2.1、被代理的接口public interface Demo { void test1(); void test2();}2.2、被代理的对象(实现了被代理接口的对象)public class DemoImpl implements Demo { @Overri...

2019-10-20 15:47:18 81

原创 数据库事务原理详解

SpringBoot——事务@Transactional等价于@Transactional(propagation=Propagation.REQUIRED)如果当前线程中存在事务,则使用该事务执行,如果不存在事务,则新建一个事务什么是事务:多个操作组成的一个单元,在执行中,要么全部成功,要么全部失败@Transactional(propagation=Propagation.REQUIR...

2019-10-20 15:11:02 247

原创 RocketMQ——初识

RocketMQ——初识一、介绍RocketMQ 是阿里开源的消息中间件,前不久捐献给了 Apache 。正如官网介绍如下:它是一个开源的分布式消息传递和流式数据平台。特点如下:二、产品发展历史大约经历了三个主要版本迭代2.1、Metaq(Metamorphosis)1.x由开源社区killme2008维护,开源社区非常活跃。2.2、Metaq 2.x于2012年10月份上线...

2019-10-19 21:24:00 174

原创 Jenkins 自动化部署

Jenkins 自动化部署我们搭建的是一套微服务架构,真实环境可能有成百上千个工程,如果都这样手动打包、上传、发布,工作量无疑是巨大的。这时,我们就需要考虑自动化部署了。Jenkins 走进了我们的视野,它是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。下面,我们就来看看如果通过 Jenkins ...

2019-10-04 15:49:40 166

原创 K8S+Docker 部署 Spring Cloud 集群

K8S+Docker 部署 Spring Cloud 集群一、集群环境搭建本文用一台虚拟机模拟集群环境。操作系统:CentOS7 64位配置:内存2GB,硬盘40GB。注:真正的分布式环境搭建方案类似,可以参考博文:《Kubernetes学习2——集群部署与搭建》。下面开始搭建集群环境:1.1、关闭防火墙:systemctl disable firewalldsystemctl ...

2019-10-04 15:39:46 1303

原创 SpringCloud 分布式事务

分布式事务一、为什么需要分布式事务最传统的架构是单一架构,数据是存放在一个数据库上的,采用数据库的事务就能满足我们的要求。随着业务的不断扩张,数据的不断增加,单一数据库已经到达了一个瓶颈,因此我们需要对数据库进行分库分表。为了保证数据的一致性,可能需要不同的数据库之间的数据要么同时成功,要么同时失败,否则可能导致产生一些脏数据,也可能滋生 Bug。二、应用场景2.1、支付最经典的场景就是...

2019-10-04 15:12:14 435

原创 SpringCloud 分布式锁

分布式锁一、基于 Redis 的分布式锁利用 SETNX 和 SETEX,基本命令主要有:SETNX(SET If Not Exists):当且仅当 Key 不存在时,则可以设置,否则不做任何动作。SETEX:可以设置超时时间其原理为:通过 SETNX 设置 Key-Value 来获得锁,随即进入死循环,每次循环判断,如果存在 Key 则继续循环,如果不存在 Key,则跳出循环,当前...

2019-10-04 14:31:29 2786 1

原创 SpringCloud Gateway

服务网关(Gateway)一、过滤器接口的安全性校验。Gateway 提供了多种 Filter 可供选择,如:GatewayFilter 处理单个路由的请求GlobalFilter 过滤所有路由请求package com.lynn.gateway;import org.apache.commons.lang.StringUtils;import org.springframew...

2019-10-04 13:51:45 89

原创 SpringBoot——监控器

监控器(Listener)@WebListener声明为listen类@ServletComponentScan开启需要扫描的listener类文件,相当于listener启动类implements ServletContextListener 接口,重写contextInitialized(初始化时启动),contextDestroyed(销毁时启动)。@WebListener@S...

2019-10-04 13:36:39 221

原创 SpringBoot——过滤器

过滤器@WebFilter配置过滤器名和url策略implement filter接口,并重写方法init(初始化),doFilter(调用时),destory(销毁时)。//过滤的请求不会经过controller层@WebFilter(filterName="MyFilter",urlPatterns="/getAll/*")public class MyFilter implem...

2019-10-04 13:05:38 169

原创 SpringBoot——自定义 JSON 解析

自定义 JSON 解析Spring Boot 中 RestController 返回的字符串默认使用 Jackson 引擎,它也提供了工厂类,我们可以自定义 JSON 引擎,本节实例我们将 JSON 引擎替换为 fastJSON,首先需要引入 fastJSON:<dependency> <groupId>com.alibaba</groupId> ...

2019-10-03 20:32:55 455

原创 SpringBoot——接口版本控制

接口版本控制一、接口为什么需要版本控制一个系统上线后会不断迭代更新,需求也会不断变化,有可能接口的参数也会发生变化,如果在原有的参数上直接修改,可能会影响线上系统的正常运行,这时我们就需要设置不同的版本,这样即使参数发生变化,由于老版本没有变化,因此不会影响上线系统的运行。一般我们可以在地址上带上版本号,也可以在参数上带上版本号,还可以再 header 里带上版本号,这里我们在地址上带上版本...

2019-10-03 20:28:52 1669 2

原创 SpringBoot——优雅的输入合法性校验

优雅的输入合法性校验一、为什么需要校验为了接口的健壮性,我们通常除了客户端进行输入合法性校验外,在 Controller 的方法里,我们也需要对参数进行合法性校验,传统的做法是每个方法的参数都做一遍判断,这种方式和上一节讲的异常处理一个道理,不太优雅,也不易维护。二、使用示例@GetMapping("authorize")public void authorize(@Valid Auth...

2019-10-03 20:23:50 1519

原创 SpringBoot——统一异常处理

统一异常处理一、为什么需要统一异常处理我们在 Controller 里提供接口,通常需要捕捉异常,并进行友好提示,否则一旦出错,界面上就会显示报错信息,给用户一种不好的体验。最简单的做法就是每个方法都使用 try catch 进行捕捉,报错后,则在 catch 里面设置友好的报错提示。如果方法很多,每个都需要 try catch,代码会显得臃肿,写起来也比较麻烦。二、实现原理使用 Spri...

2019-10-03 20:17:51 87

原创 SpringBoot——拦截器

拦截器一、为什么需要使用拦截器我们在提供 API 的时候,经常需要对 API 进行统一的拦截,比如进行接口的安全性校验。二、如何进行拦截器设置2.1、创建一个拦截器类:ApiInterceptorpublic class ApiInterceptor implements HandlerInterceptor { //请求之前 @Override public b...

2019-10-03 20:11:38 338

原创 SpringBoot1.X——常用注解

SpringBoot常用注解1.1、@SpringBootApplication查看下 SpringBootApplication 的源码在这个注解类上有 3 个注解,如下:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = Fil...

2019-10-03 20:06:10 139

原创 SpringBoot——打war包

打war包1.1、在 pom.xml 加入如下配置<packaging>war</packaging><build> <finalName>api</finalName> <resources> <resource> <directory>s...

2019-10-03 19:54:52 78

原创 数据库连接池——Druid

Druid数据库连接池一、SpringBoot整合Druid1.1、在pom.xml中添加依赖<!-- Druid Pool --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1...

2019-10-03 16:22:12 111

原创 工厂设计模式

抽象工厂模式一、定义抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式,是工厂方法模式的升级版,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。抽象工厂模式包含了几个角色:AbstractFactory:用于声明生成抽象产品的方法ConcreteFactory:实现了抽象...

2019-10-03 15:46:01 110

原创 SpringBoot——多环境打包

多环境打包一、整合多环境打包功能1.1、修改pom.xml文件<profiles> <profile> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <acti...

2019-10-03 14:00:17 132

原创 使用Swagger2构建强大的API文档

Swagger2一、整合Swagger21.1、在pom.xml中添加依赖<!-- swagger2 --><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version&gt...

2019-10-03 13:46:22 91

zipkin.rar

SpringCloud ZipKin资料: 1、zipkin server/client 2、zipkin rabbitmq 3、zipkin mysql

2019-10-02

SpringMVC框架原码

SpringMVC框架原码,包括与Spring、Hibernate整合;其配置文件重要,如果不清楚可查看ItcastOA源码的配置文件

2015-12-12

ItcastOA原码

ItcastOA项目原码,使用SSH框架,其中有fckEditor,拦截器、过滤器等的使用

2015-12-07

邮件、toBean、一次性验证码 等

此处为测试方法: 1、UUid 2、将Map中的数据转换成Bean对象 3、获得JDBC连接 4、自定义QueryRunner 来CURD操作 5、jdbc事务使用 6、将QuerySet转换成其它类型:BeanHandler、BeanListHandler、MapHandler... 7、多表联接查询 toBean 封装为多个对象,并将关联关系建立好 8、测试发邮件

2015-11-25

将一个Map中的数据封装到javaBean中

将一个Map中的数据封装到javaBean中

2015-11-25

HTML5图片上传

HTML5图片上传,没使用Flush插件,非常好用.

2015-11-25

jquery树状结构插件

jquery树状结构插件,帮助我们更好的将内容显示为树状结构,但样式要自已添加

2015-09-21

FCKEditor相关资料

fckeditor相关资料:包括要引用的文件、jar、web.xml、Servlet.java等资源。最主要的还包括其怎么使用都有说明文档。

2015-09-15

spring-framework-4.0.0.RELEASE-dist.zip

spring-framework-4.0.0.RELEASE-dist

2014-03-02

空空如也

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

TA关注的人

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