自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 问答 (2)
  • 收藏
  • 关注

原创 [java] B站 avid bvid 转换算法

package com.learn.bilibili.idconv;public class IDConvUtil { /** * 假定: * avid为数字(例如数据库主键id),bvid为 可与avid相互转换的 数字字母组成的12位的id. * bvid固定格式:BV1__4_1_7__ * 一、通过将avid数字,填充到bvid空位上。实现 avid -> bvid 的编码。 * 二、通过将bvid对应位之上的字符,按相反顺序,

2022-04-15 17:11:56 2006

原创 链表 Linked List (Josephus 问题)

链表 Linked List文章目录链表 Linked List一、介绍二、单链表1.需求:Node节点:SingleLinkedList:Test:二、双向链表BookNode:DaulLinkedList:Test:三、环形链表解决约瑟夫问题:1.问题描述2.使用构建单向链表实现BoyNode:CircleSingleLinkedList:3.使用LinkedList 实现 并测试:一、介绍链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。特点:

2022-04-07 17:45:50 821

原创 栈 Stack 及 用栈实现简单计算器

栈 Stackgitee: https://gitee.com/chen-hongbao/data-structure-and-algorithms文章目录栈 Stack一、介绍:二、栈的实现1.使用数组实现栈:2.使用栈实现简单计算机栈:calculate:测试:一、介绍:栈是限制插入和删除只能在一个位置操作的线性数据结构。先进后出。压栈/入栈:push出栈/弹栈:pop二、栈的实现栈实现由于栈是一个表,因此任何实现表的方法都可以用来实现栈。主要有两种方式,链表实现和数组实现。

2022-04-06 17:33:45 2136

原创 kubernetes

k8s**第三部分:核心技术****五、命令行工具kubectl:****1.kubectl 概述****2.命令语法****3、kubectl 子命令使用分类****yaml文件****1、语法格式:标记语言,****2、完整yaml文件 组成部分**示例:**3、如何快速生成yaml文件****第一种 使用kubectl create命令生成yaml文件。****第二种 资源已经部署过,使用kubectl get命令到处yaml文件。****六、pod****1、pod基本概念****2、pod存在的意

2022-01-14 16:35:04 1693

原创 Kubernetes概述与安装

k8s集群安装**第一部分:****1 k8s概述****2. k8s特性****2.1 k8s功能****2.2 架构和组件****3.k8s 核心概念****a.Pod****b.controller****c.Service****第二部分:****1.平台规划****2.集群搭建方式:****a.kubeadm 安装****1.安装要求****2.准备环境****3.所有节点安装Docker/kubeadm/kubelet****4. 部署Kubernetes Master****5.加入Kuber

2022-01-14 16:31:21 715 1

原创 Docker

Docker 基础、docker-compose、docker swarm

2021-12-08 18:01:44 1593

原创 设计模式的个人记忆方法

设计模式的个人记忆方法设计模式的三种类型共23种:创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式结构性模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式行为型模式:模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式、策略模式、责任链模式(职责链模式)记忆方法:(个人理解,如有其他想法欢迎评论沟通)共23种,创建型、结构型、行为型:5、7、11。(1357911)奇

2021-11-30 15:34:17 397 1

原创 设计模式——职责链模式

设计模式——职责链模式学校OA系统的采购审批项目:需求是采购员采购教学器材如果金额 小于等于5000, 由教学主任审批 (0<=x<=5000)如果金额 小于等于10000, 由院长审批 (5000<x<=10000)如果金额 小于等于30000, 由副校长审批 (10000<x<=30000)如果金额 超过30000以上,有校长审批 ( 30000<x)请设计程序完成采购审批项目传统方案解决OA系统审批问题分析传统方式是

2021-11-29 14:22:30 89

原创 设计模式——策略模式

设计模式——策略模式编写鸭子项目,具体要求如下:有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等)显示鸭子的信息传统的方式实现的问题分析和解决方案其它鸭子,都继承了Duck类,所以fly让所有子类都会飞了,这是不正确的上面说的1 的问题,其实是继承带来的问题:对类的局部改动,尤其超类的局部改动,会影响其他部分。会有溢出效应为了改进1问题,我们可以通过覆盖fly 方法来解决 => 覆盖解决问题又来了,如果我们有一个玩具鸭子ToyDu

2021-11-29 11:02:27 229

原创 设计模式——状态模式

设计模式——状态模式问题:状态模式 基本介绍状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类对原理类图的说明-即(状态模式的角色及职责)Context 类为环境角色, 用于维护State实例,这个实例定义当前状态State 是抽象状态角色,定义一个接口封装与Context 的一个特点接口相关行为

2021-11-26 18:00:56 293

原创 设计模式——解释器模式

设计模式——解释器模式四则运算问题通过解释器模式来实现四则运算,如计算a+b-c的值,具体要求先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复在分别输入a ,b, c, d, e 的值传统方案解决四则运算问题分析编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果问题分析:如果加入新的运算符,比如 * / ( 等等,不利于扩展,另外让一个方法来解析会造成程序结构混乱,不够清晰.解决方案:可以考虑使用解释器模式, 即: 表达式

2021-11-26 17:19:44 73

原创 设计模式——备忘录模式

//需要保存状态的原始对象@Datapublic class Originator {private String state;public Memento saveStateMemento(){ return new Memento(state);}//通过备忘录 恢复;public void getStateFromMemento(Memento memento){ state = memento.getState();}}//备忘录对象;负责 保存好记录,

2021-11-26 16:01:45 1992

原创 设计模式——中介者模式

设计模式——中介者模式租房子:加中介:基本介绍​ 1. 中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互中介者模式属于行为型模式,使代码易于维护比如MVC模式,C(Controller控制器)是M(Model模型)和V(View视图)的中介者,在前后端交互时起到了中间人的作用应用案例类图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直

2021-11-26 15:15:41 71

原创 设计模式——观察者模式

设计模式——观察者模式天气预报项目需求,具体要求如下:气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方)。需要设计开放型API,便于其他第三方也能接入气象站获取数据。提供温度、气压和湿度的接口测量数据更新时,要能实时的通知给第三方传统方案://接入方public class CurrentConditions { private float temperature; private float pressure

2021-11-25 17:47:37 195

原创 设计模式——迭代器模式

设计模式——迭代器模式需求:编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:传统的方式的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的遍历的操作解决方案:=> 迭代器模式基本介绍迭代器模式(Iterator Pattern)是常用

2021-11-25 14:59:58 87

原创 设计模式——访问者模式

设计模式——访问者模式1.完成测评系统需求将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等)传统方式的问题分析如果系统比较小,还是ok的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了ocp原则, 不利于维护扩展性不好,比如 增加了 新的人员类型,或者管理方法,都不好做引出我们会使用新的设计模式 – 访问者模式2.访问者模式基本介绍​ 1.访问者模式(Visitor Pattern

2021-11-25 11:21:42 394

原创 设计模式——命令模式

设计模式——命令模式1.智能生活项目需求看一个具体的需求我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作。这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App,分别控制,我们希望只要一个app就可以控制全部智能家电。要实现一个app控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给app调用,这时 就可以考虑使用命令模式。命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来.在我们的

2021-11-17 15:13:07 68

原创 设计模式——模板方法模式

设计模式——模板方法模式豆浆制作问题编写制作豆浆的程序,说明如下:制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎通过添加不同的配料,可以制作出不同口味的豆浆选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的请使用 模板方法模式 完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用,不再使用传统的方案来引出模板方法模式 )模板方法模式基本介绍基本介绍模板方法模式(Template Method

2021-11-16 17:37:12 337

原创 设计模式——代理模式

设计模式——代理模式1.代理模式介绍:代理模式的基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴)。2.静态代码模式的

2021-11-16 16:32:22 56

原创 设计模式——享元模式

设计模式——享元模式1.展示网站项目需求小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同:有客户要求以新闻的形式发布有客户人要求以博客的形式发布有客户希望以微信公众号的形式发布传统方案解决网站展现项目-问题分析需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站的实例对象很多,造成服务器的资源浪费解决思路:整合到一个网站中,共享其相关的代码和数据,对于硬

2021-11-16 11:11:57 96

原创 设计模式——外观模式

设计模式——外观模式1.影院管理项目组建一个家庭影院:DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为:• 直接用遥控器:统筹各设备开关• 开爆米花机• 放下屏幕• 开投影仪• 开音响• 开DVD,选dvd• 去拿爆米花• 调暗灯光• 播放• 观影结束后,关闭各种设备传统方案:传统方式解决影院管理问题分析在ClientTest 的main方法中,创建各个子系统的对象,并直接去调用子系统(对象) 相关方法,会造成调用过程混乱,没

2021-11-15 17:11:02 54

原创 设计模式——组合模式

设计模式——组合模式1.需求案例:传统方案解决学校院系展示存在的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等解决方案:把学校、院、系都看做是组织结构,他们之间没有继承的关系,而是一个树形结构,可以更好的实现管理操作。 => 组合模式2.组合模式基本介绍基本介绍

2021-11-15 15:14:23 69

原创 设计模式——装饰者模式

装饰者模式星巴克咖啡订单项目星巴克咖啡订单项目(咖啡馆):咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用OO的来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖啡+调料组合。传统思路:问题:会发生类爆炸;问题:可以控制类的数量;增删调料种类不方便;装饰者模式

2021-11-15 10:58:17 495

原创 设计模式——桥接模式

桥接模式传统方案解决手机操作问题桥接模式原理图:代码实现://抽象的 品牌接口public interface Brand { void open(); void close(); void call();}//vivo 品牌public class Vivo implements Brand{ @Override public void open() { System.out.println("Vivo手机开机");

2021-11-12 17:06:16 599

原创 设计模式——适配器模式

适配器模式1.适配器模式基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式2. 适配器工作原理工作原理1)适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容2)从用户的角度看不到被适配者,是解耦的3)用户调用适配器转化

2021-11-12 15:21:12 99

原创 Golang package

package calcimport "fmt"var TT = 99//包中的 变量名、函数名、接口、结构体 首字母小写,表示私有,仅能在本包内访问;func Add(x, y int) int { return x + y}func init() { fmt.Println("import 这个包时,自动执行") fmt.Println(TT)//99 全局变量先声明,在执行 init函数}package importdemo2import ( "fmt" bie

2021-11-11 15:01:06 129

原创 Golang 类型断言

package mainimport ( "fmt")//类型断言1//str,ok := a.(string)//类型断言 返回值及是否成功func assign(a interface{}) { fmt.Printf("%T \n", a) str, ok := a.(string) if !ok { fmt.Println("猜错了") } else { fmt.Println("传进来的是个字符串:", str) }}//类型断言2// a.(type)

2021-11-11 14:35:00 72

原创 Golang 接口 interface、空接口 interace{}

package mainimport "fmt"//一、接口//接口可以嵌套type animal interface { mover //嵌套mover接口 eater //嵌套eater接}type mover interface { move()}type eater interface { eat(string)}//同一个结构体可以实现多个接口type cat struct { name string feet int8}func (c *cat)

2021-11-08 11:00:51 155

原创 Golang json

package mainimport ( "encoding/json" "fmt")//结构体与json//结构体转json、json转结构体type person struct{ Name string //属性首字母大写;json才能转换 Age int `json:"age"`//使用标签决定json字段名}func main() { p1 := person{ Name: "zhou", Age: 19, } //序列化 p,err := json.M

2021-11-02 15:17:32 55

原创 Golang 结构体struct

package mainimport "fmt"//结构体type person struct { name string age int hobby []string}func main() { //声明person 类型的变量 var lixiang person //1.使用值列表的形式初始化,顺序与定义顺序一致 lixiang = person{ "lixiang", 10, []string{"足球", "双色球"}, } fmt.Println

2021-11-02 13:48:32 214

原创 Golang panic&recover

package mainimport "fmt"func funcA() { fmt.Println("a")}//recover 需要和defer 搭配使用//defer 需要在可能出现panic的 语句前使用;func funcB() { //如果刚刚打开了数据库连接 defer func() { err := recover() fmt.Println(err) fmt.Println("释放数据库连接") }() panic("出现了严重的错误!!!") /

2021-11-02 10:16:21 57

原创 Golang defer 关键字

package mainimport "fmt"/* Go语言中的return不是原子的,在底层分为两步执行: 第一步返回值赋值; defer; 第二步真正返回 return. a. defer在第一步第二步之间; b. 多个defer进行压栈操作,先进后出;*/func f1() int { x := 5 defer func() { x++ }() return x // 返回值赋值为5(返回值变量不是x) ; defer后 x=6 ; 返回值返回5}func

2021-11-01 16:01:25 114

原创 Golang 判断是否是回文字符串

package mainimport "fmt"//回文判断//上海黄翔拉翔黄海上//水冷江寒func main() { s0 := "上海黄翔拉翔黄海上" s1 := "水冷江寒" var isH bool isH = IsHuiWen(s0) fmt.Printf("%s 是否是回文:%v \n",s0,isH)//true isH = IsHuiWen(s1) fmt.Printf("%s 是否是回文:%v \n",s1,isH)//false}func IsHu

2021-10-29 17:30:39 563

原创 Golang 判断字符串中 汉字个数

package mainimport ( "fmt" "unicode")//1.判断字符串中汉字数量func main() { str := "haha哈哈哈caicai有几个汉字" //如何判断 一个字符时汉字 //1.拿到字符串中的字符 var count int //定义一个变量记录个数 for _,c := range str { //2.判断这个字符是不是汉字 if unicode.Is(unicode.Han,c) { //3.把汉字个数累加 cou

2021-10-29 17:03:40 816

原创 Golang map

package mainimport ( "fmt" "sort")func main() { //map var m1 map[string]int fmt.Println(m1 == nil) //true 没初始化,为空 //map 会自动扩容 m1 = make(map[string]int, 5) m1["liming"] = 20 fmt.Println(m1) // map[liming:20] //获取值时,key不存在时; fmt.Println(m1["

2021-10-29 16:36:02 61

原创 Golang 指针(unsafe.Pointer、uintptr)

package mainimport "fmt"func main() { //指针 //符号: 取址& 取值* //go指针只能读,不能修改指针的值 addr := "沙河" addrP := &addr fmt.Printf("类型:%T,变量值:%v,指向的值:%v \n",addrP,addrP,*addrP) //类型:*string,变量值:0xc00004e230,指向的值:沙河}...

2021-10-29 15:50:15 544

原创 Golang 切片

Golang 切片package mainimport "fmt"func main() { //一、切片定义 var a0 []int fmt.Println(a0) // 未分配内存 为空 == nil //1.直接赋值初始化 a0 = []int{1, 2, 3} fmt.Println(a0) //[1,2,3] //2.make初始化,分配内存 a1 := make([]bool, 2, 4) fmt.Println(a1) //分配内存 [false false]

2021-10-29 15:42:51 95

原创 Golang 数组

Golang 数组:package mainimport "fmt"func main() { //一、数组的初始化 //1.先定义,不放呢赋值,为赋值,则为默认值 var a0 [10]int a0 = [10]int{1, 2} fmt.Println(a0)//[1 2 0 0 0 0 0 0 0 0] //2.直接定义时赋值,不写大小 var a1 = [...]int{1, 2, 3} fmt.Println(a1)//[1 2 3] //3.在定义时直接使用下标赋

2021-10-29 15:03:03 50

原创 设计模式——建造者模式

设计模式建造者模式:1.代码:2.建造者模式的注意事项和细节:建造者模式:盖房项目需求:需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.请编写程序,完成需求.传统方案:略基本介绍:建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式 是一步一步创建一个复杂

2021-10-22 15:24:09 68

原创 设计模式——原型模式

设计模式:原型模式:传统方式解决克隆羊问题:1. 原型模式-基本介绍:代码2. 深拷贝(拷贝对象中存在引用类型)方式一:使用克隆方法进行深拷贝:方式二:通过对象序列化实现:原型模式的注意事项和细节:原型模式:克隆羊问题:现在有一只羊tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和tom羊 属性完全相同的10只羊。传统方式解决克隆羊问题:传统的方式的优缺点优点是比较好理解,简单易操作。在创建新的对象时,总是需要重新获取原始对象的属性,如果创建的对象比较复杂时,效率较低

2021-10-21 15:44:31 56

空空如也

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

TA关注的人

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