- 博客(81)
- 收藏
- 关注
原创 华为云服务器部署后,外部无法访问
在华为云部署jenkins+gitlab实现持续集成时,按流程部署一般是没有问题的,但是外部始终无法访问。可能是华为云服务器安全组端口未开放,与服务器本身防火墙无关。在安全组设置端口,以设置开放端口8099为例。
2023-03-01 09:42:58 1387 1
原创 Vue根据不同设备跳转不同路由
其中design为PC端跳转路由,design3为非移动端跳转路由。如何是非PC端设备跳转design3,移动端设备跳转design。
2023-02-01 13:59:44 1027
原创 vue使用ElementUI,自定义Element组件样式,覆盖其原有样式,以el-table为例
【代码】vue使用ElementUI,自定义Element组件样式,覆盖其原有样式,以el-table为例。
2022-08-24 19:33:57 2230
原创 克隆虚拟机Centos7,更改各虚拟机IP地址,导致各虚拟机右上角网络标识不见
克隆虚拟机Centos7,更改各虚拟机IP地址,导致各虚拟机右上角网络标识不见。
2022-08-01 09:42:48 456
原创 数据结构算法——滑动窗口问题(以LeetCode滑动窗口题为例)
1. 滑动窗口滑动窗口算法是在给定特定窗口大小的数组或字符串上执行要求的操作,它的原理与网络传输TCP协议中的滑动窗口协议(Sliding Window Protocol)基本一致。这种技术可以将一部分问题中的嵌套循环转变为一个单循环,因此它可以减少时间复杂度。滑动窗口主要应用在数组和字符串上。例如,设定滑动窗口(window)大小为 3,当滑动窗口每次划过数组时,计算当前滑动窗口中元素的和,可以得到一组结果 res。因为滑.........
2022-06-05 13:02:18 4086
原创 数据结构算法——字符串问题(以LeetCode字符串题为例)
1. 字符串字符串(String)是由零个或多个字符组成的有限序列,它是编程语言中表示文本的数据类型。字符串与数组有很多相似之处,比如可以使用索引(下标)来得到一个字符。字符串,一般可以认为就是一个字符数组(char array)。不过字符串有其鲜明的特点,它的结构相对简单,但规模可能是非常庞大的。在编程语言中,字符串往往由特定字符集内有限的字符组合而成。在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。2....
2022-05-30 11:22:53 571
原创 数据结构算法——二分查找问题(以LeetCode二分查找题为例)
一. 二分查找的定义二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法,前提是数据结构必须先排好序。二分查找采用的是一种分治策略,它充分利用了元素间的次序关系,可在最坏的情况下用O(log n)完成搜索任务。基本思想:假设数组元素呈升序排列,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止;如 果x<a[n/2],则我们只要在a的左半部分继续搜索x;如果x&...
2022-05-29 18:18:37 2366
原创 数据结构算法——数组问题(以LeetCode数组题为例)
一. 数组的定义在程序设计中,为了处理方便,常常需要把具有相同类型的若干元素按有序的形式组织起来,这种形式就是数组(Array)。数组是程序中最常见、也是最基本的数据结构。对数组进行处理需要注意以下特点:首先,数组会利用索引来记录每个元素在数组中的位置,且在大多数编程语言中,索引是从 0 算起的。我们可以根据数组中的索引,快速访问数组中的元素。事实上,这里的索引其实就是内存地址。其次,作为线性表的实现方式之一,数组中的元素在...
2022-05-29 13:24:57 639
原创 设计模式——职责链模式(附代码示例)
一. 传统方式以学校采购审批为例,不同金额的采购需要不同人员的审批1. 传统方式解决收到请求后,通过不同的金额调用对应的审批方法2. 传统方式存在问题Client会使用到分支判断(比如switch)来对不同的采购请求处理, 这样就存在如下问题:(1)如果各个级别的人员审批金额发生变化,客户端的也需要变化(2)客户端必须明确知道有多少个审批级别和访问这...
2022-05-27 21:32:20 2486 1
原创 设计模式——策略模式(附代码示例)
一. 传统方式以统计不同鸭子信息为例1. 传统方式解决抽象一个Duck类,不同鸭子继承Duck,如果有相同行为就默认继承,有不同行为就重写类图代码实现Duck抽象类public abstract class Duck { public Duck() { } public abstract void display(); public void quack(){ System...
2022-05-27 20:44:08 2142
原创 设计模式——状态模式(附代码示例)
一. 状态模式1. 概念状态模式(State Pattern) 主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换。当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类2. 状态模式原理类图Context:环境角色,用于维护State实例,这个实例定义当前状态State:抽象状态角色,定义一个接口封装与Context的一个特点接口相关行为Con...
2022-05-27 19:46:22 1435
原创 设计模式——解释器模式(附代码示例)
一. 传统方式以实现四则运算为例,如先输入表达式a+b-c,再输入a,b,c的值,最后求结果1. 传统方式解决编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果2. 传统方式问题分析如果加入新的运算符,不利于扩展,另外让一个方法来解析会造成程序结构混乱,不够清晰。故引出解释器模式。二. 解释器模式1. 概念在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析...
2022-05-27 12:51:10 732
原创 git操作(本地拉取,上传远程)
1. 在本地新建一文件夹用来存放项目代码 (eg:xny)2. 进入该文件,右键选择 git bush here,打开命令窗后,输入初始化命令:git init3. 命令行:git remote add origin 后面是项目所在远程仓库地址(不是远程分支名称,而是仓库地址)4. 拉取远程分支到本地:git fetch origin dev(dev是你要拉取的远程分支名称,另外git pull拉取错误所以使用git fetch)5. 在本地创建dev分支并且切换到该分支:git check
2022-05-27 10:04:53 1342
原创 设计模式——备忘录模式(附代码示例)
一. 传统方式以游戏角色状态回复(回蓝、回血)为例1. 传统方式解决一个对象对应一个保存对象状态的对象2. 传统方式存在问题一个对象,就对应一个保存对象状态的对象,这样当我们游戏的对象很多时,不利于管理,开销也很大。传统的方式是简单地做备份,new出另外一个对象出来,再把需要备份的数据放到这个新对象,但这就暴露了对象内部的细节。故引出备忘录模式二. 备忘录模式1. 概念备总录模式(Memento Pattern...
2022-05-26 21:42:15 762 2
原创 设计模式——中介者模式(附代码示例)
一. 传统方式以闹铃响起——咖啡机开始做咖啡——窗帘自动落下——电视机开始播放为例1. 传统方式解决创建各个相关类,且各类中彼此联系,最后直接在Client中按照流程执行各类方法2. 传统方式存在问题当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂。各个电器对象彼此联系,你中有我,我中有你,不利于松耦合。各个电器对象之间所传递的消息(参数),容易混乱。当系统增加一个新的电器对象时,或者执行流程改变时,代码的可维护性、扩展性都不理想。故引出中...
2022-05-26 20:45:56 1268
原创 设计模式——观察者模式(附代码示例)
一. 传统方式以天气预报以公告形式发送给第三方为例1. 代码示例CurrentConditions类,显示当前天气情况public class CurrentConditions { private float temperature; private float pressure; private float humidity; //更新,第三方调用,推送 public void update(float temperature,...
2022-05-26 16:47:36 2472
原创 设计模式——迭代器模式(附代码示例)
一. 传统方式以学校院系展示为例,实现在一个页面展示学校的院系组成,一个学校有多个学院,一个学院有多个系。传统方式实现类图如下: 传统方式将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的。实际上我们的要求是在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,而每个院对于系的存储方式各不相同(如数组、集合等),因此这种...
2022-05-25 22:15:06 4838 1
原创 设计模式——访问者模式(附代码示例)
一. 传统模式以观众(分为男女两类)对歌手评价(分为成功、失败两类)为例1. 传统方式解决通过继承的方式实现男女分类,并直接在类中实现评价方法2. 传统方式问题分析如果系统比较小,还是可以的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了ocp原则,不利于维护; 且扩展性不好,比如增加了新的人员类型,或者管理方法。故引出访问者模式。二. 访问者模式1. 概念访问者模式(Visitor Pattern),封装一些作用于某种数据...
2022-05-25 20:38:14 1026
原创 设计模式——命令模式(附代码示例)
一. 命令模式1. 概念命令模式(Command Patterm),在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计。命名模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。在命名模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求(即命名),同时命令模式也支持可撤销的操作。...
2022-05-25 11:17:21 1518
原创 设计模式——模板方法模式(附代码示例)
一. 概念模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。简单说,模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。这种类型的设计模式属于行为型模式。二. 原理类图 Abstra...
2022-05-23 22:24:37 1320
原创 设计模式——代理模式(附代码示例)
一. 代理模式1. 概念代理模式为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。2. 代理模式类图 Client不直接调用TargetObject中的方法,而是通过ProxyObject调用TargetObject中的方法3. 代理模式的形式代理模式有不同的...
2022-05-23 20:34:54 3776
转载 设计模式——享元模式(附代码示例)
一. 传统方式以网站项目展示为例,有的要求以新闻形式发布,有的要求以博客形式发布,有的要求以微信公众号形式发布1. 传统方式解决给每个网站租用一个空间,直接复制粘贴一份,然后根据客户不同要求,进行定制修改2. 传统方式存在问题需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站的实例对象很多,造成服务器的资源浪费3. 解决思路整合到一个网站中,共享其相关的代码和数据,对于硬...
2022-05-23 11:14:16 2100
原创 设计模式——外观模式(附代码示例)
一. 传统方式以组建家庭影院为例,DVD播放器、投影仪、自动屏幕环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: 直接用遥控器,统筹各设备开关;开爆米花机;放下屏幕;开投影仪;开音响;升DVD,选dvd;去拿爆米花;调暗灯光;观影结束后,关闭各种设备。1. 传统方式解决 创建相关对象,在Client端调用创建的各个对象的一系统方法,Client端直接依赖各个对象。2. 传统方式存在问题在Client端,创建各个子系统的对象,并直接...
2022-05-22 20:36:02 433
原创 设计模式——组合模式(附代码示例)
一. 传统方式以学校院系展示为例,实现在一个页面展示学校的院系组成,一个学校有多个学院,一个学院有多个系。传统方式实现类图如下: 传统方式将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的。实际上我们的要求是在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,因此这种方案, 不能很好实现的管理的操作,比如对学院、系的添加...
2022-05-22 18:57:52 3916
原创 设计模式——装饰者模式(附代码示例)
一. 装饰者模式1. 概念装饰者模式,动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)。2. 原理以咖啡订单为例,要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便。客户可以点单品咖啡,也可以单品咖啡+调料组合单品咖啡: Espresso(意大利)、LongBlack(美式)、Decaf(无因)调料: Milk、Soy(豆浆)、Chocolate...
2022-05-22 16:15:54 670
原创 设计模式——桥接模式(附代码示例)
一. 传统方法以对不同类型(折叠式、直立式、旋转式)不同品牌(华为、小米、vivo)的手机操作为例1. 类图2. 传统方式问题分析扩展性问题(类爆炸),如果我们再增加手机的样式(滑盖式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本。故引出桥接模式进行解决二. 桥接模式1. 概念桥接模式(B...
2022-05-22 11:45:05 1692
原创 设计模式——适配器模式(附代码示例)
一. 适配器模式1. 概念适配器模式(Adapter Rattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。类比,U盘插个转换头可用与手机type-c接口相连接;或者是使用多功能转换插头,实现三孔插头与两孔插座相连。2. 工作原理适配器模式将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容。从用户的角度看不到被适配者,是解耦的;用户调用适...
2022-05-22 10:41:28 2764
原创 设计模式——建造者模式(附代码示例)
一. 传统方式以建房子为例1. 代码示例抽象类AbstractHouse,定义抽象的建房流程public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //砌墙 public abstract void buildWalls(); //封顶 public abstract void roofed(); public vo...
2022-05-21 17:15:25 859
原创 设计模式——原型模式(附代码示例)
一. 传统方法以克隆羊为例1. 代码示例 Sheep类,表示定义羊的模板public class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, String color) { this.name = name; this.age = age; ...
2022-05-21 12:47:11 1424 1
原创 设计模式——工厂模式(附代码示例)
一. 传统方法以订购披萨为例1. 代码示例将Pizza类做成抽象类,定义准备、烘烤、切割、打包等方法,其中因不同披萨原材料不一样,因此准备的方法做成抽象方法public abstract class Pizza { protected String name; //准备原材料,不同披萨不一样,因此做成抽象方法 public abstract void prepare(); public void setName(String name){ ...
2022-05-20 22:41:07 3875 2
原创 设计模式——单例模式八种方式实现与分析(附代码示例)
一. 概念所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。单例模式保证了系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用new单例模式使用的场景: 需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量...
2022-05-20 18:16:49 2289
原创 设计模式——七大原则(附代码示例)
一. 设计模式概念对接口编程而不是对实现编程;优先使用对象组合而不是继承二. 设计模式总览1. 创建型模式(Creational Patterns):(5)单例(Singleton)模式原型(Prototype)模式工厂方法(FactoryMethod)模式抽象工厂(AbstractFactory)模式建造者(Builder)模式2. 结构型模式(Structural Patterns): ...
2022-05-19 15:25:18 2829
原创 路由服务质量问题
一. QoS概述服务质量(Quality of Service, QoS )是网络传输业务流时,业务流对网络服务的需求集合,其中业务流是指与特定QoS相关的从源到目的地的分组流。QoS是应用业务对网络传输服务所提出的一组可度量的要求,主要包括带宽、端到端延迟、分组丢失率、抖动和花费的代价等。网络传输相应的数据业务时,必须满足这组要求。QoS需求可以通过一个限制集来描述,其中的限制可以是链路限制、路径限制或树限制。链路限制定义了从源到目的地的每一条链...
2022-05-15 13:36:49 914
原创 Docker本地镜像推送到私有库
Docker Registry是官方提供的工具,可以用于构建私有镜像仓库1. 下载镜像Docker Registrydocker pull registy2. 运行私有库Registry,相当于本地有个私有Docker hubdocker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry默认情况,仓库被创建在容器的/var/lib/registry...
2022-05-13 12:00:24 9106
原创 Docker本地镜像上传到阿里云并拉取验证
1. 登录阿里云,在控制台找到容器镜像服务2. 创建个人实例3. 创建命名空间 4. 创建镜像仓库,选择本地仓库
2022-05-13 10:44:11 401
原创 Docker镜像commit操作(以ubuntu安装vim为例)
docker commit提交容器副本使之成为一个新的镜像演示ubuntu安装vim1. 从仓库中拉取ubuntu模板docker pull ubuntu2. 以交互模式启动,在容器内执行/bin/bash命令docker run -it ubuntu /bin/bash3. 测试ubuntu模板,有ls指令,但是无vim指令ls vim a.txt4. 更新我们的包管理工具apt-get update5. 安装vimapt-get -y.
2022-05-12 22:03:32 1019
原创 Docker介绍、安装、常用指令
一. 概述1. 背景传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。Docker的出现使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的...
2022-05-12 12:47:52 2008 1
原创 无锁->ReentrantLock->ReentrantReadWriteLock->StampedLock讲解
一. 概述锁的演变过程无锁->独占锁->读写锁->邮戳锁1. 无锁:多线程抢占,数据混乱,无序2. ReentrantLock、synchronized:有序,数据一致性,每次只能来一个线程,不管什么操作缺点:读操作效率低3. ReentrantReadWriteLock:读写互斥,读读可以共享,提升大面积的共享性能,同时多人读。缺点:1. 锁饥饿问题,写线程获得不到锁 2. 读的过程中,如果没有释放,写线程不可以获得...
2022-05-08 16:17:18 721
原创 AbstractQueuedSynchronizer——AQS
1. 定义AbstractQueuedSynchronizer简称为AQS ,字面意思是抽象的队列同步器。技术解释是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态。2. 为何称AQS为JUC体系的基石?与AQS相关的包括Semaphore信号量、CyelicBarier、ReentrantReadWriteLock、CountDownLatch、Re...
2022-05-08 10:48:10 541
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人