自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 什么是好的代码?

这是一段JDK11里的一段源码,很明显这是段有问题的代码,是个bug。之所以出现这样的低级错误,是因为这里用到了条件运算符。如果使用条件语句,而不是条件运算符,这个幼稚错误发生的概率会急剧下降。 坚持使用最直观的编码方式,而不是追求代码简短,真的可以避免很多不必要的错误。现在,如果你要再问我喜欢哪种编码方式,毫无疑问,我喜欢使用条件语句,而不是条件运算符。因为,用条件语句这种编码方式,可以给我确定感,我也不需要挑战什么高难度动作;而看代码的人,也可以很确定,很轻松,不需要去查验什么模糊的东西..

2021-01-28 20:38:29 315 1

原创 一条SQL查询语句是如何执行的

一、MySQL的基本架构示意图

2021-01-23 21:35:50 143

原创 Java设计模式新解之模版方法模式

目录一、定义二、UML图三、Demo演示四、总结一、定义定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。二、UML图模板方法模式涉及到的角色:抽象模板角色:定义一组基本方法供子类实现,定义并实现组合了基本方法的模板方法。具体模板角色:实现抽象模板角色定义的基本方法。模板方法模式涉及到的方法的概念:基本方法 抽象方法:由抽象模板角色声明,abstract修饰,具体模板角色实...

2020-11-29 23:34:09 94

原创 Java设计模式新解之抽象工厂模式

目录一、定义二、UML图三、代码实现四、总结一、定义提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。二、UML图AbstractFactory :抽象工厂角色,它声明了一组用于创建一种产品的方法,每一个方法对应一种产品,如上图中的 AbstractFactory 中就定义了两个方法,分别创建产品 A 和产品 B 。 ConcreteFactory : 具体工厂角色,它实现了在抽象工厂中定义的创建产品的方法,生成一组具体产品,这些产品构成了..

2020-11-22 20:13:59 73

原创 Java设计模式新解之工厂方法模式

在讲解工厂方法模式之前,我们先来看一下简单工厂模式。一、概述定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。当我们需要创建各种不同对象,这些类称为具体产品类(ConcreteProduct),而将它们公共的代码进行抽象和提取后封装在一个抽象产品类或产品接口(Pr......

2020-11-15 00:14:08 68

原创 Java设计模式新解之代理模式

一、介绍1.概念代理模式也称为委托模式,属于结构型设计模式之一。2.产生的原因在某些情况下,一个对象不适合或者不能直接引用另外一个对象,需要一个中间对象来进行间接的访问,这个中间对象就是代理对象。代理对象可以在客户端和目标对象之间起到中介的作用,比如我们日常生活中的邮局,快递公司,婚介所等等。3.使用的目的代理模式主要有两个目的:一是保护目标对象,二是增强目标对象。4.分类代理模式分为静态代理模式和动态代理模式。静态代理是由程序员创建或特定工具自动生成源代码,再对其编译。

2020-11-08 19:16:00 121

原创 Java设计模式新解之装饰模式

引言《Head First 设计模式》中是这么形容装饰者模式——“给爱用继承的人一个全新的设计眼界”,拒绝继承滥用,从装饰者模式开始。装饰者模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。模式动机一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个...

2020-11-02 20:37:15 219

原创 Java设计模式新解之策略模式

在《JAVA与模式》一书中开头是这样描述策略(Strategy)模式的:  策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式的结构这个模式涉及到三个角色:  ●  环境(Context)角色:持有一个Strategy的引用。  ●  抽象策略(Strategy)角色:这是一个抽象角色,通常是一个接口或抽象类。此角色给出所有的具体策略类所需的接口。 

2020-05-17 20:15:59 144 1

原创 Java设计模式之适配器模式

适配器(Adapter)模式又叫做包装( Wrapper )模式,是一种结构型设计模式,Adapter模式的设计意图:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。...

2022-06-25 18:47:55 130125

原创 Java设计模式之组合模式

组合(Composite)模式是一种对象的行为模式。将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

2022-06-24 14:13:02 563

原创 架构相关一两话

架构设计,业内有个法则叫好莱坞规则:Don't call me, I will call you.这里就不翻译了,用我们通俗一点的行话总结一下就是:架构调用应用程序,应用程序调用工具。这其实是经典的依赖倒置原则的体现。你品,你细品?...

2020-11-14 00:27:20 240

原创 阿里面试宝典

###各大IT社区精选-[阿里面经(附回答)面试必看](https://www.jianshu.com/p/08368a8e4ca7)-[阿里面试经历及总结(数据研发、Java研发方向)](http://www.codeceo.com/article/alibaba-interview-java.html)-[记2017.3.21阿里面试经历,java方向](http://blo...

2020-10-19 18:41:24 141

原创 Java设计模式新解之单例模式

一、定义单例是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。二、适用场景 1.需要频繁实例化然后销毁的对象。 2.创建对象时耗时过多或者耗资源过多,但又经常用到的对象。 3.有状态的工具类对象。 4.频繁访问数据库或文件的对象。经典使用场景: 1.资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文件、应用配置等。 2.控制资源的情况下,方便资源之间的相互通信。如线程池、数据库连接池......

2020-10-17 22:42:09 60

原创 Docker安装MYSQL服务

以mysql 5.7版本为例1. 拉取镜像docker pull mysql/mysql-server:5.72. 启动容器docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:5.73. 进入容器ocker exec -it mysql bash...

2019-10-22 16:15:28 233

原创 Spring MVC 一个请求的完整过程

Spring MVC 一个请求的完整过程整个过程如上图,首先,用户的浏览器发出了一个请求,这个请求经过互联网到达了我们的服务器。Servlet 容器首先接待了这个请求,并将该请求委托给 DispatcherServlet 进行处理。接着 DispatcherServlet 将该请求传给了处理器映射组件 HandlerMapping,并获取到适合该请求的拦截器和处理器。在获取...

2019-10-21 16:29:58 1744 2

原创 SpringBoot 中 Servlet 加载流程的源码分析

1. Initializer 被替换为 TomcatStarter当使用内嵌的 Tomcat 时,你会发现 Spring Boot 完全走了另一套初始化流程,完全没有使用前面提到的 SpringServletContainerInitializer ,实际上一开始我在各种 ServletContainerInitializer 的实现类中打了断点,最终定位到,根本没有运行到 SpringSer...

2019-10-11 16:31:40 478

原创 Spring 是如何支持 Servlet 3.0 的?

写在前面:ServletContainerInitializer 也是 Servlet 3.0 新增的一个接口,容器在启动时使用 JAR 服务 API(JAR Service API) 来发现 ServletContainerInitializer 的实现类,并且容器将WEB-INF/lib目录下 JAR 包中的类都交给该类的#onStartup(...)方法处理,我们通常需要在该实现...

2019-10-11 16:30:04 419

原创 容器的初始化之 Servlet WebApplicationContext 容器

在开始之前,我们还是回过头看一眼web.xml的配置。代码如下:即,ServletWebApplicationContext 容器的初始化,是在 DispatcherServlet 初始化的过程中执行。HttpServletBean ,负责将 ServletConfig 设置到当前 Servlet 对象中。类上的简单注释如下:FrameworkServlet ,负责初...

2019-10-11 16:27:11 448

原创 容器的初始化之 Root WebApplicationContext 容器

首先,我们来回顾一下Tomcat启动context容器的过程。调用的是StandardContext.startInternal()方法,其中有一段逻辑是初始化Servlet相关的Listener:在完成 Listener 实例化之后,tomcat 容器便启动 OK 了。此时,tomcat 需要通知应用程序定义的 ServletContextListener,方便应用程序完...

2019-10-11 16:18:11 2327

原创 Spring事务源码解析(声明式事务)

切入点:spring自定义标签的解析上面的resolve方法点进去,执行TxNamespaceHandler.init()方法以上两个parser分别用来解析tx:advice和tx:annotation-driven标签。进行标签解析:调用parser.parse()方法进行解析:最外围的if判断限制了<t...

2019-09-29 09:07:06 271

原创 Spring AOP动态代理实现源码解析

写在AOP之前一、静态代理和动态代理静态代理:在编译期生成.class字节码文件动态代理:在运行时运用反射机制动态创建1)静态代理:目标对象和代理对象需要实现相同的接口代理对象需要持有目标对象(一般是目标对象实现的接口)2)动态代理JDK动态代理:Proxy.NewProxyInstance()InvocationHandler接口CGLIB动态代理...

2019-09-20 11:11:10 649

转载 Spring源码解读之 统一资源加载策略

在学 Java SE 的时候,我们学习了一个标准类java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Resource Locator),但是我们知道它的实现基本只限于网络形式发布的资源的查找和定位。然而,实际上资源的定义比较广泛,除了网络形式的资源,还有以二进制形式存在的、以文件形式存在的、以字节流形式存在的等等。而且它可以存在于任何场所,比如网络、文件...

2019-07-24 09:37:59 514

原创 Java设计模式新解之简单工厂模式

一、概述定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。当我们需要创建各种不同对象,这些类称为具体产品类(ConcreteProduct),而将它们公共的......

2019-07-21 14:03:08 117 1

原创 关于java中元注解Inherited 的使用说明

首先解释下元注解,就是用来中声明注解类型时需要使用到的注解。主要包括:@Documented@Retention@Target@Inherited@Inherited作用是,使用此注解声明出来的自定义注解,在使用此自定义注解时,如果注解在类上面时,子类会自动继承此注解,否则的话,子类不会继承此注解。这里一定要记住,使用Inherited声明出来的注解,只有在类上使用时才会有效,对方法...

2019-05-28 14:04:50 483

原创 Java中的注解是如何工作的

什么是注解? 为什么要引入注解? Annotation是如何工作的?怎么编写自定义的Annotation? 注解用例 ADF (应用程序框架)和注解 自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分。开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解。这篇文章中,我将向大家讲述到...

2019-05-28 14:00:02 133

转载 Docker可视化管理工具--shipyard

今天在网上流量 docker 文章时偶然发现了一个 Docker 的 web 管理工具 shipyard,今天想起来介绍下,然而却发现官网无法打开,去作者的 GitHub 一看缺发现这个项目已经放弃维护了,也是相当可惜啊。PS.shipyard 是船坞或者船厂的意思,结合 Docker 一直以来是条类似货轮的鲸鱼,其实这个名字挺合适的。作者由于没有时间与精力继续维护下去,在去年八月份就...

2019-01-10 17:21:44 503

原创 Linux环境下Redis安装遇到的坑

1.外网ip不能访问解决方案:a.把配置文件redis.conf中的bind 127.0.0.1注释掉b.把配置文件redis.conf中的protected-mode设置成no(原来是yes)

2018-12-12 09:53:24 295

原创 Mysql的一个双引号错位引发的血案

原来的sql语句如下:update `credit_bill` set receipt_no = 'DD-20181022-89757' where receipt_no = 'DD-20181022-316736';该sql正常执行。变化后的sql语句如下:update `credit_bill` set receipt_no = 'DD-20181022-89757 where...

2018-12-05 15:06:17 234

原创 利用Spring Cloud Sleuth集成的zipkin组件实现服务链路追踪

1.简介Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可。2.服务追踪分析微服务架构上是通过业务来划分服务的。通过REST调用,对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相...

2018-05-11 14:45:13 481

原创 mybatis使用中遇到的一个小问题

今天遇到了一个有意思的问题,看错误信息提示,好像是有个参数没有匹配上,具体错误信息如上图:就是这个错误,找了很久没找到问题在哪里。后来想一下,这之间我只是在mybatis的mapper.xml里select查询sql里把一行分页的条件注释掉了,改用PageHelper来实现。就是这一行注释,导致了问题的出现。解决方法: 直接删除这两行代码,问题消失。 说明mybatis在处理xml中这种注释的时候...

2018-04-12 15:25:30 175

空空如也

空空如也

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

TA关注的人

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