自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(176)
  • 收藏
  • 关注

原创 行为型模式之解释器模式

在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。一,模式的定义与特点解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。这里提到的文法和句子的概念同编译原理中的描述相同,“文法”指

2021-05-27 20:24:38 276

原创 行为型模式之备忘录模式

一,模式的定义与特点在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。备忘录模式是一种对象行为型模式,其主要优点如下。提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责

2021-05-27 20:24:23 227

原创 行为型模式之访问者模式

在现实生活中,有些集合对象存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同;医院医生开的处方单中包含多种药元素,査看它的划价员和药房工作人员对它的处理方式也不同,划价员根据处方单上面的药品名和数量进行划价,药房工作人员根据处方单的内容进行抓药。这样的例子还有很多,例如,电影或电视剧中的人物角色,不同的观众对他们的评价也不同;还有顾客在商场购物时放在“购物车”中的商品,顾客主要关心所选商品的性价比,而收银员关心的是

2021-05-27 20:24:06 252

原创 行为型模式之迭代器模式

现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了 “开闭原则”。既然将遍历方法封装在聚合类中不可取,那么聚合类中不提供遍历方法,将遍历方法由用户自己实现是否可行呢?答案是同样不可取,因为这种方式会存在两个缺点:暴露了聚合类的内部表示,使其数据不安全;增加了客户的负担。“迭代器模式”能较好地克服以上缺点,它在客户访问类与聚合类之间插入一

2021-05-27 20:23:50 105

原创 行为型模式之中介者模式

在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须让其他所有的朋友一起修改,这叫作“牵一发而动全身”,非常复杂。如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要找一个“中介者”就可以了。如前面所说的“每个人必须记住所有朋友电话”的问题,只要在网上建立一个每个朋友都可以访问的“通信录”就解决了。这样的例子

2021-05-27 20:23:36 92

原创 行为型模式之观察者模式

在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股民、微信公众号与微信用户、气象局的天气预报与听众、小偷与警察等。在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;MVC 模式中的模型与视图的关系;事件模型中的事件源与事件处理者。所有这些,如果用观察者模式来

2021-05-27 20:23:07 116

原创 行为型模式之状态模式

在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态就会发生改变,从而使其行为也发生改变。如人都有高兴和伤心的时候,不同的情绪有不同的行为,当然外界也会影响其情绪变化。对这种有状态的对象编程,传统的解决方案是:将这些所有可能发生的情况全都考虑到,然后使用 if-else 或 switch-case 语句来做状态判断,再进行不同情况的处理。但是显然这种做法

2021-05-27 20:22:49 110

原创 行为型模式之责任链模式

在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。在计算机软硬件中也有相关例子,如总线网中数据报传送,每台计算机根据目标地址是否同自己的地址相同来决定是否接收;还有异常处理中,处理程序根据异常的类型决定自己是否处理该异常。一,模式的定义与特点责任链(Chain

2021-05-26 19:53:07 133

原创 行为型模式之命令模式

在软件开发系统中,“方法的请求者”与“方法的实现者”之间经常存在紧密的耦合关系,这不利于软件功能的扩展与维护。例如,想对方法进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与实现者解耦?”变得很重要,命令模式就能很好地解决这个问题。在现实生活中,命令模式的例子也很多。比如看电视时,我们只需要轻轻一按遥控器就能完成频道的切换,这就是命令模式,将换台请求和换台处理完全解耦了。电视机遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者)。再比如,我们去餐厅吃饭,菜单不是等到客人来

2021-05-26 17:24:04 81

原创 行为型模式之策略模式

在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加、删除或更换算法要修改原代码,不易维护,违背开闭原则。如果采用策略

2021-05-26 16:53:01 86

原创 行为型模式之模板方法模式

在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。这样的例子在生活中还有很多,例如,一个人每天会起床、吃饭、做事

2021-05-26 16:28:45 110

原创 结构型模式之组合模式

在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣服与衣柜、以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。一,组合模式的定义与特点它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型[设计模式]。组合模式一般用来描述整体与部

2021-05-26 15:43:58 120

原创 结构型模式之享元模式

在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把它们相同的部分提取出来共享,则能节省大量的系统资源,这就是享元模式的产生背景。一,享元模式的定义与特点享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少

2021-05-26 14:40:17 85

原创 结构型模式之外观模式

在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。客户去当地房产局办理房产证过户要遇到的相关部门一,外观模式的定义与特点外观(Facade)模

2021-05-26 14:00:17 80

原创 结构型模式之装饰者模式

有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰器模式来实现。一,装饰者模式的定义与特点装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式

2021-05-26 11:13:58 99

原创 结构型模式之桥接模式

在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。当然,这样的例子还有很多,如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。一,桥接模式的定义与特点将抽象与实现分离,使它们可以独立变化。它是用组合

2021-05-26 10:11:04 172

原创 结构型模式之适配器模式

在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。一,模式的定义与特点适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。该模式的主要优

2021-05-26 00:15:58 173

原创 结构型模式之代理模式

在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。一,代理模式的定义与特点代理模式的定义:由于某些原因需要给某对象提供一个代理

2021-05-25 23:57:49 93

原创 创建型模式之建造者模式

在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。以上所有这些产品都是由多个部件构成的,各个部件可以灵活选择,但其创建步骤都大同小异。这类产品的创建无法用工厂模式描述,只有建造者模式可以很好地描述该类产品的创建。一,模式的定义与

2021-05-25 22:14:18 80

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

工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。同种类称为同等级,也就是说:[工厂方法模式]只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。一,模式的定义与特点抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要

2021-05-25 21:57:52 133

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

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

2021-05-25 21:41:39 67

原创 创建型模式之简单工厂模式

在日常开发中,凡是需要生成复杂对象的地方,都可以尝试考虑使用工厂模式来代替。复杂对象指的是类的构造函数参数过多等对类的构造有影响的情况,因为类的构造过于复杂,如果直接在其他业务类内使用,则两者的耦合过重,后续业务更改,就需要在任何引用该类的源代码内进行更改,光是查找所有依赖就很消耗时间了,更别说要一个一个修改了。一,工厂模式的定义定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。按实际业务场景划分,工厂模式有 3 种

2021-05-25 21:16:07 99

原创 创建型模式之原型模式

在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。一,原型模式的定义与特点用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。原型模式的优点Java 自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良。可以使

2021-05-25 20:47:09 112

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

在一些系统中,为了节省内存资源,保证数据一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。一,单例模式的定义与特点单例模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式单例模式的特点:单例类只有一个实例对象该单例对象必须由单例类自行创建单例类对外提供一个访问该单例的全局访问点二,单例模式的优点和缺点优点单例模式可以保证内存中只有一个实例,减少了内存的开销可以避免对资源的多重占用单例模式设置全局访问点,可以优化和共享资源的访问缺点单例模式一般没有

2021-05-25 19:36:19 306

原创 软件架构的基本原则

一,软件架构的两个要点1.代码复用无论是开发哪种软件产品,成本和时间都是最重要的。较少的开发时间意味着可以比竞争对手更早进入市场。较低的开发成本意味着能够留出更多的营销资金,覆盖更广泛的潜在客户。代码复用是减少开发成本最常用的方式之一,其目的非常明显,即:与其反复从头开发,不如在新对象中重用已有的代码。使用设计模式是增加软件组件灵活性并使其易于复用的方式之一。但是,这可能也会让组件变得更加复杂。一般情况下,复用可以分为三个层次。在最底层,可以复用类、类库、容器,也许还有一些类的“团体(例如容器和迭

2021-05-23 23:42:48 506

原创 软件设计概述

一,软件设计概述1.软件设计的概念软件设计模式(或者说是设计模式),是一套被反复使用,多数人知晓的,经过系统整理的代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。它是解决特定问题的一系列套路,是代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。2.学习设计模式的意义设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。可以提高程

2021-05-23 19:19:09 3139

原创 DDD之领域层设计规范

在一个DDD架构设计中,领域层的设计合理性会直接影响整个架构的代码结构以及应用层、基础设施层的设计。但是领域层设计又是有挑战的任务,特别是在一个业务逻辑相对复杂应用中,每一个业务规则是应该放在Entity、ValueObject 还是 DomainService是值得用心思考的,既要避免未来的扩展性差,又要确保不会过度设计导致复杂性。一,需求背景用代码实现一个龙与魔法的游戏世界的(极简)规则?基础配置如下玩家(Player)可以是战士(Fighter)、法师(Mage)、龙骑(Dragoon)

2021-05-02 19:37:59 1279 3

原创 DDD之Repository模式

一,传统架构下的实体模型传统的应用架构,几乎就是根据需求设计数据库的表,根据表建立实体,对应着实体的就是DAO,Service,Controller,也就是传统的MVC三层架构。回顾下我们平时写的代码,里面有着很多的xxxUtils工具类,很多的参数校验逻辑与业务逻辑混杂在一起,很多的实体类直接与数据库进行一对一映射。好处很明显,在业务初期,开发起来很容易,相对比较简单,流水线式编码,但是,一旦后期需求变更,业务改造,数据库表发生变化,可能给我们带来毁灭性的负担。所谓牵一发而动全身,前面欠下了技术债,

2021-05-02 17:18:59 2969 1

原创 DDD之应用架构

一,前言之所以写这些文章,很大程度上,是因为阅读了阿里技术专家的文章,读完之后,对我内心触动很大,文章多出引用了阿里技术文章的内容,仅作为个人学习用途,也是作为技术人,希望技术可以被更多人学习到。作为一个实习生,谈架构,未免让人感觉,好高骛远,以下陈述只属于个人浅薄意见。依个人浅薄意见,架构的本质就是应用的拆分和聚合。拆分也就是应用微服务化,聚合,并不是指将多个微服务聚合成一个应用,而是指聚合多个微服务的功能,让他完成一个大的功能。这样做的灵活性,可扩展性就会更高。所谓应用架构,个人理解,更可以指

2021-05-02 12:31:16 1792 3

原创 DDD之DP

一,还在用传统业务模型么?1.从一个小需求开始首先提一个小需求,我用传统的编码方式完成它。做一个用户注册系统,同时希望在用户注册后能够通过用户电话(先假设仅限座机)的地域(区号)对业务员发奖金。public class User{ Long UserId; String name; String phone; String address; Long repId;}public class UserService{ private SalesRe

2021-05-02 10:56:13 1020 2

原创 关于Dubbo的Rpc调用服务提供者方鉴权

1.思路分析利用dubbo的SPI机制,写一个Filter继承Dubbo的Filter。在invoke方法里面通过invoker获取到服务消费者的ip和服务名拿到ip和服务名之后和白名单进行比对。关于服务名的获取,通过dubbo上下文,Attachment。2.代码实现1.创建文件org.apache.dubbo.rpc.Filtervalidation=com.filter.ValidationFilter2.配置文件配置validation.ips=121.199.31.160,

2021-04-28 22:22:43 1221 4

原创 框架设计

一,细节1.防止空指针和下标越界这是一个编写健壮程序的开发人员,在写每一行代码都应在潜意识中防止的异常。基本上要能确保每一次写完的代码,在不测试的情况下,都不会出现这两个异常才算合格。2.保证线程安全性和可见性对于开发人员,对线程安全性和可见性的深入理解是最基本的要求。需要开发人员,在写每一行代码时都应在潜意识中确保其正确性。因为这种代码,在小并发下做功能测试时,会显得很正常。但在高并发下就会出现莫明其妙的问题,而且场景很难重现,极难排查。3.尽早失败和前置断言尽早失败也应该成为潜意识,在有传入

2021-04-24 14:56:09 1054

原创 git开发常用命令

一,基本操作克隆远程代码到本地 git clone [email protected]:yin_huidong/rpc.git提交本地缓存区 git add .提交本地版本库 git commit -m “aaa”拉代码 git pull origin master推送到远程 git push origin master本地已有仓库,映射本地仓库到远程仓库 git remote add origin url二,版本控制撤销已修改,未add git checkout – .撤销已修改,未co

2021-04-24 14:37:52 177

原创 dubbo整合nacos

一,dubbo-nacos-common描述:公共模块1.依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> <version>1.18.18</version> </dependency&g

2021-04-10 00:38:17 2011 5

原创 Dubbo源码分析

一,为什么要用Dubbo1.为什么要用现成的框架呢?如果我们自己去开发一个网络通信,需要考虑到底层网络通信协议的处理序列化和反序列化的处理工作这些工作本身应该是通用的,应该是一个中间件服务。为整个公司提供远程通信的服务。而不应该由业务开发人员来自己去实现,所以才有了这样的 rpc 框架,使得我们调用远程方法时就像调用本地方法那么简单,不需要关心底层的通信逻辑。2.大规模服务化对于服务治理的要求当企业开始大规模的服务化以后,远程通信带来的弊端就越来越明显了。服务链路变长了,如何实现对服务

2021-04-09 23:47:41 1419 9

原创 队列的两种实现方式

1.数组实现队列/** * @author yhd * @email * @description 数组实现的队列 入队 出队 队列中元素个数 * @since 2021/4/7 0:40 * <p> * 分析:入队 1 2 3 4 5 * 出队1 2 3 4 5 */public class Queue<T> { private T[] arr; public Queue(int size) { arr = (T[])

2021-04-07 19:48:34 151

原创 栈的两种实现方式

1.数组实现/** * @author yhd * @email * @description 栈 ,使用数组实现 , 基本操作包括 入栈 出栈 栈中元素个数 * @since 2021/4/7 0:21 */public class Zhan<T> { //栈容器 private T[] arr; //构造器指定栈容量 public Zhan(int size) { arr = (T[]) new Object[size];

2021-04-07 19:45:39 120

原创 带头结点的循环单链表

/** * @author yhd * @email * @description 带头结点的循环单链表 * @since 2021/4/2 9:08 */public class CircularLinkedList { static class Node { public int data; public Node next; public Node() { } public Node(int da

2021-04-02 10:56:13 457 2

原创 单链表

public class LinkList { /** * @author yhd * @email * @description 节点 * @params * @return * @since 2021/4/1 16:22 */ static class Node { int data; Node next; public Node(int data) {

2021-04-01 22:43:06 79

原创 clickhouse

一,clickhouse特点1.列式存储行存储好处是想查某个人所有的属性时,可以通过一次磁盘查找加顺序读取就可以。但是当想查所有人的年龄时,需要不停的查找,或者全表扫描才行,遍历的很多数据都是不需要的。id姓名年龄1张三182李四193王五20列存储列存储的好处1 对于列的聚合,计数,求和等统计操作要优于行式存储。2 由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。

2021-03-31 19:47:30 23648 2

空空如也

空空如也

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

TA关注的人

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