- 博客(141)
- 资源 (20)
- 问答 (1)
- 收藏
- 关注
原创 桥接模式(Bridge Pattern)
将抽象与其实现分离,以便二者可以独立变化。more通过使用桥接模式,可以更好地管理类之间的关系,提高系统的灵活性和可维护性,同时也有利于解决类爆炸的问题。
2024-03-13 10:33:58
1195
原创 适配器模式(Adapter Pattern)
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。more。
2024-03-13 09:13:32
1279
原创 设计模式系列文章-7个创建型模式更新已完结
博客和专题站内所有内容均免费,由于文章前后书写时思路不一致,导致文章结构也不一致。后续会对文章结构进行调整,统一文章结构。在全部设计模式文章初稿更新玩结构,依然会不断补充和更新新的内容,增加更多工作中的实例和开源框架源码实例,新内容的更新会优先更新到。其实从2019年开始就有些一套关于设计模式的系列文章,但是因为种种原因一直搁置到现在。,博客中的内容更新会有一定的延迟。如果要了解更新更全面的设计模式内容请关注我的。24年2月份开始继续更新设计模式系列文章,目前7个创建型模式已完结。
2024-02-26 23:15:45
583
原创 对象池模式-Object Pool Pattern
当对象的创建成本很高并且只在很短的周期内使用,那么对象池模式就很有优势。对象池提供一个对象示例的缓存来跟踪那个对象正在使用,哪个对象是可用的。more对象池其实有点类似于工厂,工厂生产的对象交个客户端后就由客户端来维护其生命周期了。而对象池生产的对象再客户端用完之后还需要还给对象池,对象池中对象的生命周期是由对象池来维护的。对象池的核心操作获取对象:从池中获取一个可用对象,可能会触发对象池的创建动作,创建出一个新的对象。对象归还:在使用完成后归还对象。
2024-02-22 22:43:29
1145
原创 建造者模式-Builder Pattern
建造者模式(Builder Pattern)是一种创建型设计模式,它可以让你构建复杂对象时更加灵活和可控。这种模式的主要目的是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在软件开发中,我们经常会遇到一些复杂的对象,这些对象通常由多个部分组成,而且每个部分的创建和组合可能需要花费大量的时间和精力。为了解决这个问题,我们可以使用建造者模式来简化对象的构建过程。建造者模式的核心思想是将复杂对象的构建过程分解为多个简单的步骤,每个步骤负责创建一个特定的部分。
2024-02-16 22:51:41
1136
原创 原型模式-Prototype Pattern
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。more原型模式就是通过一个以存在的对象来创建另一个。如果对象中存在有字段是对象类型,当这个字段被修改后,会同时影响拷贝和被拷贝对象。这时需要用深拷贝来处理。
2024-02-16 22:48:02
1265
原创 抽象工厂模式-Abstract Factory Pattern
首先我们了解下抽象工厂模式的定义。为创建一组相关或相互依赖的对象提供一个接口, 而且无须指定它们的具体类。这个定义不太容易理解,我们通过UML类图和具体的代码来逐步理解其含义。抽象工厂模式是一种创建型设计模式,它提供一个接口用于创建一系列相关或依赖对象的家族,而不需要指定具体的类。这有助于实现对象的解耦和灵活性。适用于需要创建一系列相关对象的场景。它可以提高系统的可维护性和可扩展性。实现了对象的解耦:客户端使用抽象工厂接口来创建产品对象,而无需关心具体的产品类,从而实现了对象的解耦。
2024-02-14 14:52:29
1183
原创 简单工厂模式-Simple Factory Pattern
简单工厂模式是一种非常常用的设计模式,但是并不属于GoF中的23种设计模式。简单设计模式有很多种实现方式。本文我们就来讨论简单工厂模式的实现方式,以及如何借助Spring实现一个扩展性很好的简单工厂模式。创建对象但是不想客户端暴露对象实例化的逻辑通过通用接口引用新创建的对象more。
2024-02-14 14:48:59
1046
原创 你为什么不喜欢关电脑?我只是想第二天能够快速进入工作状态
不关电脑,就好比我们用虚拟机搭建一套开发环境,虽然还没有搞完,但是今天就先到此为止,然后把虚拟机挂起。这样第二天再用的时候直接启动就行了,已经启动的软件、打开的文档跟挂起时是一样的,我们不需要重新打开,直接就能接着昨天没有搞完的地方继续搞就可以了。所以程序员不喜欢关电脑也是如此,当第二天来到公司,打开电脑,映入眼帘的就是昨天下班时候的画面。而且所有工作用的软件都是打开的,都是跟昨天下班结束时是同步的,光打开各种软件这一项也节省了不少时间。每个人的习惯不同,团队的工作方式也不同,用的软件可能会有所差异。
2024-02-06 22:36:48
448
原创 工厂方法模式(Factory Method Pattern)
工厂方法模式的优点是,我们知道要一个具体的对象,也知道这个对象的类。但是不用关心谁创建了它,创建的过程如何。在上述日志框架中的应用可以看出,多个工厂其实是冲突的。在实际使用时我们只用一个即可。但是这并不是方法工厂模式的要求,方法工厂模式并没有要求多个工厂不能共存,需要结合实际的应用场景来灵活设计、灵活使用。切勿生搬硬套!
2024-02-06 22:08:30
1450
原创 优秀学习网站推荐-第一辑
官网地址:https://roadmap.sh/该网站包含了各个方向、各个语言的开发人员从零开始学习的路线图。下图为Java方向的学习路线图点击对应的模块就可以进入到学习文档或学习视频或公开课,非常的方便。
2024-02-04 22:26:03
1065
原创 Spring Boot 自定义指标
阅读本文需要对一些前置技术有所了解,下面列出的一些前置技术是必须要了解的。在项目中如果希望自定义一些指标用于监控系统的运行情况,那么可以通过本文中介绍的方法来实现自定义监控指标,我们先从一个简单的例子来介绍如何实现自定义监控指标。truncate。
2024-02-02 09:16:26
2342
原创 OpenFeign认证上下文信息的传递
其中网关部分不是本章讨论的范围,网关处理与后续服务的处理类似。这种两种方式都需要在入口处通过Filter将用户信息,放到ThreadLocal中。以便在后续使用。truncate。
2024-01-31 16:58:05
1184
1
原创 Gradle配置SpringBoot多环境打包
Gradle Task实现使用Gradle配置SpringBoot多环境打包,首先要搞清楚Gradle的Task。本文中仅介绍用需要注意的点。具体的可以查看其他博主的文章或者查看官方文档。首先是第一个问题:task中的代码一定是在task执行时运行的吗?来看下面两个任务task t1 { println "t1"}task t2 { println "t2"}无论我们调用 gradle t1 还是 gradle t2 这两个 println 都会打印。如下:这是因为其
2022-02-24 17:02:35
4403
2
原创 使用Spring AOP 记录Spring MVC请求日志
目录前言新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入前言你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的
2021-07-01 18:00:13
976
原创 IDEA中jclasslib插件修改本地化语言为英文的方法
IDEA中的jclasslib插件的语言做了本地化,因此在中国显示的语言为中文。其实显示中文也挺不错,只是在学习字节码时,很多教程上的中文翻译会有些许差异,因此在学习时使用英文语言是最好的。下面介绍设置方法。上面已经说了其实是因为你的本地语言为中文,所以才会显示中文。因此只需要设置JVM的本地语言即可Help > Edit Custom Vm Options… ,在打开的IDEA JVM配置文件中加入如下配置:-Duser.language=en-Duser.region=CN-Du
2021-05-29 18:07:37
2183
2
原创 数据结构与算法--后缀表达式
中缀表达式转后缀表达式中缀表达式转后缀表达式的思路步骤分析。初始化一个栈和一个队列,运算符栈 S1 和存储中间结果的队列 Q1从左至右扫描中缀表达式遇到操作数时放入队列 Q1 中遇到运算符时,比较其与S1栈顶运算符的优先级如果S1为空,或栈顶运算符为左括号 ( ,则直接将此运算符入栈否则,若优先级比栈顶运算符的高,也将运算符压入S1否则,将S1 栈顶的运算符弹出并添加到Q1 中...
2020-04-18 20:57:41
1012
原创 数据结构与算法--分治法、归并排序
分治法分治法的思想是:将原问题分解成若干个规模较小但是与原问题类似的问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。分治法在每层递归时都有三个步骤:分解: 将原问题分解为若干个子问题,这些问题是原问题的规模较小的实例解决: 递归求解子问题,若子问题规模足够小,则直接求解合并: 合并这些子问题的解成原问题的解。归并排序归并排序就是采用分治法的思想。分解: ...
2020-04-16 22:26:03
556
原创 数据结构-栈的应用之中缀表达式的计算
中缀表达式就是我们所熟悉的数学算式。如:3 + 6 - 18 / 2或3 + 3 * ( 26 - 16 / 2 ) / 2 + 2 - 20。我们的目标是要实现一个计算器,来根据中缀表达式计算表达式的值。表达式由数字和+ - * / ()组成。使用两个栈来实现,一个数值栈,一个符号栈。在这里我们假设表达式都是正确的,并且数值与符号之间由空格隔开。在代码中不再判断表达式的格式是否正确。实现思...
2020-04-15 13:08:47
1975
原创 数据结构-栈的使用之行编辑程序
一个简单的行编辑器程序的功能是:接收用户从终端输入的程序或数据,对用户输入的一行数据做处理,#表示退格键,删除#前的一个字符。@表示@符号之前的数据均无效。比如用户输入了 gosd##od实际有效字符是good,当用户输入了pgm@progre#am实际有效的是program。思路分析将一行的字符依次读入栈中,遇到#取出栈顶数据,若遇到@则清空栈。实现import java.util....
2020-04-14 09:59:17
879
1
原创 数据结构-栈的使用之括号匹配校验
假设表达式中允许包含两种括号,圆括号和方括号,其嵌套顺序随意,即[()[]]、[([][])]和[]()[]等为正确格式,[(])或([())等均为不正确格式。要求编写一个程序检验括号输入是否正确。实现思路此题我们使用栈的后进先出的原则来实现,思路如下:如果以]或)开头那么括号肯定是不匹配的。将接收到的字符串拆分成单个字符遍历入栈若当前栈空,则直接入栈若当前栈不为空,则取出栈顶数...
2020-04-13 23:07:54
1115
原创 数据结构-栈及其实现(使用数组和链表两种方式实现)
栈(Stack)是限定仅在表尾进行插入或删除操作的线程表。因此对栈来说表尾端有其特殊含义,称为栈顶(top),相应的表头端称为栈底(bottom)。栈是一种后进先出(last in first out)的线性表,简称LIFO。栈的抽象数据类型定义package com.codestd.study.stack;/** * 栈ADT */public interface Stack&...
2020-04-13 22:10:38
1799
原创 数据结构--关于链表的一些算法问题
单向链表逆序问题注意这里是单向链表,所以只能从头向尾遍历。单向链表的逆序主要有以下两种方式。使用栈的先进后出特性,将链表中的数据放入栈中然后再从栈中取出头插法,如果仅有一个元素,那么链表的逆序就是自己。如果有多个元素,顺序取出元素,然后讲后一个放到前一个的前面。这里我们只讲头插法,头插法的效率是O(n)O(n)O(n),使用栈是O(2n)O(2n)O(2n)。两个算法的时间复杂度只有...
2020-04-13 12:56:44
1027
原创 数据结构--链表
这将会使一篇非常长的文章,请做好战斗准备链表的特点是可以用任意存储单元存储数据元素,它不要求存储单元连续。链表一般分为以下4种:单向链表双向链表单向循环链表双向循环链表下面我们对这几种链表一一介绍。ADT我们先来定义线性表的抽象数据类型。/** * 线性表 * * @author jaune * @since 1.0.0 */public interface...
2020-04-12 00:01:20
380
原创 数据结构--队列的实现(单向链表方式)
什么是链表在阅读本章之前,需要您知道什么是链表?说到链表,那么就需要聊一聊计算机中的存储方式。计算机中的存储方式主要分为两种,一种是顺序存储,一种是非顺序存储。可以扒一扒这篇文章看一看。链表是一种非顺序存储结构,它允许保存的数据在内存中可以不连续。链表有以下4种单向链表:每个节点有一个指针(next)指向下一个节点,最后一个节点指向null双向链表:每个节点有一个指针(next)指向...
2020-04-10 20:47:28
724
原创 数据结构--队列的实现(采用环形数组方式)
在阅读本文之前请先阅读《数据结构–队列的实现(采用数组方式)》 ,本文是这篇文章的延续,如果您没有阅读前文,那么您在阅读本文时可能会一头雾水。原理概述前文提到,使用数组实现队列的一个弊端。那么本文中将介绍如何去处理上文中提到的问题。在解决这个问题之前您需要先清楚模运算(modmodmod),在Java中是%。如下:2mod 3=24mod 3=12 \mod 3 = 2\\4 \mo...
2020-04-10 16:15:19
601
原创 数据结构--队列的实现(采用数组方式)
队列概述队列是一种先进先出的线性表(first in first out,简称FIFO)。它只允许在队列的一段插入数据,另一端取出数据。允许插入数据的一端叫做队尾(rear),允许删除的一段则称为队头(front)。队列无论在实际生活中还是在开发中都是非常常见的。比如我们去银行办理业务的排号系统就是队列。消息中间件也是队列的思想。队列ADT下面给出队列的抽象定义,在后文中我们将以此ADT...
2020-04-09 23:24:00
748
原创 数据结构--稀疏数组
概述稀疏数组也是一种数组,是一种多维数组的数组压缩技术。比如存在一个10×1010 \times 1010×10的数组,但是数组中只有3个元素,如果要存储的话需要占100个位置。因为数组的每个位置的元素都要存储,哪怕是0或者null。012345678900000000000100050000002000000000030300700000400000000005000000000060000...
2020-04-09 18:30:05
289
原创 数据结构--第二章 线性表(线性表的类型定义)
线性表: (linear_list)是最常用且最简单的一种数据结构。简言之一个线性表是n(n≥0n \ge 0n≥0)个数据元素的有限序列。其中nnn为表长,当n=0n=0n=0时,该表为空表。在稍微复杂的线性表中,一个数据元素可以由若干个数据项(item)组成。在这种情况下,常把数据元素称为记录(record),含有大量记录的线性表又称文件。在同一线性表中的元素必定具有相同的特性,即属于同一...
2020-03-20 15:24:11
1145
原创 数据结构 第一章 绪论
基本概念和术语数据:(data)是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素:(Data element)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理,一个数据元素可由若干个数据项 组成,数据项是构成数据元素不可分割的最小单位数据对象: (Data Object)是性质相同的数据元素的集合是数据的一个子集数据结构...
2020-03-17 18:25:11
526
原创 阿里云无法使用SSH免密登录
报错信息:ssh_exchange_identification: read: Connection reset by peer这是因为阿里云防火墙限制了ssh免密登录的访问,需要将发起ssh请求的IP添加到阿里云白名单中。在“产品与服务”中找到“安全(云盾)”–> “云安全中心(态势感知)”选择“设置” --> “安全管控”–>“配置”。进入白名单配置页面。点击“添...
2019-11-28 10:34:09
870
原创 常用Linux命令(持续更新)
服务# 服务启动、停止、重启service [service_name] start/stop/restart# 设置服务自启动chkconfig [service_name] onchkconfig [service_name] off[root@localhost springboot]# chkconfig --list注意:该输出结果只显示 SysV 服务,并不包含原生...
2019-05-31 11:04:13
467
原创 Spring AMPQ自定义线程池
在项目中遇到了一个棘手的问题。当多个消费者同时执行任务的时候出现了资源争用的问题。日志如下19-03-19 13:00:17.470 [SimpleAsyncTaskExecutor-1] INFO c.w.m.h.AbstractMessageHandler - 开始验证消息:f3eaa048d8984c2aa69b52a8cdece1e919-03-19 13:00:17.470 [Si...
2019-03-19 17:46:12
806
原创 设计原则之-接口隔离原则(Interface Segregation Principle, ISP)
定义Clients should not be forced to depend upon interfaces that they don’t use.客户端不应该依赖那些它不需要的接口核心思想记得几年前有一位很厉害的前辈说过:软件设计是什么,就是“分离关注点,消除重复”。这句话一直影响这我,而我做软件设计也是朝着这两个方向努力。而接口隔离原则最核心的就是拆分,即分离关注点。实例...
2019-03-18 16:52:13
745
1
原创 设计原则之-依赖倒置原则(Dependency Inversion Principle, DIP)
定义High-level modules should not depend on low-level modules. Both should depend on abstractions.Abstractions should not depend on details. Details should depend on abstractions.高层模块不应该依赖于低层模块,两者...
2019-03-18 16:51:21
544
1
原创 设计原则之-里氏替换原则(Liskov‘s Substitution Principle,LSP)
定义里氏替换原则是Barbara Liskov1与1988年提出来的。原文是:What is wanted here is something like the following substitution property: If for each object of type S there is an object of type T such that for all program...
2019-03-18 16:50:21
456
1
原创 设计原则之-开闭原则(Open Close Principle, OCP)
定义Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。核心思想开闭原则的核心思想就是抽象。开闭原则的主要目的就是为了让我们在不修改源码的情况下来扩展系统的功能。...
2019-03-18 16:48:57
480
原创 设计原则之--单一职责原则(Single Responsibility Principle, SRP)
1、核心思想定义A class should have only one reason to change. ( 就一个类而言,应该仅有一个引起它变化的原因)每一个职责都是变化的一个轴线(an axis of change)。当需求变化时,该变化会反映为类的职责变化。如果一个类承担了多于一个的职责,那么引起它变化的原因就会有多个。如果一个类承担的职责过多,就等于把这些职责耦合在了一起...
2019-02-25 17:17:38
506
原创 设计模式之单例模式--懒汉模式与饿汉模式(2)
上一章讲了单例模式的基本实现方式,但是在多线程环境下,这种方式是存在严重的问题的。所以本章我们就来解决多线程环境的问题。懒汉模式利用方法锁实现一种方式是在获取实例的方法上加锁// 代码清单1public class LazyInstantiationConfigUtils { private static Logger logger = LoggerFactory.getLo...
2019-02-22 16:10:39
235
原创 设计模式之单例模式--简单单例模式(1)
使用场景:需要在系统中确保类只有一个实例,一般这种类的创建都会比较占用系统资源。比如配置文件初始化,将配置文件中的数据读取到类中,通常需要耗费一定的系统资源,而且配置文件中的内容一般都是不变的,修改完配置文件一般都会要求重启系统。所以这种类最适合使用单例模式简单单例模式实现/** * 简单的单例模式 * * @author 大扑棱蛾子 * @since 1.0.0 */pu...
2019-02-22 16:09:40
218
Linear Algebra with Applications 10th
2024-02-06
Calculus with CalcChat and CalcView,11ed
2019-01-16
Precalculus with CalcChat and CalcView,10ed
2019-01-16
区块链 文字版 2.0 谭磊 陈刚
2018-06-02
数学女孩-结城浩
2018-05-30
具体数学 第二版[中文高清完整版带书签]
2018-01-22
SpringSecurity源码
2014-05-29
Tomcat多次热部署后引起内存溢出的问题
2015-04-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人