![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
编程之心
这个作者很懒,什么都没留下…
展开
-
LeetCode 23. 移动零
A23. 移动零/** * [23. 移动零](https://leetcode-cn.com/problems/move-zeroes/) * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 * 输入: [0,1,0,3,12] * 输出: [1,3,12,0,0] * 解释:将0移到最后,其余数字顺序不许改变。要在原数组上操作。 * 1.统计0的个数,两个循环。 * 2.双指针。从头遍历到尾。非0就放在前面。 */public cl原创 2020-05-31 21:52:30 · 181 阅读 · 0 评论 -
30.MyBatis插件原理与Spring集成
目录插件使用与原理编写自定义插件掌握Spring集成myBatis原理1.插件使用与原理1.1.插件使用编写插件编写拦截器类,以PageHelper为例1)实现Interceptor接口public class PageInterceptor implements Interceptor {2)实现方法。intercept就是拦截方法,增强代码写里面。3)在拦截器类上加上参数。注解签名注明拦截对象、拦截方法、拦截方法参数。下面拦截Executor中的两个query方法。@I原创 2020-05-14 11:51:05 · 277 阅读 · 0 评论 -
29.MyBatis体系结构与工作原理
1.MyBatis的工作流程分析一、解析配置文件启动MyBatis时要解析配置文件,包括全局配置文件和映射器配置文件,这里面包含了我们怎么控制MyBatis的行为,和我们要对数据库下达的指令,也就是我们的SQL信息。我们会把它们解析成一Configuration对象。二、提供操作接口接下来就是我们操作数据库的接口,它在应用程序和数据库中间,代表我们跟数据库之间的一次连接:这个就是SqISession对象。我 们 要 获 得 一 个 会 话 ,必 须 有 一 个 会 话 工 厂 SqISessio原创 2020-05-13 15:39:04 · 615 阅读 · 0 评论 -
《软件架构设计》第一、二章学习笔记
第一部分 什么是架构第1章 五花八门的架构师职业1.架构师分类招聘网站有个各种五花八门的架构:Android/iOS架构师、PHP架构师、 构师、前端架构师、后端架构师、数据架构师、搜索 架构师、中间件架构师、大数据架构。架构师是一个很虚的词。本书通过业务架构与技术架构的融合,建立系统化的思维方式和学习方法。2.架构的分类自下向上,通常分3层。1.第一层:基础架构指云平台、操...原创 2020-04-29 14:29:11 · 224 阅读 · 0 评论 -
《offer来了》第八章笔记学习
设计模式(Design Pattern)是经过高度抽象化的代码设计经验总结。1 设计模式简介设计模式有 7 个原则:单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成/聚合复用原则、迪米特法则1.单一职责原则规定一个类只有一个职责。如果多个职责(功能)被设计在一个类中,这个类就违反了单一职责原则。2.开闭原则开闭原则规定软件中的对象(类、模块、函数等)对扩展开放,...原创 2020-04-28 20:48:20 · 448 阅读 · 0 评论 -
《offer来了》第七章学习笔记
1.分布式缓存介绍将频繁访问的热数据缓存到内存中,提高访问时间,降低数据库负载。微服务架构下需要分布式缓存来实现跨服务的缓存系统。用户访问的数据库是被部署在多个服务器节点的集群数据库,缓存是被部署在多个服务器节点的分布式缓存,同时缓存之间有数据备份,在一个节点出问题后,分布式缓存会将用户的请求转发到其他备份节点以保障业务的正常运行。2.Ehcache原理及应用基于 Java 实现的...原创 2020-04-27 00:08:43 · 741 阅读 · 0 评论 -
《offer来了》第六章学习笔记
1.数据库的概念1.1.存储引擎常用的存储引擎主要有 MyISAM、InnoDB、Memory、Archive 和 Federated。1. MyIASMMyIASM 是 MySQL 默认的存储引擎,不支持数据库事务、行级锁和外键,因此在 INSERT(插入)或 UPDATE(更新)数据即写操作时需要锁定整个表,效率较低。MyIASM 的缺点是更新数据慢且不支持事务处理,优点是查询速度快...原创 2020-04-26 02:00:18 · 1170 阅读 · 0 评论 -
《offer来了》第五章学习笔记
1.网络1.1.OSI七层模型从下到上主要包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层层作用物理层发送端将1、0转化为电流强弱,到目的后将电流强弱转化为1、0数据链路层对数据包的MAC地址进行解析和封装网络层对数据包的IP 地址进行解析和封装传输层定义传输数据的协议和端口号会话层建立连接和管理会话表示层...原创 2020-04-24 23:27:20 · 419 阅读 · 0 评论 -
《offer来了》第四章学习笔记
常用数据结构1.栈图示 核心方法◎ push():向栈中压入一个数据,先入栈的数据在最下边。◎ pop():弹出栈顶数据,即移除栈顶数据。◎ peek():返回当前的栈顶数据。栈结构入栈出栈查找元素2.队列FIFO-first in first out 线性表核心方法:◎ add():向队列的尾部加入一个元素(入队),先入队列的元素在最前边。◎ pol...原创 2020-04-24 01:02:20 · 673 阅读 · 0 评论 -
《offer来了》第三章学习笔记
1.Java线程创建方式4种创建方式1.1.继承Thread类1.2.实现Runnable接口如果类继承了另一个类,就无法再直接继承Thread类,可以通过实现Runnable接口创建线程。1.3.通过ExectorService和Callable<Class>实现有返回值的线程1.4.基于线程池2.线程池的工作原理定义:用于管理线程组及其状态,方便JVM...原创 2020-04-23 00:54:26 · 395 阅读 · 0 评论 -
《offer来了》第二章学习笔记
1.集合Java四种集合:List、Queue、Set和Map1.1.List:可重复有序的CollectionArrayList:基于数组实现,增删慢,查询快,线程不安全Vector:基于数组实现,增删慢,查询快,线程安全LinkedList:基于双向链实现,增删快,查询慢,线程不安全1.2.Queue:队列ArrayBlockingQueue:基于数组实现的有界阻塞队...原创 2020-04-22 00:26:16 · 244 阅读 · 0 评论 -
《offer来了》第一章学习笔记
第一章 JVM1.JVM运行机制JVM定义: 运行Java字节码的虚拟机。Java运行过程:Java源文件(.java)被编译器编译成字节码(.class)文件JVM将字节码编译成对应操作系统的机器码机器码调用对应系统的本地方法库执行相应方法JVM包括:类加载子系统 Class Loader SubSystem运行时数据区 Runtime Data Area执行引擎...原创 2020-04-21 02:05:52 · 435 阅读 · 0 评论 -
22.手绘Spring DI运行时序图
1.依赖注入发生的时间当Spring loC容器完成了 Bean定义资源的定位、载入和解析注册以后,loC容器中已经管理类Bean 定义的相关数据,但是此时loC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况发生:、用户第一次调用getBean()方法时,loC容器触发依赖注入。、当用户在配置文件中将<bean>元素配置了 lazy-init二false属性,即让...原创 2020-04-19 20:37:45 · 270 阅读 · 0 评论 -
21.手绘Spring IOC运行时序图
1.再谈IOC与 DIIOC(lnversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创 建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们所看到的配置文件。DI(Dependency Injection)依赖注入:就是指对象是被动接受依赖类而不...原创 2020-04-18 21:24:37 · 606 阅读 · 1 评论 -
20.Spring5注解介绍
1.配置组件 Configure Components注解名称说明@Configuration把一个类作为一个loC容 器 ,它的某个方法头上如果注册7@Bean , 就会作为这个Spring容器中的Bean@ComponentScan在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:...原创 2020-04-15 20:13:24 · 248 阅读 · 0 评论 -
19.手写Spring AOP
1.Spring AOP顶层设计2.Spring AOP执行流程下面是代码实现3.在 application.properties中增加如下自定义配置:#托管的类扫描包路径#scanPackage=com.gupaoedu.vip.demotemplateRoot=layouts#切面表达式expression#pointCut=public .* com.gupaoedu....原创 2020-04-12 19:57:46 · 342 阅读 · 0 评论 -
18.手写Spring MVC
1.Spring MVC顶层设计2.Spring MVC执行流程下面是代码实现3.GPdispatcherServelet 分发器Serviet 的生命周期由 init()到 service()再到 destory()组成, destory()方法我们 不做实现。package com.gupaoedu.vip.spring.framework.webmvc.servlet;i...原创 2020-04-11 19:51:51 · 206 阅读 · 0 评论 -
17.用300行代码手写初体验Spring V1.0版本
1.1.课程目标1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。2、浓缩就是精华,用 300行最简洁的代码提炼Spring的基本设计思想。3、掌握Spring框架的基本脉络。1.2.内容定位1、 具有1年以上的SpringMVC使用经验。2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。3、 全程手写实现SpringMVC的核心功能,...原创 2020-04-05 23:48:23 · 376 阅读 · 0 评论 -
16.Spring前世今生与Spring编程思想
1.1.课程目标1、通过对本章内容的学习,可以掌握Spring的基本架构及各子模块之间的依赖关系。2、 了解Spring的发展历史,启发思维。3、 对 Spring形成一个整体的认识,为之后的深入学习做铺垫。4、 通过对本章内容的学习,可以了解Spring版本升级的规律,从而应用到自己的系统升级版本命名。5、Spring编程思想总结。1.2.内容定位Spring使用经验1-5年 ,希...原创 2020-04-05 23:35:15 · 478 阅读 · 0 评论 -
十五.各设计模式总结与对比
1.各设计模式总结与对比1.1.课程目标1、 简要分析GoF 23种设计模式和设计原则,做整体认知。2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。3、 了解各设计模式之间的关联,解决设计模式混淆的问题。1.2.内容定位1、 掌握设计模式的"道" ,而不只是"术"2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。3、 不要为了用设计模式去生搬...原创 2020-03-29 16:06:06 · 431 阅读 · 1 评论 -
十四、观察者模式与访问者模式详解
21.观察者模式21.1.课程目标1、 掌握观察者模式和访问者模式的应用场景。2、 掌握观察者模式在具体业务场景中的应用。3、 了解访问者模式的双分派。4、 观察者模式和访问者模式的优、缺点。21.2.内容定位1、 有 Swing开发经验的人群更容易理解观察者模式。2、 访问者模式被称为最复杂的设计模式。21.3.观察者模式观 察 者 模 式 ( Observer Patter...原创 2020-03-25 13:45:41 · 1674 阅读 · 0 评论 -
十三、中介者模式与解释器模式详解
19.中介者模式19.1.课程目标1、掌握中介者模式和解释器模式的应用场景。2、了解设计群聊的底层逻辑。3、掌握解析表达式的基本原理。4、理解中介者模式和解释器模式的优缺点。19.2.内容定位适合参与软件框架设计开发的人群。19.3.迭代器模式中介者模式( Mediator Pattern )又称为调解者模式或调停者模式。用一个中介对象封装一系列的对象交互,中介者使各对象不需要显...原创 2020-03-23 20:44:12 · 377 阅读 · 1 评论 -
四、原型模式思维导图
原创 2020-03-22 11:18:10 · 482 阅读 · 0 评论 -
三、单例模式思维导图
原创 2020-03-22 11:13:23 · 247 阅读 · 0 评论 -
二、工厂模式思维导图
原创 2020-03-22 11:12:15 · 1099 阅读 · 0 评论 -
十二、状态模式与备忘录模式详解
十二、状态模式与备忘录模式详解18.状态模式18.1.课程目标1、 掌握状态模式和备忘录模式的应用场景。2、 了解状态机实现订单状态流转控制的过程3、 掌握状态模式和策略模式的区别。4、 掌握状态模式和责任链模式的区别。5、 掌握备忘录模式在落地实战中的压栈管理。18.2.内容定位1、如果参与电商订单业务开发的人群,可以重点关注状态模式。2、如果参与富文本编辑器开发的人群,可以...原创 2020-03-22 00:54:33 · 431 阅读 · 0 评论 -
十一、迭代器模式与命令模式详解
十一、迭代器模式与命令模式详解18.迭代器模式18.1.课程目标1、 了解迭代器模式和命令的应用场景。2、 自己手写迭代器3、 掌握迭代器模式和命令模式在源码中的应用,知其所以然。18.2.内容定位听说过迭代器模式和命令模式,但并不知其所以然的人群。18.3.迭代器模式迭代器模式( Iterator Pattern ) 又称为游标模式(Cursor Pattern), 它提供一种...原创 2020-03-21 20:11:22 · 398 阅读 · 0 评论 -
一、设计模式七大原则思维导图
原创 2020-03-18 02:02:07 · 858 阅读 · 0 评论 -
十、策略模式与责任链模式详解
16.策略模式16.1.课程目标1 、掌握策略摆式和责任链模式的应用场萦;2、通过学习策略模式来消除程序中大量的 if…else… 和 switch 语句;3、掌握策略模式和委质模式的结合使用;4、深刻理解责任链模式和建造者摆式的结合应用。16.2.内容定位1 、已经掌握建造者模式和委质模式的人群。2、希望通过对策略模式的学习,来消除程序中大量的冗余代码和多重条件转移语句的人群。...原创 2020-03-15 20:37:21 · 1501 阅读 · 0 评论 -
白嫖JetBrains全家桶第二波与第三波
白嫖JetBrains全家桶第二波与第三波1.回顾第一波第一波的JetBrains猜谜活动见我另外文章,提醒一下,第一波,第二波,第三波兑奖时间要在中欧时间3月15日之前。因为有许多人将最后一题的code泄露出去了,官方将最后一题的密文修改了。将第一波,第二波,第三波奖品兑换,总共是9个月的免费JetBrains全家桶。2.第一关JetBrains3月11日在推特上发布了第二题Time...原创 2020-03-14 15:12:59 · 1192 阅读 · 0 评论 -
九、委派模式与模板模式详解
14.委派模式14.1.课程目标1 、掌握委派模式, 精简程序逻辑, 提升代码的可读性。2、学会用模板方法模式梳理使用工作中流程标准化的业务场景。14.2.内容定位1 、希望通过对委派模式的学习,让自己写出更加优雅的代码的人群。2、深刻了解模板方法模式的应用场景。14.3.定义委派模式(Delegate Pattern ) 又叫委托模式, 是一种面向对象的设计模式, 允许对象组合实...原创 2020-03-14 10:43:28 · 495 阅读 · 0 评论 -
八、适配器模式与桥接模式详解
11.适配器模式11.1.定义适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。适配器模式的英文翻译是 Adapter Design Pattern。顾名思义,这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。示意图**生活场景:**电源插转换头、手机充电转换头、显示器转接头。你可以创建一个适配器。...原创 2020-03-11 18:06:07 · 448 阅读 · 0 评论 -
如何白嫖3个月的JetBrains全家桶(包括Java神器IDEA)
如何白嫖3个月的JetBrains全家桶(包括Java神器IDEA)1.起源3月10日下午无聊刷部落,刷到这样一条动态。说JetBrains官网搞了谜题,解出来赠送3个月的全家桶订阅。开启福尔摩斯之魂。2.搜索首先取了动态中的"JetBrains Quest"百度,结果答案为0,果然百度太垃圾了。立刻谷歌之,搜索结果第一个是jetbrains官方在推特官方发布的谜题活动。如果大...原创 2020-03-10 22:11:20 · 3127 阅读 · 0 评论 -
七、享元模式与门面模式详解
10.享元模式10.1.课程目标1、掌握享元模式和组合模式的应用场景。2、了解享元模式的内部状态和外部状态。3、掌握组合模式的透明写法和安全写法。4、享元模式和组合模式的的优缺点。10.2.内容定位适合有项目开发经验的人群。10.3.享元模式定义面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高...原创 2020-03-09 02:25:35 · 270 阅读 · 0 评论 -
六、门面模式与装饰器模式详解
8.门面模式8.1.课程目标1、掌握门面模式和装饰器模式的特征和应用场景2、理解装饰器模式和代理模式的根本区别。3、了解门面模式的优、缺点。4、了解装饰器模式的优、缺点。8.2.内容定位1、定位高级课程,不太适合接触业务场景比较单一的人群。2、深刻了解门面模式和装饰器模式的应用场景。8.3.门面模式定义门面模式(Facade Pattern)又叫外观模式,提供了一个统一的接口,...原创 2020-03-07 18:19:46 · 325 阅读 · 0 评论 -
五、代理模式详解
7.代理模式7.1.课程目标1、掌握代理模式的应用场景和实现原理。2、了解静态代理和动态代理的区别。3、了解CGLib和JDK Proxy的根本区别。4、手写实现定义的动态代理。7.2.内容定位都知道 SpringAOP 是用代理模式实现,到底是怎么实现的?我们来一探究竟,并且自己仿真手写还原部分细节。7.3.代理模式定义代理模式(ProxyPattern)是指为其他对象提供一...原创 2020-03-04 11:30:58 · 370 阅读 · 0 评论 -
四、原型模式与建造者模式详解
5.原型模式5.1.课程目标1、掌握原型模式和建造者模式的应用场景2、掌握原型模式的浅克隆和深克隆的写法。3、掌握建造者模式的基本写法。4、了解克隆是如何破坏单例的。5、了解原型模式的优、缺点6、掌握建造者模式和工厂模式的区别。5.2.内容定位1、已了解并掌握工厂模式的人群。2、已了解并掌握单例模式。3、听说过原型模式,但不知道应用场景的人群。5.3.定义原型模式(Pr...原创 2020-03-01 19:53:03 · 1012 阅读 · 0 评论 -
架构师内功心法之设计原则
一.架构师内功心法之设计原则1.为什么要学习软件架构设计原则1.1.课程目标通过对节课内容的学习,了解设计原则的重要性。掌握七大设计原则的具体内容。1.2.内容定位学习设计原则,学习设计模式的基础。在实际开发过程中,并不是一定要求所有代码都遵循设计原则,我们要考虑人力、时间、成本、质量,不是刻意追求完美,要在适当的场景遵循设计原则,体现的是一种平衡取舍,帮助我们设计出更加...原创 2020-02-23 13:14:56 · 1004 阅读 · 1 评论 -
图解Java设计模式
1.设计模式七大原则单一职责原则接口隔离原则依赖倒转(倒置)原则里氏替换原则开闭原则迪米特法则合成复用原则1.1.单一职责原则1.1.1.基本介绍一个类只应负责一项职责。1.1.2.应用实例package com.atguigu.principle.singleresponsibility;public class SingleResponsibility3 {publ...原创 2019-12-28 10:37:01 · 1264 阅读 · 1 评论