自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

颖墨的博客

交流学习

  • 博客(58)
  • 收藏
  • 关注

原创 服务器基本环境搭建资源汇总

配置Nacos准备工作第一:确保你电脑已配置JAVA_HOME环境变量(Nacos启动时需要),例如:第二:确保你的MySQL版本为5.7以上(MariaDB10.5以上),例如下载与安装第一步:Nacos下载,可在浏览器直接输入如下地址:https://github.com/alibaba/nacos/releases第二步:选择对应版本,直接下载,如图所示:第三步:解压Nacos(最好不要解压到中文目录下),其目录结构如下:第四步:nacos默认配置太高,开启nacos服务后没。

2023-09-20 11:50:53 87

原创 docker安装常用的服务脚本汇总

【代码】docker安装常用的服务脚本汇总。

2023-09-20 11:47:01 430

原创 CAS单点登入

背景企业开始进行信息化建设,搭建了一套业务系统A。通过用户名密码就可以登录。 随着业务的发展,又搭建了业务系统B、业务系统C、业务系统D……,每套系统都需要登录、输入各自的用户名密码,记忆成本高。 通过打通数据层,共用底层用户数据,统一不同业务系统的鉴权机制,实现了登录所有系统用一套用户名密码即可。 但是每套系统都得登录一遍,操作起来还是麻烦,可以不可以只登录一次就行了? SSO单点登录应运而生,所有新技术的变革都是解决某项用户需求痛点。CAS和SSO单点登录(Single Si...

2020-09-08 17:44:37 302

原创 Redis常用技术和基本概念

NOSQL简介非关系型数据库,数据与数据之间没有关联关系。就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题分类键值(key-value)存储数据库 Redis 列存储数据库:键仍然存在,但是指向了多个列,HBase (eg:博客平台(标签和文章)) 文档型数据库 MongoDb (eg:淘宝商品的评价) 图形数据库 Neo4j (eg:好友列表)四种NoSQL数据库对比使用场景据模型比较简单 需要灵活更强的IT系统 对数据库性能要求比较高 不.

2020-05-14 06:03:17 604

原创 后端程序员必须要懂的Tomcat服务器

目录结构Tomcat是一款纯绿色安装的软件,从官网下载下来以后解压即可使用,期目录结构如下图所示bin: tomcat服务器的可执行文件和脚本文件 conf: tomcat的配置信息文件 lib: tomcat的依赖jar包 log: tomcat的日志信息 temp: tomcat的临时文件 webapps:存放web应用的目录,web应用会部署到该目录下 work: 存放jsp编译后产生的字节码文件当服务器上没有部署任何项目时,启动服务器默认访问的是webapps下的...

2020-05-08 21:01:38 1395

原创 关于JavaWeb的一些必须烂熟于心的基础知识

背景全民编程的时代孕育了一大批野生程序员,他们来自土木,来自机械,来自电气,来自全国各地,来自五湖四海,总之不管是出于这样还是那样的原因,最终都走上了开发的道路,成为了一名野生程序员。没有经过计算机专业课程的洗礼,一个人在这条路上默默摸索,迷茫又坚定,执拗又执着。好了不扯了,写此篇的目的是为了献给那些非计算机专业,刚接触JavaEE的孩子,希望可以帮你们抹掉脑子里的一些小问号。问题清单...

2020-05-08 17:24:13 296

原创 JVM调优原理和垃圾回收机制

前言对JVM有了一定的认识以后,我们自然而然的就会知道两个异常,一个叫栈溢出(StackOverFlowError),一个叫堆溢出(OutOfMemory)或者说是内存泄漏;在Java内存模型中,栈是每一个线程私有的,随着线程的创建而创建,当栈的内存不足时,就会导致栈溢出的情况;而堆溢出则是指JVM在无法为对象申请到足够的内存空间时而抛出的异常;当我们的程序中出现这两个问题时,此时我们就需要对...

2020-05-03 17:25:22 572 1

原创 JVM的类加载机制和内存模型

虚拟机所谓虚拟机(Virtual Machine)就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上虚拟机可以分为系统虚拟机和程序虚拟机。系统虚拟机:玩Linux时装的VMware Fusion就属于系统虚拟机,它完全是对物理计算机的仿真,提供了一个可运行完整操作系统 (Linux)的软件平台程序虚拟机:典型代表就是Ja...

2020-05-03 04:51:37 348

原创 后端程序员必须要懂的MySQL数据库

整体结构图和其它数据库相比,MySQL 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。从架构图上看我们可以把MySQL大致分成4层,分别是连接层,服务层,引擎层和存储层连接层:最上层是一些客户端和连接服务,包含本...

2020-05-01 22:00:57 1713

原创 Linux那点事之搭建JavaEE环境

rpm 包的管理一种用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中。它生成具有.RPM 扩展名的文件。RPM 是 RedHat Package Manager(RedHat 软件包管理工具)的缩写,类似 windows 的 setup.exe,这一文件格式名称虽然打上了 RedHat 的标志,但理念是通用的,可以算是公认的行业标准了。相关指令查询rpm -q...

2020-04-29 04:54:09 182

原创 Linux那点事之进程管理

进程的基本介绍1)在 LINUX 中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个 ID 号。2)每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如 www 服务器。3)每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操 作,但由于屏幕上无法看到的进程,通常使用后台方式执行。4)一...

2020-04-28 01:44:08 162

原创 Linux那点事之常用指令

运行级别Linux系统总共有7个运行级别,其中3和5是最常用的,其中1这个级别经常用来解决找回root密码或者应对0级别的恶作剧切换指令级别第一种方式直接使用init指令init [运行级别]第二种方式就是直接编辑配置文件,并将默认级别的数字改为想要的级别,不多赘述开机,重启,用户注销相关指令shutdown -h now : 表示立即关机shutdown -...

2020-04-26 18:47:44 154

原创 Linux那点事之用户管理

基本介绍Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。Linux 的用户需要至少要属于一个组。添加用户useradd [用户名]上述这种方式创建的用户他的家目录与用户名同名,如果想指定用户家目录useradd -d /home/[目录名] [用户名]为用户指定密码p...

2020-04-26 15:01:31 135

原创 Linux那点事之网络配置

虚拟机网络的三种连接方式的说明

2020-04-26 01:00:34 137

原创 职责链模式

定义职责链模式(Chain of Responsibility Pattern),又叫责任链模式,为请求创建了一个接收者对象的链。这种模式对请求的发送者和接收者进行解耦。职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。这种类型的设计模式属于行为型模式。职责链模式的注意事项和细节将请求和处理分开,实现解耦,......

2020-04-18 18:41:14 88

原创 策略模式

定义策略模式(StrategyPattern)中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。这算法体现了几个设计原则,第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体 类(定义了策略接口);第三、多用组合/聚合,少用继承(客户通过组合方式使用策略)。策略模式的注意事项和细节策略模式的关键是:分析项目中变化部...

2020-04-18 17:17:57 97

原创 状态模式

定义状态模式(StatePattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换。状态模式的注意事项和细节代码有很强的可读性。状态模式将每个状态的行为封装到对应的一个类中方便维护。将容易产生问题的if-else语句删除了,如果把每个状态的行为都放到一个类中,每次调用方法时都要判断当前是什么状态,不但会产出很多 ......

2020-04-18 16:41:30 122 1

原创 备忘录模式

定义备忘录模式(MementoPattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这 个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式属于行为型模式。实现public class Memento { int attack; int defend; public Memento(int attack, int defe...

2020-04-16 23:37:00 52 1

原创 观察者模式

定义观察者模式主要是针对对象之间多对一依赖的一种设计方案,被依赖的对象为 Subject,依赖的对象为 Observer,Subject 通知 Observer 变化。实现import java.util.ArrayList;import java.util.List;/** * 观察者模式 */public interface Observer { void u...

2020-04-16 15:04:18 112

原创 迭代器模式

定义迭代器模式(IteratorPattern)是常用的设计模式,属于行为型模式,如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部...

2020-04-16 01:44:43 54 1

原创 访问者模式

定义访问者模式(VisitorPattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。即主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题。访问者模式的基本工作原理是在被访问的类里面加一个对外提供接待访问者的接口。访问者模式主要应用场景是当需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免让这...

2020-04-15 22:56:35 108

原创 命令模式

定义命令模式(CommandPattern):在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个, 我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,命令模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。在命令模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的...

2020-04-15 16:31:04 49 1

原创 模版模式

定义模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),是在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。换句话说,模板方法模式其实是定义了一个操作中的算法的骨架,而每一个步骤的实现根据子类的实际情况该抽象抽象该重写重写,这样满足了所有子类在实现自己需求的前提下都遵循了一套...

2020-04-15 12:29:50 120

原创 代理模式

定义代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处 是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK 代理、接口代理)和 Cglib 代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。静态代理静态代理在使用时,需要...

2020-04-15 03:13:22 120

原创 享元模式

定义享元模式(FlyweightPattern)也叫蝇量模式,该模式通过共享对象可以有效解决需要大量创建重复对象的问题。常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,而不是重新创建,如果没有我们需要的,则创建一个。享元模式很好地解决了重复对象的内存浪费问题从而提高效率。享元模式经典的应用场景就是池技术了,String...

2020-04-12 23:32:06 34

原创 外观模式

定义外观模式(Facade),也叫过程模式;外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了 一个高层接口,这个接口使得这一子系统更加容易使用,而且也起到了屏蔽内部子系统的细节的作用,使得调用端只需跟这个接口发生交互,而无需关心这个子系统的内部细节。外观模式的注意事项和细节外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性外观模式对客户端与子系...

2020-04-12 18:57:17 88

原创 组合模式

定义组合模式(CompositePattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层次关系。这种类型的设计模式属于结构型模式。组合模式方便创建出复杂的层次结构。客户端不用理会组合里面的组成细节,容易添加节点或者叶子从而创建出复杂的树形结构组合模式的注意事项和细节需要遍历组织机构,或者处理的对象具有树形结构时, 非常适合使用组合模式....

2020-04-12 16:59:17 113

原创 装饰者模式

定义动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了 开闭原则(ocp)。属于结构型的设计模式。实现/** * 装饰者模式 */public class Decorator extends Drink { Drink drink; public Decorator(Drink drink) { this.d...

2020-04-12 14:25:26 59

原创 桥接模式

定义桥接模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的 功能扩展,属于结构型设计模式的一种作用和应用场景桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。对于那些不希望使用继承或多层次继承导致...

2020-04-12 11:14:55 100

原创 适配器模式

简介适配器模式(AdapterPattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。属于结构型模式,它主要分为三类,分别是类适配器模式,对象适配器模式和接口适配器模式。这种模式的好处在于从用户的角度是看不到适配器的,是解耦的。演示/** * 适配器模式 * 1.类适配器模式 * 2.对象适配器模式...

2020-04-11 23:09:34 75

原创 建造者模式

简介建造者模式(BuilderPattern)又叫生成器模式,是对象构建模式类别中的一种。它是将复杂对象的建造过程抽象出来,然后通过这个抽象过程的不同实现去构造出不同表现的对象(是同一类对象只是对象的属性不同)。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们, 用户不需要知道内部的具体构建细节。建造者模式的四个角色Product(产品角色...

2020-04-11 03:29:38 83

原创 原型模式

简介原型模式属于创建型模式的一种,它是指通过拷贝自己去创建一些新的对象。拷贝分为深拷贝和浅拷贝,但核心都在于重写clone方法,原型模式相比较于传统的一直new的方式复制效率上有所提升,并且有更好的扩展性。实现浅拷贝:原型中如果有引用类型,拷贝的对象和原型共享该引用类型,即在拷贝的时候在内存中并没有新创建一个引用类型对象深拷贝:原型和拷贝的对象不共享引用类型import ja...

2020-04-11 01:28:35 55 1

原创 工厂模式

概况工厂模式是创建型模式的一种,主要遵循依赖倒转原则,强调的是依赖于抽象类或者实现接口的方式去编码,在创建对象的时候,提倡将实例化的操作封装在一个工厂的方法中,而不是直接使用new关键字。工厂模式有三种,分别是简单工厂模式,工厂方法模式和抽象工厂模式。这种模式的意义主要在于解耦,以便于后期代码的维护和扩展简单工厂模式简单工厂模式的核心思想是将实例化的逻辑封装在一个类里,封装在一个类里的...

2020-04-09 23:13:39 92

原创 单例模式

概念

2020-04-09 01:31:33 80

原创 图结构

定义用来表示多对多的关系的数据结构称之为图,如下图所示图1顶点:每一个点叫做顶点边:每一条边叫做边邻接:通过一条边连接的两个点叫做邻接关系,比如V1和V2是邻接的,V2和V4不是邻接的路径:V1V3V4表示以V1为出发点到V4的路径有向图和无向图:边带箭头的叫有向图,不带箭头的叫无向图,有向和无向影响路径带权图:每一条边如果带一个有意义的值的话就叫做带权图实现...

2020-04-07 01:48:01 902

原创 哈希表

定义通过键值对存储数据的方式称之为哈希表,也叫散列表散列函数设计散列表的函数称之为散列函数,散列函数应该遵循这些原则:计算简单,分布均匀设计方法直接定址法:把值作为地址直接存,如1就存在数组下标为1的地方数据分析法:对数据进行分析后定制一种规则进行存储平方取中法:每个值取平方,中间位作为数组的下标进行存储取余法:余数作为数组的下标进行存储随机数法:取随机数作为数...

2020-04-07 00:06:29 97

原创 AVL树

定义按照二叉排序树的定义,我们在创建一棵二叉排序树时很有可能会得到一棵奇怪的树,比如一棵没有左子树的二叉排序树,此时二叉排序树在查找方面或得的优势几乎荡然无存。于是为了解决这个问题,我们引进了AVL树这样的一种结构,AVL树要求左子树和右子树的高度差绝对值不超过1.也叫平衡二叉树。构建平衡二叉树 单旋转创建 双旋转创建...

2020-04-06 01:22:31 60

原创 二叉排序树

定义数据的两种存储结构其优缺点明显,为了更好的结合这两种方式的优势,即我们希望有一种数据结构可以在增删方便的同时查找也不那么费力,于是便有了二叉排序树。二叉排序树的特点是对于一个二叉树的所有非叶子节点,其左子节点比当前节点值小,右子节点比当前节点大。简称BST(Binary Sort Tree),又称二叉查找树或者二叉搜索树。实现/** * 二叉排序树 */public cla...

2020-04-05 15:57:39 172

原创 赫夫曼树

定义叶节点的带权路径:到达叶节点的节点个数与该节点的权的乘积称之为叶节点的带权路径树的带权路径长度(wpl):二叉树的所有叶节点的带权路径之和称之为树的带权路径长度,简称为wpl一棵树在叶节点都确定的情况下可以有多种结构,我们把这里面wpl最小的一种树结构称之为最优二叉树,也叫做赫夫曼树。代码实现/** * 赫夫曼树 */public class HuffmanTree...

2020-04-02 17:17:48 79

原创 二叉树

基础概念

2020-03-28 18:53:19 201

空空如也

空空如也

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

TA关注的人

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