自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 docker删除镜像 提示Error: No such image: nginx

最近打算删除掉docker镜像但是发现有几个镜像就是删除不了,加了-f强制删除也不行,一直报Error: No such container的错误,最后终于找到了办法直接删除文件,步骤如下:切换到root用户然后:service docker stoprm -rf /var/lib/dockerstart docker.service到这里就会发现镜像已经删除干净。附docker常用命令:重启docker服务sudo service docker restart关闭doc..

2022-03-05 11:33:42 1362

原创 mybatisPlus基础学习

1、官网: 访问地址:简介 | MyBatis-Plus

2021-12-20 11:36:54 171

原创 mybatis 映射器文件(*Mapper.xml)中表示大于小于符号

第一种写法(1):原符号 < <= > >= & ' "替换符号 &lt; &lt;= &gt; &gt;= &amp; &apos; &quot;例如:sql如下:create_date_time &gt;= #{startTime} and create_d...

2021-12-19 22:41:58 1117

原创 Mybatis的基础学习

1、mybatis中文官网 访问地址:https://mybatis.net.cn/2、mybatis-spring集成学习 访问地址:https://mybatis.org/spring/zh/

2021-12-19 22:13:21 212

原创 软件框架

1、概念框架(framework)是一个框子——指其约束性,也是一个架子——指其支撑性。是一个基本概念上的结构,用于去解决或者处理复杂的问题。框架这个广泛的定义使用的十分流行,尤其在软件概念。框架也能用于机械结构。 ------来源于《百度百科》软件工程中对于框架的定义:框架( Framework )是构成一类...

2021-12-19 21:15:18 1990

原创 java集合——HashMap源码

1、jdk1.7关键代码public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable{ // 默认数组大小 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 // 默认加载因子 static final

2021-12-17 00:34:29 988

原创 Java集合——LinkedList源码

关键源码(jdk1.7和jdk1.8相同)public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{ // 有效个数 transient int size = 0; // 头结点 transient Node<E

2021-12-12 16:47:07 194

原创 java集合——ArrayList 源码

jdk1.8关键源码public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ // 默认初始大小 private static final int DEFAULT_CAPACITY = 10; // 空实例数组 private static

2021-12-12 16:24:16 361

原创 八、Spring Bean生命周期

在这篇文章中我们开始学习Bean的生命周期相关的知识,整个Bean的生命周期可以分为以下几个阶段:1)实例化(得到一个还没有经过属性注入跟初始化的对象)2)属性注入(得到一个经过了属性注入但还没有初始化的对象)3)初始化(得到一个经过了初始化但还没有经过AOP的对象,AOP会在后置处理器中执行)4)销毁生命周期回调1、Bean初始化回调实现初始化回调方法,有以下三种形式1)实现InitializingBean接口如下:public class AnotherExample...

2021-11-19 00:20:27 55

原创 七、Spring IOC——finishBeanFactoryInitialization方法(实例化各种非懒加载单例对象)

看下Spring如何实例化bean,以及如何实现在bean的实例化通过各种各样的后置处理器完成bean的增强。1、入口是AbstractApplicationContext中的finishBeanFactoryInitialization(beanFactory);,源码如下,主要做了如下几件事:protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { //

2021-11-19 00:15:31 209

原创 六、Spring IOC——唤醒BeanFacotryPostProcessor

什么是BeanFactoryPostProcessor?BeanFactoryPostProcessor是beanFactory的后置处理器;在BeanFactory标准初始化之后调用,这时所有的bean定义已经保存加载到beanFactory,但是bean的实例还未创建;因此可以通过BeanFactoryPostProcessor来获取和修改BeanFactory中bean配置元数据;一、唤醒BeanFacotryPostProcessor:refr...

2021-11-18 13:36:02 96

原创 五、Spring IOC——BeanDefinition的加载

一、BeanDefinition的加载:在Spring中,实际上是把DefaultListableBeanFactory作为一个默认的功能完整的IoC容器来使用的。我们通过编程式使用IoC容器可以更好地理解其原理:ClassPathResource res = new ClassPathResource(“beans.xml”);DefaultListableBeanFactory factory = new DefaultListableBeanFactory();XmlBeanDefinit

2021-11-18 13:32:23 351

原创 四、Spring IOC——容器启动的主要流程方法

一、Spring IOC容器启动的主要流程方法(AbstractApplicationContext中的refresh方法)如果应用直接使用ApplicationContext,以FileSystemXmlApplicationContext为例,在代码实现中可以看到其构造方法:public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, @Nullable Applicat

2021-11-18 13:25:51 472

原创 三、Spring IOC——IOC容器UML图

一、IOC容器相关UML图:在Spring IoC容器的设计中,主要有两条线路,一是实现BeanFactory接口的简单容器系列,这系列只实现了容器的基本功能,另一个是ApplicationContext应用上下文,它是容器的高级形态,增加了许多面向框架的特性,同时对应用环境做了许多适配。最常用的以Application应用上下文为核心的接口设计,主要涉及的接口有:ApplicationContext,WebApplicaionContext,ConfigurableAppicationCo.

2021-11-18 13:19:15 704

原创 二、Spring整体架构

1、Spring整体架构Spring框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块,可分为5类,如下图所示:从上图spring framework整体架构图可以看到,这些模块被总结为以下几个部分:1. Core Container(核心容器)Core Container(核心容器)包含有Core、Beans、Context和Expression Language模块;1)Core和Beans模块是框架的基础部分,提供IoC(转控制)和依赖注入特性。这里的基础...

2021-11-18 13:16:05 173

原创 一、什么是Spring

1、Spring是什么?Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻...

2021-11-18 13:12:52 322

转载 一句话归纳设计模式

通过《23种设计模式全面解析》教程,我们已经学习完了经典的 23 种设计模式。下面总结一下这 23 种设计模式,以方便小伙伴们日后复习和查阅。分类 设计模式 简述 一句话归纳 目的 生活案例 创建型设计模式 (简单来说就是用来创建对象的) 工厂模式(Factory Pattern) 不同条件下创建不同实例 产品标准化,生产更高效 封装创建细节 实体工厂 单例模式(Singleton Pattern) 保证一个类仅有一...

2021-11-11 08:22:52 110

转载 解释器模式(Interpreter模式)

在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。虽然使用解释器模式的实例不是很多,但对于满足以上特点,且对运行效率要求不是很高的应用实例,如果用解释器模式来实现,其效果是非常好的,本文将介绍其工作原理与使用方法。模式的定义与特点解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是

2021-11-09 23:05:40 608

转载 备忘录模式(Memento模式)

每个人都有犯错误的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中,客户同样会常常犯错误,能否提供“后悔药”给他们呢?当然是可以的,而且是有必要的。这个功能由“备忘录模式”来实现。其实很多应用软件都提供了这项功能,如 Word、记事本、Photoshop、Eclipse 等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 IE 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备份操作、棋类游

2021-11-09 22:57:03 193

转载 访问者模式(Visitor模式)

在现实生活中,有些集合对象存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同;医院医生开的处方单中包含多种药元素,査看它的划价员和药房工作人员对它的处理方式也不同,划价员根据处方单上面的药品名和数量进行划价,药房工作人员根据处方单的内容进行抓药。这样的例子还有很多,例如,电影或电视剧中的人物角色,不同的观众对他们的评价也不同;还有顾客在商场购物时放在“购物车”中的商品,顾客主要关心所选商品的性价比,而收银员关心的是

2021-11-09 22:48:51 346

转载 迭代器模式(Iterator模式)

在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了 “开闭原则”。既然将遍历方法封装在聚合类中不可取,那么聚合类中不提供遍历方法,将遍历方法由用户自己实现是否可行呢?答案是同样不可取,因为这种方式会存在两个缺点:暴露了聚合类的内部表示,使其数据不安全; 增加了客户的负担。“迭代器模式”能较好地克服以上缺点,它在客户访问类与聚合类.

2021-11-09 22:45:49 438

转载 中介者模式(Mediator模式)

在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须让其他所有的朋友一起修改,这叫作“牵一发而动全身”,非常复杂。如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要找一个“中介者”就可以了。如前面所说的“每个人必须记住所有朋友电话”的问题,只要在网上建立一个每个朋友都可以访问的“通信录”就解决了。这样的例子

2021-11-09 22:40:45 211

转载 观察者模式(Observer模式)

在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股民、微信公众号与微信用户、气象局的天气预报与听众、小偷与警察等。在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;MVC 模式中的模型与视图的关系;事件模型中的事件源与事件处理者。所有这些,如果用观察者模式来

2021-11-09 22:29:55 446

转载 状态模式(State模式)

在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态就会发生改变,从而使其行为也发生改变。如人都有高兴和伤心的时候,不同的情绪有不同的行为,当然外界也会影响其情绪变化。对这种有状态的对象编程,传统的解决方案是:将这些所有可能发生的情况全都考虑到,然后使用 if-else 或 switch-case 语句来做状态判断,再进行不同情况的处理。但是显然这种做法对

2021-11-09 22:25:20 9711

转载 责任链模式(Chain of Responsibility模式)

在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。在计算机软硬件中也有相关例子,如总线网中数据报传送,每台计算机根据目标地址是否同自己的地址相同来决定是否接收;还有异常处理中,处理程序根据异常的类型决定自己是否处理该异常;还有Struts2的拦截器、JSP和...

2021-11-09 22:20:00 780

转载 命令模式(Command模式)

在软件开发系统中,“方法的请求者”与“方法的实现者”之间经常存在紧密的耦合关系,这不利于软件功能的扩展与维护。例如,想对方法进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与实现者解耦?”变得很重要,命令模式就能很好地解决这个问题。在现实生活中,命令模式的例子也很多。比如看电视时,我们只需要轻轻一按遥控器就能完成频道的切换,这就是命令模式,将换台请求和换台处理完全解耦了。电视机遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者)。再比如,我们去餐厅吃饭,菜单不是等到客人来

2021-11-09 22:16:10 471

转载 策略模式(Strategy模式)

在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加、删除或更换算法要修改原代码,不易维护,违背开闭原则。如果采用策略

2021-11-09 22:03:47 396

转载 模板方法模式(Template Method模式)

在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。这样的例子在生活中还有很多,例如,一个人每天会起床、吃饭、做事

2021-11-08 01:28:41 691

转载 行为型模式概述

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。行为型模式是 GoF设计模式中最为庞大的一类,它包含以下 11 种模式。模板方法(Template Method)模式:定义一个操作中.

2021-11-08 01:23:30 86

转载 组合模式(Composite模式)

在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣服与衣柜、以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。组合模式的定义与特点组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的

2021-11-08 01:21:23 328

转载 享元模式(Flyweight模式)

在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把它们相同的部分提取出来共享,则能节省大量的系统资源,这就是享元模式的产生背景。享元模式的定义与特点享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少

2021-11-08 01:16:39 410

转载 外观模式(Facade模式)

在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。图 1 给出了客户去当地房产局办理房产证过户要遇到的相关部门。图1 办理房产证过户的.

2021-11-08 01:13:27 159

转载 装饰器模式

上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰器模式来实现。装饰器模式的定义与特点装饰器(Deco

2021-11-08 01:11:05 131

转载 桥接模式

在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。当然,这样的例子还有很多,如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。桥接模式的定义与特点桥接(Bridge)模式的定义如下:将抽象与实现分

2021-11-08 01:08:11 201

转载 适配器模式

在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。模式的定义与特点适配器模式(Adapter)的定义如下:将一个类的接口转

2021-11-08 01:04:54 82

转载 代理模式

在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。代理模式的定义与特点代理模式的定义:由于某些原因需要给某对象提供一个代理

2021-11-08 00:55:26 62

转载 结构型模式概述

结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。结构型模式分为以下 7 种:代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。 适配器(Adapter)模式:将一个类的接口转换成客户希望的另外一个

2021-11-08 00:40:42 81

转载 建造者模式

在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。生活中这样的例子很多,如游戏中的不同角色,其性别、个性、能力、脸型、体型、服装、发型等特性都有所差异;还有汽车中的方向盘、发动机、车架、轮胎等部件也多种多样;每封电子邮件的发件人、收

2021-11-07 14:54:02 73

转载 抽象工厂模式

前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。同种类称为同等级,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。本节要介绍的抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族,图 1 所示的是海尔工厂和 TCL

2021-11-07 14:49:15 61

转载 工厂方法模式

在现实生活中社会分工越来越细,越来越专业化。各种产品有专门的工厂生产,彻底告别了自给自足的小农经济时代,这大大缩短了产品的生产周期,提高了生产效率。同样,在软件开发中能否做到软件对象的生产和使用相分离呢?能否在满足“开闭原则”的前提下,客户随意增删或改变对软件相关对象的使用呢?这就是本节要讨论的问题。在《简单工厂模式》一节我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。优

2021-11-07 14:46:09 57

空空如也

空空如也

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

TA关注的人

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