自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

听雪楼

听雪楼中听雪落,彼岸花开彼岸零

  • 博客(57)
  • 资源 (7)
  • 收藏
  • 关注

原创 23种设计模式详解

设计模式关系图UML与设计原则UML类图快速入门 : https://blog.csdn.net/love905661433/article/details/84334960设计原则简介 : https://blog.csdn.net/love905661433/article/details/84335013设计模式创建型设计模式(Creational)简单工厂模式(Simp...

2018-11-25 12:27:34 828

原创 设计模式-状态模式(State)

概述定义 : 允许一个对象在其内部状态改变时, 改变它的行为类型 : 行为型适用场景一个对象存在多个状态(不同状态下行为不同), 且状态可相互转换优点将不同的状态隔离把各种状态的转换逻辑分布到State子类中, 减少相互间依赖增加新的状态很简单缺点状态多的业务场景导致类数目增加, 系统变复杂模式角色Context(环境) :定义客户感兴趣的接口维护一...

2018-11-25 11:04:55 398

原创 设计模式-访问者模式(Visitor)

概述定义 : 封装作用于某数据结构(如List/Set/Map等)中的各元素的操作可以在不改变各元素的类的前提下, 定义左用于这些元素的操作类型 : 行为型适用场景一个数据结构(如List/Set/Map等)包含很多类型对象数据结构与数据操作分离优点增加新的操作很容易, 即增加一个新的访问者缺点增加新的数据结构困难具体元素变更比较麻烦模式角色Visit...

2018-11-25 08:14:24 216

原创 设计模式-单例模式(Singleton)详解

概述定义 : 保证一个类仅有一个实例, 并提供一个全局访问点又称单件模式类型 : 创建型适用场景想确保任何情况下都绝对只有一个实例优点在内存里只有一个实例, 减少了内存开销可以避免对资源的多重占用设置了全局访问点, 严格控制访问缺点没有接口, 扩展困难重点私有构造器线程安全问题延迟加载序列化和反序列化安全问题反射安全问题分类单例模式分为懒汉...

2018-11-23 09:56:00 2109 2

原创 LeetCode-350. 两个数组的交集 II

题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。进阶:如...

2018-11-29 21:56:41 516

原创 LeetCode-349. 两个数组的交集

题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。解题因为不考虑输出顺序, 元素唯一, 所...

2018-11-29 21:51:47 426

原创 LeetCode-76. 最小覆盖子串

题目给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。解答个人想到的是使用滑动窗口来解答, 好像性能不是很好,代码如下:import ja...

2018-11-29 21:47:27 434

原创 LeetCode-438. 找到字符串中所有字母异位词

题目给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例 1:输入:s: “cbaebabacd” p: “abc”输出:[0, 6]解释:起始索引等于 0 的子串...

2018-11-29 21:43:23 384

原创 LeetCode-3. 无重复字符的最长子串

题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是...

2018-11-29 21:38:50 2360 3

原创 LeetCode-209. 长度最小的子数组

题目给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。进阶:如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复...

2018-11-29 21:32:14 772

原创 LeetCode-88. 合并两个有序数组

题目给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 =...

2018-11-29 21:23:41 538

原创 LeetCode-75. 颜色分类

题目给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。...

2018-11-29 21:18:37 443

原创 LeetCode-80. 删除排序数组中的重复项 II

题目给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度后...

2018-11-29 21:12:39 489

原创 LeetCode-26. 删除排序数组中的重复项

题目给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定...

2018-11-29 21:03:27 695

原创 设计模式-责任链模式(Chain of Responsibility)

概述定义 : 又名职责链模式, 为请求创建一个接收此次请求对象的链类型 : 行为型适用场景一个请求的处理需要多个对象当中的一个或几个协作处理优点请求的发送者和接收者(请求的处理)解耦责任链可以动态组合缺点责任链太长或者处理时间过长的话, 会影响性能责任链有可能过多模式角色Handler :定义一个处理请求的接口。(可选)实现后继链。C...

2018-11-24 19:44:13 545 1

原创 设计模式-中介者模式(Mediator)

概述定义 : 定义一个封装一组对象如何交互的对象通过使对象明确的相互引用来促进松散耦合, 并允许独立的改变它们的交互类型 : 行为型适用场景系统中对象之间存在复杂的引用关系, 产生的相互依赖关系结构混乱且难以理解交互的公共行为, 如果需要改变行为则可以增加新的中介者类优点将一对多转化成了一对一, 降低了程序复杂度类之间解耦缺点中介者过多, 导致系统复杂模式角...

2018-11-24 19:08:35 334

原创 设计模式-命令模式(Command)

概述定义 : 将"请求"封装成对象, 以便使用不同的请求命令模式解决了应用车鞥徐中对象的职责以及它们之间的通信方式类型 : 行为型适用场景请求的调用者和请求的接收者需要解耦, 使得调用者和接收者不直接交互需要抽象出等待执行的行为优点降低耦合容易扩展新命令或者一组命令缺点命令的无限扩展会增加类的数量, 提高系统实现的复杂度模式角色Command : 声明...

2018-11-24 18:36:58 474

原创 设计模式-备忘录模式(Memento)

概述定义 : 保存对象的某个状态, 以便在适当的时候恢复对象类型 : 行为型适用场景保存及恢复数据相关业务场景如游戏存档, 操作撤销, 即想恢复到之前的状态优点为用户提供一种可恢复机制存档信息的封装缺点资源占用模式角色Memento(备忘录) :备忘录存储原发器对象的内部状态。原发器根据需要决定备忘录存储原发器的哪些内部状态。防止原发器以外的其他对象...

2018-11-24 16:48:37 192

原创 设计模式-观察者模式(Observer)

概述定义 : 定义了对象之间的一对多依赖, 让多个观察者对象同时监听某一个主题对象, 当主题对象发生变化时, 它的所有依赖者(观察者)都会收到通知并更新类型 : 行为型适用场景关联行为场景, 建立一套触发机制优点观察者和被观察者之间建立一个抽象的耦合观察者模式支持广播通信缺点观察者之间有过多的细节依赖, 提高时间消耗及程序复杂度使用要得当, 要避免循环调用模式...

2018-11-24 15:49:03 289

原创 设计模式-解释器模式(Interpreter)

解释器模式(Interpreter)定义 : 给定一个语言, 定义它的文法的一种表示, 并定义一个解释器, 这个解释器使用该表示来解释语言中的句子为了解释一种语言, 而为语言创建的解释器类型 : 行为型适用场景某个特定类型问题发生频率足够高优点语法由很多类表示, 容易改变及扩展此"语言"缺点当语法规则数目太多时, 增加了系统复杂度模式角色AbstractE...

2018-11-24 14:49:30 138

原创 设计模式-策略模式(Strategy)

策略模式(Strategy)定义 : 定义了算法家族, 分别封装起来, 让他们之间可以互相替换, 此模式让算法的变化不会影响到使用算法的用户类型 : 行为型适用场景系统有很多类, 而它们的区别仅仅在于它们的行为不同一个系统需要动态的在几种算法中选择一种其实面向对象中的多态就可以认为是一种策略模式的使用, 对于同一个接口使用不同的实现类, 有不同的行为优点开闭原则...

2018-11-24 14:20:04 266

原创 设计模式-迭代器模式(Iterator)

概述定义 : 提供一种方法, 顺序访问一个集合对象中的各个元素, 而又不暴露该对象的内部表示类型 : 行为型适用场景访问一个集合对象的内容而无需暴露它的内部表示为遍历不同的集合结构提供一个统一的接口优点分离了集合对象的遍历行为缺点类的个数成对增加模式角色Iterator(迭代器) : 迭代器定义访问和遍历元素的接口。ConcreteIterator(具体...

2018-11-24 11:54:40 241

原创 设计模式-模板方法(Template Method)

概述定义 : 定义了一个算法的骨架, 并允许子类为一个或多个步骤提供实现模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法的某些步骤类型 : 行为型适用场景一次性实现一个算法的不变的部分, 并将可变的行为留给子类来实现各子类中公共的行为被提取出来并集中到一个公共的父类中, 从而避免代码重复优点提供复用性提高扩展性符合开闭原则缺点类数目增加增加了系统...

2018-11-24 11:24:58 200

原创 设计模式-代理模式(Proxy)

代理模式(Proxy)定义 : 为其他对象提供一种代理, 以控制对这个对象的访问代理对象在客户端和目标对象之间起到中介的作用类型 : 结构型适用场景保护目标对象增强目标对象优点代理模式能将代理对象与真实被调用的目标对象分离一定程度上降低了系统的耦合度, 扩展性好保护目标对象增强目标对象缺点造成系统设计中类的数目增加在客户端和目标对象之间增加了一个代理对象,...

2018-11-24 10:23:43 241

原创 设计模式-桥接模式(Bridge)

概述定义 : 将抽象部分与它的具体实现部分分离, 使它们都可以独立的变化通过组合的方式建立两个类之间的联系, 而不是继承类型 : 结构型适用场景抽象和具体实现之间增加更多的灵活性一个类存在两个或多个独立变化的维度, 且这两个或多个维度都需要独立进行扩展不希望使用继承, 或因为多层继承导致系统类的个数剧增优点分离抽象部分及其具体实现部分提高了系统的可扩展性符合开闭原则...

2018-11-23 21:18:37 350

原创 设计模式-组合模式(Composite)

概述定义 : 将对象组合成树形结构以表示"部分-整体"的层次结构组合模式使客户端对单个对象和组合对象保持一致的方式处理类型 : 结构型适用场景希望客户端可以忽略组合对象与单个对象的差异时处理一个树形结构时优点清楚地定义分层次的复杂对象, 表示对象的全部或部分层次让客户端忽略了层次的差异, 方便对整个层次结构进行控制简化客户端代码符合开闭原则缺点限制类型时会较...

2018-11-23 20:16:52 161

原创 设计模式-享元模式(Flyweight)

概述定义 : 提供了减少对象数量从而改善应用所需的对象结构的方式运用共享技术有效的支持大量细粒度的对象类型 : 结构型适用场景常常应用于系统底层的开发, 以便解决系统的性能问题系统有大量相似的对象, 需要缓冲池的场景优点减少对象的创建, 降低内存中对象的数量, 降低系统的内存, 提高效率减少内存之外的其他资源占用缺点关注内/外部状态, 关注线程安全问题使系统,...

2018-11-23 19:17:21 168

原创 设计模式-适配器模式(Adapter)

概述定义 : 将一个类的接口转换成客户期望的另一个接口使原本不兼容的类可以一起工作类型 : 结构型适用场景已经存在的类, 它的方法和需求不匹配时(方法结果相同或相似)不是软件设计阶段考虑的设计模式, 而是随着软件维护, 由于不同产品, 不同厂家造成功能类似而接口不相同情况下的解决方案优点能提高类的透明性和复用, 现有的类复用但不需要改变目标类和适配器类解耦,...

2018-11-23 16:28:12 174

原创 设计模式-装饰者模式(Decorator)

概述定义 : 在不改变原有对象的基础之上, 将功能附加到对象上提供了比继承更有弹性的替代方案(扩展原有对象功能)又叫包装器Wrapper, 适配器模式也被称之为包装器类型 : 结构型适用场景扩展一个类的功能或给一个类添加附加职责动态的给一个对象添加功能, 这些功能可以再动态的撤销优点继承放入有力补充, 比继承灵活, 在不改变原有对象的情况下给一个对象扩展功能通过使用不...

2018-11-23 15:02:01 182

原创 设计模式-外观模式(Facade)

概述定义 : 又叫门面模式, 提供了一个统一的接口, 用来访问子系统中的一群接口外观模式定义了一个高层接口, 让子系统更容易使用类型 : 结构型适用场景子系统越来越复杂, 增加外观模式提供简单调用接口构建多层系统架构, 利用外观对象作为每层的入口, 简化层间调用优点简化了调用过程, 无需了解深入子系统, 防止带来风险减少了系统依赖, 松散耦合更好的划分访问层次符合迪...

2018-11-23 14:11:03 196

原创 设计模式-原型模式(Prototype)

概述定义 : 指原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象不需要知道任何创建细节, 不调用构造函数类型 : 创建型适用场景类初始化消耗较多资源new产生一个对象需要非常繁琐的过程(数据准备, 访问权限等)构造函数比较复杂循环体中生产大量对象时优点原型模式在性能上比直接new一个对象性能高简化创建过程缺点必须配备克隆方法对克隆复杂对象或克...

2018-11-23 11:22:26 134

原创 设计模式-建造者模式(Builder)

建造者模式(Builder)定义 : 将一个复杂对象的构建与它的表示分离, 是的同样的构建过程可以创建不同的表示用户只需指定需要建造的类型就可以得到它们, 建造过程及细节不需要知道类型 : 创建型设计模式适用场景一个对象有非常复杂的内部结构想把复杂对象的创建和使用分离优点封装性好, 创建和使用分离扩展性好, 建造类之间独立, 一定程度上解耦缺点产生多余的Buil...

2018-11-22 17:47:59 307

原创 设计模式-抽象工厂模式(Abstract Factory)

概述定义 : 抽象工厂提供一个创建一系列相关或相互依赖对象的接口无需指定它们具体的类类型 : 创建型设计模式适用场景客户端不依赖于产品实例如何被创建, 实现等细节强调一系列相关的产品对象(属于同一产品组)一起使用创建对象需要大量重复的代码提供一个产品类多的库, 所有的产品已同样的接口出现, 从而使客户端端不依赖于具体实现优点具体产品在应用层代码隔离, 无需关...

2018-11-22 15:44:07 274

原创 设计模式-工厂方法模式

概述定义 : 定义一个创建对象的接口, 但让实现这个接口的类来决定实例化哪个类, 工厂方法让类的实例化推迟到子类中进行类型 : 创建型设计模式模式角色Product : 定义工厂方法所创建的对象的接口ConcreteProduct : Product接口的实现Creator : 声明工厂方法,该方法返回一个Product类型的对象。也可以定义一个工厂方法的缺省实现,它返回一个缺...

2018-11-22 11:54:12 255

原创 设计模式-简单工厂模式

概述定义 : 由一个工厂对象决定创建出哪一种产品类的实例类型 : 创建型, 但不属于GOF23种设计模式适用场景工厂类负责创建的对象比较少客户端(应用层)只知道传入工厂的参数对于如何创建对象不关心优点只需要传入一个正确的参数, 就可以获取你所需要的对象而无需知道其创建细节缺点工厂类的职责相对过重, 增加新的产品需要修改工厂类的判断逻辑, 违背开闭原则代码演示...

2018-11-22 10:53:06 275

原创 设计原则简介

开闭原则定义 : 一个软件实体如类, 模块和函数应该对扩展开放, 对修改关闭用抽象构建框架, 用实现扩展细节优点 : 提高软件系统的可复用性及可维护性依赖倒置原则定义 : 高层模块不应该依赖低层模块, 两者都应该依赖其抽象抽象不应该依赖细节; 细节应该依赖抽象面向接口编程, 而不是面向实现编程优点 : 可以减少类间的耦合性, 提高系统稳定性, 提高代码可读性和维护性, 降低...

2018-11-22 10:32:29 275

原创 UML类图快速入门

UML类图简介上图最上面一行表示类名, 斜体表示抽象类第二行表示属性名, 具体含义如下:+ : 表示public权限,上图中name- : 表示private权限, 上图中age# : 表示protected权限, 上图中sex~ : 或者不写表示default属性, 也即包权限, 上图中address“:String” : 表示属性类型为String下划线 : 属...

2018-11-22 10:30:15 857

原创 leetcode345. 反转字符串中的元音字母

题目编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:输入: “hello”输出: “holle”示例 2:输入: “leetcode”输出: “leotcede”说明:元音字母不包含字母"y"。解题这一题其实和344的反转字符串是一个思路, 一样使用对撞指针需要判断字母是不是元音字母, 非元音字母就跳过为了节约时间, 提高性能, 分别将aei...

2018-11-16 12:43:27 425

原创 leetcode344. 反转字符串

题目编写一个函数,其作用是将输入的字符串反转过来。示例 1:输入: “hello”输出: “olleh”示例 2:输入: “A man, a plan, a canal: Panama”输出: “amanaP :lanac a ,nalp a ,nam A”解题使用对撞指针可以很轻松的解决这个问题定义两个变量分别指向数组头尾, 每次交换位置, 两个变量碰撞时, 说明已...

2018-11-16 12:37:05 258

原创 leetcode125. 验证回文串

题目给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false解题由于忽略字母大小写, 所以这里直接将字符串都转换为小写只考虑字母和数字, ...

2018-11-16 12:32:43 281

mysql-8.0.25-macos11-x86_64.zip

mysql for mac 8.0

2021-06-03

23种设计模式思维导图

23种设计模式思维导图 创建型设计模式 结构型设计模式 行为型设计模式

2018-11-25

事务定义,特性,隔离级别

作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行

2018-07-29

极客学院算法wiki

LeetCode 题解 - v1.0 轻松学习排序算法 - v1.0 一步一步写算法 - v1.0 坐在马桶上学算法 - v1.1

2017-10-28

PHP+Ajax+jQuery网站开发项目式教程

慕课网视频教程,资源是个下载地址 项目1 PHP环境搭建 项目2 学生信息管理 项目3 网站用户中心 。。。

2017-10-24

阿里巴巴Java开发手册

阿里巴巴集团推出的《阿里巴巴Java开发手册》是阿里巴巴近万名开发同学集体智慧的结晶,以开发视角为中心,详细列举如何开发更加高效、更加容错、更加有协作性,力求知其然,更知其不然,结合正反例,让Java开发者能够提升协作效率、提高代码质量。

2017-10-23

算法新解—刘新宇

《算法新解》一书由刘新宇所著,本书适合软件开发人员、编程和算法爱好者,以及高校学生阅读参考。邮电出版社出版发行

2017-09-19

空空如也

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

TA关注的人

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