自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员客栈

技术都是折腾出来的

  • 博客(51)
  • 资源 (6)
  • 收藏
  • 关注

原创 优雅实现Spring多次读取InputStream

解决Spring多次读取InputStream的问题

2022-09-21 18:05:01 2296 1

原创 创建型模式——抽象工厂模式

抽象工厂的定义与特点抽象工厂(AbstractFactory) 模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。产品族:同类产品属于可以被称为同级产品,而不同类型的产品组合起来的可以被称为产品族,这些产品分属不同的产品等级结构中。使用抽象工厂模式一般要满足以下条件:系统中有多个产品族,每个具体工厂创

2020-09-25 11:34:44 217

原创 创建型模式——工厂方法模式

在《简单工厂模式》一节我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。优点:用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。缺点:类的个数容易过多,增加复杂度增加了

2020-09-23 17:59:24 277

原创 简单工厂模式

简单工厂模式定义工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”。在简单工厂模式中创建实例的方法通常为静态(static)方法,因此简单工厂模式(Simple Fa

2020-09-23 17:35:06 266

原创 创建型模式——原型模式

原型模式的定义与特点原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。原型模式的优点:Java 自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良。可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),

2020-09-23 17:13:31 217

原创 创建型模式——单例模式

单例模式的定义与特点单例模式(Singleton)的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。单例模式有 3 个特点:单例类只有一个实例对象;该单例对象必须由单例类自行创建;单例类对外提供一个访问该单例的全局访问点。单例模式的优点和缺点单例模式的优点:单例模式可以保证内存里只有一个实例,减少了内存的开销。可以避免对资源的多重占用。单例模式设置全局访问点,可以优化和共享资源的访问。单例模式的缺点:单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来

2020-09-23 11:02:09 93

原创 软件设计七大原则之合成复用原则

合成复用原则的定义合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。合成复用原则的重要性通常类的复用分为继承复用和合成复用两种,继承复用虽然有简单和易实现的优

2020-09-22 16:13:31 471

原创 软件设计七大原则之迪米特法则

迪米特法则的定义迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Holland)提出,被 UML 创始者之一的布奇(Booch)普及,后来又因为在经典著作《程序员修炼之道》(The Pragmatic Programmer)提及而广为人知。迪米特法则的定义是:只与你的直接朋

2020-09-22 16:10:20 348

原创 软件设计七大原则之接口隔离原则

接口隔离原则的定义接口隔离原则(Interface Segregation Principle,ISP)要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。2002 年罗伯特·C.马丁给“接口隔离原则”的定义是:客户端不应该被迫依赖于它不使用的方法(Clients should not be forced to depend on methods they do not use)。该原则还有另外一个定义:一个类对另一个类的依赖应该建立在最小的接口上(The depe

2020-09-22 16:07:00 326

原创 软件设计七大原则之单一职责原则

单一职责原则的定义单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出的。这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)。该原则提出对象不应该承担太多职责,如果一个对象承

2020-09-22 16:03:38 350

原创 软件设计七大原则之依赖倒置原则

依赖倒置原则的定义依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)。其核心思想是:

2020-09-22 16:00:47 154

原创 软件设计七大原则之里氏替换原则

里氏替换原则的定义里氏替换原则主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中蕴含的原理。里氏替换原是继承复用的基础,它反映了基类与子类之间的关系,是对开闭原则的补充,是对实现抽象化的具体步骤的规范。里氏替换原则的作用里氏替换原则的主要作用如下。里氏替换原则是实现开闭原则的重要方式之一。它克服了继承中重写父类造成的可复用性变差的缺点。它是动作正确性的保证。即类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。加强程序的健壮性,同时变更时可以

2020-09-22 15:57:08 242

原创 软件设计七大原则之开闭原则

开闭原则的定义开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这就是开闭原则的经典定义。这里的软件实体包括以下几个部分:

2020-09-22 15:51:03 604

原创 UML图中的类图及类图之间的关系

UML简介UML(Unified Modeling Language,UML)统一建模语言,是用来设计软件蓝图的可视化建模语言,它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。类图类图在UML中用于表示类以及类与类之间的静态关系的信息,也是我们在学习设计模式时最重要的一种模型,通过UML类图,我们可以更加清晰明了的理解设计模式的工作原理,在后续章节中会频繁使用到。类图中的关系表示符在使用UML进行面向对象设计时,为了清晰的表述类与类之间的关系,UML提供了一系列的关系标识符,如下所

2020-09-22 15:35:40 542

原创 GoF 的 23 种设计模式的分类和功能

1. 根据目的划分根据模式的目的来划分可以分为:创建型模式、结构型模式和行为型模式 3 种。创建型模式:用于描述 “怎样创建对象” ,它的主要特点是 “将对象的创建与使用分离” 。GoF 中提供了:单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式等5种创建型模式;结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF中提供了:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式等7种结构型模式;行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象无

2020-09-22 14:53:02 398

原创 软件设计模式概述

软件设计模式的产生背景“设计模式”这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977 年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。1979 年他的另一部

2020-09-22 10:45:25 153

原创 Redis学习手册19—集群

Redis集群Redis集群是从Redis 3.0版本开始正式引入的功能,它给用户带来了在线扩展Redis系统读写性能的能力,而Redis 5.0更是在集群原有功能的基础上,进一步添加了更多新功能,并且对原有功能做了相当多的优化,使得整个集群系统更简单、易用和高效。基本特性Redis集群提供了非常丰富的特性供用户使用,下面逐个介绍。复制与高可用Redis集群与单机版的Redis服务器一样,也提供了主从复制功能。在Redis集群中,各个Redis服务器成为节点(node),其中主节点(master

2020-06-18 18:58:24 1187

原创 Redis学习手册18—Sentinel

故障转移因为Redis支持主从复制,并且主从服务器的数据完全一致。因此,当主服务器因故障下线时,将它的其中一台从服务器转换为主服务器,并使用新的主服务器继续处理命令请求,这样整个系统就可以继续运行,不比仅因为主服务器下线而停机。这种使用正常服务器替换下线服务器以维持系统正常运转的操作,一般被称为故障转移(failover)。手动故障转移因为Redis支持主从复制特性,所以我们同样可以对下线的Redis主服务器实施故障转移,假设现在有一个主服务器 127.0.0.1:6379(简称 6379),它有两个

2020-06-16 17:02:22 713

原创 Redis学习手册17—主从复制

复制复制功能是Redis提供的多机功能中最基础的一个,这个功能是通过主从复制(master-slave replication)模式实现的,它允许用户为存储着目标数据库的服务器创建出多个拥有相同数据库副本的服务器,其中存储目标数据库的服务器被称为主服务器(master server),而存储数据库副本的服务器则被称为从服务器(slave server)。如下图所示:对于Redis来说,一个主服务器可以拥有任意多个从服务器,而从服务器本身也可以用作其他服务器的主服务器,并以此构建出一个树状的服务器结构。

2020-06-16 11:49:10 948

原创 Redis学习手册16—模块功能

虽然Redis提供了非常丰富的数据结构以及强大的功能,如流水线、事务,特别是Lua脚本的引入,让用户可以很方便的扩展Redis的功能,但是这些或多或少都有各自的缺陷。例如,使用Lua脚本来扩展Redis,就需要对熟悉Lua脚本的语法以及Lua数据类型与Redis数据类型直接的转换。为了解决进一步解决Redis功能扩展问题,Redis在4.0版本添加了一个重要功能——模块Redis的模块Redis的模块功能允许开发者通过Redis开放的一簇API,将Redis用作网络服务和数据平台,通过C语言在Redis

2020-06-14 22:27:31 601

原创 Redis学习手册15—发布与订阅

发布与订阅Redis的发布与订阅功能可以让客户端通过广播方式,将消息同时发送给可能存在的多个客户端,并且发送消息的客户端不需要指定接收消息的客户端的具体信息,也就是说发送消息的客户端与接收消息的客户端没有直接的联系。在Redis中,客户端可以通过订阅特定的频道(channel)来接收发送至该频道的消息,我们把这些订阅频道的客户端称为订阅者(subscriber),把发送消息给频道的客户端称为发送者(publisher)。一个频道可以有多个订阅者,而一个订阅者也可以订阅多个频道。命令速查表命令

2020-06-13 23:54:36 204

原创 Redis学习手册14—持久化

正如之前所说的,Redis与传统数据库的一个主要区别在于,Redis把所有数据都存储在内存中,而传统数据库通常只会把数据的索引存储在内存中,并将实际的数据存储在硬盘中。虽然Redis这样的数据存储方式使得用户可以极快的访问数据,但是由于内存属于易失存储器,这对于想把Redis当做数据库而不仅仅是缓存的用户来说是不愿看到的。为了解决上述问题,Redis向用户提供了持久化功能,这一功能把内存中的数据以文件的形式存储到硬盘上,即可保证数据不会轻易丢失。Redis持久化分类为了满足不同的持久化需求,Redis

2020-06-12 23:25:26 191

原创 Redis学习手册13—Lua脚本

Redis对Lua脚本的支持是从Redis 2.6.0版开始引入的,它可以让用户在Redis服务器内置的Lua解释器中执行指定的Lua脚本。被执行的Lua脚本可以直接调用 Redis命令,并使用Lua语言及其内置的函数库处理命令结果。Lua脚本给Redis带来的变化引入Lua脚本特性,为Redis带来了如下直观的变化:可以使用Lua脚本来很方便的扩展Redis服务器的功能。Redis服务器以原子方式执行Lua脚本,在执行完整个Lua脚本及其包含的Redis命令之前,Redis服务器不会执行其客户端

2020-06-12 17:13:49 506

原创 Redis学习手册12—流水线与事务

流水线Redis的流水线特性:这个特性允许客户端把任意多条Redis命令请求打包在一起,然后一次性的全部发送给服务器,而服务器则会在流水线包含的所有命令请求处理完毕之后,一次性的将它们的执行结果全部返回给客户端。通过使用流水线特性,我们可以将执行多条命令所需的网络通信次数从 NNN 次降低到 1 次,这可以大幅度减少程序在网络通信方面耗费的时间,使得程序的执行效率得到显著的提升。事务Redis事务保障了多条命令执行的情况下,要么全部执行成功,要么全都不执行。MULTI:开启事务使用MULTI命令

2020-06-11 23:19:48 194

原创 Redis学习手册11—自动过期

前言随着时间推移,Redis中会出现越来越多的数据,有的数据可能使用频率比较低,但是这些数据一直占用着内存资源,为了提高资源利用率,将一些无用的数据或者使用频率较低的数据移出Redis数据库,Redis提供了自动的键过期功能,通过这个功能,用户可以让特定的键在指定的时间之后自动被移除,从而避免了无用数据长期占用资源的问题发生。EXPIRE、PEXPIRE:设置生存时间用户可以通过执行EXPIRE命令或者PEXPIRE命令为键设置一个生存时间(Time To Live,TTL):键的生存时间在设置之后流

2020-06-11 22:28:47 515

原创 Redis学习手册10—数据库操作

前言前面的章节中,我们介绍了Redis提供的一系列数据结构及其相关的命令。Redis作为一款优秀的内存数据库,因此也提供了一系列关于数据库管理方面的操作命令,因此本章主要内容就是关于Redis数据库管理方面的操作介绍。主要内容Redis为数据库提供了丰富的操作命令,通过这些命令,用户可以:指定自己想要使用的数据库。一次性获取数据库包含的所有键,迭代地获取数据库包含的所有键,或者随机地获取数据库中的某个键。根据给定的键的值进行排序。检查给定的一个或多个键,看他们是否存在于数据库中。查看给定

2020-06-11 19:21:21 239

原创 Redis学习手册9—数据结构之流

Redis的流流(Stream)是Redis 5.0版本中新增的数据结构,也是该版本最重要的更新。在以往的版本中,为了实现消息队列这一常见的应用,用户往往会使用列表,有序集合和发布与订阅这3个功能,但这些不同的实现都有各自的缺陷:列表实现的消息队列虽然可以快速的将新消息追加到列表的末尾,但因为列表为线性结构,所以程序如果想要查找包含指定数据的元素,或者进行范围查找,就需要遍历整个列表。有序集合虽然可以有效的进行范围查找,但缺少列表和发布与订阅提供的阻塞弹出原语,这使得程序无法使用有序集合实现可阻塞的

2020-06-10 23:09:28 411 1

原创 Redis学习手册8—数据结构之地理坐标

Redis地理坐标Redis GEO是Redis 在3.2版本中新添加的特性,通过这一特性,用户可以将经纬度格式的地理坐标存储到Redis中,并对这些坐标执行距离计算,范围查找等操作。地理坐标的功能Redis为GEO特性提供了一系列命令,具体如下所示:将位置的名字以及它的经纬度存储到位置集合中。根据给定的位置名字,从位置集合中取出与之对应的经纬度。计算两个位置之间的直线距离。根据给定的经纬度或位置,找出该位置指定的半径范围内的其他位置。获取指定位置的Geohash编码。地理坐标命令

2020-06-09 23:27:03 494

原创 Redis学习手册7—数据结构之位图

Redis数据结构之位图Redis的位图Redis位图功能位图命令速查表命令详解SETBIT命令位图的扩展GETBIT命令BITCOUNT命令BITPOS命令BITOP命令BITFIELD命令根据偏移量对区域进行设置根据索引对区域进行设置获取区域存储的值执行加法或减法处理溢出使用位图存储整数的原因Redis的位图Redis的位图(bitmap)是由多个二进制位组成的数组,数组中的每个二进制位都有与之对应的偏移量(也称索引),用户通过这些偏移量可以对位图中指定的一个或多个二进制位进行操作。下图展示了一个

2020-06-09 18:35:02 601

原创 Redis学习手册6—数据结构之HyperLogLog

HyperLogLog简介HyperLogLog是一个专门计算集合的基数而创建的概率算法,对于一个给定的集合,HyperLogLog可以计算出这个集合的近似基数:近似基数并非集合的实际基数,它可能会比实际的基数小一点或大一点,但是估算的基数和实际基数之间的误差会处于一个合理的范围内,因此那些不需要知道实际基数或者因为条件限制而无法计算出实际基数的程序就可以把这个近似基数当做集合的实际基数使用。HyperLogLog的优点HyperLogLog的优点在于它计算近似基数所需的内存并不会因为集合的大小而改变

2020-06-08 19:25:18 223

原创 Redis学习手册5—数据结构之有序集合

有序集合Redis的有序集合(sorted set)同时具有“有序”和“集合”两种性质,这种数据结构中的每个元素都由一个成员和一个与成员相关联的分值组成,其中成员以字符串方式存储,而分数则以64位双精度浮点数格式存储。下图展示了有序集合的存储结构:与集合一样,有序集合中的每个成员都是独一无二的,同一个有序集合中不会出现重复的成员。与此同时,有序集合的成员将按照各自的分值大小进行排序。有序集合的分值除了可以是数字之外,还可以是字符串 **"+inf"**或者 “-inf”,这两个特殊值分别表示 无穷大

2020-06-08 18:00:20 319

原创 Redis学习手册4—数据结构之集合

集合简介Redis的集合(set)键允许用户将任意多个各不相同的元素存储到集合中(类似于Java中的Set),这些数据既可以是文本数据,也可以是二进制数据。集合与列表的区别与上一章中介绍的列表键的区别如下所示:列表可以存储重复元素,而集合只会存储非重复元素,尝试将一个已经存在的元素添加到集合中将被忽略。列表以有序的方式存储元素,而集合以无序的方式存储元素。在执行像LINSERT和LREM这样的列表命令时,即使命令只针对单个列表元素,程序有时也不得不遍历整个列表确定指定的元素是否存在,因此这些命

2020-06-07 15:53:02 183

原创 Redis学习手册3—数据结构之列表

列表简介Redis的列表(list)是一种线性的有序结构(类似于Java中的List集合),可以按照元素的推入列表中的顺序来存储元素,这些元素既可以是文字数据,也可以是二进制数据,并且列表中的元素是可以重复的。存储结构Redis的列表键支持左右两端推入(PUSH)或弹出(POP)数据,如下图所示:列表支持的功能Redis为列表提供了丰富的操作命令,通过这些命令,用户可以:将新元素推入列表的左端或者右端移除位于列表最左端或者最右端的元素移除列表最右端的元素,然后把被移除的元素推入另一个列

2020-06-07 13:36:47 313

原创 Redis学习手册2—数据结构之散列

前言在上一章《Redis学习手册1—数据结构之字符串》中,我们学习了Redis最基本的数据结构——字符串,但是我们发现,在使用字符串类型键存储具有关联关系的一系列属性时,我们不得不创建若干字符串键,分别存储不同的属性。例如,我们想要使用字符串描述一篇文章的属性:标题、内容、作者和创建时间。如果使用字符串类型键存储这些属性,我们至少需要使用四个字符串类型键来存储,然后定义相同的键的前缀,如:article::1::title、article::1::content、article::1::author、ar

2020-06-04 23:25:07 315

原创 Redis学习手册1—数据结构之字符串

字符串字符串(string)键是Redis中最基本的键值对类型,这种类型的键值对会在数据库中把单独的一个键和单独的一个值 关联起来,被关联的键和值可以是普通的文字数据,也可以是图片、视频、音频、压缩文件等更为复杂的二进制数据。字符串类型键的存储结构如下图所示:与键 “message” 相关联的值是 “hello world”与键 “number” 相关联的值是 “10086”与键 “homepage” 相关联的值是 “redis.io”与键 “redis-log.jpg” 相关联的值是 二进

2020-06-03 15:23:23 250

原创 Redis模块之RediSearch编译安装

环境Redis 4.0及以上版本cmake安装cmakeCentOS 7yum install -y cmakeUbuntusudo apt-get install cmake下载RediSearchGithubgit clone https://github.com/RedisLabsModules/RediSearch.git码云git clone https://gitee.com/hiro__zhl/RediSearch.git编译先创建bui

2020-05-18 19:16:41 2011 1

原创 Redis模块之RedisJSON

RedisJSON简介RedisJSON是RedisLabs公司开发的一款用于扩展Redis的JSON处理模块,能够让Redis像处理其他类型键一样处理JSON格式的数据,相当于扩展了Redis的数据类型。具体详细介绍请参考 RedisJSONRedis版本要求Redis 4.0 以后提供了模块功能,能够让开发者基于开放的API来扩展Redis自身的功能,因此要想使用Redis的模块功能,至少要求Redis 4.0及以上版本。下载RedisJSON托管于Github,因此我们可以直接下载其源码,如

2020-05-18 14:37:46 18804 2

原创 Spring Boot项目jar包部署及脚本启停(自动获取PID)

Spring Boot项目打成jar包部署时,一般会配合脚本来方便管理服务的启动与关闭,本文总结了在实践过程中用到的脚本,具体内容如下所示:1、创建服务启动脚本xxx-startup.sh,其内容如下所示#!/bin/bashecho "服务启动"# 后台运行jar包任务nohup java -Xms1024m -Xmx1024m -XX:MetaspaceSize=128m -XX:M...

2020-01-09 17:08:58 1189

原创 算法详解之狄克斯特拉算法

上一篇文章,我们了解了广度优先搜索算法(BFS),BFS主要用来解决图的可达路径验证和最小路径问题,即从一个顶点A到另一个顶点B,是否有可达路径,如果有那么求出其到达的最少步骤。那么这里的最短路径就如果加上时间或者其他元素来表示的话,真的就是最短的吗?这里,我们不妨将达到各个顶点的边加上一个花费时间来修饰,这里用来修饰边的元素,我们称之为权重,加上权重的边即为加权边,如下图所示:还是上一篇文...

2019-11-22 18:27:24 570

原创 算法详解之广度优先搜索算法

算法简介广度优先搜索算法(Breadth First Search,BFS),又称为宽度优先搜索, 是用于图的一种简单遍历算法。它并不考虑结果的可能位置,彻底的搜索整张图,直到找到结果为止,是一种盲目搜索算法。BFS用于解决两个问题:判断从A点到B点是否有可达路径。从A点出发到B点的最短路径(这里的最短路径是指经过的步骤最少)。...

2019-11-21 15:19:13 2340

CSS权威指南(高清带书签PDF+源码)

全面介绍CSS的各个知识点是一本很不错的CSS入门书籍。

2018-11-19

Go并发编程实战(高清带书签PDF)+源码

使用Go语言进行并发编程,本书采用理论+实践的方式进行阐述,文件包含PDF电子书和相对应的源码

2018-11-16

Spring Boot 2精髓(高清带书签pdf)+源码

绝对高清完整版PDF电子书,包含完整源码,用于学习Spring Boot2入门技术

2018-11-16

机器学习系统设计:基于Python实现

本书大部分内容都将涉及“怎么做”。例如,怎么处理数据才能让机器学习算法最大限度地利用它们?怎么选择正确的算法解决手头的问题?我们偶尔也会涉及“为什么”。例如,为什么正确评估很重要?为什么在特定情形下一个算法比另外一个算法的效果更好?

2018-11-15

C#编写的MP3播放器

基于C#编写的一款MP3播放器,希望能给大家一个参考

2012-12-25

空空如也

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

TA关注的人

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