自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

原创 正则表达式

正则表达式简单学习

2022-10-16 15:25:31 258 1

原创 javascript 代理模式

js学习简单写写

2022-10-16 15:13:14 291

原创 Springboot应用启动后自动将jar包中的文件复制到指定位置

1. 需求我们都知道采用Springboot有一个方便的地方,所有的依赖和静态文件,配置文件等最后都可以打成一个jar文件。在本项目中,为了方便用户的使用,数据库采用的是sqlite,且db文件也保存进了jar包中,现在需要读取这个文件,保存到指定的位置,这样后期升级jar文件,但用户的数据依然可以保留。2.解决办法由于是在jar文件中,因为常规的读取办法是读取不到该文件的。所以,在用IDE开发时能正常复制,打成 jar包就无法成功。采用ServletContextAware Springboot

2021-01-29 15:26:32 924

原创 4.1锁的优化

1.减小锁的持有时间只在必要时进行同步。2.减小锁的粒度指的是缩小锁定对象的范围,减少锁冲突的可能性。比如HashMap --> ConcurrentHashMap减小锁粒度引来的新问题:当系统需要取得全局锁时,其消耗的资源会比较多。3.读写分离属于减小锁粒度的一种特殊情况,如果说ConcurrentHashMap是通过分隔数据结构来减小锁粒度,那么读写锁则是对系统功能点进行分割减小粒度的。读多写少的场景适合用该中方法。4.锁分离如果将读写锁的思想进一步延伸,就是锁分离。在Li

2021-01-04 13:53:56 134 1

原创 3.2 线程复用:线程池

对应《实战java高并发程序设计》第三章3.2章节内容。1.JDK线程池2.线程池的内部实现3.拒绝策略4.自定义线程创建5.扩展线程池6.优化线程池数量7.在线程池中寻找堆栈8.Fork/Join框架

2020-10-13 10:05:49 125

原创 3.1 JDK并发包之同步控制

对应《实战java高并发程序设计》第三章3.1章节内容。1.重入锁2.Condition条件3.信号量Semaphore4.读写锁5.倒计时器CountDownLatch6.循环栅栏CyclicBarrier7.LockSupport它是一个线程阻塞工具,可以在线程内任意位置让线程阻塞。7.17.1 与Thread.suspend()的比较7.2 与Object.wait()的比较...

2020-10-12 10:11:36 168 1

原创 2.Java并行基础

对应《实战java高并发程序设计》第二章内容。1.线程与进程1.概念进程简单的理解就是一个运行的程序,线程是程序执行的最小单位,是轻量级的进程。2.线程状态新建,运行,阻塞,等待(有时限,无时限),终止阻塞:比如遇到synchronized同步块,直到获得锁之后才继续运行。有时限等待:sleep(1000),睡一秒钟无时限等待:wait(),join()…等到了期望的事件之后,继续运行。2.线程的基本操作1.新建线程2.终止线程为什么不建议用Thread.stop()?直接终止线程

2020-10-10 11:01:39 101

原创 1.走入并行世界

开始学习《实战java高并发程序设计》,记录学习笔记。1.一些概念1.同步和异步2.并发和并行3.临界区4.阻塞和非阻塞5.死锁,饥饿和活锁2.并发的级别1.阻塞2.无饥饿3.无障碍4.无锁5.无等待3.并行的两个重要定律1.Amdahl定律2.Gustafson定律4.Java内存模型1.原子性2.可见性3.有序性...

2020-10-09 13:04:42 92

原创 golang生产者与消费者模型

1.在使用java开发时,遇到生产者与消费者模型,最常使用的方式便是加锁,给共享资源加锁解决。当有多个消费者或生产者时,通过condition让进行唤醒对方。2.在go语言中,通过channel的方式可以很方便的解决此问题。符合“不要用共享的方式来通信,而是用通信的方式来解决共享”的思想。//生产者func produce(ch chan<- int) { for { time.Sleep(time.Millisecond * 1500) ranNum := rand.Intn(1

2020-09-17 15:17:55 191

原创 模板方法模式与策略模式

1.在学习设计模式中,最令人头疼的不是这些模式怎么记,而是许多设计模式太多相似,让人眼花缭乱,单独看某一个设计模式,我们没有问题,可是当全局看时,一时间不知道自己该用哪一个或者我用的到底是哪一个。2.区别这是定义:模板方法(TemplateMethod)模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。策略(Strategy)模式:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法

2020-09-16 10:41:15 1080

原创 一道字节跳动实习的面试题

1.题目前一段时间面试字节跳动,其中有个算法题,是让根据n打印以下方阵,当时并没有做出来,现在回想起来,就趁着闲功夫做了一下。n = 3 时1 2 38 9 47 6 5n = 4时1  2  3  412 13 14  511 16 15 610 9   8  7也就是从外圈往里面以此增加。2.解答func main() { PrintMatrix(CreateMatrix(1))}//填充矩阵func CreateMatrix(n int) [][]int { //

2020-09-16 10:15:20 497

原创 golang与java备忘录模式

1.定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。2.理解备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。比如有IE 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备份操作。3.角色发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘

2020-09-14 09:28:55 75

原创 golang与java访问者模式

1.定义将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。2.理解有些集合对象中存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。电影或电视剧中的人物角色,不同的观众对他们的评价也不同;还有顾客在商场购物时放在“购物车”中的商品,顾客主要关心所选商品的性价比,而收银员关心的是商品的价格和数量。3.组成抽象

2020-09-11 10:23:48 113

原创 golang与java适配器模式

1.定义将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。2.理解在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。3.组成目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。适配者(Adaptee)类:它是被访问和适配的现

2020-09-10 10:15:03 110

原创 golang与java装饰模式

1.定义在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。2.理解通常情况下,扩展一个类的功能会使用继承方式来实现。但继承具有静态特征,耦合度高,并且随着扩展功能的增多,子类会很膨胀。如果使用组合关系来创建一个包装对象(即装饰对象)来包裹真实对象,并在保持真实对象的类结构不变的前提下,为其提供额外的功能,这就是装饰模式的目标。与代理模式相比,代理模式扩展的功能仅限于接口中原有的方法,不会增加新的方法,而装饰模式可以做到。代理模式中,调用方直接调

2020-09-09 10:57:16 75

原创 LeetCode之打印零与奇偶数golang与java实现

1.题目2.java锁思路对于java可以采用一个锁和三个Condition来实现,用一个标志标识要打印0,不打印0时,zeroCondition await。然后用一个数字记录当前要打印的数,当该数为奇数时,signal打印奇数的,否则,signal打印偶数的。类代码:class ZeroEvenOdd { private int n; private int num = 1; private boolean flag = true;//是否打印0 Lock

2020-09-08 13:39:04 260

原创 golang与java桥接模式

1.定义将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。2.理解只看名称和定义这个桥接模式还是不好理解,用组合关系代替继承关系听起来和桥接好像没什么关联。当一个类有很多种维度的类型时,如果都采用继承的方式,会发现,子类的数量将会非常庞大。这个时候,我们可以将各种维度的类型给抽取出来,然后通过组合的方式加入到类中。即桥接模式用来解决的是某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。不同品牌和功率的汽车、不同性别和职

2020-09-08 10:36:43 155 1

原创 golang与java观察者模式

1.定义指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。2.理解在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心。下面的代码例子为,报纸发布了一个文章后,所有注册了该报纸的读者都能够 读到内容。3.构成观察者模式的主要角色如下。抽象主题(Subje

2020-09-07 13:58:40 90

原创 golang与java组合模式

1.定义又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。2.理解可以简单理解为树状结构,访问树中的任何一个节点和访问树是同样的操作。组合模式包含以下主要角色。抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。在透明式的组合模式中抽象构件还声明访问和管理子类的接口;在安全式的组合模式中不声明访问和管理子类的接口,管理工作由树枝构件完成。树叶构件(Lea

2020-09-04 12:36:04 828

原创 golang与java 中介者模式

1.定义定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。2.理解就像在现实中一样,我们想要和身边的人通信,我们需要知道他的联系方式,直接和他通信。当系统中,对象比较多时,这种方式就非常不方便了。通过中介者,我们只需要将要传达的信息交给中介者就好,中介者会将该信息传递给所有注册到中介者的对象上。将原本多对多的关系转化成了多对一。所有的对象只需要关心中介者的存在即可。3.结构中介者模式包含以下主要角色。抽象中介者(Mediator)角色:它是中

2020-09-03 14:36:03 129

原创 八皇后问题-百度百科golang代码详解

1.八皇后问题在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。刚拿到这道题时,思路虽然有了,但是实现起来发现非常麻烦,因为我开始就用了一个[][]int来表示棋盘,然后通过在棋盘中放置皇后来实验是否可以放置。没有解决问题,因为看了百度百科中的解释。但百度百科中的解释不够通俗,代码注释也很少,因此在理解解法和看懂代码后,将此记录。第一个很好的方式便是,用一个数组来记录,代表每一列的皇后放在第几行。(也可以反过来理解,每一行的皇后都

2020-09-03 10:49:30 221

原创 golang与java 迭代器模式

1.定义提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。主要包括以下几个角色:抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定

2020-09-02 11:15:22 171

原创 LeetCode交替打印FooBar go语言改编与实现

1.题目在可选的语言中没有golang。2.golang 改写题目type FooBar struct { N int}func (self *FooBar) Foo() { for i:=0;i < self.N;i ++{ fmt.Print("foo") }}func (self *FooBar) Bar() { for i:=0;i < self.N;i ++{ fmt.Print("bar") }}func main() { FooBarT

2020-09-01 15:20:46 114

原创 golang 模板方法

1.定义定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。2.理解模板方法模式是结构比较简单的设计模式了,简单来说,就是抽象的父类中定义一系列确定的步骤,而将无法确定的步骤放入到具体实现子类中。还有个好处就是在父类中提取所有子类的公共的部分代码,便于代码复用。3.示例java中,支持抽象类,因此该模式很容易写,先用java来写一个样例,然后用golang的组合来模仿:java:public class TemplateP

2020-09-01 14:21:06 658

原创 golang 享元模式

一、定义运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。二、理解在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。比如,在围棋中的白子和黑子,各个对象很相似,如果为每一个对象都重新生成一个对象,会造成资源的浪费。享元模式就是将大量对象共有的部分抽取出来,供这些对象共享使用。而这些元素不同的部分,会以参数的形式注入具体享元的相关方法中。在享元模式中,有以下几种角色:抽象享元角

2020-08-31 14:22:10 248

原创 Java和golang Lock()方法的一个不同

起因在使用java编写一个按顺序打印字符的多线程程序时,是正常运行的。同样的代码换成golang来编写却会死锁。下面我们来看代码:java:public class TestABC10 { public static int seq = 1; public static void main(String[] args) { Lock lock = new ReentrantLock(); Condition conditionA = lock.ne

2020-08-31 10:40:43 500

原创 golang 外观模式

一、定义一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。主要是定义了一个高层接口。它包含了对各个子系统的引用,客户端可以通过它访问各个子系统的功能。现在来分析其基本结构和实现方法。二、理解外观角色为系统提供一个统一的访问入口,客户端如果要访问系统的某个功能,可以不用直接去找子系统,而是通过该外观角色去完成该功能。这样,当一个系统中有很多子模块时

2020-08-28 09:13:51 122

原创 golang 工厂模式与抽象工厂模式

一、工厂模式       定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。       工厂模式算是一个比较简单的模式了,简单理解就是,创建对象的工作交给工厂即可,客户端不用关心对象怎么来的,直接从工厂获得即可,类似于spring 的IOC。       工

2020-08-27 09:28:34 444

原创 JS判断页面上图片有没有加载到

在网页加载完毕后,需要判断页面上图片是否真的加载成功,即图片在不在,可以用下面的方式来判断。function checkImage(path){ var img = $(“<img src=’”+path+”’>”); if(img[0].height > 0 && img[0].weight > 0){ return true; }else{ return false; }}...

2020-08-26 10:08:24 278

原创 golang 建造者模式

一、定义在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。产品都是由多个部件构成的,各个部件可以灵活选择,但其创建步骤都大同小异。将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。二、理解其实学习每一个设计模式都不难,难的是在于找到它的应用之处,以及各种模式间的区别在

2020-08-26 09:43:14 270

原创 golang 原型模式与原型模式的扩展

一、定义用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。二、最简单的原型模式原型模式即通过复制原型对象创建一个和原型相同的或相似的对象,因此,我们可以给类(struct)增加一个方法,Clone()来返回对象的复制品即可,代码如下:可以看到通过调用Clone生成了一个和原来一样的一个对象。func main1() { person1 := new(Person) person1.Age = 12 person1.Nation = "China" perso

2020-08-25 10:24:58 270

原创 用golang实现一个自动保存windows10锁屏壁纸的小软件

需求windows10的锁屏壁纸不像现在手机的锁屏画报,提供一个保存按钮,导致当我们碰到自己喜欢的锁屏壁纸想保存下来,发现无能为力。因此想做一个这样的功能,能自动下载保存下来windows的锁屏壁纸。原理windows10的锁屏壁纸,放置的文件夹是:C:\Users\用户名\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\因此我们可以读取该文件夹下的图片,然

2020-08-24 13:34:15 455

原创 golang 状态模式

定义状态模式把受环境改变的对象行为包装在不同的状态对象里,其意图是让一个对象在其内部状态改变的时候,其行为也随之改变。现在我们来分析其基本结构和实现方法。状态模式包含以下主要角色。环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为。具体状态(Concrete State)角色:实现抽象状态所对应的行为。理解对象(即上文中

2020-08-24 12:37:12 372

原创 golang 单例模式-三种实现形式

定义单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式,可以看到定义简单,算是设计模式中最简单的一个模式了。饿汉模式即还未使用该对象时,对象已经创建完成。方法是通过golang 的init函数,在导包时就自动执行。package mianimport "fmt"var instanse *singlertype singler struct { Name string}func NewSingler()*singler{ retur

2020-08-21 09:06:32 860 1

原创 golang 命令模式

概念命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。理解设计模式有很多种,这些模式之前有些很相似,策略模式和命令模式就非常相似。为了更好的理解,我们先看策略模式,客户端通过给context传递不同的策略方法类,则context执行不同的策略。如果,我们把命令模式中的接受者去掉,会发现,策略模式和命令模式如出一辙,仅仅是名称改了一下。在命令模式中,相当于把c

2020-08-20 10:23:06 340

原创 让golang 的string拥有和JAVA的String一样的面向对象的用法

原因自己入门的语言是java语言,最近在用golang,有个不习惯的golang的string,在java开发中,String做为一个对象,它里面封装了许多方法,用面向的对象的思想来考虑的话,确实如此。比如我们想看这个字符串中包不包含某个字符,这个行为明显的需要问该字符串本身。而golang 的strings.Contains()更像是面向过程的写法。扩展string的功能直接给string扩展功能是不行的。func (s string) Contains(substr string) bool{

2020-08-19 10:34:22 278

原创 golang 责任链模式

责任链模式定义责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。我的理解举个例子,在HTTP请求过来时,会有多个处理这进行处理,比如权限验证处理,日志处理,业务 处理等等。如果采用非职责链模式的话,我们客户端,会调用权限处理模块、日志 处理模块等去处理该请求,即定义中说的与多个请求矗立着耦合在一起。采用责任链

2020-08-19 10:05:34 625

原创 golang 策略模式与策略工厂模式

什么是策略模式策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。什么是策略工厂模式在一个使用策略模式的系统中,当存在的策略很多时,客户端管理所有策略算法将变得很复杂,如果在环境类中使用策略工厂模式来管理这些策略类将大大减少客户端的工作复杂度代码在下面的代码中,分别用策略模式和策略工厂模式实

2020-08-18 09:29:28 998

原创 golang 代理模式

golang 代理模式什么是代理模式和装饰模式的区别功能例子golang代码什么是代理模式在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。和装饰模式的区别听起来和装饰模式很想,装饰模式也扩展了原有对象的功能,区别在于,装饰模式,需要客户端自己创建原功能类,就像java中的普通的InputStream,通过装饰模式包装成FileInputStream等。但是代理区别在于,客户端不会看到被代理的对象,被代理对象的存在完全被中介隔离了。功能

2020-08-17 12:00:48 222

原创 旅游管理系统

旅游管理系统介绍要求:ER图代码介绍高级数据库布置的实验作业要求:题目: 设计与实现一个旅游预订系统,该系统涉及的基本信息有航班,出租车,宾馆和客户等数据信息。实体和其特征属性举例如下:FLIGHTS (String flightNum, int price, int numSeats, int numAvail, String FromCity, String ArivCity);H...

2020-01-15 14:36:50 11922 2

软件体系结构作业和答案 2019级中科大软件学院

老师布置的两次作业和自己的答案,做的时候参考了网上的一部分答案。软件体系结构作业和答案 2019级中科大软件学院。软件体系结构作业和答案 2019级中科大软件学院。

2020-01-06

空空如也

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

TA关注的人

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